D2 MCP Server
OCI · GHCR.IO/RECURSIVEFUNCTIONS/D2MCP:0.5.0
Create, edit, validate, render, and export D2 diagrams with confined workspace access.
Available components
Last scanned (3 hours ago)
Scores higher than 83% of OCI servers
Category Design and Media
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. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: this image's dependency list comes from an SBOM its publisher attached, which nothing verifies, so we will not report it as a clean result.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this image's dependency list comes from an SBOM its publisher attached. It names packages and versions but not whether each is deprecated, still maintained or linked to its source, so there is nothing we can fairly grade.Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 27 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability83
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3317 tokens (~118/item across 28 items; 16 tools + 12 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities40
- Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 50. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Oct 26 +6
- Stability: unverified → 0.43 ▲ functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed oci/ghcr.io/recursivefunctions/d2mcp:0.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
d2_capabilities ~58
List the embedded D2 v0.9.0 capability catalog, grouped by category. Use the returned IDs with d2_help or the returned URIs as MCP resources.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Optional exact category ID to list. |
No output schema declared.
No examples provided.
d2_create ~239
Create a new diagram that can be edited with Oracle API tools. This is the unified way to create diagrams: 1. Empty diagram (no content): For building incrementally with Oracle API 2. From D2 text (with content): For rendering complete D2 diagrams Both types are fully editable using d2_oracle_* tools. Examples: - d2_create(id="arch") → Empty diagram for incremental building - d2_create(id="arch", content="a -> b") → Diagram from D2 text Use cases: - Building diagrams from data sources (use empty) - Rendering complete D2 text (use with content) - Converting existing D2 to editable form (use with content) - Interactive diagram creation (use empty)
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | Optional D2 text content. If provided, creates a diagram from this content (which can then be edited with Oracle API). If not provided, creates an empty diagram for incremental building. Both are ful… |
| id | string | yes | Unique identifier for the diagram |
| workspace_root | string | – | Configured workspace root used for imports and local assets |
No output schema declared.
No examples provided.
d2_export ~483
Export an existing diagram with D2 v0.9's bundled Go renderers. Supports SVG, PNG, PDF, PPTX, GIF, and ASCII plus Dagre, ELK, and TALA.
| Name | Type | Req | Description |
|---|---|---|---|
| animationIntervalMs | number | – | Board interval and style-animation sampling duration |
| asciiCharset | string | – | ASCII character set |
| boardPath | string | – | Dot-separated board path, for example layers.detail |
| center | boolean | – | Center diagram content |
| dagreEdgeSep | number | – | Dagre edge separation |
| dagreNodeSep | number | – | Dagre node separation |
| darkThemeId | number | – | Dark theme ID |
| darkThemeOverrides | object | – | Dark theme token overrides |
| diagramId | string | yes | ID of the diagram to export |
| elkAlgorithm | string | – | ELK algorithm name |
| elkEdgeNodeSpacing | number | – | ELK edge-to-node spacing |
| elkNodeSpacing | number | – | ELK node spacing |
| elkPadding | string | – | ELK padding expression |
| elkSelfLoopSpacing | number | – | ELK self-loop spacing |
| fontFamily | string | – | Bundled regular font family |
| format | string | – | Export format |
| includeDescendants | boolean | – | Compose descendant boards where the format supports it |
| layout | string | – | Bundled layout engine |
| maxBoards | number | – | Per-operation board limit |
| maxFrames | number | – | Per-operation GIF frame limit |
| maxHeight | number | – | Maximum raster height |
| maxOutputBytes | number | – | Maximum encoded output bytes |
| maxPixels | number | – | Maximum pixels per raster frame |
| maxWidth | number | – | Maximum raster width |
| monoFontFamily | string | – | Bundled mono font family |
| padding | number | – | Diagram padding |
| scale | number | – | Output scale |
| sketch | boolean | – | Enable sketch rendering |
| talaMaxConcurrency | number | – | Maximum concurrent TALA seed attempts |
| talaSeeds | array | – | Deterministic signed 64-bit TALA seeds |
| themeId | number | – | Light theme ID |
| themeOverrides | object | – | Light theme token overrides (N1-N7, B1-B6, AA2/4/5, AB4/5) |
No output schema declared.
No examples provided.
d2_format ~32
Format valid D2 source without storing or rendering it.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | D2 source to format |
No output schema declared.
No examples provided.
d2_get_source ~37
Return the complete canonical D2 source for a stored diagram, including Oracle edits.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | Stored diagram ID |
No output schema declared.
No examples provided.
d2_help ~93
Look up an exact D2 v0.9.0 catalog topic by ID or search the embedded reference. Exact IDs return the full reference document; other queries return ranked topic summaries.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum search results when query is not an exact topic ID. |
| query | string | yes | Exact topic ID or search terms, such as 'layout-engines', 'sequence diagram', or 'TALA'. |
No output schema declared.
No examples provided.
d2_oracle_create ~183
Add new shapes or connections to an existing D2 diagram incrementally. Use this when you need to build diagrams piece-by-piece or add elements to a diagram after initial creation. Perfect for: iteratively building complex diagrams, adding elements based on parsed data, or modifying existing diagrams without regenerating everything. Creates basic elements only - use d2_oracle_set afterward to add special shapes (sql_table, class), styles, or properties. Example: Create 'User' shape, then set 'User.shape: person' with d2_oracle_set.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to modify |
| key | string | yes | Key for the new element. Examples: 'User' for shape, 'User -> API' for connection, 'System.Database' for nested shape. Use dots for nesting, arrows (->) for connections |
No output schema declared.
No examples provided.
d2_oracle_delete ~159
Remove shapes or connections from a D2 diagram. Use this when you need to: clean up unwanted elements, refactor diagram structure, or remove outdated components. Important: deleting a container shape will also delete ALL its child elements. Connections to/from deleted shapes are automatically removed. Use this carefully - consider using d2_oracle_move to relocate elements instead if you want to preserve them. Perfect for iterative diagram refinement and cleanup operations.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to modify |
| key | string | yes | Key of the element to delete. Examples: 'server' for a shape, 'server -> database' for a connection, 'System.Database' for nested element. WARNING: Deleting containers removes all children |
No output schema declared.
No examples provided.
d2_oracle_get_info ~202
Inspect and analyze diagram elements to understand structure and properties. Use this when you need to: verify element exists before modifying, check current properties/attributes, explore container contents, debug connection issues, or understand diagram hierarchy. Info types: 'object' returns shape details (labels, styles, attributes), 'edge' returns connection properties (labels, arrows, styles), 'children' lists all elements inside a container. Essential for safe modifications - always check before changing. Returns JSON with complete element information.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram |
| info_type | string | – | Type of information to retrieve: 'object' for shape/container details, 'edge' for connection properties, 'children' to list elements inside a container |
| key | string | yes | Key of the element to inspect. Examples: 'server' for shape info, 'server -> database' for connection info, 'System' to see what's inside a container |
No output schema declared.
No examples provided.
d2_oracle_move ~224
Reorganize diagram structure by moving shapes between containers. Use this when you need to: group related components together, refactor diagram hierarchy, move elements into or out of systems/packages, or restructure without losing connections. Containers are shapes that hold other shapes (like 'System', 'Network', or any shape with children). Moving preserves all connections - they're automatically rerouted. Set include_descendants=false to move only the parent shape, leaving children in original location. Essential for maintaining clean, logical diagram organization.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to modify |
| include_descendants | string | – | Whether to move child elements along with the parent (true/false). Default true preserves hierarchy |
| key | string | yes | Key of the element to move (e.g., 'server', 'Database.users_table') |
| new_parent | string | yes | Target container key where element will be moved. Use empty string '' to move to root level. Examples: 'System' to move into System container, 'Network.DMZ' for nested container |
No output schema declared.
No examples provided.
d2_oracle_rename ~183
Change the identifier of shapes or connections while preserving all relationships. Use this when you need to: improve clarity with better names, fix typos or naming inconsistencies, refactor diagram elements, or align with updated terminology. The rename is intelligent - ALL connections referencing the old name are automatically updated to use the new name. This includes connections where the element is source, target, or part of a longer path. Child elements keep their relative names. Safe operation that maintains diagram integrity.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to modify |
| key | string | yes | Current key of the element to rename (e.g., 'server', 'DB', 'System.OldName') |
| new_name | string | yes | New identifier for the element (e.g., 'web_server', 'Database', 'NewName'). Connections are automatically updated |
No output schema declared.
No examples provided.
d2_oracle_serialize ~138
Export the current state of an Oracle-edited diagram as D2 text. Use this when you need to: see the complete D2 syntax after incremental changes, save diagram source for version control, share diagram definition with others, debug complex diagrams, or transition from Oracle API to direct D2 text editing. Returns the exact D2 code that would produce the current diagram, including all shapes, connections, special elements (sql_table, class), styles, and content. This is THE way to get the textual representation after using Oracle API tools.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to get D2 text for |
No output schema declared.
No examples provided.
d2_oracle_set ~384
Modify properties of existing diagram elements. Use this when you need to: transform basic shapes into special types (sql_table, class, sequence_diagram), add visual styling (colors, fonts, borders), set labels and tooltips, or add content like markdown or code blocks. Common attributes: shape (rectangle, cylinder, person, cloud), style.fill (colors), style.stroke, label, tooltip, icon. For special shapes: 'User.shape: sql_table' then 'User.id: int |pk|' for columns, 'Animal.shape: class' then 'Animal.+name: string' for fields. For SQL table constraints: 'User.id.constraint' with value 'primary_key', 'foreign_key', or 'unique'. Note: For multiple constraints, use d2_create with array syntax like 'id: int {constraint: [primary_key; unique]}'. Essential for making diagrams visually rich and semantically meaningful.
| Name | Type | Req | Description |
|---|---|---|---|
| diagram_id | string | yes | ID of the diagram to modify |
| key | string | yes | Key path to the attribute. Examples: 'User.shape' for shape type, 'User.style.fill' for color, 'User.id' for sql_table columns, 'User.id.constraint' for SQL constraints, 'Animal.+name' for class fiel… |
| tag | string | – | Optional tag for the attribute (e.g., 'label' or 'style') |
| value | string | yes | The value to set. Shape types: rectangle, cylinder, person, cloud, sql_table, class, code, sequence_diagram. Colors: red, blue, #FF5733. For sql_table columns: 'int |pk|', 'varchar(255)'. For SQL con… |
No output schema declared.
No examples provided.
d2_save ~487
Save an existing diagram within a configured workspace root using a bundled D2 renderer.
| Name | Type | Req | Description |
|---|---|---|---|
| animationIntervalMs | number | – | Board interval and style-animation sampling duration |
| asciiCharset | string | – | ASCII character set |
| boardPath | string | – | Dot-separated board path, for example layers.detail |
| center | boolean | – | Center diagram content |
| dagreEdgeSep | number | – | Dagre edge separation |
| dagreNodeSep | number | – | Dagre node separation |
| darkThemeId | number | – | Dark theme ID |
| darkThemeOverrides | object | – | Dark theme token overrides |
| diagramId | string | yes | ID of the diagram to save |
| elkAlgorithm | string | – | ELK algorithm name |
| elkEdgeNodeSpacing | number | – | ELK edge-to-node spacing |
| elkNodeSpacing | number | – | ELK node spacing |
| elkPadding | string | – | ELK padding expression |
| elkSelfLoopSpacing | number | – | ELK self-loop spacing |
| fontFamily | string | – | Bundled regular font family |
| format | string | – | Export format |
| includeDescendants | boolean | – | Compose descendant boards where the format supports it |
| layout | string | – | Bundled layout engine |
| maxBoards | number | – | Per-operation board limit |
| maxFrames | number | – | Per-operation GIF frame limit |
| maxHeight | number | – | Maximum raster height |
| maxOutputBytes | number | – | Maximum encoded output bytes |
| maxPixels | number | – | Maximum pixels per raster frame |
| maxWidth | number | – | Maximum raster width |
| monoFontFamily | string | – | Bundled mono font family |
| padding | number | – | Diagram padding |
| path | string | – | Output path relative to the selected workspace root |
| scale | number | – | Output scale |
| sketch | boolean | – | Enable sketch rendering |
| talaMaxConcurrency | number | – | Maximum concurrent TALA seed attempts |
| talaSeeds | array | – | Deterministic signed 64-bit TALA seeds |
| themeId | number | – | Light theme ID |
| themeOverrides | object | – | Light theme token overrides (N1-N7, B1-B6, AA2/4/5, AB4/5) |
| workspace_root | string | – | Configured workspace root for the output |
No output schema declared.
No examples provided.
d2_update_source ~56
Validate complete D2 source and atomically replace a stored diagram. Invalid source returns diagnostics and leaves the diagram unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Complete replacement D2 source |
| diagram_id | string | yes | Stored diagram ID |
No output schema declared.
No examples provided.
d2_validate ~112
Validate D2 source and report structured syntax or semantic diagnostics. Provide exactly one of content or diagram_id. Invalid D2 returns valid=false instead of a tool error. For simple, unambiguous errors, the result may include repaired_content that has been revalidated without changing the stored diagram.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | Raw D2 source to validate. Mutually exclusive with diagram_id. |
| diagram_id | string | – | ID of a stored diagram whose current source should be validated. Mutually exclusive with content. |
No output schema declared.
No examples provided.
How do I install the D2 MCP Server server?
D2 MCP Server runs locally as a container image, launched with docker run --rm -i ghcr.io/recursivefunctions/d2mcp:0.5.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/recursivefunctions/d2mcp:0.5.0
claude mcp add recursivefunctions-d2mcp -- docker run --rm -i ghcr.io/recursivefunctions/d2mcp:0.5.0
What is the D2 MCP Server server?
D2 MCP Server is listed in the public MCP registry as io.github.RecursiveFunctions/d2mcp. Create, edit, validate, render, and export D2 diagrams with confined workspace access. This page covers its container image (ghcr.io/recursivefunctions/d2mcp:0.5.0).
Is the D2 MCP Server server safe to use?
D2 MCP Server scores 52 out of 100 on VerifyMCP. 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 D2 MCP Server server expose?
D2 MCP Server exposes 16 tools: d2_capabilities, d2_create, d2_export, d2_format, d2_get_source, and 11 more. Their descriptions and schemas cost roughly 3,070 tokens of context every time the server is loaded.
Is the D2 MCP Server server still maintained?
D2 MCP Server is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the D2 MCP Server server under?
D2 MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.