io. github. alexeibespalov/ trident
by alexeibespalov · remote · local (npm) · no sign-in to list tools · v1.0.2 · published by GitHub user alexeibespalov
Create and edit collaborative architecture diagrams with any AI assistant using the Trident 2D DSL.
23 tools: 4 can delete or cancel things, 1 do something that can't be undone, 10 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things10Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http trident https://mcp.tridentchart.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnopen_document
The server marks "open_document" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "open_document" says "open": a word for a change.
- Warnexplain
The server marks "explain" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "explain" says "explain": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Deletes or cancels 4Claude Code: deny
delete_annotationRemoves a text annotation from a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "delete_annotation" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Removes a text annotation from a live Trident document. Use get_document_summary to get all annotation IDs before calling this. Requires a valid editor access token.
Annotations the server declares
- title: Delete Annotation
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
delete_connectionRemoves a connection from a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "delete_connection" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Removes a connection from a live Trident document. Provide either the connectionId, or both source and target node IDs to find and remove the matching connection. Use get_document_summary to get all connection IDs before calling this. Requires a valid editor access token.
Annotations the server declares
- title: Delete Connection
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
delete_containerRemoves a container from a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "delete_container" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Removes a container from a live Trident document. By default, nodes inside are detached (kept on the diagram without a container). Pass deleteNodes: true to remove the container's nodes as well. Use get_document_summary to get all container IDs before calling this. Requires a valid editor access token.
Annotations the server declares
- title: Delete Container
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
delete_nodeRemoves a node from a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "delete_node" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Removes a node from a live Trident document. All connections to/from this node are also removed automatically. Use get_document_summary to get all node IDs before calling this. This action is reversible via Ctrl+Z in the Trident editor. Requires a valid editor access token.
Annotations the server declares
- title: Delete Node
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Can't be undone 1Claude Code: ask
explainDelivers an explanation payload to human collaborators watching the document, optionally anchored to a specific node or container.1 finding
Why it is in this group
- The name "explain" says "explain": a word for reading.
- The description's first verb is "deliver": a word for sending, and what is sent cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "explain" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "explain" says "explain": a word for reading.
Description, as the server wrote it Delivers an explanation payload to human collaborators watching the document, optionally anchored to a specific node or container. Use this when you want to explain what a diagram element represents, why it exists, or how it relates to other parts of the system — without suggesting a change. The explanation appears in the UI attributed to you. Does NOT mutate the diagram. Requires a valid viewer or editor access token. IMPORTANT: this tool automatically pauses (3–15 s, proportional to explanation length) before returning, so the human has time to read. Do NOT add your own artificial delays between explain calls — the pacing is built in.
Annotations the server declares
- title: Explain Element
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Changes things 10Claude Code: ask
add_annotationAdds a text annotation to a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "add_annotation" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Adds a text annotation to a live Trident document. Two visual styles: style:stickyNote (default — post-it card with colored background, good for notes/callouts) or style:textBody (plain transparent text, good for diagram titles and section labels). Ideal for architectural notes, decision records, section labels, or TODO markers. Appears immediately for all collaborators. Requires a valid editor access token.
Annotations the server declares
- title: Add Annotation
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
add_connectionAdds a connection (arrow/edge) between two nodes or containers in a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "add_connection" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Adds a connection (arrow/edge) between two nodes or containers in a live Trident document. Use get_document_summary to get valid source and target IDs before calling this. Requires a valid editor access token. For ERD relationships, connect the two TABLE containers (field rows are rejected as endpoints) and set type to an ERD pair such as "one_to_many".
Annotations the server declares
- title: Add Connection
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
add_containerAdds a new container (group/swimlane) to a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "add_container" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Adds a new container (group/swimlane) to a live Trident document. Containers visually group related nodes. Use get_document_summary to check existing container IDs before adding to avoid duplicates. Requires a valid editor access token. To build an ERD (entity-relationship diagram), add one container per table with kind:"erd" and an x/y position, then add each field with add_node (container:<table id>, no x/y) — rows are stacked and the table sized automatically — and join TABLES (never rows) with add_connection using an ERD pair type such as "one_to_many".
Annotations the server declares
- title: Add Container
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
add_nodeAdds a new node (entity) to a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "add_node" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Adds a new node (entity) to a live Trident document. The node appears immediately for all collaborators. Requires a valid editor access token. Before adding nodes: call open_document to understand the diagram layout and pick sensible positions; call get_document_summary to get all existing entity IDs so you can avoid duplicates. IMPORTANT: if this node belongs inside a container, pass node.container on THIS call — do NOT create the node without a container and reparent it later via update_node. Orphaned nodes appear immediately to all live collaborators and create unnecessary visual churn.
Annotations the server declares
- title: Add Node
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
make_suggestionPosts a visible suggestion to human collaborators watching the document WITHOUT making any changes to the diagram.Reads text others writeCan send data outNo findings
Why it is in this group
- The description's first verb is "post": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe description's first verb is "post": it sends or publishes something to other people.
Description, as the server wrote it Posts a visible suggestion to human collaborators watching the document WITHOUT making any changes to the diagram. Use this when you observe something worth flagging — a potential mistake, an improvement, or a question — but want the human to decide. The suggestion appears as a bold "SUGGESTION:" callout in the UI with a radar pulse animation on your presence dot for 10 seconds. Does NOT mutate the diagram. Requires a valid viewer or editor access token.
Annotations the server declares
- title: Make Suggestion
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
open_documentOpens a live Trident document and returns its full contents as Trident markup DSL — the human-readable text format used to author diagrams.Reads text others write1 finding
Why it is in this group
- The name "open_document" says "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "open_document" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "open_document" says "open": a word for a change.
Description, as the server wrote it Opens a live Trident document and returns its full contents as Trident markup DSL — the human-readable text format used to author diagrams. Use this to READ and UNDERSTAND the diagram: its structure, labels, connections, and layout. Do NOT rely on this to enumerate entity IDs for programmatic use — the DSL can be very large and the output may be truncated. To get a complete, structured list of all entity IDs and counts, use get_document_summary instead. Requires a valid access token.
Annotations the server declares
- title: Open Document
- readOnlyHint: true
- openWorldHint: true
update_annotationUpdates an existing text annotation in a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "update_annotation" says "update": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Updates an existing text annotation in a live Trident document. Only the fields you provide are changed. Use get_document_summary to get all annotation IDs before calling this. Requires a valid editor access token.
Annotations the server declares
- title: Update Annotation
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
update_canvas_graphicRepositions or resizes a background image (canvas graphic) in a live Trident document.No findings
Why it is in this group
- The name "update_canvas_graphic" says "update": a word for a change.
Description, as the server wrote it Repositions or resizes a background image (canvas graphic) in a live Trident document. Use open_document to get the canvas graphic ID and current dimensions — it appears as: image <id> "<url>" at (x, y) width:W height:H. The position at (x, y) is the TOP-LEFT corner. USE THIS BEFORE placing many geographically-positioned nodes: if the background map is small (e.g. width < 700), scale it up so nodes have room to breathe and do not overlap. Requires a valid editor access token.
Annotations the server declares
- title: Update Canvas Graphic
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
update_containerUpdates properties of an existing container in a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "update_container" says "update": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Updates properties of an existing container in a live Trident document. Only provided fields are changed. Use get_document_summary to get all container IDs before calling this. Requires a valid editor access token. This is also how you RESIZE a container: set width/height (and x/y to keep it centred over its nodes) — do this whenever you add or move nodes outside a fixed-size container.
Annotations the server declares
- title: Update Container
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
update_nodeUpdates properties of an existing node in a live Trident document.Reads text others writeNo findings
Why it is in this group
- The name "update_node" says "update": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Updates properties of an existing node in a live Trident document. Only the fields you provide are changed; others are preserved. Use get_document_summary to get all node IDs before calling this. Requires a valid editor access token.
Annotations the server declares
- title: Update Node
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 8Claude Code: allow
get_comprehensive_exampleReturns a comprehensive Trident example demonstrating all syntax features including containers, nodes (traditional and bracket-style syntax), diamond/rectangle shapes, icons, conne…Reads text others writeNo findings
Why it is in this group
- The name "get_comprehensive_example" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns a comprehensive Trident example demonstrating all syntax features including containers, nodes (traditional and bracket-style syntax), diamond/rectangle shapes, icons, connections with labels, routing modes, cards, and text annotations. Use this to see all features in action.
Annotations the server declares
- title: Comprehensive Example
- readOnlyHint: true
- openWorldHint: true
get_document_pngRenders the current state of a live Trident document as a PNG image directly from the Yjs collaborative session — bypassing Firestore, which may be stale.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_document_png" says "get": a word for reading.
What it can reach
- private-dataThe name "get_document_png" says "get" and "document": it reads documents.
- private-dataThe description's first sentence says "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Renders the current state of a live Trident document as a PNG image directly from the Yjs collaborative session — bypassing Firestore, which may be stale. Returns a base64-encoded PNG. Use this to visually verify that diagram edits look correct before or after making changes.
Annotations the server declares
- title: Export as PNG
- readOnlyHint: true
- openWorldHint: true
get_document_summaryReturns a complete structured summary of a Trident document as JSON: all node IDs, container IDs, connection IDs, annotation IDs, labels, and entity counts.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_document_summary" says "get": a word for reading.
What it can reach
- private-dataThe name "get_document_summary" says "get" and "document": it reads documents.
- private-dataThe description's first sentence says "return" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns a complete structured summary of a Trident document as JSON: all node IDs, container IDs, connection IDs, annotation IDs, labels, and entity counts. Use this for PROGRAMMATIC OPERATIONS — it is never truncated regardless of diagram size, so you always get every entity ID. Use this before any bulk update, delete, or enumeration task. To read and understand the diagram as a human-readable diagram, use open_document instead. Requires a valid access token.
Annotations the server declares
- title: Document Summary
- readOnlyHint: true
- openWorldHint: true
get_generator_guideReturns LLM-optimized instructions for generating Trident diagrams, including quick reference, critical rules (especially Y-axis!), spacing guidelines, common patterns, color conve…Reads text others writeNo findings
Why it is in this group
- The name "get_generator_guide" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns LLM-optimized instructions for generating Trident diagrams, including quick reference, critical rules (especially Y-axis!), spacing guidelines, common patterns, color conventions, and error prevention checklist. Use this before generating Trident markup (a whole diagram as text). Not needed up front in a live session that edits a document with add_node / add_connection — load it there only for domain conventions (BPMN/UML/flowchart layout, ERD, C4).
Annotations the server declares
- title: Generator Guide
- readOnlyHint: true
- openWorldHint: true
get_quick_startReturns a condensed 2-minute quick-start guide with minimal working examples, core syntax reference, and key concepts.Reads text others writeNo findings
Why it is in this group
- The name "get_quick_start" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns a condensed 2-minute quick-start guide with minimal working examples, core syntax reference, and key concepts. Use this for rapid learning when you need to generate simple diagrams quickly.
Annotations the server declares
- title: Quick Start
- readOnlyHint: true
- openWorldHint: true
get_recent_changesReturns the recent change history for a live Trident document.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_recent_changes" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "return" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns the recent change history for a live Trident document. Each entry shows who made the change, what was changed, and when. Useful for understanding what edits have been made by AI agents or human collaborators. Requires a valid access token.
Annotations the server declares
- title: Recent Changes
- readOnlyHint: true
- openWorldHint: true
get_trident_specReturns the complete Trident 2D specification including grammar, syntax rules, coordinate system, containers, nodes, connections, shapes, and icon reference.Reads text others writeNo findings
Why it is in this group
- The name "get_trident_spec" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns the complete Trident 2D specification including grammar, syntax rules, coordinate system, containers, nodes, connections, shapes, and icon reference. Use this when you need deep understanding of the Trident DSL.
Annotations the server declares
- title: Trident Spec
- readOnlyHint: true
- openWorldHint: true
validate_tridentReturns a comprehensive validation checklist for Trident diagrams covering syntax rules, semantic rules, best practices, and common mistakes to avoid.Reads text others writeNo findings
Why it is in this group
- The name "validate_trident" says "validate": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Returns a comprehensive validation checklist for Trident diagrams covering syntax rules, semantic rules, best practices, and common mistakes to avoid. Use this after generating a diagram to verify correctness.
Annotations the server declares
- title: Validate Diagram
- readOnlyHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
63 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data3
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write21
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__trident__make_suggestion"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Install
Pinned to version 1.0.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http trident https://mcp.tridentchart.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__trident__get_trident_spec",
"mcp__trident__get_generator_guide",
"mcp__trident__get_comprehensive_example",
"mcp__trident__validate_trident",
"mcp__trident__get_quick_start",
"mcp__trident__get_document_summary",
"mcp__trident__get_recent_changes",
"mcp__trident__get_document_png"
],
"ask": [
"mcp__trident__open_document",
"mcp__trident__add_node",
"mcp__trident__update_node",
"mcp__trident__add_container",
"mcp__trident__update_container",
"mcp__trident__add_connection",
"mcp__trident__add_annotation",
"mcp__trident__update_annotation",
"mcp__trident__update_canvas_graphic",
"mcp__trident__make_suggestion",
"mcp__trident__explain"
],
"deny": [
"mcp__trident__delete_node",
"mcp__trident__delete_container",
"mcp__trident__delete_connection",
"mcp__trident__delete_annotation"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as trident. Review it before you use it.
Capability tags behind 21 rules
- mcp__trident__get_trident_spec untrusted-input
- mcp__trident__get_generator_guide untrusted-input
- mcp__trident__get_comprehensive_example untrusted-input
- mcp__trident__validate_trident untrusted-input
- mcp__trident__get_quick_start untrusted-input
- mcp__trident__open_document untrusted-input
- mcp__trident__get_document_summary private-data, untrusted-input
- mcp__trident__get_recent_changes private-data, untrusted-input
- mcp__trident__add_node untrusted-input
- mcp__trident__update_node untrusted-input
- mcp__trident__delete_node untrusted-input
- mcp__trident__add_container untrusted-input
- mcp__trident__update_container untrusted-input
- mcp__trident__delete_container untrusted-input
- mcp__trident__add_connection untrusted-input
- mcp__trident__delete_connection untrusted-input
- mcp__trident__get_document_png private-data, untrusted-input
- mcp__trident__add_annotation untrusted-input
- mcp__trident__update_annotation untrusted-input
- mcp__trident__delete_annotation untrusted-input
- mcp__trident__make_suggestion untrusted-input, outbound
