Skip to content

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.

Deletes · 4Final · 1Changes · 10

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

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/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "open_document" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "open_document" says "open": a word for a change.

    What this check looks for
  • The server marks "explain" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "explain" says "explain": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "explain" says "explain": a word for reading.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "open_document" says "open": a word for a change.

      What this check looks for
    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.
deny to break every path
{
  "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/mcp

Run 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.

.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