# com.decaframe/decaframe (npm · decaframe)

Presentations, slides, reports and one-pagers your agent designs and you edit. Exports to one file.

- Trust score: 63/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-26

## Components

- npm · `decaframe`: 63/100 (this document), [markdown](https://verifymcp.io/servers/com-decaframe-decaframe/decaframe.md), [page](https://verifymcp.io/servers/com-decaframe-decaframe/decaframe)

## Channel facts

- Registry: `npm`
- Package: `decaframe`
- Version: `0.4.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-26.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 105 of 261 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license.
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7189 tokens (~599/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: the tool surface changed between 0.3.1 and 0.4.0: 23 tool removals, 0 breaking changes, 4 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the com.decaframe/decaframe MCP server?

com.decaframe/decaframe runs locally as an npm package, launched with npx -y decaframe. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-decaframe-decaframe -- npx -y decaframe
```

### Cursor

```json
{
  "mcpServers": {
    "com-decaframe-decaframe": {
      "command": "npx",
      "args": [
        "-y",
        "decaframe"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-decaframe-decaframe": {
      "command": "npx",
      "args": [
        "-y",
        "decaframe"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-decaframe-decaframe -- npx -y decaframe
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-decaframe-decaframe": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "decaframe"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-decaframe-decaframe --command npx --arg -y --arg decaframe
```

### Hermes

```yaml
mcp_servers:
  com-decaframe-decaframe:
    command: "npx"
    args: ["-y", "decaframe"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-decaframe-decaframe": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "decaframe"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-decaframe-decaframe -t stdio -c npx -a -y decaframe
```

### Other

```json
{
  "mcpServers": {
    "com-decaframe-decaframe": {
      "command": "npx",
      "args": [
        "-y",
        "decaframe"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-25 (score 63, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-17 (score 63, −4)

- [security regression] Stability: 0.20 → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.20 → fail
- [functional regression] Schema quality: 346 → 599
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.3.2 → 0.4.0

### 2026-09-16 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-14 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-12 (score 65, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-09-11 (score 49, 0)

- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Stability: unverified → 0.03
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.3.1 → 0.3.2

### 2026-09-10 (score 49)

First indexed and scored.

## MCP tools (12)

### `describe_block` (~165 tokens)

The block menu, or one block in depth

LIST every block — THE BLOCK MENU — when called with no type: one short row per block — what it is, when to pick it, how many entries it is designed for, which slots it draws, and its styles, shapes, figures and marks. WITH a type: that block in depth — each shape's own count range, the icon vocabulary, and a worked example ready to copy into add_block. Block types are discovered here, never memorised. There is no per-block color, font or size on this surface: those values are the theme's and the theme is the account's. Change how a block LOOKS with its `variant`.

Input parameters:

- `type` (string): A block type, e.g. "timeline". Omit for the menu of every block.

### `get_document` (~141 tokens)

Read the document

The whole document: every page with its id, heading and blocks, and every block with its id, type and entries. Entry ids are what set_block and set_page match on — echo one back to change that entry, omit it to add a new one, leave it out of the array to remove it. The reply also names the FILE this document is saved in, which defaults to the folder this server was started in. If the person named a file, or wants more than one document in that folder, call open_document BEFORE authoring. The reply also carries an edit link: hand it to the person, and it opens this document in the editor.

### `list_templates` (~73 tokens)

List the templates

The composed page designs on the shelf, each with the content it suits and the look it wears. Add one with add_page and its templateId — or add a blank page and compose it yourself with add_block when the content wants a page the shelf does not have. None replaces or alters what is already in the document.

### `add_page` (~419 tokens)

Add a page

Append a page, or insert one before another. TWO WAYS, and the CONTENT decides: pass a templateId from list_templates for a page that arrives COMPOSED — heading, blocks, shape and design already chosen, its text placeholder until set_page fills every slot in one call; or pass no templateId for a BLANK page you compose yourself with add_block, picking each block, its shape and its style for what the content is. A template is a STARTING POINT, never a restriction: add_block adds to it, set_block swaps or restyles any block it holds, remove takes one away. Reach for a template when one fits the content; build the page when the content wants what the shelf does not have — a deck mixes both, and opens on a COVER. Either way this INSERTS the page: never add one and then a template on top of it.

Input parameters:

- `align`: Where THIS page's content sits in the frame's free space — `top`, `middle` or `bottom` — overriding the document's. A cover or a divider reads best `bottom`; leave every other page to inherit. null g…
- `before` (string): Page id to insert before. Omit to append at the end. Never an index.
- `eyebrow` (string): Small label above the title — section or number. Pass '' to remove it.
- `mode`: Override the document's light/dark for THIS page only. null to go back to inheriting.
- `notes`: The presenter's own text for this page, as markdown — never shown on the slide itself, only in the presenter view. Plain **bold** and lists work; pictures do not. null removes it.
- `subtitle` (string): A line under the title. Pass '' to remove it.
- `templateId` (string): A template id from list_templates. Omit for a blank page of your own composition.
- `title` (string): The page's heading. Pass '' to remove it.

### `remove` (~111 tokens)

Remove a page or a block

Delete or remove by id — a PAGE and everything on it, or a BLOCK and everything in it (a layout included, with every block in its columns). This is how the blank page a document starts with goes, if you added your own pages instead of filling it. A document must keep at least one page, so removing the last one is refused; a page may be left empty — add its replacement afterwards rather than before.

Input parameters:

- `id` (string, required): A page id or a block id from get_document.

### `open_document` (~278 tokens)

Open or name the document file

Choose the file this document is saved in. If the file exists it is OPENED and becomes the document you are working on; if it does not, it is where this document will be saved. Call it BEFORE authoring when the person names a file or wants more than one document in a folder — otherwise everything lands in the default the reply from get_document names. Pass a full path when you know the folder you are working in; a bare name is resolved against the folder this server was started in, which is not the same for every client. ALSO TAKES AN app.decaframe.com LINK the person pasted from their browser: that document is already open in their tab, and this call takes it on — it returns once the tab has handed the document over, then work on it as usual. Or a document their WORKSPACE keeps, by its id (doc_…) or its app link: it is pulled here and every write is saved back.

Input parameters:

- `file` (string, required): Path to a .json document — absolute, or relative to the folder this server started in (the folder must exist; this creates none) — OR an app.decaframe.com link the person pasted, which pairs this pro…

### `sign_in` (~149 tokens)

Sign the person in to their decaframe account

ONLY when the person asks to sign in, or open_document refused a workspace document as signed out — NEVER to start authoring, which needs no account. FIRST CALL: returns a link — show it to the person exactly as given and ask them to open it in Chrome, then call sign_in again. SECOND CALL: waits up to 90 seconds and returns "signed in as <email>", or says the link is still valid, or that it expired (call again for a fresh link). Already signed in: returns the email at once. Nothing needs an account today except the account's default theme, which a new document is born in. get_document's reply carries an account field when signed in.

### `set_document` (~276 tokens)

Set the document's title, shape or palette

Change facts that belong to the WHOLE document rather than to one page: its title, its frame shape, where content sits in each frame, and which palette it is designed in. Omitted fields are left alone. Frame shape and content position live here, not on set_page, because a document is one shape and keeps one rhythm.

Input parameters:

- `align` (string): Where blocks sit in the leftover vertical space on EVERY page: top, middle or bottom. Defaults to middle.
- `animate` (string): How blocks enter a page: none, fade, rise or grow. Defaults to none; set_page may override a page.
- `build` (string): arrive shows every block with the page; click reveals one block per keypress. Defaults to arrive.
- `format` (string): Frame shape for every page. Defaults to 16:9. A4 is a portrait sheet.
- `mode` (string): Which palette the document is designed in: light or dark. A page may override it.
- `pace` (string): How fast blocks and words enter: slow, medium or fast. Defaults to medium.
- `title` (string): The document's name. Not a heading on any page.
- `transition` (string): How pages change while presenting: slide, fade, zoom or none. Defaults to slide.

### `set_page` (~646 tokens)

Set a page's heading, look or block content

Update a page's own heading and look, and FILL ITS BLOCKS IN ONE CALL. Omitted fields are left alone; an empty string removes that heading slot. `blocks` takes the payload each block's archetype takes, so a template applied and then filled costs two calls rather than one per block; every block is checked before any is written, so a refusal changes nothing. The frame's SHAPE and where content sits in it are the document's — set_document.

Input parameters:

- `accent`: Where a full-bleed picture sits on this page. `lead` and `trail` DIVIDE the page — the picture owns that side and text cannot enter it. `top` is a banner across the frame; use it for a WIDE photograp…
- `accentAlt`: What the accent picture shows, for anyone who cannot see it.
- `accentSrc`: The full web address of the accent picture — one that is ALREADY online. Ignored unless the page has an accent.
- `accentTreatment`: How the theme paints the accent picture: `tint` drains it and dyes it in the theme's own colour, so photographs from different sources read as one deck; `mono` only drains it. null shows it as it cam…
- `align`: Where THIS page's content sits in the frame's free space — `top`, `middle` or `bottom` — overriding the document's. A cover or a divider reads best `bottom`; leave every other page to inherit. null g…
- `animate`: How this page's blocks enter, overriding the document's: none, fade, rise or grow. null inherits.
- `blocks` (array): THE FAST PATH AFTER add_page — the page arrives composed and placeholder-written, and this replaces every slot in ONE call.
- `build`: Whether this page's blocks all arrive with it or one per click. null inherits.
- `eyebrow` (string): Small label above the title — section or number. Pass '' to remove it.
- `mode`: Override the document's light/dark for THIS page only. null to go back to inheriting.
- `notes`: The presenter's own text for this page, as markdown — never shown on the slide itself, only in the presenter view. Plain **bold** and lists work; pictures do not. null removes it.
- `pace`: How fast this page's blocks and words enter: slow, medium or fast. null inherits.
- `pageId` (string, required): A page id from get_document.
- `subtitle` (string): A line under the title. Pass '' to remove it.
- `surface`: The page's own background, as a NAME the theme resolves — so swapping the theme repaints it. null goes back to the theme's ordinary paper.
- `title` (string): The page's heading. Pass '' to remove it.

### `add_block` (~2372 tokens)

Add a block to a page

Put ONE block on a page, or inside a layout's column — any block in the catalogue, chosen by `type` for what the content IS: a passage of prose (paragraphs, headings, lists, a quote — `content`, one line per block, no type needed); items (a box, steps, a timeline… — `entries`); headline figures (`entries` with a value); pictures and video (`entries` with a src); a table (`table`); a chart of numbers that are COMPARED (`chart`); a diagram of what connects to what (`diagram`); or a LAYOUT, whose region ids then take blocks of their own. Send the ONE payload the type takes — the others are refused by name. Choose its look on the same call (variant, arrangement, mark), because a block that merely fits is not finished. A page is usually a heading and ONE OR TWO blocks that answer each other — a chart beside the sentence about it, figures over the story behind them — or one block on a page LOOK from set_page: a surface, or an accent picture running down one side (never a block). A cover is a page with a title, a subtitle and an accent.

Input parameters:

- `arrangement`: The SHAPE the block lays its entries out in — same fields, same count, a different layout, and a shape changes how much text fits. Per block: box: grid, list | steps: across, list, staircase, funnel,…
- `axisX` (string): What the categories ARE — the label under the axis, like 'Product line'. Omit to leave it alone; '' to clear.
- `axisY` (string): What the numbers ARE, including the unit — like 'Revenue ($M)'. Reads up the side of the plot. Omit to leave it alone; '' to clear.
- `before` (string): Block id on that page to insert before. Omit to append.
- `chart` (object): The whole chart as {categories, series}. `categories` are the axis labels and each entry in `series` is one named line of numbers lining up with them exactly. Echo back the shape get_document gave yo…
- `content` (array): A whole passage, in order — ONE CALL, however many paragraphs. Each line is {kind, text} and each becomes its own block: text, heading, bullets, numbered, quote, checklist, separator, code. Consecuti…
- `diagram` (object): Mermaid text. The FIRST LINE names the kind of diagram and is the commonest thing to get wrong: flowchart TD (or LR) for a process, sequenceDiagram for an exchange over time, stateDiagram-v2 for stat…
- `entries` (array): items (box, steps, timeline): meta, title, body, icon, emphasis | stats (stat-row): label, value, note — value required | media (image, image-grid, image-with-text, people, youtube): caption, title,…
- `iconPosition`: Where a block's icons sit: top, lead, none. 'lead' puts it in a gutter beside the title, 'top' above it — a gutter spends width, a stacked icon spends height, so this changes how much text fits. Omit…
- `mark`: What this block's items are marked with. Per block, the first named being its default — steps: numeral, icon, none | timeline: dot, icon. `icon` puts each item's own icon in the mark's place; SETTING…
- `pageId` (string, required): A page id from get_document — or a layout REGION id, to put this block inside one column of a layout. add_block with a layout type returns its region ids.
- `reveal` (string): How the text shows while presenting: words (one at a time), type (typewriter), click (each item a step). none clears it.
- `stack`: How several series share a bar. 'none' puts them side by side; 'stacked' puts them in one bar so the height is the total; 'proportional' makes every bar the same height so what is read is the SHARE r…
- `table` (object): The whole table as {headers, rows}. `rows` is a list of rows, each a list of cell text. Echo back the shape get_document gave you and change the cells you mean: a cell whose text is unchanged is not…
- `title` (string): The chart's title, as ordinary editable text above the plot. Omit to leave it alone; pass '' to clear it.
- `treatment`: How the theme paints every picture in this block: `tint` drains them and dyes them in the theme's own colour, so photographs from different sources read as one deck; `mono` only drains. null shows th…
- `type` (string): ITEMS — box — Parallel things with no order and no dates — features, capabilities, sources, destinations. | steps — Ordered stages where the order is the point — a process, an onboarding, a how-it-wo…
- `variant`: The block's style, a NAME the theme paints alike under every theme: plain — the theme's own default | accent-bar — a bar down the leading edge | soft-fill — a tinted plane, no border | outlined — a b…

### `set_block` (~1911 tokens)

Change a block: its content, its type, its shape or its style

Update, edit or rewrite one block in place by id — its content, what it IS, and how it looks, in one call; omitted fields are left alone. CONTENT: send the payload its archetype takes. `entries` (items, stats, media) match by id: an entry carrying an id from get_document is updated in place, one with no id is added, an id you leave out is removed, and slots you omit from an entry are cleared — so echo back what you keep. `content` (prose): a line echoed back exactly keeps any formatting a person applied. `table`, `chart`, `diagram`: the whole payload, patched so a person's work survives. TYPE: `type` renders the same content as another block of the SAME archetype (a timeline becomes a box keeping every entry and its id) or re-arranges a layout keeping every block; across archetypes it is refused — remove and add instead. LOOK: variant, arrangement, iconPosition, mark, treatment, reveal, as add_block takes them, with or without new content. set_page fills every block on a page at once; this is for one.

Input parameters:

- `arrangement`: The SHAPE the block lays its entries out in — same fields, same count, a different layout, and a shape changes how much text fits. Per block: box: grid, list | steps: across, list, staircase, funnel,…
- `axisX` (string): What the categories ARE — the label under the axis, like 'Product line'. Omit to leave it alone; '' to clear.
- `axisY` (string): What the numbers ARE, including the unit — like 'Revenue ($M)'. Reads up the side of the plot. Omit to leave it alone; '' to clear.
- `blockId` (string, required): A block id from get_document — a layout's id too.
- `chart` (object): The whole chart as {categories, series}. `categories` are the axis labels and each entry in `series` is one named line of numbers lining up with them exactly. Echo back the shape get_document gave yo…
- `content` (array): This block's text. A paragraph, heading or quote holds exactly ONE line, so send one — to add another, call add_block. A list holds its items: echo an id from get_document to change that item, omit t…
- `diagram` (object): Mermaid text. The FIRST LINE names the kind of diagram and is the commonest thing to get wrong: flowchart TD (or LR) for a process, sequenceDiagram for an exchange over time, stateDiagram-v2 for stat…
- `entries` (array): items (box, steps, timeline): meta, title, body, icon, emphasis | stats (stat-row): label, value, note — value required | media (image, image-grid, image-with-text, people, youtube): caption, title,…
- `iconPosition`: Where a block's icons sit: top, lead, none. 'lead' puts it in a gutter beside the title, 'top' above it — a gutter spends width, a stacked icon spends height, so this changes how much text fits. Omit…
- `mark`: What this block's items are marked with. Per block, the first named being its default — steps: numeral, icon, none | timeline: dot, icon. `icon` puts each item's own icon in the mark's place; SETTING…
- `reveal` (string): How the text shows while presenting: words (one at a time), type (typewriter), click (each item a step). none clears it.
- `stack`: How several series share a bar. 'none' puts them side by side; 'stacked' puts them in one bar so the height is the total; 'proportional' makes every bar the same height so what is read is the SHARE r…
- `table` (object): The whole table as {headers, rows}. `rows` is a list of rows, each a list of cell text. Echo back the shape get_document gave you and change the cells you mean: a cell whose text is unchanged is not…
- `title` (string): The chart's title, as ordinary editable text above the plot. Omit to leave it alone; pass '' to clear it.
- `treatment`: How the theme paints every picture in this block: `tint` drains them and dyes them in the theme's own colour, so photographs from different sources read as one deck; `mono` only drains. null shows th…
- `type` (string): Swap the rendering: another block type of the same archetype, or for a layout another column layout. Everything inside survives either way.
- `variant`: The block's style, a NAME the theme paints alike under every theme: plain — the theme's own default | accent-bar — a bar down the leading edge | soft-fill — a tinted plane, no border | outlined — a b…

### `export_html` (~188 tokens)

Export the document as one HTML file

Write the document to a single HTML file that opens in any browser by double-click, no hosting. Styles and every diagram's drawing are carried inside it; pictures, fonts and a video's player are LINKS (only a video's poster is embedded), so the file expects the internet and degrades without it — a system font, a glyph where a picture was, the video's still frame. It is a presentation viewer — swipe or use the arrow keys to move between pages. Returns the path, not the file; the path must be an .html file in a folder that exists. Export reflects the document as it is now, so fix any diagnostics first, and read the reply: it names any picture address the file could not use.

Input parameters:

- `path` (string): Where to write it: an .html path in a folder that exists. Defaults to the document's own path with a .html suffix.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-decaframe-decaframe/decaframe#diagnostics

## Score history

- 2026-09-26: 63
- 2026-09-25: 63
- 2026-09-24: 63
- 2026-09-23: 63
- 2026-09-22: 63
- 2026-09-21: 63
- 2026-09-20: 63
- 2026-09-19: 63
- 2026-09-18: 63
- 2026-09-17: 63
- 2026-09-16: 67
- 2026-09-15: 66
- 2026-09-14: 66
- 2026-09-13: 65
- 2026-09-12: 65
- 2026-09-11: 49
- 2026-09-10: 49

## Common questions

### What is the com.decaframe/decaframe MCP server?

com.decaframe/decaframe is an MCP server listed in the public MCP registry as com.decaframe/decaframe. Presentations, slides, reports and one-pagers your agent designs and you edit. Exports to one file. This page covers its npm package (decaframe).

### Is the com.decaframe/decaframe MCP server safe to use?

com.decaframe/decaframe scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 26 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the com.decaframe/decaframe MCP server expose?

com.decaframe/decaframe exposes 12 tools: describe_block, get_document, list_templates, add_page, remove, and 7 more. Their descriptions and schemas cost roughly 6,729 tokens of context every time the server is loaded.

### Is the com.decaframe/decaframe MCP server still maintained?

com.decaframe/decaframe is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- npm package: https://www.npmjs.com/package/decaframe
- Socket report: https://socket.dev/npm/package/decaframe
- Repository: https://github.com/decaframe/decaframe
- Website: https://decaframe.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-decaframe-decaframe/decaframe.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-decaframe-decaframe/decaframe.json
- HTML version of this page: https://verifymcp.io/servers/com-decaframe-decaframe/decaframe
