Skip to main content
Glama

arcsync-mcp

An MCP server that gives coding agents (Claude Code, Cursor, GitHub Copilot and other MCP clients) the architecture graph ArcSync parsed from your infrastructure-as-code: Terraform, AWS CDK, CloudFormation, Pulumi, Azure ARM and Serverless Framework.

Tools: list_diagrams, get_diagram (Mermaid or JSON, plus a canvas link), describe_resource, get_delta, list_versions, start_parse, get_parse_status. For diagrams the agent writes itself: validate_diagram (local check), push_diagram (store it and get canvas and Notion embed links), get_diagram_source, list_icons.

Setup

Add to .mcp.json (no credential in it, so it is safe to commit):

{
  "mcpServers": {
    "arcsync": {
      "command": "npx",
      "args": ["-y", "arcsync-mcp"]
    }
  }
}

Claude Desktop

Download arcsync-mcp-<version>.mcpb from the latest release and open it: Claude Desktop installs the extension, with no config file to edit. Leave the two credential fields empty to connect in the browser (below), or fill in both with an MCP credential from Settings.

Without Node.js

Each release also ships a standalone binary. On macOS or Linux, Homebrew installs it (on Intel Macs, Homebrew installs the npm package on its own Node.js instead):

brew install vanlandinghamlabs/tap/arcsync-mcp

On Windows, or without Homebrew, download the archive for your platform from Releases and check it with gh attestation verify <archive> -R VanLandinghamLabs/arcsync-mcp. Then use "command": "arcsync-mcp" with no args, and arcsync-mcp login / logout in place of the npx forms below.

The server is listed in the MCP Registry as io.github.VanLandinghamLabs/arcsync-mcp.

Connect

The first tool call returns a link to https://arcsync.dev/settings/mcp/connect. Open it, sign in, and click Connect: ArcSync mints an MCP credential and hands it to the server over 127.0.0.1, which saves it to ~/.config/arcsync/mcp-credential.json (mode 0600) and uses it from the next call. From a terminal, npx -y arcsync-mcp login does the same; npx -y arcsync-mcp logout deletes the saved file.

For CI or a shared machine, create an MCP credential at https://arcsync.dev/settings instead and pass ARCSYNC_CLIENT_ID and ARCSYNC_CLIENT_SECRET in the server's environment; they take precedence over a saved credential.

Two agent skills ship in skills/: arcsync-mcp tells an agent when to call each graph tool, and arcsync-diagrams teaches it to write, validate and push its own diagrams. Install both for Claude Code, Codex, Cursor and the other agents the skills CLI supports:

npx skills add VanLandinghamLabs/arcsync-mcp

The skills do not install the server; add it as above.

Full guide: https://arcsync.dev/docs/mcp

Related MCP server: NEAT MCP Server

Source and development

This repository is mirrored from the ArcSync monorepo on each release, together with the ArcSync core modules the server uses (vendor/core/). Releases are published to npm from here with provenance, so npm view arcsync-mcp --json links each version to the commit and workflow run that built it. Issues and pull requests are welcome; accepted changes are ported to the monorepo and ship in the next release.

npm ci
npm test
npm run build            # dist/index.js, one self-contained file
npm run eval:diagrams    # arcsync-diagrams skill evals; after build, costs model calls

License

MIT

Available Tools

11 tools
describe_resourceDescribe a resourceA
Read-onlyIdempotent

Describe one resource in an ArcSync diagram: its type, IaC attributes, and every relationship in and out (what it calls, reads, is attached to, or is contained by). resource may be the resource id, its name, or a substring; an ambiguous match returns the candidates to choose from.

NameRequiredDescriptionDefault
graphIdYesThe diagram's graphId, as list_diagrams or get_diagram returns it. The id start_parse returned also works.
resourceYesResource id, name, or a substring of either.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, but the description still adds real behavior: what data comes back (type, IaC attributes, all relationship directions) and how fuzzy matching resolves, including returning candidate choices on ambiguity. It does not mention cost or size limits on large relationship sets, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource scope and return contents, followed by the matching rule. No redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two required, fully documented parameters and no output schema, the description supplies the missing return-shape information (type, attributes, relationships) plus the ambiguity path. Nothing an agent needs to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines both graphId and resource, and the description's 'id, name, or substring' largely restates the schema entry. Its only addition is the ambiguity-resolution outcome, which is a modest gain over the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Describe') on a specific resource ('one resource in an ArcSync diagram') and enumerates exactly what is returned: type, IaC attributes, and inbound/outbound relationships. Scope ('one resource') implicitly separates it from whole-diagram siblings like get_diagram, though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

When-to-use is only implied by the singular-resource scope; it never says to prefer get_diagram for a full diagram or get_diagram_source for raw source. The one explicit procedural hint is about ambiguous matches returning candidates, which is useful but is a result-handling rule rather than tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deltaGet an infrastructure deltaA
Read-onlyIdempotent

Show what changed in a diagram's infrastructure. Without version, returns the pull-request delta for a PR-branch diagram: resources added, removed and changed compared with the base branch. With version (a timestamp from list_versions), compares that version with the one before it, or with the latest parse when against is "live".

NameRequiredDescriptionDefault
againstNo
graphIdYesThe diagram's graphId, as list_diagrams or get_diagram returns it. The id start_parse returned also works.
versionNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real substance: the result is a set of resources added, removed and changed, and the comparison baseline shifts depending on `version`/`against`. The PR-branch prerequisite is noted but the failure mode for a non-PR diagram is not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the core purpose, then branching cleanly into the no-version and with-version cases. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of conveying the return shape, and it does so at a useful level (added/removed/changed resources). For a three-parameter read tool this is nearly complete; only the non-PR-branch edge case is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, and the schema documents only `graphId`. The description compensates by defining `version` as a timestamp obtained from list_versions and clarifying that `against` only matters when `version` is set, with 'live' meaning the latest parse. The 'previous' enum value is left to inference as the implied default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb and resource: 'Show what changed in a diagram's infrastructure,' with the two operating modes spelled out. It is implicitly distinguishable from siblings like get_diagram or list_versions by being a comparison operation, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear contextual routing: omit `version` for a PR-branch delta, supply `version` (sourced from list_versions) to compare against the preceding version, or set `against` to 'live' for the latest parse. It stops short of stating what happens when `version` is omitted on a non-PR-branch diagram or when to prefer get_diagram instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_diagramGet an ArcSync diagramA
Read-onlyIdempotent

Fetch one architecture diagram ArcSync parsed from infrastructure-as-code. format: "mermaid" (default) returns a Mermaid flowchart to show or embed; format: "json" returns the resources and relationships as lists to reason over. Both include a link to the interactive canvas. Prefer this to inferring architecture from source files.

NameRequiredDescriptionDefault
formatNo
graphIdYesThe diagram's graphId, as list_diagrams or get_diagram returns it. The id start_parse returned also works.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, non-destructive and open-world, so the bar is low; the description still adds substantive behavior — what each format returns, that mermaid is the default, and that both responses include an interactive-canvas link. It does not describe error behavior for an unknown graphId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the purpose, then format semantics, then the routing hint. Every clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the return-value burden by describing both response shapes and the canvas link. Only minor gaps remain, such as failure behavior for a missing or stale graphId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: graphId is documented in the schema, but the format enum has no description there. The description compensates by naming both enum values, declaring mermaid the default, and explaining what each yields — real meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: "Fetch one architecture diagram ArcSync parsed from infrastructure-as-code." An agent knows exactly what it gets. It stops short of differentiating from the closest sibling, get_diagram_source, which also sounds like a way to obtain a diagram's content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context with "Prefer this to inferring architecture from source files" and prescribes which format to pick for display versus reasoning. It names no exclusions and never says when to use get_diagram_source or get_delta instead, leaving the main sibling ambiguity unresolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_diagram_sourceGet an authored diagram's sourceA
Read-onlyIdempotent

Return the stored ArcSync source text of an authored diagram (one pushed with push_diagram), to edit and push again. Takes the graphId push_diagram returned.

NameRequiredDescriptionDefault
graphIdYesThe graphId push_diagram returned.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds one genuine constraint — only diagrams authored via push_diagram have retrievable source — but says nothing about failure behavior for unknown or non-authored graphIds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource and round-trip purpose front-loaded, followed by the ID provenance. No redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotations and no output schema, the description covers what is returned (source text) and where the ID comes from. Minor absence of error-case guidance keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the graphId parameter already documents that it is the value returned by push_diagram. The description restates that same fact rather than adding new meaning (e.g., acceptable ID forms or reuse across versions), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Return the stored ArcSync source text of an authored diagram') and scopes it to diagrams created via push_diagram. It implicitly separates itself from get_diagram by emphasizing 'source text', but never names that sibling to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes a clear workflow context: use it to retrieve source, edit it, and push again, with the graphId coming from push_diagram. There are no explicit exclusions or named alternatives (e.g., when to use get_diagram instead), which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_parse_statusCheck a parseA
Read-onlyIdempotent

Report the progress of a parse started with start_parse: status (pending, running, completed, failed, cancelled), the current phase and percentage, and the error when it failed. Takes the graphId start_parse returned, or the canonical graphId a completed parse reports.

NameRequiredDescriptionDefault
graphIdYesThe diagram's graphId, as list_diagrams or get_diagram returns it. The id start_parse returned also works.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description adds real value by disclosing the return payload (status, current phase, percentage, error on failure) and the accepted id forms. It does not mention whether completed/failed are terminal or how often to poll, which is the remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler; the action and its linkage to start_parse come first, followed by the returned fields. Every clause carries information an agent needs to call and interpret the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only polling tool with no output schema, the description adequately encodes the response shape and id semantics. The only shortfall is operational guidance on polling behavior and terminal states, which is minor given the annotations cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds lifecycle meaning the schema does not: a completed parse reports a canonical graphId that can then be passed back in. That clarifies why two identifier forms are accepted, beyond the schema's bare statement that 'the id start_parse returned also works'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Report the progress of a parse') and explicitly scopes it to parses started with start_parse, which cleanly separates it from the sibling start_parse. It even enumerates the status values, so an agent knows exactly what this returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the pairing explicitly ('a parse started with start_parse') and tells the agent which identifier form to supply, which effectively implies when to call it (after a parse is initiated). It stops short of stating polling cadence or what to do when status is terminal, so it is clear context but not full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_diagramsList ArcSync diagramsA
Read-onlyIdempotent

List the architecture diagrams in the caller's ArcSync workspace (one per repository, branch and IaC path), newest first. Use it to find the graphId for a repository before calling get_diagram, describe_resource or get_delta. Optional query filters by repository URL, owner, repo name, branch, path or project type.

NameRequiredDescriptionDefault
limitNoMaximum rows (default 25).
queryNoCase-insensitive substring filter.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds real context beyond them: results are scoped to the caller's workspace, deduplicated per repo/branch/path, and sorted newest first. It does not mention pagination beyond the limit cap or total counts, which is the remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The ordering and scope constraint is front-loaded, and the workflow pointer follows immediately after.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param, zero-required list tool with no output schema, the description supplies the key return field (graphId), ordering, and filtering semantics. It could say more about what each row contains beyond graphId, but nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description earns an extra point by enumerating what `query` matches against (repository URL, owner, repo name, branch, path, project type) and confirming substring-style filtering. `limit` is left entirely to the schema, which already documents its default and maximum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List the architecture diagrams"), plus scope ("caller's ArcSync workspace"), cardinality ("one per repository, branch and IaC path") and ordering ("newest first"). The list_versions sibling is about versions rather than diagrams, so the resource distinction is legible without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit downstream workflow: use this to obtain a graphId before calling get_diagram, describe_resource or get_delta. It lacks an explicit when-not or a contrast with list_versions/list_icons, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_iconsList diagram iconsA
Read-onlyIdempotent

List the icon ids a diagram node can use in @{ icon: "..." } (aws:lambda, azure:function-apps, gcp:cloud-storage, generic ones such as user), grouped by vendor. query filters by substring.

NameRequiredDescriptionDefault
queryNoCase-insensitive substring, e.g. lambda.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, open-world, and non-destructive. Beyond those, the description adds useful behavioral context by saying results are grouped by vendor and that `query` filters by substring, though it does not discuss pagination or ordering within groups.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with compact examples and no redundant wording. Every clause contributes to identifying the resource, its usage, and its return grouping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter and no output schema, the description is complete enough: it explains the resource, shows valid example ids, states grouping, and documents the filter. No critical agent need is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage and already says `query` is a case-insensitive substring. The description restates that it filters by substring without adding new syntax, defaults, or edge-case behavior, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List the icon ids a diagram node can use' in the `@{ icon: "..." }` expression. It gives concrete examples (aws:lambda, azure:function-apps, gcp:cloud-storage) and states the grouping, so the agent can immediately tell this apart from diagram/source/version tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is clear: discover icon ids for use inside a diagram node expression, with `query` available to narrow results. It does not state when not to use the tool or name alternatives, but the use case is explicit enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_versionsList diagram versionsA
Read-onlyIdempotent

List the saved versions of a diagram (one per re-parse, newest first) with the commit each came from and how much it changed. Pass a version's timestamp to get_delta to see what it changed. Version history is a Pro feature.

NameRequiredDescriptionDefault
graphIdYesThe diagram's graphId, as list_diagrams or get_diagram returns it. The id start_parse returned also works.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: result ordering (newest first), granularity (one version per re-parse), included metadata, and a plan-entitlement restriction (Pro feature) that could cause an otherwise valid call to fail. Pagination or result-count limits are not mentioned, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, with the core behavior and result shape front-loaded and the sibling handoff immediately after. Every clause carries information — ordering, granularity, returned metadata, next-step routing, and entitlement caveat — with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey return content; it does so by naming the commit origin and change magnitude and by specifying newest-first ordering. Combined with the annotations, an agent has enough to call it correctly. Minor omissions are pagination behavior and any cap on the number of versions returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single graphId parameter is already well documented, including where to obtain the value, in the schema itself. The description adds no input-parameter meaning; its reference to `timestamp` concerns an output field consumed by get_delta rather than an input. Baseline 3 applies when the schema carries this load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("List the saved versions of a diagram") and qualifies the result set with meaningful scope: one entry per re-parse, newest first. It even names the payload fields (originating commit and change magnitude), which lets an agent distinguish this from siblings like get_diagram_source or get_delta without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent forward: "Pass a version's `timestamp` to get_delta to see what it changed," which names the alternative and the condition selecting it. It also surfaces the Pro-feature prerequisite, an important gating condition. It stops short of stating when not to call it (e.g., when version history is unavailable on the current plan, or for the current working state).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

push_diagramPush an authored diagramA

Validate ArcSync diagram source locally, then store it as a private diagram in the caller's workspace. Pushing the same diagramId again updates that diagram. Returns the canvas link and an embed link for Notion. Counts against the workspace's diagram and hourly limits; call validate_diagram first.

NameRequiredDescriptionDefault
titleNoDefaults to the source's own title.
sourceYesThe diagram as markdown holding ```arcsync fenced blocks (Mermaid flowchart or stateDiagram-v2 syntax with @{ } node metadata).
diagramIdNoDefaults to the `%% diagram:` id in the source's first block, else a slug of the source's title.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as a non-read-only, non-destructive, open-world write. The description adds substantial context beyond annotations: private visibility, update-on-same-id semantics, returned canvas and embed links, quota consumption, and the required pre-validation step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then covers update semantics, return values, and limits in a compact sequence. Every clause carries operational information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write/update tool with no output schema and full parameter coverage, the description supplies the key missing context: validation prerequisite, visibility, quota impact, and return links. It does not describe failure or error behavior, but is otherwise complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so source, title, and diagramId formats are already documented in the input schema. The description adds meaningful behavior for diagramId by explaining that re-pushing it updates the existing diagram, but adds little parameter-specific detail for title or source beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: validate and store an ArcSync diagram as a private diagram in the caller's workspace. It also distinguishes create-vs-update behavior via diagramId and names validate_diagram as the prerequisite, so an agent can tell it apart from read-only siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call validate_diagram first and explains that pushing the same diagramId updates the existing diagram. It also warns that calls count against workspace diagram and hourly limits, though it does not give a direct when-not-to-use or named alternative beyond the validation prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_parseDiagram a repositoryA

Ask ArcSync to clone a GitHub repository and parse its infrastructure-as-code (Terraform, CloudFormation, AWS CDK, Pulumi, Azure ARM, Serverless Framework) into a diagram. Returns a graphId at once; poll get_parse_status until it completes, then call get_diagram. Uses one parse from the workspace's monthly quota (CDK and Pulumi also use a server-side synth), so call list_diagrams first and reuse a diagram that already exists. Private repositories need the ArcSync GitHub App installed.

NameRequiredDescriptionDefault
pathNoSubdirectory holding the IaC, when it is not at the repository root.
branchNoDefaults to the repository's default branch, or main when ArcSync cannot look it up. Pass it when you know it.
repoUrlYeshttps://github.com/owner/repo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false; the description adds the async contract (returns a graphId at once), quota consumption per call, extra server-side synthesis for CDK and Pulumi, and the private-repo auth prerequisite. These are real operational costs an agent cannot infer from structured fields, and they are consistent with the non-idempotent, non-destructive annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, with the purpose front-loaded and the cost/workflow caveats following. The long parenthetical format list and chained clauses in the first sentence make it slightly dense, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an asynchronous, quota-consuming creation tool with no output schema, the description explains what is returned immediately (graphId), how to follow up, and the preconditions around quota and repository access. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so repoUrl, path, and branch are already documented in the schema, and the description adds no further parameter-level detail such as URL validation behavior or how path interacts with monorepo layouts. A baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('clone a GitHub repository and parse its infrastructure-as-code ... into a diagram') and enumerates the supported IaC formats. It is immediately distinguishable from siblings like list_diagrams and get_diagram, which consume rather than create diagrams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordered workflow: poll get_parse_status until complete, then call get_diagram. It also names a when-not condition — call list_diagrams first and reuse an existing diagram — plus the constraint that private repositories require the ArcSync GitHub App.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_diagramValidate an authored diagramA
Read-onlyIdempotent

Check ArcSync diagram source (```arcsync blocks) locally, without pushing it: reports OK with node and edge counts, or INVALID with one line per problem (block:line:column, and a suggestion when one exists). Run it, fix every error, then call push_diagram.

NameRequiredDescriptionDefault
sourceYesThe diagram as markdown holding ```arcsync fenced blocks (Mermaid flowchart or stateDiagram-v2 syntax with @{ } node metadata).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuine value by disclosing the return shapes: "OK with node and edge counts" versus "INVALID with one line per problem (block:line:column, and a suggestion when one exists)." It stops short of saying whether any files or state are touched on disk, but the "locally, without pushing it" phrasing covers the main concern.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and the non-pushing constraint, followed by a short next-step instruction. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining results and does so precisely (OK counts vs. INVALID per-error lines with location and suggestion). For a single-parameter, read-only validation tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter and the schema already documents it at 100% coverage, including the ```arcsync fence and Mermaid/@{} metadata syntax. The description restates the same fence concept without adding format or size guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb ("Check") and resource ("ArcSync diagram source (```arcsync blocks)") and immediately scopes it as local validation "without pushing it," which cleanly separates it from push_diagram and the parse/delta siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit workflow: run validate_diagram, fix every error, then call push_diagram. The alternative (pushing) is named along with the condition that selects validation first, so no inference is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.3.2
    • First observeddescribe_resource
    • First observedget_delta
    • First observedget_diagram
    • First observedget_diagram_source
    • First observedget_parse_status
    • First observedlist_diagrams
    • First observedlist_icons
    • First observedlist_versions
    • First observedpush_diagram
    • First observedstart_parse
    • First observedvalidate_diagram

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation4/5

Each tool targets a distinct step in the parse/author/inspect lifecycle, and descriptions clarify roles well. The only real overlap is get_diagram vs get_diagram_source (parsed output vs editable source) and validate_diagram vs push_diagram (which itself validates), though the latter overlap is explicitly documented as an intentional two-step flow.

Naming Consistency5/5

All 11 names follow a consistent snake_case verb_noun convention (list_diagrams, get_diagram, describe_resource, start_parse, get_parse_status, validate_diagram, push_diagram, etc.). No camelCase or naming-style mixing, and verb choices (list/get/describe/start/validate/push) are predictable.

Tool Count5/5

11 tools for an IaC-parsing and diagram-authoring server is well-scoped, with each tool mapping to a clear operation (discover, read, inspect delta, parse, validate, push, icons). Nothing feels redundant or padded.

Completeness4/5

The lifecycle is well covered: discovery (list_diagrams), reading (get_diagram, describe_resource, get_diagram_source), history (list_versions, get_delta), parsing (start_parse + get_parse_status), and authoring (validate_diagram + push_diagram). Minor gaps remain: no delete/remove diagram, no cancel_parse despite a 'cancelled' status, and no listing of authored diagrams separately.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI-powered architecture analysis and visualization of codebases, exposing 17 MCP tools for querying components, dependencies, and generating interactive diagrams.
    294 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with a live architecture model of a codebase, enabling queries for root cause analysis, blast radius, and dependency traversal through MCP tools.
    385 npm
    21
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to query a local, multi-repo code graph for symbol exploration, blast radius analysis, co-change mining, and durable code-anchored memory via MCP tools.
    223 npm
    16
    Business Source 1.1