aris-mcp
Use aris-mcp as an ARIS REST/MCP bridge to read ARIS data, ingest it into a knowledge graph, and optionally write intelligence back to ARIS.
List and get ARIS models and their attributes.
List EPC model objects and directed control-flow connections.
Ingest an entire model inventory or a single model with EPC structure into epistemic-graph as typed nodes and links.
Store base64 ARIS model exports as content-addressed KG blobs linked to a ProcessModel.
Write/update model or object attributes, such as
kg_intelligence, whenARIS_ENABLE_WRITE=True.Connect to ARIS Connect/Enterprise/Cloud tenants using OAuth2, bearer token, or basic auth, with optional TLS profile and REST path overrides.
Integrates with Camunda to reconcile ARIS process models with Camunda workflows via a knowledge graph, enabling alignment between business process modeling and execution.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aris-mcpget model 'Order to Cash' with its EPC structure"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
aris-mcp
Software AG ARIS REST API + MCP Server for Agentic AI.
aris-mcp connects the agent ecosystem to an ARIS tenant (ARIS Connect / ARIS
Enterprise / ARIS Cloud). It is the inbound and outbound bridge for the
scion-sdk Knowledge Graph's Camunda + ARIS ↔ KG integration:
Inbound — the KG ARIS extractor (
enrichment/extractors/aris.py) consumes this client to lift ARIS models + their EPC structure (functions → BusinessTask, rule operators → gateways, events collapsed, connections → FLOWS_TO) into the canonical ArchiMate ontology, where they reconcile with Camunda/Egeria viaALIGNED_WITHand are reasoned over in OWL/RDF.Outbound — the KG process-intelligence writeback (
enrichment/process_writeback.py) usesset_model_attributesto write akg_intelligenceattribute back onto ARIS models (gated byARIS_ENABLE_WRITE).
Available MCP Tools
The table below is auto-generated from the live server — do not edit by hand.
Intent tools
MCP Tool | Kind | Description |
| intent | Store a raw ARIS model export (bytes) as a content-addressed KG blob. |
| intent | Natively ingest ARIS models into epistemic-graph as typed nodes. |
| intent | Work with ARIS models and their EPC structure. |
| intent | Write attributes on a single ARIS object. |
4 intent tool(s) · 0 operation(s). Call an operation as act(action='<operation>', params={...}) (ask for reads); find(action='describe', params={'action': '<operation>'}) returns its arguments. An operation is enabled unless its <DOMAIN>TOOL toggle is set false. Auto-generated — do not edit.
Writes require
ARIS_ENABLE_WRITE=True.
Related MCP server: mendix-mcp-server
Environment Variables
Package environment variables
Variable | Example | Description |
|
| ARIS REST base URL (tenant API root). Default follows the ARIS Connect ABS layout. |
| — | Named outbound TLS policy from AgentConfig (system trust store by default). Peer and hostname verification are mandatory and cannot be disabled. Point a self-signed / private-PKI tenant at its CA either with the standard SSL_CERT_FILE / SSL_CERT_DIR (applies to every service), or by naming a profile here (ARIS_TLS_PROFILE=) resolved from a TLS_PROFILES / TLS_PROFILES_REF catalog (ca_bundle_path, ca_directory, client_cert_path/ client_key_path, minimum_version) — see scion-sdk' transport_security. |
| — | |
| — | 1. OAuth2 client-credentials (preferred for ARIS Cloud / Connect) |
| — | |
| secret-injected | |
| — | |
| secret-injected | 2. Static bearer token (alternative to OAuth) |
| — | 3. HTTP basic auth (alternative) |
| secret-injected | |
| — | Optional JSON overriding the default ARIS REST path templates per tenant e.g. {"models":"v2/repository/models","model_objects":"v2/models/{model_id}/objects"} |
|
| Allow (gated) attribute writes back onto ARIS models (KG writeback) |
|
| stdio, streamable-http, or sse |
|
| |
|
| |
| — | Comma-separated tool / tag allow/deny lists |
| — | |
| — | |
| — | |
|
| |
|
| |
|
| The action-routed ARIS tools (aris_model, aris_object) share this toggle. |
|
| |
| — | |
| — | |
|
| |
|
| |
| — |
Inherited scion-sdk variables (apply to every connector)
Variable | Example | Description |
| — | Outbound MCP child auth: |
| — | OIDC client id (service-account auth) |
|
| Runtime secret reference for the OIDC service account |
| — | HTTP Basic username ( |
|
| Runtime secret reference for HTTP Basic auth ( |
|
| URL of the MCP server the agent connects to |
| — | Operator-configured LLM provider for the agent |
| — | Operator-configured model id for the agent |
|
| Serve the AG-UI web interface |
28 package + 9 inherited variable(s). Auto-generated from .env.example + the shared scion-sdk set — do not edit.
Every variable the server reads, grouped by concern.
Connection & Credentials
Variable | Purpose | Default |
| ARIS REST base URL (tenant API root) |
|
| named outbound TLS policy from AgentConfig; verification is mandatory | (empty, system trust) |
| OAuth2 client-credentials (preferred) | — |
| static bearer token (alt to OAuth) | — |
| HTTP basic (alt) | — |
| JSON overriding REST path templates per tenant | — |
| allow attribute writes |
|
Tenant differences. ARIS deployments vary (Connect ABS portal vs the public ARIS API; on-prem vs Cloud). The defaults follow the common ARIS Connect ABS REST layout. If the operator's tenant's paths differ, set
ARIS_PATHS_JSON, e.g.{"models":"v2/repository/models","model_objects":"v2/models/{model_id}/objects"}.
MCP server / transport
Variable | Description | Default |
|
|
|
| Bind host (HTTP transports) |
|
| Bind port (HTTP transports) |
|
| Tool surface: |
|
| Comma-separated tool allow/deny list | — |
| Comma-separated tag allow/deny list | — |
| Verbose logging |
|
| Unbuffered stdout (recommended in containers) |
|
Tool toggles
The action-routed tools can be disabled via their toggle env var (set to false):
ARISTOOL (see the Available MCP Tools table above).
Telemetry & governance
Variable | Description | Default |
| Enable OpenTelemetry export |
|
| OTLP collector endpoint | — |
| OTLP auth keys | — |
| OTLP protocol (e.g. | — |
| Authorization mode: |
|
| Embedded policy file |
|
| Remote Eunomia server URL | — |
Agent CLI (full [agent] runtime only)
Variable | Description | Default |
| URL of the MCP server the agent connects to |
|
| LLM provider (e.g. |
|
| Model id (e.g. |
|
| Serve the AG-UI web interface |
|
Installation
Install the slim
[mcp]extra. Installaris-mcp[mcp]— the MCP-server extra that pulls only the FastMCP / FastAPI tooling (scion-sdk). It deliberately excludes the heavy agent runtime (the epistemic-graph engine,pydantic-ai,dspy,llama-index,tree-sitter), souvx/container installs are dramatically Pydantic AI agent.
Pick the extra that matches what the operator want to run:
Extra | Installs | Use when |
| Slim MCP server only ( | The operator only run the MCP server (smallest install / image) |
| Everything ( | Development / both surfaces |
# MCP server only (recommended for tool hosting — slim deps)
uv pip install "aris-mcp[mcp]"
# Everything (development)
uv pip install "aris-mcp[all]" # or: python -m pip install "aris-mcp[all]"Container images (:mcp)
One multi-stage docker/Dockerfile builds the MCP-only image (--target mcp):
Image tag | Build target | Contents | Entrypoint |
|
|
|
|
docker build --target mcp -t knucklessg1/aris-mcp:mcp docker/ # slim MCP serveragent (:1.3.1) with a co-located :mcp sidecar.
Knowledge-graph database (epistemic-graph)
transitively via scion-sdk). For production — or to share one knowledge graph
across multiple agents — run epistemic-graph as its own database container and point the
agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
config, and the full database architecture (with diagrams) are documented in the
epistemic-graph deployment guide.
The slim [mcp] server does not require the database.
Run
aris-mcp # stdio (default)
aris-mcp --transport streamable-http --host 0.0.0.0 --port 8000MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usearis-mcp[mcp]to add FastMCP / FastAPI throughscion-sdk; the required Scion SDK core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"aris-mcp": {
"command": "uvx",
"args": [
"--from",
"aris-mcp[mcp]",
"aris-mcp"
],
"env": {
"ARISTOOL": "True",
"ARIS_API_BASE": "http://localhost/abs/api",
"ARIS_ENABLE_WRITE": "False"
}
}
}
}Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"aris-mcp": {
"command": "uvx",
"args": [
"--from",
"aris-mcp[mcp]",
"aris-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"ARISTOOL": "True",
"ARIS_API_BASE": "http://localhost/abs/api",
"ARIS_ENABLE_WRITE": "False"
}
}
}
}Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"aris-mcp": {
"url": "http://localhost:8000/aris-mcp/mcp"
}
}
}Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e ARISTOOL=True \
-e ARIS_API_BASE=http://localhost/abs/api \
-e ARIS_ENABLE_WRITE=False \
registry.example.invalid/aris-mcp@sha256:<digest> aris-mcpFor containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (package vars) — do not edit.
Deployment
stdio —
uv run aris-mcp(seemcp_config.json).streamable-http —
aris-mcp --transport streamable-http --port 8000.local container — build from
docker/and run with the env above.remote — point the operator's client at
https://aris-mcp.example.invalid/mcp.
Deploy with agent-os-genesis
This package can be provisioned for you — skill-guided — by the agent-os-genesis
universal skill (its single-package deploy mode): it picks your install method, seeds
secrets to OpenBao/Vault (or .env), trusts your enterprise CA, registers the MCP
server, and verifies it — the same machinery that stands up the whole Agent OS, narrowed
to just this package. Ask your agent to "deploy aris-mcp with agent-os-genesis".
Install mode | Command |
Bare-metal, prod (PyPI) |
|
Bare-metal, dev (editable) |
|
Container, prod | deploy |
Container, dev (editable) | deploy |
Secrets are read-existing + seeded via vault_sync — you are only prompted for what's missing.
Governed capability contract
This package ships a compact canonical skill surface with specialist procedures
kept as referenced workflows. The current MCP tools, skill metadata,
connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations,
tool-schema fingerprints, and certification metadata form one versioned
capability contract. Validate them together; do not rely on stale tool names or
historical per-task skill wrappers.
Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.
Available Tools
9 toolsaris_get_modelGet modelBRead-onlyIdempotent
Get a single model's metadata (including its attributes).
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, covering the safety profile. The description adds only that attributes are included in the returned metadata, with no permission, rate-limit, or return-shape detail beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every clause contributes directly to the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with rich annotations and no output schema, the description gives enough context to call the tool. It omits parameter documentation and does not detail the returned metadata structure, keeping it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole required parameter, model_id, is not explained in the description. The phrase 'a single model's metadata' implies an identifier is expected but provides no format or syntax guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('model's metadata') with singular scope ('a single model'), which distinguishes it from plural list siblings such as aris_list_models. It does not explicitly differentiate from attribute-listing siblings like aris_list_model_attributes, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternatives. The agent must infer from the getter name and 'single model' phrasing that this is used to retrieve one model's metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_ingest_model_exportAris Ingest Model ExportB
Store a raw ARIS model export (bytes) as a content-addressed KG blob.
The export bytes are supplied base64-encoded (rendered/exported out-of-band by
the caller), stored via MediaStore as a :Blob + :ModelExport node linked to
its :ProcessModel. Best-effort no-op when no engine is reachable.
CONCEPT:AU-KG.ingest.list-durable-media.
| Name | Required | Description | Default |
|---|---|---|---|
| params_json | No | JSON args to store a raw model export blob as a :ModelExport (:MediaAsset): {"model_id":.., "data_b64":<base64 bytes>, "mime_type":"application/xml", "model_name":.., "export_format":"bpmn|aml|svg|pdf"}. | {} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses content-addressed storage, the base64 input contract, the KG linkage to :ProcessModel, and importantly the 'best-effort no-op when no engine is reachable' silent-failure mode. It omits auth/permission requirements and the returned value, so it is not fully complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded, and each sentence adds distinct information (storage semantics, input contract, failure mode). Dense internal jargon like ':Blob + :ModelExport node' slightly hurts readability but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should ideally state what the call returns (a blob/asset id) and any auth prerequisites. It covers storage and failure behavior well but leaves the return value and permission model unstated, which is a meaningful gap for an ingest operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the params_json description already enumerates every field (model_id, data_b64, mime_type, model_name, export_format). The prose adds context that the bytes are base64 and out-of-band, but no syntax or field meaning beyond the schema, so the 3 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Store a raw ARIS model export ... as a content-addressed KG blob') and names the concrete node types it creates (:Blob + :ModelExport linked to :ProcessModel). This clearly separates it from read/list siblings like aris_get_model and aris_list_models, though it does not explicitly contrast with the singular-plural sibling aris_ingest_models.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes bytes are 'rendered/exported out-of-band by the caller', which hints at the precondition, but never says when to choose this tool over aris_ingest_models or the attribute-setting siblings. There are no exclusions or alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_ingest_modelsAris Ingest ModelsB
Natively ingest ARIS models into epistemic-graph as typed nodes.
Lists via the real ARIS client and pushes typed OWL nodes + links through the
fast engine client. Best-effort: returns {"ingested": None} when no engine
is reachable. CONCEPT:AU-KG.ingest.enterprise-source-extractor.
| Name | Required | Description | Default |
|---|---|---|---|
| params_json | No | JSON args. Empty/omit → ingest the whole model inventory as :ProcessModel nodes. {"model_id":..} → ingest ONE model with its EPC objects (:EPCFunction/:EPCEvent/:EPCRule) + control-flow (:flowsTo) connections. list filters may be passed alongside. | {} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a genuinely useful behavioral trait — best-effort semantics and the exact failure payload {"ingested": None} when no engine is reachable. It omits other important traits for a graph-writing tool: whether ingestion is idempotent, whether it overwrites/deletes existing nodes, and any permission or rate-limit constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the failure behavior are front-loaded in tight sentences. The trailing 'CONCEPT:AU-KG.ingest.enterprise-source-extractor' tag is opaque jargon that costs a line without helping an agent decide or invoke.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the purpose, the underlying clients, and the failure mode, which is decent. It still leaves the agent without any idempotency, overwrite, or permission context, so it is only marginally complete for the risk profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's schema text already explains both the empty/default (whole inventory) and model_id (single model with EPC objects and flowsTo edges) modes in detail. The description adds no syntax or format meaning beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (ingest) plus the resource (ARIS models) and the destination (epistemic-graph as typed nodes), which is far more informative than the tautological title. It does not, however, explicitly distinguish itself from the sibling aris_ingest_model_export, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use/when-not guidance and no routing to alternatives. The only usage signal is buried in the params_json schema description (empty → whole inventory, model_id → one model), and even that is parameter behavior 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.
aris_list_model_attributesList model attributesBRead-onlyIdempotent
Get a model's attributes (used for writeback idempotency read-back).
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the non-obvious context that this is a read-back for writeback idempotency, but says nothing about return shape or behavior when the model_id is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action and resource, and the parenthetical is compact. It earns its place, though the parenthetical could have been spent on more actionable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no parameter documentation, so the description bears more burden than it carries. For a simple read-only list tool with full annotations this is minimally adequate, but it does not say what attributes are returned or how errors are surfaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one parameter (model_id) with no description. The phrase 'a model's attributes' implies the parameter identifies the target model, which is marginal added meaning but gives no format, source, or lookup guidance for the id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource (get a model's attributes) and adds a parenthetical purpose (writeback idempotency read-back). It is distinguishable from the write counterpart aris_set_model_attributes, but it does not explicitly contrast with read siblings such as aris_get_model, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'used for writeback idempotency read-back' implies the scenario in which this is the right tool, which is more than nothing. However, it names no alternative and gives no explicit when/when-not conditions versus aris_get_model or aris_list_model_objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_list_model_connectionsList model connectionsBRead-onlyIdempotent
List the directed control-flow connections between a model's objects.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds domain value by specifying the connections are 'directed control-flow' rather than generic links, but says nothing about result shape, size, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the same brevity contributes to the gaps in usage and parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with annotations covering safety, the description is close to sufficient, but with no output schema and no parameter documentation it leaves the agent without any hint of what comes back or how the single required argument is used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter (model_id) with 0% schema description coverage, so the schema does not compensate. The phrase 'a model's objects' implies the parameter scopes to a single model, but the description never mentions model_id, its format, or whether it is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('directed control-flow connections between a model's objects'). This is naturally distinguishable from aris_list_model_objects and aris_list_model_attributes, though it never names those siblings to reinforce the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the other aris_list_* tools or aris_get_model, and no prerequisites (e.g., model must exist or be ingested first). The agent must infer the right tool from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_list_model_objectsList model objectsBRead-onlyIdempotent
List the EPC objects (functions/events/rule operators) of a model.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description's only added behavioral value is clarifying the scope of returned entities (EPC functions/events/rule operators); it says nothing about pagination, volume, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope qualifier is placed directly on the resource it modifies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool whose annotations carry the safety profile and with no output schema to explain, the description is adequate on purpose but silent on the one parameter it requires and on return shape/pagination. Minimum viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one required parameter, model_id. The description never explains what a model_id is, its format, or how to obtain one (e.g., from aris_list_models), so it does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus resource (EPC objects of a model), and it enumerates what counts as an object (functions/events/rule operators). That enumeration implicitly separates it from siblings like aris_list_model_connections and aris_list_model_attributes, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the alternatives (list_model_attributes, list_model_connections, get_model) that an agent would need to choose between. Usage is only inferable from the name and the required model_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_list_modelsList modelsBRead-onlyIdempotent
List models in the tenant/database (process + architecture).
| Name | Required | Description | Default |
|---|---|---|---|
| params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description's remaining contribution is that the listing spans both process and architecture models within the tenant/database scope, which is genuinely useful context but thin. It says nothing about result size, pagination, or filtering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scope front-loaded and zero filler. It is appropriately short for a simple list tool, though the parenthetical at the end is the only place any real information is added.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless-in-practice list tool with no output schema, the description is minimally adequate. However, it leaves the opaque params object unexplained and gives no indication of result structure or volume, so an agent still lacks information needed to call it optimally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional 'params' parameter is an opaque object (additionalProperties: true) with 0% schema description coverage, and the description never mentions it. With schema coverage this low, the description is expected to compensate, but it gives no hint about what the params object accepts or how it filters the listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (models) and scopes it to the tenant/database, plus clarifies the model types covered (process + architecture). This distinguishes it from the ingest/set siblings, though it does not explicitly contrast with aris_get_model or the other aris_list_model_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided. The description never says when to enumerate models versus fetching one with aris_get_model, nor when to reach for aris_list_model_objects or aris_list_model_attributes instead. Usage is only weakly implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_set_model_attributesSet model attributesCIdempotent
Write/update attributes on a model (e.g. the kg_intelligence blob).
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ||
| attributes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the description need not restate the safety profile. The example ('kg_intelligence blob') adds a small amount of domain context about the attribute payload, but the description does not clarify merge-vs-replace semantics, permissions, or other behavioral details beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though its extreme brevity leaves important details unstated, which is a completeness issue rather than a conciseness one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that writes an arbitrary nested attributes object with zero schema descriptions and no output schema, the description is inadequate. It provides only a lone example and omits parameter details, write behavior, and any operational guidance, though annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden of explaining parameters, yet it gives only a vague example attribute name. It does not describe the model_id format, the shape of the attributes object, or which fields are required, leaving both required parameters effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Write/update) and resource (attributes on a model), making the tool's purpose immediately clear. It does not explicitly differentiate from siblings like aris_set_object_attributes, but the model-vs-object scope is inferable from the name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only says what it does, leaving the agent to infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aris_set_object_attributesSet object attributesCIdempotent
Write/update attributes on a single object.
| Name | Required | Description | Default |
|---|---|---|---|
| object_id | Yes | ||
| attributes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so 'write/update' is largely redundant with structured data. The description contributes no additional behavior — no merge-vs-replace semantics, no auth/permission requirements, no note on what happens to unlisted attributes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short front-loaded sentence with no filler or repetition. The brevity is earned structurally, though it is under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with a nested open-ended object parameter, no output schema, no schema descriptions and only one line of prose, an agent lacks the information needed to call it confidently. The mutation semantics and attribute format are the main missing pieces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the two parameters are undocumented: object_id's expected identifier form and the attributes object's key/value shape and naming convention are unexplained. Critically, the description never says whether attributes are merged into existing ones or replace them, which is the single most consequential semantic for a 'set' tool with a free-form nested object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (write/update) and resource (attributes on a single object), and the scope word 'single object' separates it from the sibling aris_list_model_objects and from the model-level aris_set_model_attributes. It's clear enough to route on, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g., must the object already exist, does it need a lock/checkout), and no mention of how this differs from aris_set_model_attributes or the list_* readers. The agent is left to infer everything from the name.
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.
9 tool updates
v1.3.1- First observed
aris_get_model - First observed
aris_ingest_model_export - First observed
aris_ingest_models - First observed
aris_list_model_attributes - First observed
aris_list_model_connections - First observed
aris_list_model_objects - First observed
aris_list_models - First observed
aris_set_model_attributes - First observed
aris_set_object_attributes
TDQS
Scored across 9 tools
Most tools target distinct resource+action pairs (list models, list objects, list connections, set attributes), so selection is generally clear. However, aris_get_model (metadata including attributes) overlaps meaningfully with aris_list_model_attributes, and the two ingest tools (ingest_models vs ingest_model_export) require reading descriptions to distinguish bulk ingestion from blob storage.
All tools use a consistent snake_case aris_ prefix followed by verb_noun patterns (aris_list_models, aris_get_model, aris_set_model_attributes). The convention is predictable throughout, with only minor stylistic variance in the longer ingest names.
Nine tools is well-scoped for an ARIS-to-KG bridge: reads, writes, and ingestion paths each have a clear purpose. No tool appears redundant enough to remove, and nothing feels thin.
The surface covers listing models, inspecting metadata/attributes/objects/connections, writing model and object attributes, and both bulk and blob ingestion. Minor gaps exist: no get_object or object-level create/delete, no model delete, and no tenant/database listing, but core ingestion and writeback workflows are covered.
Maintenance
Related MCP Connectors
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Connect AI assistants to your Tedix organization’s tasks, knowledge, apps, and results through MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to a team's product knowledge base, enabling search, capture, and navigation of glossary terms, business rules, decisions, and relations via MCP.48,393 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to read and modify Mendix application models through MCP tools for creating modules, entities, pages, microflows, deploying, and querying runtime data.1ISC
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to access unified development tools including code generation, documentation synchronization, test case rendering, and architecture graph queries through a single MCP server.-

opsenes-mcpofficial
AlicenseNot gradedqualityBmaintenanceConnects AI assistants to the Opsenes platform, exposing its capabilities as MCP tools, resources, and prompts for safe platform operations.MIT