linked-archi-mcp
Enables read-only architecture analysis of Backstage software catalog models once they are converted to RDF by the Linked.Archi converters, exposing tools to connect to the resulting dataset, resolve a supported profile, browse gated SPARQL templates, run queries with provenance and evidence bundles, and validate results with SHACL.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
linked-archi-mcp
An MCP server for read-only analysis of architecture knowledge graphs: ArchiMate, BPMN, C4/Structurizr, Backstage and LeanIX models converted to RDF by the Linked.Archi converters.
It is a thin adapter over the linked-archi-apm agent skills. The skills own everything that matters: the profile-resolved SPARQL template library, capability gating, read-only enforcement, provenance and the analysis patterns. This server runs their executables as subprocesses through the same versioned JSON contracts the skills use to call each other. It never imports their Python code and never re-implements a rule. That way the skills stay installable on their own, and the server can't drift from them.
A refusal is an answer, not an error. When the dataset's profile cannot support a
template, the tool returns status: "refused" with the reason and an alternative. It
never returns an empty result, which would read as "nothing exists".
{
"status": "refused",
"message": "Template 'core/dependents-direct' cannot run against profile 'linked-archi-qualified':\n - capability 'direct_rel_triples' is False ...",
"alternatives": ["core/dependents-qualified", "core/neighbours-qualified"]
}What it exposes
Tool | Skill owner | What it does |
| connect | Load the dataset and report quads, named graphs, and inputs that lost graph identity |
| connect | Candidate RDF files near a directory (only when client paths are allowed) |
| profile | Bundled profiles; one fully resolved profile |
| profile | Name the profile that fits the dataset's shape |
| profile | Check a profile's claims against the dataset ( |
| query | Templates gated by the profile; one template's parameters and |
| query | Template → SPARQL, without executing |
| query | Execute a template; result envelope with provenance and an |
| query | Several independent queries in one invocation: the dataset loads once |
| query | Execute hand-written read-only SPARQL (updates, |
| query | Is this SPARQL read-only? |
| analyse | Route a question to a pattern and get ordered steps (executes nothing) |
| analyse | Assemble cited results and findings into a reproducible bundle, rendered as Markdown |
| validate | SHACL in-process, with target-class coverage |
| — | Skill locations and versions, dependencies, configured target |
Every tool is annotated read-only. query_run results return at most max_rows rows,
default 200. row_count always gives the full count, and rows_omitted says how many
were cut.
Resources: each skill's SKILL.md and its references/**/*.md, under
linked-archi://skills/<skill>/<path>. These documents explain the graph's conventions
(qualified relationships, named graphs, the evidence model) and make a client a better
analyst.
Prompt: investigate(question). It connects and verifies, plans, runs each step, and
answers in three parts: facts, inference and unknowns.
Batching
Each tool call starts a skill process, and a local dataset is parsed once per process.
query_batch runs many queries in one process, so the dataset is parsed once. On the
committed sample dataset, five templates took 2.3 s as separate query_run calls and
0.5 s as one batch. On a large graph the gap widens, because the parse dominates.
analyse_plan marks groups of steps that can run together as batches with status
ready. Pass a manifest's queries to query_batch, giving each entry's set as
parameters.
A batch is checked before any of it runs, so one refused entry refuses the whole batch.
Steps that depend on an earlier result still go one at a time through query_run.
The skills' --store cached mode is also available (server flag --store), but it is
not a free speed-up. It loads about 100× faster and queries about 3× slower, which helps
many cheap lookups against a large unchanging graph and hurts aggregations. See the
connect skill's references/store-modes.md.
Evidence and bundles
Every answered query carries an evidence_id. The server saves the query owner's
envelope unchanged in a bounded, process-local store (the last 500, removed on exit).
analyse_bundle takes the ids an answer rests on, in step order, plus findings split
into the evidence model's five claim classes. It returns the bundle document and its
Markdown rendering. The analyse skill refuses a bundle that mixes datasets or profiles,
leaves out a claim class, or makes a claim that cites no step.
Source acquisition (la-source) is not exposed yet. It fetches over the network and
writes a cache, which needs its own design for a server that can run over HTTP.
Related MCP server: LogicMap MCP Server
Install
Python 3.11+. The skills run as subprocesses of the server's own interpreter, so their dependencies are installed alongside it:
git clone --recurse-submodules https://github.com/linked-archi/linked-archi-mcp
cd linked-archi-mcp
pip install -e '.[all]' # pyoxigraph for local RDF, pyshacl for validationWhere the skills come from
Resolution stops at the first match and never falls back:
--skills-dir DIR$LINKED_ARCHI_SKILLS_DIR, the same variable the skills use to find each otherthe
vendor/linked-archi-apmsubmodule, pinned to a released tag (currentlyv0.10.0)
The submodule gives development and CI a reproducible pin. To serve the skills you installed with APM instead, point the server at them:
LINKED_ARCHI_SKILLS_DIR=~/.claude/skills linked-archi-mcp --data graph.trigdoctor reports which tree was used and each skill's version. To move the pin:
git -C vendor/linked-archi-apm fetch --tags && git -C vendor/linked-archi-apm checkout vX.Y.ZRun
stdio (local client)
linked-archi-mcp --data dist/merged.trig --profile linked-archi-defaultClaude Code:
claude mcp add linked-archi -- linked-archi-mcp --data /abs/path/merged.trigOr in any client's JSON config:
{
"mcpServers": {
"linked-archi": {
"command": "linked-archi-mcp",
"args": ["--data", "/abs/path/merged.trig"]
}
}
}Over stdio, tool calls may name other files or endpoints with data / endpoint, since
the client is your own agent.
Streamable HTTP
linked-archi-mcp http --port 8000 --data /srv/graph/merged.trig
# -> http://127.0.0.1:8000/mcpOver HTTP the server is locked down by default:
Only the configured target. Tool calls can't name files, endpoints, shapes or profile paths, only bundled profile names.
--allow-client-pathslifts this; use it only for a trusted client.Token required off loopback. Binding a non-loopback address requires
$LINKED_ARCHI_MCP_TOKEN, which clients send asAuthorization: Bearer <token>. Behind a gateway that already authenticates, pass--insecure-no-authinstead.DNS-rebinding protection. On by default for loopback binds. Add
--allowed-hostfor the public host name when serving behind a proxy.
LINKED_ARCHI_MCP_TOKEN=$(openssl rand -hex 32) \
linked-archi-mcp http --host 0.0.0.0 --allowed-host graph-mcp.example.org \
--endpoint https://graph.example.org/sparql --profile linked-archi-mergedOptions
Flag | Meaning |
| Local RDF; files merge into one dataset |
| HTTPS SPARQL endpoint instead |
| Default profile ( |
| Trusted project query catalogue |
| Default SHACL shapes for |
|
|
| Endpoint request deadline |
| Rows returned per result by default (200) |
| Deadline for one skill invocation, seconds (120) |
Develop
git submodule update --init
pip install -e '.[test]'
pytestThe tests drive the server in-process with the MCP client against the committed fixtures of the pinned skills.
License
Apache-2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
AI knowledge graph for architecture, portfolio, and digital strategy management.
Read-only public, governed enterprise knowledge published by GVE, with provenance and validation.
Anonymous read-only access to source-backed public SHAR Production knowledge.
Read-only Kyntrax definitions, claims, evidence status and public provenance.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables creating, managing, analyzing, and visualizing knowledge graphs with support for multiple graph types (topology, timelines, changelogs, requirements, knowledge bases, ontologies) including node/edge management and resource association.157 npm1MIT
- AlicenseAqualityDmaintenanceEnables creating and querying semantic knowledge graphs to model business logic, code relationships, and project structure across multiple projects.111MIT
- AlicenseAqualityCmaintenanceRead-only BIM query server for agents: structured, policy-bounded queries on IFC/gbXML models with deterministic cited results.111MIT
- AlicenseNot gradedqualityBmaintenanceRead-only MCP server for discovering and validating Architecture Decision Records, inspecting architecture impact, and reviewing architectural drift evidence.6MIT