Skip to main content
Glama

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 via ALIGNED_WITH and are reasoned over in OWL/RDF.

  • Outbound — the KG process-intelligence writeback (enrichment/process_writeback.py) uses set_model_attributes to write a kg_intelligence attribute back onto ARIS models (gated by ARIS_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

aris_ingest_model_export

intent

Store a raw ARIS model export (bytes) as a content-addressed KG blob.

aris_ingest_models

intent

Natively ingest ARIS models into epistemic-graph as typed nodes.

aris_model

intent

Work with ARIS models and their EPC structure.

aris_object

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_API_BASE

http://localhost/abs/api

ARIS REST base URL (tenant API root). Default follows the ARIS Connect ABS layout.

ARIS_TLS_PROFILE

—

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.

ARIS_TLS_PROFILE_REF

—

ARIS_OAUTH_URL

—

1. OAuth2 client-credentials (preferred for ARIS Cloud / Connect)

ARIS_CLIENT_ID

—

ARIS_CLIENT_SECRET

secret-injected

ARIS_TENANT

—

ARIS_TOKEN

secret-injected

2. Static bearer token (alternative to OAuth)

ARIS_USERNAME

—

3. HTTP basic auth (alternative)

ARIS_PASSWORD

secret-injected

ARIS_PATHS_JSON

—

Optional JSON overriding the default ARIS REST path templates per tenant e.g. {"models":"v2/repository/models","model_objects":"v2/models/{model_id}/objects"}

ARIS_ENABLE_WRITE

False

Allow (gated) attribute writes back onto ARIS models (KG writeback)

TRANSPORT

stdio

stdio, streamable-http, or sse

HOST

0.0.0.0

PORT

8000

MCP_ENABLED_TOOLS

—

Comma-separated tool / tag allow/deny lists

MCP_DISABLED_TOOLS

—

MCP_ENABLED_TAGS

—

MCP_DISABLED_TAGS

—

DEBUG

False

PYTHONUNBUFFERED

1

ARISTOOL

True

The action-routed ARIS tools (aris_model, aris_object) share this toggle.

ENABLE_OTEL

True

OTEL_EXPORTER_OTLP_ENDPOINT

—

OTEL_EXPORTER_OTLP_PROTOCOL

—

EUNOMIA_TYPE

none

EUNOMIA_POLICY_FILE

mcp_policies.json

EUNOMIA_REMOTE_URL

—

Inherited scion-sdk variables (apply to every connector)

Variable

Example

Description

MCP_CLIENT_AUTH

—

Outbound MCP child auth: oidc-client-credentials | basic | none

OIDC_CLIENT_ID

—

OIDC client id (service-account auth)

OIDC_CLIENT_SECRET_REF

secret://identity/oidc-client-secret

Runtime secret reference for the OIDC service account

MCP_BASIC_AUTH_USERNAME

—

HTTP Basic username (MCP_CLIENT_AUTH=basic)

MCP_BASIC_AUTH_PASSWORD_REF

secret://identity/mcp-basic-password

Runtime secret reference for HTTP Basic auth (MCP_CLIENT_AUTH=basic)

MCP_URL

http://localhost:8000/mcp

URL of the MCP server the agent connects to

PROVIDER

—

Operator-configured LLM provider for the agent

MODEL_ID

—

Operator-configured model id for the agent

ENABLE_WEB_UI

True

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_API_BASE

ARIS REST base URL (tenant API root)

http://localhost/abs/api

ARIS_TLS_PROFILE / ARIS_TLS_PROFILE_REF

named outbound TLS policy from AgentConfig; verification is mandatory

(empty, system trust)

ARIS_OAUTH_URL / ARIS_CLIENT_ID / ARIS_CLIENT_SECRET / ARIS_TENANT

OAuth2 client-credentials (preferred)

—

ARIS_TOKEN

static bearer token (alt to OAuth)

—

ARIS_USERNAME / ARIS_PASSWORD

HTTP basic (alt)

—

ARIS_PATHS_JSON

JSON overriding REST path templates per tenant

—

ARIS_ENABLE_WRITE

allow attribute writes

False

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

TRANSPORT

stdio, streamable-http, or sse

stdio

HOST

Bind host (HTTP transports)

0.0.0.0

PORT

Bind port (HTTP transports)

8000

MCP_TOOL_MODE

Tool surface: condensed, verbose, or both

condensed

MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

Comma-separated tool allow/deny list

—

MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

Comma-separated tag allow/deny list

—

DEBUG

Verbose logging

False

PYTHONUNBUFFERED

Unbuffered stdout (recommended in containers)

1

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_OTEL

Enable OpenTelemetry export

True

OTEL_EXPORTER_OTLP_ENDPOINT

OTLP collector endpoint

—

OTEL_EXPORTER_OTLP_PUBLIC_KEY / OTEL_EXPORTER_OTLP_SECRET_KEY

OTLP auth keys

—

OTEL_EXPORTER_OTLP_PROTOCOL

OTLP protocol (e.g. http/protobuf)

—

EUNOMIA_TYPE

Authorization mode: none, embedded, remote

none

EUNOMIA_POLICY_FILE

Embedded policy file

mcp_policies.json

EUNOMIA_REMOTE_URL

Remote Eunomia server URL

—

Agent CLI (full [agent] runtime only)

Variable

Description

Default

MCP_URL

URL of the MCP server the agent connects to

http://localhost:8000/mcp

PROVIDER

LLM provider (e.g. openai)

openai

MODEL_ID

Model id (e.g. gpt-4o)

gpt-4o

ENABLE_WEB_UI

Serve the AG-UI web interface

True

Installation

Install the slim [mcp] extra. Install aris-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), so uvx/container installs are dramatically Pydantic AI agent.

Pick the extra that matches what the operator want to run:

Extra

Installs

Use when

aris-mcp[mcp]

Slim MCP server only (scion-sdk — FastMCP/FastAPI)

The operator only run the MCP server (smallest install / image)

aris-mcp[all]

Everything (mcp + agent + logfire)

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

knucklessg1/aris-mcp:mcp

--target mcp

aris-mcp[mcp] — slim, no engine/pydantic-ai/dspy/llama-index/tree-sitter

aris-mcp

docker build --target mcp   -t knucklessg1/aris-mcp:mcp    docker/   # slim MCP server

agent (: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 8000

MCP Configuration Examples

Install the connector-focused [mcp] extra. Examples use aris-mcp[mcp] to add FastMCP / FastAPI through scion-sdk; the required Scion SDK core still carries epistemic-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-mcp

For 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

  1. stdio — uv run aris-mcp (see mcp_config.json).

  2. streamable-http — aris-mcp --transport streamable-http --port 8000.

  3. local container — build from docker/ and run with the env above.

  4. 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)

uvx aris-mcp · or uv tool install aris-mcp

Bare-metal, dev (editable)

uv pip install -e ".[all]" · or pip install -e ".[all]"

Container, prod

deploy knucklessg1/aris-mcp:1.3.1 via docker-compose / swarm / podman / podman-compose / kubernetes

Container, dev (editable)

deploy docker/compose.dev.yml (source-mounted at /src; edits live on restart)

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 tools
aris_get_modelGet modelB
Read-onlyIdempotent

Get a single model's metadata (including its attributes).

NameRequiredDescriptionDefault
model_idYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
params_jsonNoJSON 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

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
params_jsonNoJSON 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

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

Purpose4/5

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.

Usage Guidelines2/5

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 attributesB
Read-onlyIdempotent

Get a model's attributes (used for writeback idempotency read-back).

NameRequiredDescriptionDefault
model_idYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 connectionsB
Read-onlyIdempotent

List the directed control-flow connections between a model's objects.

NameRequiredDescriptionDefault
model_idYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 objectsB
Read-onlyIdempotent

List the EPC objects (functions/events/rule operators) of a model.

NameRequiredDescriptionDefault
model_idYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 modelsB
Read-onlyIdempotent

List models in the tenant/database (process + architecture).

NameRequiredDescriptionDefault
paramsNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 attributesC
Idempotent

Write/update attributes on a model (e.g. the kg_intelligence blob).

NameRequiredDescriptionDefault
model_idYes
attributesYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 attributesC
Idempotent

Write/update attributes on a single object.

NameRequiredDescriptionDefault
object_idYes
attributesYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 9 tool updatesv1.3.1
    • First observedaris_get_model
    • First observedaris_ingest_model_export
    • First observedaris_ingest_models
    • First observedaris_list_model_attributes
    • First observedaris_list_model_connections
    • First observedaris_list_model_objects
    • First observedaris_list_models
    • First observedaris_set_model_attributes
    • First observedaris_set_object_attributes

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to read and modify Mendix application models through MCP tools for creating modules, entities, pages, microflows, deploying, and querying runtime data.
    1
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects AI assistants to the Opsenes platform, exposing its capabilities as MCP tools, resources, and prompts for safe platform operations.
    MIT