Skip to main content
Glama

mcp-archimate

CI PyPI Python License: GPL v3

An MCP server that lets an AI agent build, validate and export real ArchiMate models — the kind that open in Archi and survive a round trip.

It exposes 45 tools, 9 resources and 4 guided prompts over stdio. The agent describes architecture; the server enforces what ArchiMate actually permits, lays out the diagrams, and writes the file.

"Model our order-to-cash flow, then export it so I can open it in Archi."

Why this exists

Asking a model to emit ArchiMate XML directly produces files that look plausible and fail to open. Relationship types are invented, ids do not resolve, diagrams have no coordinates.

This server closes that gap. It holds the model in memory, refuses invalid relationships with the valid alternatives attached, positions every node and routes every connection, and serialises through pyArchimate rather than string templating. It owns zero ArchiMate rules of its own — every validity verdict is delegated to pyArchimate's relationship matrix (ArchiMate 3.2-compatible), so it cannot drift into a private dialect.

The division of labour is deliberate: the server is a constraint engine, the agent is the architect. It will tell you a BusinessProcess cannot serve an ApplicationService and what can; it will not decide what your architecture should be.

Related MCP server: arcade-azure-devops-mcp

Install

Nothing to clone. With uv:

uvx mcp-archimate

That runs the server over stdio, which is what an MCP client wants. Running it in a terminal by hand will just sit there waiting for JSON-RPC — that is correct.

Alternatives:

pipx run mcp-archimate
pip install mcp-archimate

Requires Python 3.10 or newer.

Connect it to a client

Claude Code:

claude mcp add archimate -- uvx mcp-archimate

Claude Desktop — in claude_desktop_config.json:

{
  "mcpServers": {
    "archimate": {
      "command": "uvx",
      "args": ["mcp-archimate"]
    }
  }
}

Codex — in ~/.codex/config.toml:

[mcp_servers.archimate]
command = "uvx"
args = ["mcp-archimate"]

MCP Inspector:

npx @modelcontextprotocol/inspector uvx mcp-archimate

No API keys and no configuration file. The only environment variables it reads are the two optional filesystem roots described under Security considerations; unset, they default to your home directory.

Example prompts

You talk to your agent in plain language; it picks the tools. The tool names below are just what it will reach for, so you can follow along.

Everything here is copy-pasteable. Start with the first one.

Build something small

Create an ArchiMate model of a customer onboarding process. Cover the business
layer (the customer, the onboarding process, the identity check) and the
application layer (the onboarding portal and an identity verification service).
Connect them properly, put it in one view, lay it out, and export it so I can
open it in Archi.

Uses create_empty_modeladd_elementadd_relationshipcreate_viewauto_layout_viewexport_model_to_file.

Explore a model you already have

Load ~/models/enterprise.archimate and tell me what's in it: how big it is,
what's in each layer, and whether anything is broken.

load_model_from_file loads and inspects in one call, so the agent gets counts, validation state and view summaries immediately.

Follow-ups worth asking:

Which elements aren't used in any view?
Show me everything that depends on the payment service.

Edit an existing model

The common case after the first build. Be specific about what to change and the agent will make a focused edit rather than rebuilding.

Add a "Fraud Screening" application service to the model, have it serve the
checkout process, and host it on the same node as the payment service. Then
re-lay-out the views it appears in.
Rename "Cust Mgmt Svc" to "Customer Management Service" everywhere, and give it
a proper description explaining what it does.
The order service and the inventory service are connected with a Serving
relationship, but it should be asynchronous. Change it to a Flow relationship
and tell me if that's actually valid ArchiMate.

That last one is worth trying — the server will tell you which relationship types are legal between those two element types, with alternatives, rather than silently accepting something Archi will reject.

Improve a model

Review this model for quality problems and fix the ones that are safely
fixable. Explain anything you can't fix automatically and why.

Uses build_quality_reportrepair_semantic_issues. The server only auto-repairs deterministic cases; anything needing an architectural decision is reported back to you rather than guessed at.

Every view in this model is a wall of boxes. Add layer bands, lay everything
out again, and add notes explaining what each view is for.
Some of my relationships aren't shown in any view. Find them and add a coverage
view so nothing is hidden.

Validate and export

Check the model for problems, then export it to ~/Desktop/architecture.archimate
in Archi's native format with a strict quality gate so it won't write a broken
file.

quality_gate="strict" blocks the export on visual, semantic or coverage failures — useful when the file is going to someone else.

To look at a diagram without opening Archi:

Render the Application Cooperation view to an SVG on my Desktop.

A full build

A single prompt that exercises most of the server. Expect it to take a few minutes and make a lot of tool calls.

Create an ArchiMate model representing a realistic composite ecommerce
architecture (not tied to a real company). Use the archimate MCP tools. Scope:

- Business layer: Customer / Warehouse Staff / Support Rep actors with roles,
  core processes (browse, cart, checkout, payment, fulfillment, support),
  business services, and key business objects (order, customer account).
- Application layer: microservices — storefront web app, API gateway, and one
  component + service pair per capability (catalog, search, cart, checkout,
  payment, order management, inventory, shipping, notification, customer
  support), plus their data objects.
- Technology layer: cloud infrastructure — container orchestration, a database
  per service that needs one, a cache, a message broker for async events, a
  load balancer / CDN, and an external payment gateway node.
- Relationships: standard ArchiMate conventions (ApplicationService serves
  BusinessProcess, Component realizes Service, Node serves Component for
  hosting, Access for data reads/writes, Flow for async events). Validate with
  semantic_validation='strict' and fix any invalid combinations using the
  suggested repairs.
- Views: Business Process View, Application Cooperation View, Technology
  Deployment View, and a Layered Overview showing one cross-layer slice (the
  checkout journey end to end). Auto-layout each view with layer bands.
- Run ensure_all_relationships_in_views, build_quality_report and
  validate_model before exporting. Export with quality_gate='strict'.

Add descriptions and annotations throughout.

Skip the clarifying questions — go straight to building.

The last line matters. Without it a good agent will stop and ask you to narrow the scope, which is usually the right instinct but not what you want here.

A note for agents

Call get_usage_guide first. It returns the operating rules, common anti-patterns and recommended call sequences — it exists so an agent does not have to read this server's source code to work out how to use it.

What's in the box

Model (17 tools)

create, load, export, metadata, quality reports, TOGAF readiness

Views (12 tools)

create views, add nodes, auto-layout, layer bands, diagram notes, SVG rendering

Relationships (7 tools)

create, validate, compatibility lookup, intent-based recommendation, deterministic repair

Elements (4 tools)

add, update, delete, query

Workflow (3 tools)

usage guide, load-and-inspect, inspect active model

Queries (2 tools)

filtered search across the model

Resources (6 + 3 templates)

read-only views of the model under pyarchimate://activemodel/...; the three templated ones are returned by resources/templates/list

Prompts (4)

guided load → inspect → edit → validate → export workflows

Full parameter and response documentation is in the User Guide.

Two export formats — they are not interchangeable

output_format

Produces

In Archi

"archi"

Archi's native .archimate

Opens directly

"archimate" (default)

Open Group exchange XML

Must be imported

SVG is not a third format. render_view_to_svg_file writes a picture for a human to look at; it carries no model semantics and cannot be loaded back.

Layout

Diagrams are laid out, not just populated: nodes are placed in ArchiMate layer order with lane wrapping and barycenter alignment, multi-layer views get labelled layer bands, and connections are routed around obstacles rather than drawn as diagonals through boxes.

Security considerations

Two things are worth knowing before you point an agent at this server. The full picture, including how to report a vulnerability, is in SECURITY.md.

The file tools are confined to allowed roots. load_model_from_file reads, and export_model_to_file and render_view_to_svg_file write, only inside the directories named by MCP_ARCHIMATE_ALLOWED_READ_ROOTS and MCP_ARCHIMATE_ALLOWED_WRITE_ROOTS. Unset, both default to your home directory, which keeps the quickstarts above working while putting /etc, system locations and other users' files out of reach. Paths are fully resolved first, so .. and symlinks cannot escape. Set the variables to a dedicated models directory to narrow it further — with the home default, ~/.ssh is still readable. This is not a sandbox: the server runs as the account that launched it, and exports still overwrite without prompting inside an allowed root. It exists because the caller here is usually an LLM agent rather than a person typing a path, so treat a path argument the way you would treat a shell command an agent proposed. For a hard boundary, run the server in a container or under a dedicated account.

Model files are untrusted input. The loader rejects DTDs and entity declarations outright, parses with external entity resolution and network access disabled, caps content at 10 MB and allow-lists the root element — so XXE and entity-expansion attacks are blocked, and this is verified adversarially in tests/test_security.py rather than assumed. What it cannot block is prompt injection: element names, documentation and properties are attacker-controllable text that flows back to your agent. Treat model content as data, never as instructions.

The server makes no network requests, collects no telemetry, and needs no credentials of any kind.

Documentation

Document

For

User Guide

Everyone. Tool parameters, response schemas, workflows, troubleshooting

Technical Architecture

Contributors. Design, layers, pyArchimate usage patterns

Layout Improvement Plan

Layout work. Measurements and rejected approaches

Quality & Validation PRD

The validation tool suite and the constraint-engine split

CHANGELOG

What changed, newest first

CONTRIBUTING

Setup, branch model, how to propose changes

SECURITY

Trust model and vulnerability disclosure

Decision records

Architecture decision records — why things are the way they are

Development

git clone https://github.com/byrondelgado/mcp-archimate.git
cd mcp-archimate
uv sync --all-groups

uv run pytest
uv run ruff check
uv run mcp dev pyarchimate_mcp_server/server.py   # with MCP Inspector

See CONTRIBUTING.md for the branch model and conventions, and CLAUDE.md for the repository's operating contract — it documents several things that look like mistakes and are not.

Credits

This server is built on pyArchimate by Xavier Mayeur, which does the actual ArchiMate modelling work. Every model this server creates, reads, lays out, validates and exports passes through it. If this project is useful to you, pyArchimate is the reason.

License

GPL-3.0-or-later. See LICENSE for the full text and NOTICE for attribution.

This is inherited, not chosen. pyArchimate is GPL-3.0-only and is a required runtime dependency — the server cannot function without it — so the combined work you actually run is governed by the GPL. Releasing this server under permissive terms would misrepresent that.

What this means in practice:

  • Using the server does not put your models under the GPL. The .archimate and exchange files you produce are your own work, exactly as documents written in a GPL text editor are.

  • It does not reach the agent or client that calls it. An MCP server is a separate process communicating over stdio JSON-RPC. Copyleft attaches to distributing this program, not to software that talks to it across that boundary.

  • It does apply if you distribute a modified version of this server, or ship it inside something you distribute. Then the GPL's source-availability terms apply to that work.

This is a plain-language summary, not legal advice. Read the license, and take your own advice if the distinction matters to your situation.


ArchiMate is a registered trademark of The Open Group. This project is an independent implementation, not affiliated with or endorsed by The Open Group or the Archi project.

Available Tools

45 tools
add_connections_to_viewA

Add multiple visual connections to a view in one call.

Each connection item supports the same fields as
`add_connection_to_view`. Both short and long field names are
accepted (`relationship` or `relationship_id`, `id` or
`connection_id`).

Connection item shape:
    ```
    {
      "id": "id-uses-conn",          # optional stable ref
      "relationship": "id-uses"      # required (alias: relationship_id)
    }
    ```

Args:
    view_id: ID of the target view.
    connections: List of connection item objects.
    rollback_on_error: When true (default), restore the previous
        view state if any item fails.

Returns:
    Success envelope with `data.connection_ids`, `data.count`, and
    `data.rollback_on_error`.

Errors:
    `ModelOperationError` and `RelationshipNotFoundError` for the
    first failing item.
ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYes
connectionsYes
rollback_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations (which already indicate non-read-only, non-destructive), the description adds critical behavioral details: rollback_on_error behavior, return envelope structure, and error types. No contradiction with annotations.

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 well-structured with sections for purpose, connection item details, Args, Returns, and Errors. Every sentence adds value, and it is front-loaded with the core action.

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

Completeness5/5

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

Given the tool's moderate complexity (3 parameters, output schema exists), the description covers all essential aspects: input, return fields, and error conditions. The presence of an output schema reduces the need for detailed return documentation, but the description provides it anyway.

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

Parameters5/5

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

The input schema has no descriptions (0% coverage), but the description fully explains each parameter, including the complex 'connections' item shape, default value and effect of rollback_on_error, and the syntax for field aliases.

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

Purpose5/5

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

The description clearly states the tool adds multiple visual connections to a view, using a specific verb ('Add') and resource ('visual connections to a view'), distinguishing it from the sibling add_connection_to_view.

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

Usage Guidelines4/5

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

The description references the sibling add_connection_to_view by stating that each connection item supports the same fields, implying batch vs single usage. However, it lacks explicit 'when to use' or 'when not to use' guidance, though the context is clear.

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

add_connection_to_viewA

Add a visual connection for a relationship in a view.

Both endpoint elements of the relationship must already be visible
as nodes in the view. Use `add_node_to_view` to add missing
endpoints first, or call `connect_visible_relationships` to draw
every relationship whose endpoints are already visible.

Args:
    view_id: ID of the target view.
    relationship_id: ID of the relationship to render.
    connection_id: Optional stable visual connection ID. When
        omitted a UUID is generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.

Returns:
    Success envelope with `data.connection_id` containing the
    visual connection UUID.

Errors:
    `ModelOperationError` when `view_id` is unknown, when either
        endpoint node is not present in the view, or when
        `connection_id` is duplicated.
    `RelationshipNotFoundError` when `relationship_id` is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYes
connection_idNo
relationship_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Discloses behavioral traits beyond annotations: connection_id uniqueness across entire active model (with namespace suggestion), required preconditions, and detailed error cases. Annotations indicate mutability but description adds specific mutation details without contradiction.

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?

Well-structured with Args, Returns, Errors sections. Front-loaded with core purpose. Slightly lengthy due to detailed uniqueness paragraph but all content is necessary and earns its place.

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

Completeness5/5

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

Complete for a mutation tool with 3 params and output schema mentioned. Covers preconditions, return value, error types, and unique constraint. No gaps found.

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

Parameters5/5

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

Despite 0% schema coverage, the description thoroughly explains all three parameters: view_id, relationship_id, and optional connection_id including uniqueness constraints and namespace recommendation. Adds significant meaning beyond the schema.

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

Purpose5/5

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

Clearly states 'Add a visual connection for a relationship in a view' – specific verb (add) and resource (connection) with scope. Distinguishes from sibling tools 'connect_visible_relationships' and 'add_node_to_view' by explaining preconditions and alternatives.

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

Usage Guidelines5/5

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

Explicitly says both endpoints must already be visible, and directs to use 'add_node_to_view' to add missing endpoints or 'connect_visible_relationships' as an alternative. Provides clear when-to-use guidance and exclusions.

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

add_elementA

Add a new ArchiMate element to the active model.

Call `list_supported_types` to discover valid `element_type` values
if you are not certain. The response `data.id` is the canonical
element ID; use it as `source_id`/`target_id` when adding
relationships and as `element_id` when adding view nodes.

Args:
    element_type: A supported ArchiMate element type, e.g.
        `BusinessActor`, `BusinessProcess`, `ApplicationComponent`,
        `ApplicationService`, `DataObject`, `Node`, `Artifact`,
        `Goal`, `Stakeholder`, `Grouping`, `AndJunction`,
        `OrJunction`. Use `list_supported_types` for the full list.
    name: Element name. Must be a non-empty string.
    description: Optional element documentation text.
    folder_path: Optional conceptual folder path. Roots are
        normalized: `Business`, `/Business`, and `business` resolve
        to `/Business`. Sub-folders such as `/Business/Actors` are
        preserved.
    properties: Optional custom property key-value pairs. Values are
        stored as strings.
    element_id: Optional stable element ID. When omitted a UUID is
        generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.

Returns:
    Success envelope with `data` shaped like an `ElementDetail`:
    `{id, name, type, description, properties, folder,
    incoming_relationship_ids, outgoing_relationship_ids}`.

Errors:
    `INVALID_ELEMENT_NAME` when `name` is missing or blank.
    `InvalidElementTypeError` for an unknown `element_type`.
    `ModelNotFoundError` if no model is active.
    `ModelOperationError` for a duplicate `element_id` or invalid
    folder path.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
element_idNo
propertiesNo
descriptionNo
folder_pathNo
element_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Provides extensive behavioral details beyond annotations: describes element creation behavior, folder path normalization, element_id uniqueness constraints and collision rejection, and lists all four error conditions. Annotations (readOnlyHint=false, destructiveHint=false) are consistent with the description's creation semantics.

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 well-structured with clear sections for args, returns, and errors, and uses bullet-like formatting for readability. It is somewhat verbose but every sentence adds value; minor redundancy in error enumeration could be streamlined.

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

Completeness5/5

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

Given 6 parameters, a rich output schema (described), and no gaps in usage or error documentation, the description is fully complete. Covers purpose, parameter details, return shape, and error conditions without leaving the agent guessing.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates: it explains each parameter's purpose, constraints (e.g., name must be non-empty), examples for element_type, normalization details for folder_path, and namespace advice for element_id. This is far beyond baseline given the coverage gap.

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

Purpose5/5

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

Clearly states the verb ('Add') and resource ('new ArchiMate element'), specifies the scope ('to the active model'), and distinguishes from siblings (e.g., 'add_elements' for batch, 'list_supported_types' for discovery) through explicit cross-reference.

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

Usage Guidelines4/5

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

Explicitly advises using 'list_supported_types' when uncertain about element types, and explains how to use the returned ID for relationships and view nodes. However, lacks explicit when-not-to-use guidance (e.g., versus 'add_elements') and does not state the prerequisite of an active model directly, though errors hint at it.

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

add_elementsA

Add multiple elements to the active model in one call.

Each element item supports the same fields as `add_element`. Both
short and long field names are accepted (`type` or `element_type`,
`id` or `element_id`).

IDs are unique across the **entire active model**, not per call,
per batch, or per concept type. Splitting a build across several
batches does not give each batch its own id space, so namespace
generated ids (`bp-`, `ac-`, `tech-`) rather than restarting the
same naming pattern in each one.

Element item shape:
    ```
    {
      "id": "id-customer",        # optional stable ref
      "name": "Customer",          # required
      "type": "BusinessActor",     # required (alias: element_type)
      "description": "...",       # optional
      "folder_path": "/Business", # optional
      "properties": {"k": "v"}     # optional
    }
    ```

Args:
    elements: List of element item objects.
    rollback_on_error: When true (default), restore the previous
        model state if any item fails. Set to false to keep partial
        results.

Returns:
    Success envelope with `data.elements` (list of `ElementDetail`),
    `data.count`, and `data.rollback_on_error`.

Errors:
    `ModelNotFoundError`, `InvalidElementTypeError`,
    `ModelOperationError` for the first failing item.
ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYes
rollback_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=false (write), destructiveHint=false, openWorldHint=false. The description adds critical behavioral context: rollback_on_error restores state, IDs are unique across the model, and error behavior stops at first failure. There is no contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with sections for description, args, returns, and errors. It front-loads key purpose details. It is slightly verbose with the element item shape example but remains focused and informative.

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

Completeness5/5

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

The tool has 2 parameters, no schema descriptions, but has an output schema mentioned. The description covers returns (data.elements, count, rollback_on_error) and specific error types. For a batch operation with rollback, this is a complete and self-contained description.

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

Parameters5/5

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

Schema coverage is 0%, so description carries full burden. It thoroughly explains the `elements` parameter structure, field aliases (type/element_type, id/element_id), required fields, and the `rollback_on_error` default. This adds substantial meaning beyond the schema's minimal definitions.

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

Purpose5/5

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

The description clearly states it adds multiple elements to the active model in one call. It distinguishes from the sibling tool `add_element` by noting it supports the same fields for each item but allows multiple items at once, making the purpose specific and distinguishable.

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

Usage Guidelines4/5

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

The description provides explicit guidance on ID uniqueness across the entire model, warning against reusing naming patterns across batches. It also mentions the rollback behavior and error handling. While it does not explicitly state when not to use this tool versus `add_element`, the context of batch addition is clear.

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

add_nodes_to_viewA

Add multiple visual nodes to a view in one call.

Each node item supports the same fields as `add_node_to_view`. Both
short and long field names are accepted (`element` or `element_id`,
`id` or `node_id`).

Node item shape:
    ```
    {
      "id": "id-customer-node",   # optional stable ref
      "element": "id-customer",   # required (alias: element_id)
      "x": 40, "y": 40,            # optional, auto-placed if absent
      "width": 160, "height": 80   # optional, defaults shown
    }
    ```

Args:
    view_id: ID of the target view.
    nodes: List of node item objects.
    rollback_on_error: When true (default), restore the previous
        view state if any item fails.

Returns:
    Success envelope with `data.node_ids`, `data.count`, and
    `data.rollback_on_error`.

Errors:
    `ModelOperationError` (view not found / duplicate node_id) and
    `ElementNotFoundError` for the first failing item.
ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
view_idYes
rollback_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate mutation (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds value by explaining the rollback_on_error behavior, the success envelope with node_ids and count, and specific error types (ModelOperationError, ElementNotFoundError). This goes 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 well-structured with a clear main sentence, a bullet-like explanation of node shape, and separate sections for args, returns, and errors. It is relatively concise but could be tightened slightly; the node item shape example adds clarity without being overly verbose.

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?

Given the tool's complexity (3 parameters, nested objects, output schema exists), the description covers purpose, parameters, returns, and errors. It implies the view must exist and handles failure modes. The output schema is mentioned, so return values are explained. It does not explicitly list prerequisites but is largely complete.

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

Parameters4/5

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

The input schema has 0% description coverage, so the description carries the full burden. It explains all three parameters: view_id (target view ID), nodes (list of node objects with shape details including optional/required fields), and rollback_on_error (default true). This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the verb 'Add multiple visual nodes to a view in one call,' specifying the resource (view) and the action (add nodes). It distinguishes from the sibling tool 'add_node_to_view' by being a batch variant and explains that each node supports the same fields. This provides clear purpose and differentiation.

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

Usage Guidelines4/5

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

The description implies that this tool is for adding multiple nodes in one call, contrasting with the single-node sibling. It mentions the rollback_on_error behavior and error handling, which provides context. However, it lacks explicit guidance on when to use this tool versus alternatives or when not to use it.

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

add_node_to_viewA

Add an ArchiMate element as a visual node in a view.

If `x`/`y` are omitted, or the requested rectangle would overlap an
existing node, the server places the node in the next free slot.
Default node size is 160x80 (junctions are normalized to 32x32 by
`auto_layout_view`).

Args:
    view_id: ID of the target view.
    element_id: ID of the element to render in the view.
    x: Optional preferred X coordinate (top-left, integer pixels).
    y: Optional preferred Y coordinate (top-left, integer pixels).
    width: Node width in pixels. Defaults to 160.
    height: Node height in pixels. Defaults to 80.
    node_id: Optional stable visual node ID. When omitted a UUID is
        generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.

Returns:
    Success envelope with `data.node_id` containing the visual
    node's UUID.

Errors:
    `ViewNotFoundError` (returned as `ModelOperationError` from the
        manager) when `view_id` is unknown.
    `ElementNotFoundError` when `element_id` is unknown.
    `ModelOperationError` for a duplicate `node_id`.
ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
widthNo
heightNo
node_idNo
view_idYes
element_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the annotations: overlap handling, default sizes, UUID generation rules, and error conditions. No contradiction with annotations (readOnlyHint=false, destructiveHint=false).

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 well-organized with Args, Returns, Errors sections. It is detailed but not excessively verbose. Minor improvements could make the node_id uniqueness explanation slightly more concise.

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

Completeness5/5

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

Given the 7 parameters (0% schema coverage) and output schema presence, the description covers all inputs, returns, and errors thoroughly. No gaps remain for agent understanding.

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

Parameters5/5

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

Despite 0% schema description coverage, the description explains every parameter's purpose, defaults, and behavior (e.g., x/y overlap, node_id uniqueness across the entire model). This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description clearly states the action ('Add an ArchiMate element as a visual node in a view'), specifying both the verb and the resource. It distinguishes from sibling tools like 'add_element' (which adds to model) and 'add_nodes_to_view' (batch operation).

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

Usage Guidelines4/5

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

The description provides detailed guidance on positioning, defaults, and uniqueness constraints. While it doesn't explicitly state when not to use this tool, the context is clear from sibling names (e.g., for batch use 'add_nodes_to_view').

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

add_note_to_viewA

Add a diagram-only note (sticky annotation) to a view.

Use this to comment on a diagram — a caveat, an owner, a "retire in
FY27". Do NOT create a `Grouping` element just to write a comment:
that pollutes the model tree and participates in validation, while a
note does not.

Notes are visual only. A note has no ArchiMate element, no folder
and no model-tree entry, so it never shows up in `query_elements`,
`count_by_type`, `list_orphan_elements` or the coverage section of
`build_quality_report`. `connect_to_node_ids` draws annotation-only
connector lines that create NO ArchiMate relationship.

`x`/`y` are kept exactly as given, including across
`auto_layout_view` (both layout engines), because a note annotates
one specific spot. Layout will not move element nodes out from under
a note, so place notes in free space — off to the side of the
diagram, or below it. Routed connections are drawn around notes.

Args:
    view_id: ID of the target view.
    text: Note text. Must be non-empty; kept verbatim, so multi-line
        text keeps its line breaks and indentation. Verbatim also
        means escape sequences are NOT interpreted: pass real line
        breaks for a multi-line note, because a literal backslash-n
        is stored and rendered as those two characters.
    x: X coordinate (top-left, integer pixels). Used exactly.
    y: Y coordinate (top-left, integer pixels). Used exactly.
    width: Note width in pixels. Defaults to 185 (Archi's default).
    height: Note height in pixels. Defaults to 80.
    connect_to_node_ids: Optional list of things to point at. Each
        entry may be a visual node ID or an element ID that is
        already visible in this view.
    note_id: Optional stable visual node ID. When omitted a UUID is
        generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.

Returns:
    Success envelope with `data.node_id`, `data.connection_ids`,
    `data.connected_node_ids` (resolved visual node IDs),
    `data.text`, and the geometry `data.x`, `data.y`,
    `data.width`, `data.height`.

Errors:
    `INVALID_NOTE_TEXT` when `text` is missing or blank.
    `ViewNotFoundError` when `view_id` is unknown.
    `ModelOperationError` for a duplicate `note_id`, or for connect
        targets that are not visible in the view — the unresolved
        IDs are listed in `error.details.unknown_ids` and nothing is
        created.

Notes are not updatable or deletable yet: recreate the view (or the
note) if the text or placement needs to change.
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
textYes
widthNo
heightNo
note_idNo
view_idYes
connect_to_node_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Discloses extensive behavioral traits beyond annotations: notes are visual only, have no ArchiMate element, do not appear in queries, x/y are kept exactly across layout, layout does not move nodes under a note, and notes are not updatable or deletable yet. Annotations (readOnlyHint=false, destructiveHint=false) are consistent with description.

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?

Well-structured with clear sections: intro, usage guidance, Args, Returns, Errors, and limitations. Each sentence adds value, no redundancy. Front-loaded with key purpose and distinction.

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

Completeness5/5

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

Completely covers purpose, usage, all parameters, return values (with output schema noted), error types, and limitations. For a tool with 8 parameters and complexity, the description is thorough and actionable.

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

Parameters5/5

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

Input schema has 0% description coverage, but the description fully explains each parameter: text (non-empty, verbatim, escape sequences not interpreted), x/y (exact integers), width/height (defaults), connect_to_node_ids (accepted ID types), note_id (uniqueness across entire model, namespacing advice). Adds significant value beyond schema.

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

Purpose5/5

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

The description clearly states the tool adds a diagram-only note (sticky annotation) to a view. It distinguishes from grouping elements and other tools by specifying that notes are visual only, have no ArchiMate element, and do not participate in model tree or validation.

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

Usage Guidelines5/5

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

Explicitly says when to use (to comment on a diagram) and when not to use (do not create a Grouping element for comments). Provides reasoning that notes do not pollute the model tree or participate in validation, guiding the agent to choose the right tool.

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

add_relationshipA

Add a new ArchiMate relationship between two elements.

Both endpoints must already exist as elements in the active model.
Use `list_supported_types` to discover valid `relationship_type`,
`access_type`, and `influence_strength` values.

Args:
    relationship_type: A supported pyArchimate relationship type,
        without the `Relationship` suffix. Examples: `Assignment`,
        `Serving`, `Composition`, `Aggregation`, `Realization`,
        `Triggering`, `Flow`, `Access`, `Influence`,
        `Specialization`, `Association`. Note: Archi's "Used By"
        concept maps to `Serving`.
    source_id: ID of the source element.
    target_id: ID of the target element.
    name: Optional relationship name.
    description: Optional documentation text.
    properties: Optional custom property key-value pairs (string
        values).
    access_type: Required only for `Access` relationships. One of
        `Access`, `Read`, `Write`, `ReadWrite`.
    influence_strength: Required only for `Influence` relationships.
        One of `+`, `++`, `-`, `--`, or `0`-`10`.
    relationship_id: Optional stable relationship ID. When omitted a
        UUID is generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.

Returns:
    Success envelope with `data` shaped like a `RelationshipDetail`:
    `{id, name, type, description, properties, access_type,
    influence_strength, source_element_id, target_element_id}`.

Errors:
    `InvalidRelationshipTypeError` for an unknown
        `relationship_type`.
    `ElementNotFoundError` when `source_id` or `target_id` is
        unknown.
    `ModelNotFoundError` if no model is active.
    `ModelOperationError` for invalid relationship combinations,
        duplicate `relationship_id`, or unsupported access/influence
        values.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
source_idYes
target_idYes
propertiesNo
access_typeNo
descriptionNo
is_directedNo
relationship_idNo
relationship_typeYes
influence_strengthNo
semantic_validationNowarn

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, and the description adds context: relationship_id uniqueness across entire model, conditional required parameters, and error types. No contradiction.

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?

Well-structured with Args, Returns, Errors sections; front-loaded with core purpose. Slightly lengthy but every sentence adds value; could be tightened slightly.

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

Completeness5/5

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

For a complex tool with 11 parameters and no schema descriptions, the description covers preconditions, parameter semantics, error cases, and return shape. Output schema exists, so return values are documented. Complete for agent use.

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

Parameters5/5

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

Schema coverage is 0%, so description fully compensates by explaining each parameter with examples, conditional requirements (access_type for Access, influence_strength for Influence), and uniqueness constraint for relationship_id.

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

Purpose5/5

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

The description clearly states 'Add a new ArchiMate relationship between two elements,' specifying the verb and resource. It distinguishes from sibling tools like add_relationships (bulk) and update_relationship.

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

Usage Guidelines4/5

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

Explicitly states that both endpoints must already exist and references list_supported_types for valid values. Does not explicitly state when not to use or mention alternatives, but preconditions are clear.

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

add_relationshipsA

Add multiple relationships to the active model in one call.

Each relationship item supports the same fields as `add_relationship`.
Short and long field names are both accepted (`type` or
`relationship_type`, `source` or `source_id`, `target` or
`target_id`, `id` or `relationship_id`).

IDs are unique across the **entire active model**, not per call,
per batch, or per concept type. Splitting a build across several
batches does not give each batch its own id space, so namespace
generated ids (`bp-`, `ac-`, `tech-`) rather than restarting the
same naming pattern in each one.

Relationship item shape:
    ```
    {
      "id": "id-uses",                # optional stable ref
      "type": "Serving",                # required (alias: relationship_type)
      "source": "id-customer",          # required (alias: source_id)
      "target": "id-portal",            # required (alias: target_id)
      "name": "uses",                   # optional
      "description": "...",            # optional
      "properties": {"k": "v"},         # optional
      "access_type": "Read",            # for Access only
      "influence_strength": "+"         # for Influence only
    }
    ```

Args:
    relationships: List of relationship item objects.
    rollback_on_error: When true (default), restore the previous
        model state if any item fails.

Returns:
    Success envelope with `data.relationships` (list of
    `RelationshipDetail`), `data.count`, and
    `data.rollback_on_error`.

Errors:
    `InvalidRelationshipTypeError`, `ElementNotFoundError`,
    `ModelNotFoundError`, `ModelOperationError` for the first
    failing item.
ParametersJSON Schema
NameRequiredDescriptionDefault
relationshipsYes
rollback_on_errorNo
semantic_validationNowarn

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description details rollback_on_error behavior, ID uniqueness across entire model, and includes error types. Annotations (readOnlyHint=false) are consistent with description's write nature.

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?

Description is well-structured with sections for notes, item shape, Args, Returns, Errors. It is front-loaded with main action but could be slightly more concise.

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

Completeness5/5

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

Given complexity (batch operation, multiple fields, error types), description covers return structure, error types, parameter details, and behavioral notes. No reliance on output schema needed.

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

Parameters5/5

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

Input schema has 3 parameters: relationships (array), rollback_on_error (boolean), semantic_validation (string). Description provides full item shape with all fields and aliases, and explains rollback default. Schema coverage is 0% but description compensates completely.

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

Purpose5/5

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

The description states 'Add multiple relationships to the active model in one call' and contrasts with the sibling 'add_relationship' tool, clearly indicating this is a batch version.

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

Usage Guidelines4/5

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

The description explains that each item supports fields from add_relationship and provides notes on ID uniqueness and rollback behavior. It implicitly distinguishes from single-relationship tools but doesn't explicitly state when not to use.

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

assess_togaf_readinessA
Read-only

Return advisory TOGAF-oriented readiness findings.

Advisory only. `data.compliance_claim` is always `false`: this is a
prompt for your own review, not a conformance result, and the
checklist is deliberately fixed.

Scoring: seven checks, one point lost per finding, so
`data.score` runs 0-7 against `data.max_score`. `data.status` is
`ready` when nothing fired, `partial` at a score of 3 or more, and
`limited` below that — so `limited` is the floor, and a model with
no Motivation or Strategy content scores 0 legitimately rather than
because something went wrong.

Returns:
    Success envelope with `data.status`, `data.score`,
    `data.max_score`, `data.advisory_findings` (each with `code`,
    `severity`, `message`), `data.advisory_findings_count`,
    `data.hard_failures`, `data.hard_failures_count`, and
    `data.compliance_claim`.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
include_hard_validationNo
include_quality_assurance_viewsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses numerous behavioral traits beyond the annotations: advisory nature, scoring algorithm (seven checks, score range, status thresholds), guarantee that 'limited' is the floor, and the error condition (ModelNotFoundError). This adds significant value given the tool has readOnlyHint and openWorldHint annotations that only hint at safety and completeness.

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 well-structured with clear sections (advisory, scoring, returns, errors) and front-loads the core purpose. It is slightly verbose—especially the return list—but every sentence serves a purpose. A minor trim would improve conciseness without losing clarity.

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 tool with 2 optional parameters and an output schema (implied), the description covers behavior, scoring interpretation, and error conditions comprehensively. However, the lack of input parameter explanations leaves a gap, preventing a perfect score. The output schema is mentioned, so return value details aren't strictly needed, but the description still documents them thoroughly.

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?

With 0% schema description coverage, the description should explain the two parameters (include_hard_validation, include_quality_assurance_views), but it does not. It focuses solely on the output structure. While the schema provides names and defaults, the description adds no meaning about what these boolean flags control or their effects.

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

Purpose5/5

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

Description clearly states the tool returns 'advisory TOGAF-oriented readiness findings' and distinguishes it from validation tools by emphasizing its advisory nature. The verb 'assess' combined with 'readiness findings' makes the purpose specific and distinct from sibling tools like validate_model or build_quality_report.

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

Usage Guidelines4/5

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

The description explicitly says 'Advisory only' and explains that the compliance_claim is always false, indicating it should be used for review, not formal conformance. It provides scoring context but does not directly mention when to avoid using it or list alternative tools for conformance checking, which would strengthen guidance.

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

auto_layout_viewA
Idempotent

Automatically reposition all nodes in a view to avoid overlap.

The default `internal` layout nests Aggregation/Composition members
inside visible Grouping nodes, wraps wide lanes into multiple rows,
aligns connected nodes vertically across lanes, and routes
connections orthogonally around nodes. With `layer_bands` (default
true) and the `layered_by_type` strategy, views spanning two or
more ArchiMate layers get labeled visual bands (diagram-only Archi
Groups — the semantic model is never modified; set
`layer_bands=false` to disable).

The engine choice applies to this call only. It is never stored on
the model or the view, so it cannot appear in an export or in
Archi's Properties tab.

Note: parameter is `strategy` (matches `auto_layout_view`) but the
equivalent parameter on `export_model_content` and
`export_model_to_file` is named `layout_strategy`.

Args:
    view_id: ID of the view to lay out.
    strategy: One of:
        - `layered_by_type` (default): ArchiMate semantic lanes
          (Motivation/Strategy on top, then Business, Application,
          Application Data, Technology/Physical/Implementation).
        - `layered`: relationship-direction layered, source nodes
          before target nodes.
        - `grid`: compact non-overlapping grid, no semantic
          ordering.
        Ignored (but still validated) by the `pyarchimate` engine,
        which has a single fixed algorithm.
    layout_engine: One of:
        - `internal` (default): everything described above.
        - `pyarchimate`: pyArchimate's own coarse-grid placement.
          Much faster on large views, but it applies no `strategy`,
          no layer bands, no lane wrapping, no barycenter
          alignment, and no ArchiMate lane ordering (its own layer
          classification misplaces SystemSoftware, Artifact, Path,
          Equipment, Facility, Material, Contract, Representation
          and ImplementationEvent). Best for flat views of
          default-sized nodes. It has no collision detection, so a
          view whose nodes do not fit its grid cell is refused
          rather than silently overlapped — see Errors.

Returns:
    Success envelope with the laid-out view in `data`. Under
    `pyarchimate` the message says which options were not applied.

    `detail="summary"` (default) returns the view's identity,
    `properties`, `metadata`, `node_count`, `connection_count`, and
    a `bounds` box (`{x, y, width, height}`, or null for an empty
    view) giving the canvas the layout consumed — enough to place a
    note in free space afterwards.

    `detail="full"` adds `nodes` (each with x/y/width/height) and
    `connections`. Ask for it when you need per-node geometry; it
    is several thousand tokens on a mid-sized view.

    Both shapes report the band outcome directly:
    `layer_bands_created` (int) and `layer_bands_reason`, which is
    null when bands were created and otherwise one of
    `single_layer_view`, `coverage_view`, `not_requested`,
    `strategy_does_not_use_bands`, or
    `engine_does_not_support_bands`. Zero bands on a single-layer
    view is correct, not a failure.

Errors:
    `ViewNotFoundError` (returned as `ModelOperationError`) when
        `view_id` is unknown.
    `ModelOperationError` for an unknown strategy, engine, or
        `detail` level, with close matches in
        `error.details.suggestions`.
    `ModelOperationError` when `layout_engine="pyarchimate"` cannot
        lay the view out safely, with `error.details.grid_size` and
        `error.details.oversized_nodes`. No placement is written, so
        the view is never left half laid out, but the shared
        prologue (Grouping nesting, group sizing) may already have
        repaired it. Retry with `layout_engine="internal"`.
ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary
view_idYes
strategyNolayered_by_type
layer_bandsNo
layout_engineNointernal

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing that engine choice is not stored, that layer bands do not modify the semantic model, and that pyarchimate engine misplaces certain element types and has no collision detection. It also documents error behaviors, adding transparency beyond the idempotentHint and readOnlyHint annotations.

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

Conciseness4/5

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

The description is well-structured with sections, bullet points, and bold parameter names. It front-loads the main purpose and includes detailed options. However, it is somewhat lengthy and has minor redundancy (e.g., band outcomes explained twice), which slightly reduces conciseness.

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

Completeness5/5

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

Given the tool's complexity, 5 parameters, and an output schema, the description thoroughly covers input semantics, error cases, return values with two detail levels, and engine-specific caveats. It leaves no critical gaps for an agent to invoke the tool correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining every parameter (view_id, strategy, layout_engine, layer_bands, detail) with options, defaults, and behavior details. This adds significant meaning beyond the raw schema.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Automatically reposition all nodes in a view to avoid overlap.' It then details behaviors for different engines and strategies, clearly distinguishing this layout tool from sibling tools like add_element or export_model_content.

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

Usage Guidelines4/5

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

The description clearly indicates when to use this tool (to layout a view) and compares the two layout engines, noting trade-offs. It does not explicitly state when not to use it or list alternatives, but the context is sufficient for an agent to decide.

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

build_quality_reportA
Read-only

Build a structured visual, semantic, coverage, and optional TOGAF report.

Aggregate counts throughout — this is the tool to poll during a
build without paying for full issue lists.

Args:
    include_togaf: Add `data.togaf_readiness`. Advisory only; see
        `assess_togaf_readiness` for the scoring scale and the
        standing `compliance_claim: false` disclaimer.
    include_quality_assurance_views: Count QA-marked views as
        stakeholder-facing in the TOGAF checks.

Returns:
    Success envelope with `data.visual_validation`,
    `data.semantic_validation` (`is_valid`, `issues_count`,
    `issue_counts`), and `data.coverage`. With `include_togaf`,
    `data.togaf_readiness` carries `status`, `score`, `max_score`,
    `advisory_findings`, `advisory_findings_count`,
    `hard_failures_count`, and `compliance_claim`.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
include_togafNo
include_quality_assurance_viewsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true and openWorldHint=false, and the description aligns with these by presenting a read-only report generation. The description adds behavioral details beyond annotations: it explains the aggregation nature ('aggregate counts throughout'), parameter effects on the report, and the exact structure of the returned data, including optional TOGAF fields and error conditions.

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 well-structured with separate sections for purpose, usage note, args, returns, and errors. Every sentence adds value, from the opening verb+resource to the detailed return envelope. It is concise but not terse, hitting an optimal length.

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

Completeness5/5

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

Given the tool's simplicity (two optional booleans, no required params) and the presence of an output schema (described in detail), the description covers all relevant aspects: purpose, parameters, return structure, error conditions, and usage context. It leaves no gaps for effective agent invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates by detailing both parameters. It explains that include_togaf adds data.togaf_readiness with a disclaimer and references assess_togaf_readiness, and that include_quality_assurance_views counts QA-marked views as stakeholder-facing. This adds significant semantic context beyond the parameter names and types.

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

Purpose5/5

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

The description clearly states it 'builds a structured visual, semantic, coverage, and optional TOGAF report', specifying the verb and resource. It further distinguishes itself from siblings by noting it is 'the tool to poll during a build without paying for full issue lists', making its purpose and niche explicit.

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

Usage Guidelines4/5

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

The description explicitly advises using this tool during a build for lightweight aggregation ('the tool to poll during a build without paying for full issue lists'). It references assess_togaf_readiness for additional TOGAF scoring, implying an alternative for detailed TOGAF assessment, but does not provide clear exclusion criteria or alternative use cases for other report types.

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

connect_visible_relationshipsA
Idempotent

Add visual connections for every relationship whose endpoints are visible.

Iterates over every relationship in the active model and, when both
its source and target elements are already visible nodes in the
view, adds the missing visual connection. Existing connections are
skipped.

Args:
    view_id: ID of the target view.
    detail: `summary` (default) or `full`. Every relationship that
        is not drawable in this view counts as a skip, so on a
        multi-view model the skip list is close to the whole
        relationship set and every entry is expected. `full` adds
        `data.skipped_relationship_ids`.
    rollback_on_error: When true (default), restore the previous
        view state if any connection fails.

Returns:
    Success envelope with `data.connection_ids` (newly added),
    `data.added_count`, `data.skipped_count`, and `data.detail`.
    Under `full`, also `data.skipped_relationship_ids`.

Errors:
    `ModelOperationError` when `view_id` is unknown, or for an
    unknown `detail` level.
ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary
view_idYes
rollback_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description details behaviors beyond annotations: existing connections are skipped, rollback_on_error mechanism, detail levels affecting response, and error conditions. This adds significant context to the idempotentHint and readOnlyHint annotations.

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 well-structured: a one-sentence summary followed by iterative logic, then clear sections for args, returns, and errors. Every sentence adds value without redundancy.

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

Completeness5/5

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

The description covers the tool's purpose, process, parameters, return values, and errors comprehensively. Given the tool's complexity and available structured data, no gaps remain.

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

Parameters5/5

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

With schema description coverage at 0%, the description fully explains each parameter: view_id (required), detail (enum-like options with effect), and rollback_on_error (default behavior). It adds meaning beyond the schema's type and default values.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Add visual connections for every relationship whose endpoints are visible.' It clearly states the tool's function and distinguishes it from sibling tools like 'add_connection_to_view' which operate on single connections.

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

Usage Guidelines4/5

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

The description explains the iterative process and when connections are skipped, providing context for use. However, it does not explicitly indicate when not to use this tool or provide comparisons to alternative siblings like 'ensure_all_relationships_in_views'.

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

count_by_typeA
Read-only

Count active model content grouped by ArchiMate type.

Returns:
    Success envelope with `data.elements_by_type` and
    `data.relationships_by_type`, each a dict of type name to count.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description adds behavioral details: it returns a success envelope with two dicts (elements_by_type and relationships_by_type) and can raise ModelNotFoundError. This goes beyond the annotations, though it does not cover potential rate limits or authorization needs.

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 concise (two short paragraphs) and front-loaded with the main purpose. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given the tool has no parameters and an output schema exists, the description sufficiently covers the return structure and error condition. It is complete for the tool's simplicity.

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

Parameters4/5

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

With zero parameters and 100% schema coverage, the description is not expected to add parameter information. The baseline for 0 params is 4, and the description does not need to compensate.

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

Purpose5/5

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

The description clearly states the tool counts active model content grouped by ArchiMate type, specifying both elements and relationships. This distinguishes it from sibling tools like query_elements and query_relationships, which return lists rather than aggregated counts.

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 does not provide explicit guidance on when to use this tool versus alternatives. While the purpose implies it is for summary statistics, it lacks any 'when to use' or 'when not to use' statements, and no alternative tools are mentioned.

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

create_empty_modelA
Destructive

Create a new empty ArchiMate model and make it the active model.

Replaces any currently active model. Call this (or one of the
`load_model_*` tools) before any element/relationship/view tool.
Use `update_model` to change this metadata later, including on a
model that was loaded rather than created.

Args:
    name: Human-readable model name. Must be a non-empty string.
    description: Optional model-level documentation. Comes back as
        `data.model_info.documentation` and survives both export
        formats.
    properties: Optional model-level properties. Keys and values are
        coerced to strings.

Returns:
    Success envelope with `data.model_id` (the new model UUID) and
    `data.model_info` (same shape as `pyarchimate://activemodel/info`:
    name, id, documentation, properties, elements_count,
    relationships_count, views_count, is_loaded).

Errors:
    `INVALID_MODEL_NAME` when `name` is missing or blank.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
propertiesNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations provide destructiveHint but the description goes further: it details the replacement behavior, return envelope structure (`data.model_id`, `data.model_info`), error conditions (`INVALID_MODEL_NAME`), and parameter effects. No contradictions.

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 well-structured: purpose paragraph, then Args/Returns/Errors sections. Front-loaded with the core action. Every sentence adds unique value; no redundant or vague statements.

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

Completeness5/5

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

Given the tool's complexity (3 params, destructive, output schema not provided), the description covers all necessary aspects: parameters, return shape, errors, usage context, and relation to sibling tools. No missing information.

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

Parameters5/5

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

Schema coverage is 0%, so description must carry full burden. It comprehensively describes all 3 parameters: name (non-empty string), description (optional, comes back as documentation), properties (optional, keys/values coerced to strings). No gaps.

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

Purpose5/5

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

The description clearly states what the tool does: 'Create a new empty ArchiMate model and make it the active model.' It distinguishes from sibling tools by explicitly referencing `load_model_*` tools and `update_model`, creating a clear usage boundary.

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

Usage Guidelines5/5

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

It explicitly states when to call: 'before any element/relationship/view tool', and provides alternatives for different tasks. It also notes that `update_model` should be used for later metadata changes.

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

create_model_from_specA
Destructive

Create a complete ArchiMate model from a structured JSON spec.

The spec is applied transactionally by default. Element, relationship,
and view objects accept either short field names (`type`, `source`,
`target`, `id`, `element`, `relationship`) or the long forms used by
individual tools (`element_type`, `relationship_type`, `source_id`,
`target_id`, `element_id`, `relationship_id`, `view_id`).

Spec shape:
    ```
    {
      "name": "Model Name",                    # required
      "elements": [                              # optional list
        {
          "id": "id-customer",                # optional stable ref
          "name": "Customer",                  # required
          "type": "BusinessActor",             # required
          "description": "...",               # optional
          "folder_path": "/Business",         # optional
          "properties": {"owner": "EA"}        # optional
        }
      ],
      "relationships": [
        {
          "id": "id-uses",                    # optional stable ref
          "type": "Serving",                   # required
          "source": "id-customer",             # required ref or UUID
          "target": "id-portal",               # required ref or UUID
          "name": "uses",                      # optional
          "description": "...",               # optional
          "properties": {...},                  # optional
          "access_type": "Read",                # for Access only
          "influence_strength": "+"             # for Influence only
        }
      ],
      "views": [
        {
          "id": "id-context",                  # optional stable ref
          "name": "Context",                   # required
          "folder_path": "/Views",            # optional
          "nodes": [                            # optional
            {"element": "id-customer",
             "x": 40, "y": 40,                  # x/y optional
             "width": 160, "height": 80}        # width/height optional
          ],
          "connections": [                       # optional
            {"relationship": "id-uses"}
          ],
          "connect_visible_relationships": true, # optional
          "auto_layout": true,                  # optional
          "layout_strategy": "layered_by_type", # optional
          "layout_engine": "internal"           # optional; or
                                                # "pyarchimate"
        }
      ]
    }
    ```

Args:
    spec: Specification object as described above.
    rollback_on_error: When true (default), restore the previous
        active model on any failure. Set to false to keep partial
        results.

Returns:
    Success envelope with `data` containing summary IDs of created
    model, elements, relationships, and views.

Errors:
    `INVALID_SPEC` for missing required keys.
    `InvalidElementTypeError`, `InvalidRelationshipTypeError`,
    `ElementNotFoundError`, `ModelOperationError` for validation or
    creation failures.
ParametersJSON Schema
NameRequiredDescriptionDefault
specYes
rollback_on_errorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false; the description adds transactional rollback behavior, field aliases, and error types. It does not mention potential side effects like model overwriting or permission requirements, but provides substantial context beyond annotations.

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

Conciseness4/5

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

The description is lengthy but well-structured with a code block and bullet points. It front-loads the purpose and organizes details logically. While slightly verbose, the complexity of the tool justifies the length.

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?

Given the tool's complexity (nested objects, 2 params, 0% schema coverage), the description covers input format, errors, and return summary. An output schema exists but is not detailed in the description; however, the explanation is complete enough for an AI to use effectively.

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

Parameters5/5

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

Schema coverage is 0% with no descriptions for the two parameters. The description fully compensates by detailing the entire spec object structure, field options, and the rollback parameter's effect. This adds significant meaning absent from the schema.

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

Purpose5/5

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

The description clearly states 'Create a complete ArchiMate model from a structured JSON spec,' using a specific verb-resource pair. It distinguishes itself from sibling tools like 'add_element' and 'create_empty_model' which handle granular operations.

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

Usage Guidelines4/5

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

The description explains the spec format and default transactional behavior, implying use for bulk creation. While it doesn't explicitly state when to use alternatives, the detailed spec suggests a specific use case. Siblings like 'add_elements' exist for simpler batch operations, so the guidance is clear but not exhaustive.

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

create_viewA

Create a new ArchiMate view (diagram) in the active model.

Views are containers for visual nodes and connections. Add nodes
with `add_node_to_view` and connections with
`add_connection_to_view` once both endpoint elements are visible.
Set a `viewpoint` so the view opens with the right Archi viewpoint
(e.g. `layered` for mixed-layer overviews, `capability` for
capability maps, `service_realization` for service views). Take the
value from `list_supported_types` (`data.viewpoints`) rather than
inferring it from the viewpoint's English name — a plausible
`business_process` is not accepted, `business_process_cooperation`
is.

Args:
    name: View name. Must be a non-empty string.
    view_id: Optional stable view ID. When omitted a UUID is
        generated. Must be unique across the
        *entire* active model — not just within this call, this
        batch, or this concept type. An id already used by any
        element, relationship, view, node or connection is
        rejected. When generating ids across several batches,
        namespace them (`bp-`, `ac-`, `tech-`) so batches cannot
        collide.
    folder_path: Optional folder path. The `Views` root is
        normalized: `Views`, `/Views`, and `views` resolve to
        `/Views`.
    viewpoint: Optional viewpoint: any canonical Archi viewpoint id
        (e.g. `layered`, `application_cooperation`) or pyArchimate
        slug. Both catalogs are in `list_supported_types` under
        `data.viewpoints`. Invalid values are rejected before the
        view is created — nothing is left behind, so the same
        `view_id` can be reused on the retry — and the error
        carries both accepted catalogs in `error.details`.

Returns:
    Success envelope with `data` shaped like a `ViewDetail`:
    `{id, name, nodes: [], connections: []}`.

Errors:
    `INVALID_VIEW_NAME` when `name` is missing or blank.
    `ModelNotFoundError` if no model is active.
    `ModelOperationError` for a duplicate `view_id`, an unknown
    `viewpoint`, or an invalid folder path.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
view_idNo
viewpointNo
propertiesNo
descriptionNo
folder_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate non-read-only and non-destructive. The description details that invalid viewpoint values are rejected before creation (nothing left behind, view_id reusable), error behaviors, and the uniqueness constraint. This adds significant behavioral context beyond annotations.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Errors sections. While detailed, every sentence adds value. It is slightly verbose but appropriately sized for the complexity.

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

Completeness5/5

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

Given 6 parameters, output schema existence, and annotations, the description is nearly complete. It covers return shape, errors, and usage context with sibling tools. No gaps in required information.

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

Parameters5/5

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

Schema coverage is 0%, but the description thoroughly explains each parameter: `name` (non-empty), `view_id` (optional, UUID, uniqueness across model), `folder_path` (normalization), `viewpoint` (from `list_supported_types`), and mentions `properties` and `description` as optional. It provides critical usage details not in the schema.

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

Purpose5/5

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

The description clearly states 'Create a new ArchiMate view (diagram) in the active model.' It specifies the verb (create), resource (view), and context (active model), and distinguishes from siblings like `add_node_to_view` and `add_connection_to_view`.

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

Usage Guidelines5/5

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

The description provides explicit guidance: use this to create a view, then add nodes/connections with other tools. It advises obtaining viewpoint values from `list_supported_types` and warns about view_id uniqueness across the entire model, including naming conventions for batch commands.

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

delete_elementA
Destructive

Delete an ArchiMate element from the active model.

pyArchimate also removes dependent concepts such as relationships
and visual nodes/connections referencing the deleted element.

Args:
    element_id: ID of the element to delete.

Returns:
    Success envelope with `data.deleted=true`.

Errors:
    `ElementNotFoundError` when `element_id` is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
element_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=false. The description adds value by detailing that pyArchimate removes dependent concepts, providing behavioral context beyond the structured fields.

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 concise with clear sections (Args, Returns, Errors). The first sentence immediately states the purpose, and every sentence adds value without redundancy.

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

Completeness5/5

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

For a simple one-parameter tool with annotations and an output schema present, the description fully covers the operation: deletion, cascade effects, and error conditions. It is complete and sufficient.

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?

With 0% schema description coverage, the description provides minimal extra meaning: 'element_id: ID of the element to delete.' This is adequate but does not elaborate on format or other constraints, earning a baseline score of 3.

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

Purpose5/5

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

The description clearly states it deletes an ArchiMate element from the active model, using a specific verb and resource. It distinguishes itself from sibling tools like delete_relationship and delete_view by focusing on elements.

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

Usage Guidelines4/5

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

The description explains it removes dependent concepts (relationships, visual nodes), indicating it is the comprehensive delete for elements. It does not explicitly state when to use alternatives like delete_relationship, but the context implies appropriate usage.

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

delete_relationshipA
Destructive

Delete an ArchiMate relationship from the active model.

pyArchimate also removes any visual connections that referenced the
deleted relationship.

Args:
    relationship_id: ID of the relationship to delete.

Returns:
    Success envelope with `data.deleted=true`.

Errors:
    `RelationshipNotFoundError` when `relationship_id` is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
relationship_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already set destructiveHint=true, but the description adds that pyArchimate removes visual connections, which is helpful. It also documents the error case. It does not mention other behavioral details like irreversibility or permission requirements, but overall adds value beyond annotations.

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 concise and well-structured: main action, side effect, parameters, returns, errors. Every sentence is relevant and earns its place.

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?

Given low complexity (1 parameter, output schema present), the description covers input, side effect, output, and error. Minor gap: does not clarify what 'active model' means, but context likely known. Overall adequate.

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

Parameters4/5

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

Schema coverage is 0%, but the description includes an Args section explaining the parameter as 'ID of the relationship to delete,' which adds meaning beyond the schema's type-only definition. Could be more detailed about the format or source of IDs.

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

Purpose5/5

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

The description clearly states it deletes an ArchiMate relationship from the active model, specifying the resource and action. It also mentions the side effect of removing visual connections, distinguishing it from update or other delete operations.

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 description does not explicitly state when to use this tool versus alternatives like update_relationship or delete_element. Usage is implied but not guided with exclusions or comparison to siblings.

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

delete_viewA
Destructive

Delete an ArchiMate view from the active model.

Removes the view and its visual nodes/connections. Underlying
elements and relationships are NOT removed.

Args:
    view_id: ID of the view to delete.

Returns:
    Success envelope with `data.deleted=true`.

Errors:
    `ViewNotFoundError` when `view_id` is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false. The description adds context by detailing that the view and its visual components are removed while underlying elements/relationships are preserved, which exceeds the annotation information.

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 concise and well-structured with labeled sections (Args, Returns, Errors). Every sentence adds value, and there is no unnecessary fluff. Could potentially be slightly shorter, but current length is justified.

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?

The description covers the main behavioral aspects: deletion scope, return value, and error condition. Given the presence of an output schema (implied by 'Success envelope'), the description is complete enough for an agent to understand the tool's effect.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. The Args section describes view_id as 'ID of the view to delete', which adds basic meaning but no additional constraints or format details. This is adequate for a single string parameter.

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

Purpose5/5

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

The description clearly states 'Delete an ArchiMate view from the active model' and specifies what is removed (view and visual nodes/connections) and what is NOT removed (underlying elements and relationships). This distinguishes it from sibling tools like delete_element and delete_relationship.

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 description implies usage for deleting views but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. The context is clear from the tool name and sibling list, but no direct guidance is given.

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

ensure_all_relationships_in_viewsA
Idempotent

Ensure every model relationship is rendered in at least one view.

Useful when Archi Validator reports `Unused Relation` or
`'Serving relation' is not used in a View`. The tool creates or
reuses a coverage view, adds the missing endpoint nodes, and adds
the missing connections. It also relocates redundant
Grouping-to-contained-child Aggregation/Composition connections out
of readable views into the coverage view (containment communicates
the meaning visually instead).

Coverage views are marked with the `mcp:relationship_coverage_view`
property, so future invocations recognize them regardless of the
display name.

Args:
    coverage_view_name: Name of the coverage view. If a view with
        this name exists, it is reused; otherwise it is created.
    auto_layout: When true (default), lay out the affected views
        after adding nodes and connections.
    layout_strategy: Validated for consistency with other layout
        tools but not applied — the coverage view layout is a fixed
        source/target pair grid.
    layout_engine: Must be `internal` (the default). The coverage
        layout is a fixed pair grid, so no other engine can be
        honoured here and passing one is an error rather than a
        silently ignored hint.
    rollback_on_error: When true (default), restore the previous
        model state if coverage creation fails.

Returns:
    Success envelope with `data` containing the coverage view ID,
    added node and connection counts, relocated containment
    connection counts, skipped relationship IDs, and remaining
    unused relationship IDs.

Errors:
    `ModelNotFoundError` if no model is active.
    `ModelOperationError` for an unknown layout strategy/engine
        (with `error.details.suggestions`), or for any engine other
        than `internal`. Both are validated whether or not
        `auto_layout` is true.
ParametersJSON Schema
NameRequiredDescriptionDefault
auto_layoutNo
layout_engineNointernal
layout_strategyNolayered_by_type
rollback_on_errorNo
coverage_view_nameNoRelationship Coverage

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) provide a high-level safety profile. The description adds critical details: it creates views, modifies model structure (adds nodes/connections), relocates containment connections, and marks views with a property. It also discloses rollback behavior and fixed layout behavior. No contradiction with annotations.

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 well-structured: a one-sentence purpose, followed by context, method, and detailed parameter explanations. Every sentence adds substantive value without redundancy or fluff. It earns its length.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no required ones, many siblings), the description covers the algorithm, property marking, error conditions, layout behavior, and return data structure. The output schema is referenced (success envelope with specific fields), providing a complete picture for an agent.

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

Parameters5/5

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

Schema description coverage is 0%, but the description contains an 'Args' section that explains each parameter's purpose and constraints (e.g., layout_engine must be 'internal', layout_strategy is validated but not applied, rollback_on_error default true). This fully compensates for the lack of schema documentation.

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

Purpose5/5

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

The description begins with a specific verb-resource pair: 'Ensure every model relationship is rendered in at least one view.' It explains the context (Archi Validator reports) and details the actions (create/reuse coverage view, add nodes/connections, relocate connections). This clearly distinguishes it from sibling tools like add_node_to_view or auto_layout_view.

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

Usage Guidelines4/5

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

The description explicitly states when to use: when Archi Validator reports 'Unused Relation' or similar. It explains the behavior of coverage views and their detection via property marking. It also lists error conditions. While it does not explicitly mention alternative tools, the context is sufficient for an agent to decide.

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

export_elements_to_csvA
Read-only

Export all active model elements as a CSV string.

The CSV includes base columns `id`, `name`, `type`, `description`.
Custom properties are emitted as `Property:<name>` columns.

Returns:
    Success envelope with `data.csv_data` containing the CSV string.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true. The description adds value by detailing the CSV format (base columns and custom properties as 'Property:' columns) and the error case 'ModelNotFoundError'. However, it does not disclose potential performance implications or any limits.

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 short and well-structured. It starts with the primary purpose, then details the output columns, and ends with return format and error. Every sentence is informative with no waste.

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?

Given no parameters and an output schema, the description covers the CSV content, return envelope, and a relevant error. It could mention if the export is limited by model size or if there are any side effects, but overall it is sufficiently complete for a simple read operation.

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

Parameters4/5

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

There are no parameters, so schema coverage is trivially 100%. The description does not need to add parameter information, meeting the baseline expectation for no-parameter tools.

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 clearly states 'Export all active model elements as a CSV string', specifying the verb and resource. It distinguishes from siblings like 'export_model_content' and 'export_relationships_to_csv' by focusing on elements, but does not explicitly differentiate.

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 mentions an error case but provides no guidance on when to use this tool versus alternatives like 'export_model_content' or 'export_relationships_to_csv'. No when-not-to-use or prerequisites are stated.

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

export_model_contentA
Idempotent

Serialize the active model as XML string content.

Use this when the caller wants the XML in the response payload. Use
`export_model_to_file` to write directly to disk.

Args:
    output_format: One of `archimate` (default, Open Group exchange
        XML), `archi` (Archi native `.archimate` XML, opens directly
        in Archi), or `xml`.
    auto_layout: When true, run layout on every view before
        serialization. Defaults to false.
    layout_strategy: Layout strategy used when `auto_layout=true`.
        One of `layered_by_type` (default, ArchiMate semantic
        lanes), `layered` (relationship-direction layered), or
        `grid`.
    layout_engine: Layout engine applied to every view when
        `auto_layout=true`. One of `internal` (default) or
        `pyarchimate` (see `auto_layout_view` for what the latter
        gives up). Per-call only: nothing about the engine is
        written into the exported file. Validated even when
        `auto_layout=false`, so a typo is never swallowed.

Returns:
    Success envelope with `data.content` (XML string),
    `data.auto_layout`, and (when `auto_layout=true`)
    `data.layout_strategy` and `data.layout_engine`.

Errors:
    `ModelNotFoundError` if no model is active.
    `UnsupportedFormatError` for an unknown `output_format`.
    `ModelOperationError` for layout or serialization failures,
        including an unknown strategy/engine (with
        `error.details.suggestions`) and a view the `pyarchimate`
        engine cannot lay out safely — one such view fails the
        whole export.
ParametersJSON Schema
NameRequiredDescriptionDefault
auto_layoutNo
quality_gateNooff
allow_orphansNo
layout_engineNointernal
output_formatNoarchimate
layout_strategyNolayered_by_type
allow_visual_issuesNo
allow_semantic_issuesNo
include_quality_reportNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations indicate the tool is idempotent and non-destructive. The description adds context that auto-layout is per-call only and not persisted, enhancing transparency. However, it stops short of explicitly stating no model modification occurs.

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 lengthy but well-structured with clear Args, Returns, and Errors sections. It could be slightly more concise, but the detail is justified given the number of parameters.

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

Completeness5/5

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

Despite 9 parameters and no schema descriptions, the description fully documents all parameters, return format, and errors. An output schema exists, so the return format detail is sufficient.

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

Parameters5/5

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

Schema description coverage is 0%, but the description includes a detailed Args section that explains all 9 parameters, including defaults and valid values, fully compensating for the schema gap.

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

Purpose5/5

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

The description clearly states 'Serialize the active model as XML string content,' specifying the verb (serialize), resource (active model), and output (XML string). It distinguishes from the sibling tool `export_model_to_file` by noting when to use each.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use this when the caller wants the XML in the response payload. Use `export_model_to_file` to write directly to disk.' It also explains parameter usage and lists error conditions.

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

export_model_to_fileA
Idempotent

Serialize the active model and write it to a local file.

Preferred when the user wants a `.archimate` file Archi can open
directly. Parent directories are created if missing.

Args:
    path: Output path on the MCP server's filesystem. `~` is
        expanded; relative paths resolve against the server's CWD.
    output_format: One of `archi` (default, Archi native), `archimate`
        (Open Group exchange), or `xml`.
    auto_layout: When true, lay out every view before serialization.
    layout_strategy: One of `layered_by_type` (default), `layered`,
        or `grid`. Only applied when `auto_layout=true`.
    layout_engine: One of `internal` (default) or `pyarchimate`
        (see `auto_layout_view` for what the latter gives up).
        Only applied when `auto_layout=true`, but always
        validated. Per-call only: the engine is never recorded in
        the written file.

Returns:
    Success envelope with `data.path`, `data.output_format`,
    `data.bytes_written`, `data.auto_layout`, and (when
    `auto_layout=true`) `data.layout_strategy` and
    `data.layout_engine`.

Errors:
    `ModelNotFoundError` if no model is active.
    `UnsupportedFormatError`, `ModelOperationError` for invalid
    path/format, an unknown strategy/engine (with
    `error.details.suggestions`), a view the `pyarchimate` engine
    cannot lay out safely, or serialization failure.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
auto_layoutNo
quality_gateNooff
allow_orphansNo
layout_engineNointernal
output_formatNoarchi
layout_strategyNolayered_by_type
allow_visual_issuesNo
allow_semantic_issuesNo
include_quality_reportNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds important behavioral details: parent directories are created, the layout engine is per-call only, and specific error conditions like suggestions for invalid strategies. No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Errors sections. It front-loads the core action. While detailed, it remains readable and avoids redundancy, though some parameter details could be trimmed.

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?

The description has a Returns section (output schema exists) and an Errors section, providing good coverage of outcomes. However, 5 undocumented parameters reduce completeness for a tool of this complexity.

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

Parameters3/5

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

The schema has 10 parameters with 0% description coverage. The description explains 5 parameters (path, output_format, auto_layout, layout_strategy, layout_engine) and their defaults/conditions. However, 5 parameters (quality_gate, allow_orphans, allow_visual_issues, allow_semantic_issues, include_quality_report) are not mentioned, leaving gaps.

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

Purpose5/5

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

The description starts with 'Serialize the active model and write it to a local file,' which is a specific verb+resource pair. It also clarifies the preferred use case for producing a .archimate file that Archi can open directly, distinguishing it from sibling tools like load_model_from_file or export_model_content.

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

Usage Guidelines4/5

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

The description states it is 'Preferred when the user wants a .archimate file Archi can open directly,' giving clear context. However, it does not explicitly mention when not to use it or list alternative tools for other scenarios.

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

export_relationships_to_csvA
Read-only

Export all active model relationships as a CSV string.

The CSV includes base columns `id`, `name`, `type`, `source_id`,
`target_id`. Custom properties are emitted as `Property:<name>`
columns.

Returns:
    Success envelope with `data.csv_data` containing the CSV string.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds return format details and error conditions, going beyond the readOnlyHint and openWorldHint annotations. No contradictions.

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 concise and well-structured: purpose, column details, returns, errors. Every sentence adds value.

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

Completeness5/5

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

Given the simplicity (no parameters, no input schema complexity), the description covers purpose, output format, and error case completely.

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

Parameters4/5

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

No parameters, so the description adds value by detailing output columns and custom properties. Baseline 4 applies due to 100% schema coverage.

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

Purpose5/5

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

The description clearly states it exports all active model relationships as a CSV string, with specific columns and custom properties. It distinguishes from sibling export tools like export_elements_to_csv.

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

Usage Guidelines4/5

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

The description implies usage for exporting relationships and notes a prerequisite (active model). It lacks explicit alternatives or when-not-to-use guidance, but the context is clear.

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

get_relationship_compatibilityB
Read-only

Return valid ArchiMate relationship options for source and target types.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_typeYes
target_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description adds minimal behavioral context. It does not disclose what 'valid' means or potential edge cases.

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 concise sentence with no filler, though it could be slightly more informative without losing brevity.

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?

Given the complexity of ArchiMate relationships, the description lacks explanation of what constitutes valid options (e.g., metamodel rules) and does not leverage the presence of an output schema.

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 description adds no meaning to the source_type and target_type parameters beyond their names.

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

Purpose5/5

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

The description clearly states the tool returns valid ArchiMate relationship options for given source and target types, distinguishing it from siblings like recommend_relationship.

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 description implies when to use (to get valid relationship options) but does not provide explicit guidance on alternatives or when not to use.

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

get_usage_guideA
Read-only

Return the client-facing usage guide for this ArchiMate MCP server.

Call this tool when you are unsure how to operate the server. It is
intended to prevent source-code inspection: do not inspect the MCP
server source code to learn normal usage. Use this guide, prompts,
tools/list, and resources/list instead.

Returns:
    Success envelope with recommended workflows, anti-patterns,
    response conventions, and important tools.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description adds context: it prevents source-code inspection and returns a success envelope with specific content (workflows, anti-patterns, etc.). This provides behavioral insight beyond annotations.

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 concise with no wasted words. It includes purpose, usage guidance, and return content in a few sentences, making it easy to read and understand.

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

Completeness5/5

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

Given zero parameters and existing annotations, the description fully covers the tool's purpose, when to call it, and what it returns. It is complete for an AI agent to decide to use it.

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

Parameters4/5

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

The tool has no parameters (schema coverage 100%), so the description correctly doesn't mention parameters. Baseline for 0 parameters is 4, and no additional explanation is needed.

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

Purpose5/5

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

The description clearly states the tool returns a client-facing usage guide for the ArchiMate MCP server. It specifies the verb 'Return' and the resource 'usage guide,' and distinguishes it from siblings by noting it is for server operation guidance.

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

Usage Guidelines5/5

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

The description explicitly tells when to use the tool: when unsure how to operate the server. It also provides clear alternatives: use prompts, tools/list, and resources/list instead of source-code inspection, preventing misuse.

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

inspect_active_modelA
Read-only

Inspect the active model without dumping full XML or source code.

Use this immediately after loading an existing model and before
editing. It combines model info, summaries, type counts, visual
validation, compact semantic validation, compact orphan summaries,
and recommended next calls.

Args:
    include_semantic_validation: Include compact semantic validation
        summary. Defaults to true.
    include_orphans: Include compact orphan element summary.
        Defaults to true.
    sample_limit: Maximum number of issue/orphan examples to include.
        Clamped to 0-50.

Returns:
    Success envelope with compact inspection data.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
sample_limitNo
include_orphansNo
include_semantic_validationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description details what the tool includes (model info, summaries, type counts, etc.) and mentions error conditions (ModelNotFoundError). No contradictions with annotations.

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 well-structured with separate paragraphs for purpose, usage, args, returns, and errors. It is concise yet comprehensive, with no redundant information.

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

Completeness5/5

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

Given the presence of an output schema and the detailed description covering purpose, parameters, return, and errors, the description is fully complete. It does not rely on the output schema to explain return values.

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

Parameters5/5

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

Despite 0% schema description coverage, the description fully documents all three parameters with defaults, meanings, and constraints (e.g., sample_limit clamped to 0-50). This compensates completely.

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

Purpose5/5

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

The description clearly states the tool inspects the active model without dumping full XML or source code, and lists the types of data it combines. It distinguishes itself from related tools by specifying it is an inspection-only step after loading and before editing.

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

Usage Guidelines5/5

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

Explicitly states 'Use this immediately after loading an existing model and before editing.' This provides clear guidance on when to use the tool and implicitly indicates it is not for editing.

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

list_orphan_elementsA
Read-only

List elements with no relationships and/or no view placement.

Useful for finding gaps before completing a model.

Returns:
    Success envelope with `data.elements_without_relationships`,
    `data.elements_not_in_any_view`, and `data.fully_orphan_elements`
    (each a list of element IDs), plus matching count fields.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so safety is clear. The description adds value by detailing the return structure (three arrays and count fields) and the ModelNotFoundError, which are beyond the annotations.

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 concise with three sentences: purpose, usage hint, and returns/errors. Front-loaded with the main action, no wasted words.

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

Completeness5/5

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

With zero parameters and an output schema present, the description sufficiently explains the return fields and error possibilities. It is complete for a simple list tool.

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

Parameters4/5

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

There are zero parameters, so baseline 4 applies per rules (no parameters to describe). The description does not need to add parameter info as the schema is empty and fully covered.

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

Purpose5/5

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

The description specifies 'List elements with no relationships and/or no view placement,' clearly stating the verb and resource. It distinguishes from sibling tools like query_elements by focusing on orphan detection.

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 description says 'Useful for finding gaps before completing a model,' which implies usage context but does not explicitly compare to sibling tools or state when not to use. No exclusions or alternatives are provided.

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

list_supported_typesA
Read-only

List supported ArchiMate types and configuration values.

Always call this before generating model content if you are not
certain which names the running pyArchimate build accepts. The
catalog is version-specific.

Returns:
    Success envelope with `data` containing element types grouped by
    category, relationship types, view `viewpoints` (split into
    `pyarchimate_slugs` and `archi_viewpoint_ids` — both accepted,
    and they overlap without either containing the other), folder
    roots, valid `access_type` values, valid `influence_strength`
    values, supported layout strategies, supported layout engines,
    and summary counts.

Does not require an active model.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the tool is known safe. The description adds value by detailing the return structure (success envelope with specific data) and version dependency, which enriches understanding beyond annotations.

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 concise at about six sentences, front-loaded with purpose and usage guidance, followed by return structure. Every sentence earns its place; no fluff.

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

Completeness5/5

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

Given the tool's complexity (listing many types) and that an output schema exists, the description covers all necessary context: usage scenario, version specificity, return structure details, and the fact that no active model is needed. It is fully complete.

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

Parameters4/5

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

There are no parameters (input schema empty), so the description need not add parameter info. It adequately details return content, which is the main concern. The baseline for zero parameters is 4.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List supported ArchiMate types and configuration values.' It uses a specific verb+resource construction and distinguishes this tool from siblings, as no other tool lists supported types.

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

Usage Guidelines5/5

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

The description explicitly tells when to use: 'Always call this before generating model content if you are not certain which names the running pyArchimate build accepts.' It also notes version-specificity and that no active model is required, providing clear context.

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

load_model_from_contentA
Destructive

Load an ArchiMate model from XML string content (replaces active model).

For loading large files or paths use `load_model_from_file` instead;
this tool expects the actual XML payload, not a path.

Args:
    model_content: XML content. Must start with `<` and be 10 MiB or
        smaller. DTD and entity declarations are rejected for safety.
    content_format: One of `archimate` (Open Group exchange XML,
        default), `archi` (Archi native `.archimate` XML), or `xml`.

Returns:
    Success envelope with `data.model_info` describing the loaded
    model (see `pyarchimate://activemodel/info`).

Errors:
    `INVALID_MODEL_CONTENT` when `model_content` is not XML.
    `UnsupportedFormatError` when `content_format` is not recognized.
    `ModelOperationError` when pyArchimate fails to parse the XML.
ParametersJSON Schema
NameRequiredDescriptionDefault
model_contentYes
content_formatNoarchimate

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Disclosures align with destructiveHint: true, stating it 'replaces active model.' Adds safety details (DTD/entity rejection, size limit) beyond annotations. Could mention if undo history is cleared, but overall transparent.

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?

Well-structured with Args, Returns, Errors sections. First sentence conveys core purpose. No extraneous text; every sentence adds value. Concise yet comprehensive.

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

Completeness5/5

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

Covers input constraints, output format (success envelope with model_info), errors, and alternative tool guidance. Having an output schema further supports completeness. No gaps identified.

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

Parameters4/5

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

With 0% schema coverage, description fully explains both parameters: model_content constraints (starts with `<`, ≤10 MiB, safety rejections) and content_format enum values and defaults. Adds significant meaning beyond schema.

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

Purpose5/5

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

Clearly states 'Load an ArchiMate model from XML string content (replaces active model)', specifying verb, resource, and source. Distinguishes from sibling 'load_model_from_file' by noting it expects XML payload, not path.

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

Usage Guidelines5/5

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

Explicitly advises when to use alternatives: 'For loading large files or paths use load_model_from_file instead; this tool expects the actual XML payload, not a path.' Also includes constraints like size limit and safety rejections.

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

load_model_from_fileA
Destructive

Load an ArchiMate model from a local file (replaces active model).

The preferred entry point when the user gives a local `.archimate`
or XML file path. Expects a filesystem path readable by the MCP
server process; for raw XML text use `load_model_from_content`.
By default the response includes a compact inspection (summary,
type counts, validation status, recommended next calls) so a
separate `inspect_active_model` round trip is unnecessary.

Args:
    path: Local filesystem path readable by the MCP server process.
        `~` is expanded; relative paths resolve against the server CWD.
    content_format: One of `archi` (default, Archi native
        `.archimate`), `archimate` (Open Group exchange XML), or
        `xml`.
    inspect_after_load: When true (default), include a compact model
        summary, type counts, validation status, and recommended next
        calls in the response.
    include_semantic_validation: When true (default), include a
        compact semantic validation summary when inspecting.
    sample_limit: Maximum number of issue/orphan examples to include
        in compact summaries. Clamped to 0-50.

Returns:
    Success envelope with `data.model_info`, `data.loaded_from`, and
    optionally `data.inspection`.

Errors:
    `INVALID_PATH`, `FILE_NOT_FOUND`, `FILE_READ_ERROR`,
    `UnsupportedFormatError`, or `ModelOperationError`.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sample_limitNo
content_formatNoarchi
inspect_after_loadNo
include_semantic_validationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and description reinforces 'replaces active model'. Additionally, it details file path behavior, format expectations, error types, and response structure.

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?

Well-structured with main description, Args, Returns, Errors sections. Front-loaded with purpose, every sentence adds value, no wasted words.

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

Completeness5/5

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

Given complexity (loading, optional inspection, multiple formats, errors) and presence of output schema, description covers all aspects: inputs, outputs, errors, and distinguishes from 40+ sibling tools.

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

Parameters5/5

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

Input schema has 5 parameters with 0% description coverage, but description fully explains each: path (tilde expansion, relative resolution), content_format (enumeration of formats), inspect_after_load (default true, compact summary), include_semantic_validation (default true), sample_limit (clamped 0-50).

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

Purpose5/5

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

Description uses specific verb 'Load' with resource 'ArchiMate model from a local file' and explicitly states it replaces the active model. It distinguishes from sibling 'load_model_from_content' for raw XML, making purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly states preferred entry point for local .archimate or XML files, advises alternative for raw text, and explains that default inspection avoids extra round trips.

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

query_elementsA
Read-only

Query elements in the active model with optional filters.

All filters are AND-combined. Pass an empty `{}` to list every
element (equivalent to the `pyarchimate://activemodel/elements`
resource).

Supported filter keys:
    - `type` (str): Match elements with this exact ArchiMate type,
      e.g. `BusinessActor`, `ApplicationComponent`.
    - `name_contains` (str): Case-insensitive substring match
      against element name.
    - `properties_contain` (dict[str, str]): Match elements whose
      custom properties contain every provided key/value pair.

Args:
    filter_criteria: Dict containing zero or more of the keys
        above. Unknown keys are ignored.

Returns:
    Success envelope with `data.elements`, a list of
    `ElementDetail` objects (`id`, `name`, `type`, `description`,
    `properties`, `folder`, `incoming_relationship_ids`,
    `outgoing_relationship_ids`).

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
filter_criteriaYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses that filters are AND-combined, unknown keys are ignored, possible errors (ModelNotFoundError), and details of the return structure. This adds substantial behavioral context.

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 well-structured with sections for description, supported filters, arguments, returns, and errors. Every sentence is informative and adds value without redundancy.

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

Completeness5/5

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

Given the complexity of filters, absence of schema descriptions, and presence of an output schema, the description provides comprehensive guidance on usage, parameters, return values, and error cases. It covers all necessary aspects for correct tool invocation.

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

Parameters5/5

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

The input schema provides only a generic object for filter_criteria with no descriptions. The tool description fully compensates by listing supported keys (type, name_contains, properties_contain) and their semantics, adding meaning beyond the schema.

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

Purpose5/5

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

The description clearly states it queries elements in the active model with optional filters. It distinguishes from sibling tools like query_relationships, add_element, etc., which operate on different resources or actions.

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

Usage Guidelines4/5

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

The description explains when to use (querying elements with filters or listing all with empty {}) and notes that unknown keys are ignored. It does not explicitly mention alternatives or when not to use, but provides sufficient context for proper invocation.

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

query_relationshipsA
Read-only

Query relationships in the active model with optional filters.

All filters are AND-combined. Pass an empty `{}` to list every
relationship (equivalent to the
`pyarchimate://activemodel/relationships` resource).

Supported filter keys:
    - `type` (str): Match relationships with this exact pyArchimate
      relationship type, e.g. `Serving`, `Composition`,
      `Assignment`. The `Relationship` suffix is not used.
    - `source_id` (str): Match relationships whose source element
      UUID equals this value.
    - `target_id` (str): Match relationships whose target element
      UUID equals this value.

Args:
    filter_criteria: Dict containing zero or more of the keys
        above. Unknown keys are ignored.

Returns:
    Success envelope with `data.relationships`, a list of
    `RelationshipDetail` objects (`id`, `name`, `type`,
    `description`, `properties`, `access_type`,
    `influence_strength`, `source_element_id`,
    `target_element_id`).

Errors:
    `InvalidRelationshipTypeError` for an unknown `type`.
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
filter_criteriaYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. Description adds query behavior (AND, ignored keys), return object structure, and error types. Provides context beyond annotations.

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?

Well-structured with clear sections. Each sentence provides necessary information: filter behavior, supported keys, arguments, returns, errors. No redundant content.

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

Completeness5/5

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

Covers filter behavior, valid keys, return format, errors, and prerequisite (active model). Output schema exists, so return fields are documented. Complete for a query tool.

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

Parameters5/5

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

Schema only defines filter_criteria as an object with additionalProperties true. Description enriches by listing valid keys (type, source_id, target_id), their types, and behavior (AND, unknown keys ignored). Fully compensates for 0% schema coverage.

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

Purpose5/5

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

Description clearly states the tool queries relationships in the active model with optional filters. Verb 'Query' and resource 'relationships' are specific. It distinguishes from sibling tools like add_relationship or delete_relationship by focusing on querying.

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

Usage Guidelines4/5

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

Describes how filters are AND-combined and how to list all relationships. Mentions error conditions. However, it does not explicitly compare with other query tools like query_elements or advise when to use this over alternatives.

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

recommend_relationshipC
Read-only

Recommend valid relationship types for source/target ids or types.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentNo
source_idNo
target_idNo
source_typeNo
target_typeNo
strict_archimateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the agent knows it's a safe read operation. The description adds no further behavioral details—such as whether the tool checks against a metamodel or what happens with missing parameters. Since annotations cover safety, this is adequate but not insightful.

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 sentence with no fluff, placing the core action first. However, the extreme brevity sacrifices necessary detail; a sentence or two more would improve clarity without harming 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?

With 6 parameters, an output schema, and many sibling tools, the description is too sparse. It fails to explain parameter choices (e.g., id vs type, strict_archimate), leaving the agent under-informed for correct selection and invocation.

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 explain parameters. It only hints that 'source/target ids or types' are used, ignoring 'intent', 'strict_archimate', and the interplay between id and type parameters. This is insufficient for correct invocation.

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 clearly states the tool recommends valid relationship types for source/target IDs or types, using a specific verb and resource. It distinguishes from most siblings like 'add_relationship' or 'get_relationship_compatibility', though the latter is closely related and not explicitly differentiated.

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 tool versus alternatives like 'get_relationship_compatibility' or 'add_relationship'. The description does not explain the intended context, prerequisites, or exclusions.

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

render_view_to_svg_fileA
Idempotent

Render one view to an SVG file so a human can look at the diagram.

Use this when someone wants to *see* a view without opening Archi —
to check that a layout reads well, or to drop a picture into a
document or chat. Lay the view out first with `auto_layout_view` if
the geometry needs work: rendering never moves anything.

SVG is a rendering, NOT a third model format. It cannot be imported
back into Archi and it is not a substitute for
`export_model_to_file` (`archi` = Archi native `.archimate`,
`archimate` = Open Group exchange XML). Use those to persist a
model; use this to look at one view.

The markup is written to disk and never returned: an 11-element view
is already ~3.2k tokens of SVG text, and reading it back would not
tell you anything you cannot get from `summarize_view` or
`build_quality_report`. Hand the returned path to the user.

Args:
    view_id: ID of the view to render.
    path: Output path on the MCP server's filesystem (`.svg`
        conventionally). `~` is expanded, relative paths resolve
        against the server's CWD, and parent directories are
        created if missing.

Returns:
    Success envelope with `data.path`, `data.view_id`,
    `data.view_name`, `data.model_name`, `data.bytes_written`,
    `data.node_count`, `data.connection_count`, and the rendered
    canvas size in `data.width` / `data.height`. Never the markup.

Errors:
    `ModelNotFoundError` if no model is active.
    `ViewNotFoundError` when `view_id` is unknown.
    `ModelOperationError` for a blank path or a write failure.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
view_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The description adds significant behavior beyond annotations: 'rendering never moves anything', 'SVG is a rendering, NOT a third model format', and 'The markup is written to disk and never returned.' It also explains token size to justify not returning the SVG, and clarifys file creation behavior (expanding ~, creating parent dirs). No contradictions with annotations.

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 well-structured with a clear summary first, then usage details, parameter explanations, return value list, and error cases. Every sentence adds value, and there is no redundancy or wasted words.

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

Completeness5/5

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

Given the tool's complexity (file system handling, return data, error conditions, sibling differentiation), the description is fully complete. It covers all necessary context: when to use, what the output is, how parameters work, what returns and errors occur, and how it differs from related tools.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates: 'view_id: ID of the view to render.' and 'path: Output path on the MCP server's filesystem (.svg conventionally). `~` is expanded, relative paths resolve against the server's CWD, and parent directories are created if missing.' This adds crucial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Render one view to an SVG file so a human can look at the diagram,' providing a specific verb and resource. It also distinguishes from siblings like export_model_to_file and auto_layout_view by clarifying that SVG is not a model format and cannot be imported back.

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

Usage Guidelines5/5

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

Explicit guidance on when to use (to check layout, drop into document/chat) and when not to use (not a substitute for export_model_to_file). It also recommends using auto_layout_view first if layout needs work, providing a clear alternative.

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

repair_semantic_issuesC
Destructive

Apply selected deterministic semantic relationship repairs.

ParametersJSON Schema
NameRequiredDescriptionDefault
repair_idsNo
auto_layoutNo
update_viewsNo
rollback_on_errorNo
repair_all_deterministicNo
preserve_relationship_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true, and the description's verb 'Apply' implies modification without adding detail. The description does not disclose whether operations are reversible, require prior validation, or affect other model aspects, failing to enrich beyond the annotated destructive nature.

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

Conciseness2/5

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

The description is a single brief sentence, but it sacrifices necessary detail. While concise, it is not front-loaded with key information (e.g., tool scope, effect), and the jargon reduces efficiency. Every sentence should earn its place; this one does not fully serve the agent.

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?

Given the tool's complexity (6 parameters, destructiveHint, output schema), the description is incomplete. It does not explain return values, parameter roles, or prerequisites. The output schema exists but is not referenced, leaving gaps in agent understanding.

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

Parameters1/5

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

Schema description coverage is 0% with six parameters, but the description mentions none. Parameters like 'repair_ids', 'auto_layout', and 'rollback_on_error' are undefined, forcing the agent to rely solely on parameter names which may be ambiguous.

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

Purpose3/5

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

The description states 'Apply selected deterministic semantic relationship repairs,' which identifies a specific action and resource. However, the term 'deterministic semantic relationship repairs' is jargon and not explained, reducing clarity compared to more self-explanatory sibling tools like 'validate_semantics'.

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 offers no guidance on when to use this tool versus alternatives. With many sibling tools for editing, validation, and reporting, the lack of explicit when-to-use/when-not-to-use advice leaves the agent to infer usage context.

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

summarize_modelA
Read-only

Summarize the active model: counts, view summaries, totals.

Useful for verifying generation results without dumping full XML.

Returns:
    Success envelope with `data` containing model name, total
    element/relationship/view counts, and per-view node and
    connection counts.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the annotations (readOnlyHint=true) by detailing the return structure (success envelope with data containing model name, counts) and potential errors (ModelNotFoundError). No contradictions with annotations.

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 concise yet comprehensive: three paragraphs covering purpose, usage, return values, and errors. Every sentence adds value, and it is well-structured for quick reading.

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

Completeness5/5

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

Given no parameters and the presence of an output schema (mentioned in description), the description fully covers all necessary details for an agent to understand the tool's behavior, return structure, and error conditions.

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

Parameters4/5

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

With no parameters and 100% schema coverage, the baseline is 4. The description effectively explains what the tool does without needing parameter details, fulfilling the need for completeness.

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

Purpose5/5

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

The description clearly states the tool summarizes the active model with counts, view summaries, and totals. It distinctly differentiates from sibling tools like 'summarize_view' by focusing on the entire model.

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

Usage Guidelines4/5

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

The description specifies that the tool is useful for verifying generation results without dumping full XML, providing a clear context. However, it does not explicitly mention when not to use it or suggest alternatives among the many sibling tools.

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

summarize_viewA
Read-only

Summarize a single view: node count, connection count, gaps.

Args:
    view_id: ID of the view to summarize.

Returns:
    Success envelope with `data` containing the view name, node
    count, connection count, and relationships that could still be
    connected (both endpoints visible) but are not yet drawn.

Errors:
    `ModelNotFoundError` if no model is active.
    `ViewNotFoundError` when `view_id` is unknown.
ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is clear. The description adds valuable behavioral context: return fields (including relationships not yet drawn) and specific error conditions (ModelNotFoundError, ViewNotFoundError). No contradictions.

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 concise with a clear structure: a one-line summary followed by Args, Returns, Errors sections. Every sentence adds value, no fluff.

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

Completeness5/5

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

Given the tool has only one parameter, is read-only, and has an output schema, the description fully covers what the agent needs: what it does, what it returns, and possible errors. No gaps remain.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by documenting the single parameter 'view_id: ID of the view to summarize.' This adds meaning beyond the schema's type definition.

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

Purpose5/5

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

The description uses a specific verb ('Summarize') and resource ('a single view'), and lists exactly what it returns: node count, connection count, gaps. This clearly distinguishes it from sibling tools that modify or create views.

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?

While the purpose is clear, there is no explicit guidance on when to use this tool versus alternatives. It is implied that this is for getting summary statistics before or after modifications, but no exclusions or scenarios are provided.

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

update_elementA
Idempotent

Update an existing ArchiMate element.

Updates is a dict containing only the fields to change. Other fields
are left untouched. Properties are merged into existing properties
(use an empty value to clear a key on subsequent updates).

Args:
    element_id: ID of the element to update.
    updates: Mapping of fields to update. Supported keys:
        - `name` (str): New element name.
        - `description` (str): New documentation text.
        - `folder_path` (str): New folder path; folder root must
          match the element's ArchiMate category.
        - `properties` (dict[str, str]): Property updates merged
          into existing properties.
        Element type cannot be changed; recreate the element to
        change its type.

Returns:
    Success envelope with the updated `ElementDetail` in `data`.

Errors:
    `ElementNotFoundError` when `element_id` is unknown.
    `ModelOperationError` for invalid folder paths.
ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes
element_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Discloses key behaviors beyond annotations: updates are partial (only specified fields change), properties merge with existing (use empty to clear), folder path must match category, and element type immutability. No contradiction with annotations.

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?

Well-structured with Args, Returns, Errors sections. Each sentence adds value; no fluff. Length appropriate for the tool's complexity.

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

Completeness5/5

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

Covers all important aspects: partial update semantics, property merging rules, folder path constraint, type immutability, return type, and specific error cases. Output schema exists but description still summarizes return value.

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

Parameters4/5

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

Schema has 0% description coverage, so description fully compensates. Explains updates dict structure, lists supported keys with types and constraints, and describes element_id usage. Adds meaning beyond the bare schema.

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

Purpose5/5

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

Clearly states 'Update an existing ArchiMate element' with specific verb and resource. Differentiates from sibling tools like add_element and delete_element by explicitly noting element type cannot be changed, leaving recreation as alternative.

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

Usage Guidelines4/5

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

Provides guidance on partial updates via updates dict and property merging. Mentions when to recreate instead of update for type changes. However, lacks explicit comparison to sibling update tools like update_model.

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

update_modelA
Idempotent

Update the active model's name, documentation, and properties.

Updates is a dict containing only the fields to change; other fields
are left untouched and properties are merged into the existing ones.
There is no `model_id` parameter because exactly one model is active.
Works on a loaded model, not only on one created by this server.

Unlike `update_element`, unknown keys are rejected rather than
ignored: a mis-keyed update would silently leave model metadata
unwritten while still reporting success.

Args:
    updates: Mapping of fields to update. Supported keys:
        - `name` (str): New model name. Must be non-blank; it is
          stripped, exactly as in `create_empty_model`.
        - `description` (str): New model documentation. Reported
          back as `documentation`.
        - `documentation` (str): Accepted alias for `description`.
        - `properties` (dict[str, str]): Property updates merged
          into the existing model properties.

Returns:
    Success envelope with `data.model_info` (same shape as
    `pyarchimate://activemodel/info`).

Errors:
    `INVALID_MODEL_UPDATE` when `updates` is not an object or
        contains unsupported keys (`error.details.unsupported_keys`
        and `error.details.supported_keys` list which).
    `INVALID_MODEL_NAME` when `name` is present but not a non-blank
        string.
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Adds significant behavioral detail beyond annotations: updates are merged, properties are merged, unknown keys cause specific errors, idempotent behavior implied by merge semantics. Error cases are listed. No contradiction with annotations.

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

Conciseness4/5

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

Well-structured with Args, Returns, Errors sections and front-loaded purpose. Minor verbosity in error details could be streamlined, but every sentence adds value. Efficient for the complexity.

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

Completeness5/5

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

Given the tool has one complex parameter and no output schema details shown, the description provides complete context: active model constraint, error types with details, return shape reference. No gaps for correct invocation.

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

Parameters5/5

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

Input schema has 0% description coverage (just 'additionalProperties: true'), but the description's Args section fully defines supported keys, types, constraints (non-blank, stripped), aliases, and merge behavior. Compensates completely for schema lack.

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

Purpose5/5

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

Clearly states 'Update the active model' with specific fields (name, documentation, properties). Distinguishes from sibling update_element by noting different behavior on unknown keys and clarifies it works on any loaded model, not just locally created ones.

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

Usage Guidelines5/5

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

Explicitly contrasts with update_element ('unknown keys are rejected rather than ignored'), guides when to use each. Also explains the updates dict semantics (only change specified fields, merge properties) and the active model constraint, giving clear context for invocation.

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

update_relationshipA
Idempotent

Update an existing ArchiMate relationship.

Endpoints (source/target) and relationship type cannot be changed.
Recreate the relationship to change those.

Args:
    relationship_id: ID of the relationship to update.
    updates: Mapping of fields to update. Supported keys:
        - `name` (str)
        - `description` (str)
        - `properties` (dict[str, str]): merged into existing
          properties.
        - `access_type` (str): only meaningful for `Access`. One of
          `Access`, `Read`, `Write`, `ReadWrite`.
        - `influence_strength` (str): only meaningful for
          `Influence`. One of `+`, `++`, `-`, `--`, or `0`-`10`.

Returns:
    Success envelope with the updated `RelationshipDetail` in
    `data`.

Errors:
    `RelationshipNotFoundError` when `relationship_id` is unknown.
    `ModelOperationError` for unsupported access/influence values.
ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes
relationship_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description reveals that updates merge 'properties' and that certain fields ('access_type', 'influence_strength') are only meaningful for specific relationship types. Annotations indicate idempotent (idempotentHint=true) and non-destructive, which aligns with the update semantics.

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 well-structured with sections for Args, Returns, Errors, and a note about immutability. It is slightly verbose but every sentence adds value; bullet points improve readability.

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?

Given the tool's complexity (2 parameters with nested object), the description covers return type (Success envelope with RelationshipDetail), error cases, and parameter details. With an output schema present, it is sufficiently complete.

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

Parameters5/5

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

Despite 0% schema description coverage, the description thoroughly explains both parameters: 'relationship_id' as the ID, and 'updates' as a mapping with supported keys and their types/restrictions (e.g., 'name' as string, 'access_type' constrained to specific values). This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description clearly states 'Update an existing ArchiMate relationship' and specifies immutable fields (endpoints, type) versus mutable ones. This distinguishes it from sibling tools like 'add_relationship' and 'delete_relationship'.

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

Usage Guidelines4/5

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

The description explicitly states endpoints and type cannot be changed and advises recreating to change those. While it does not explicitly say 'when to use this tool,' the context of updating versus adding or deleting is clear.

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

update_viewA
Idempotent

Update an existing ArchiMate view.

Only metadata fields can be updated; nodes and connections are
managed by `add_node_to_view`, `add_connection_to_view`, and the
layout tools.

Args:
    view_id: ID of the view to update.
    updates: Mapping of fields to update. Supported keys:
        - `name` (str): New view name.
        - `description` (str): New documentation text.
        - `properties` (dict[str, str]): Property updates merged
          into existing properties.
    viewpoint: Optional viewpoint, as on `create_view`. Validated
        before anything is applied: an unknown value leaves the
        view completely untouched, `name` and `description`
        included.

Returns:
    Success envelope with the updated `ViewDetail` in `data`.

Errors:
    `ViewNotFoundError` when `view_id` is unknown.
    `ModelOperationError` for an unknown `viewpoint`, with both
    accepted catalogs in `error.details`.
ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes
view_idYes
viewpointNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true. Description adds that viewpoint validation prevents partial updates, specifying that unknown viewpoint leaves view untouched. Provides error handling details.

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?

Efficiently structured with a clear purpose statement, constraints, then Args/Returns/Errors sections. Every sentence adds value; no wasted words.

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

Completeness5/5

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

Combined with annotations and output schema, the description fully covers tool purpose, constraints, parameters, return, and errors, enabling correct agent invocation.

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

Parameters5/5

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

Schema coverage is 0%, but description thoroughly documents all parameters: view_id, updates (with supported keys and merge behavior for properties), and viewpoint (validation, default null).

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

Purpose5/5

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

Clearly states 'Update an existing ArchiMate view' and explicitly distinguishes itself from sibling tools like add_node_to_view and add_connection_to_view by noting that nodes and connections are managed elsewhere.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (metadata updates) and when-not-to-use (nodes/connections), names specific alternatives, and explains viewpoint validation behavior.

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

validate_modelA
Read-only

Validate visual references in the active model.

Delegates to pyArchimate's `check_invalid_conn` and
`check_invalid_nodes` helpers. Diagram-only annotation connectors
(a note line joining an Archi Note to an element) are excluded: they
have no backing relationship by design, so they are not defects. A
connector between two element-backed nodes whose relationship is
genuinely missing is still reported. Use `validate_semantics` for
ArchiMate semantic checks beyond visual references.

Returns:
    Success envelope with `data.is_valid` (bool),
    `data.invalid_connection_ids`, `data.invalid_node_ids`,
    `data.invalid_connections_count`, and
    `data.invalid_nodes_count`.

Errors:
    `ModelNotFoundError` if no model is active.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Discloses delegation to pyArchimate helpers, exclusion of certain connectors, and error conditions (ModelNotFoundError). Annotations already mark it read-only; the description adds meaningful behavioral context 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?

Structured into clear sections: purpose, delegation details, return data, errors. Every sentence is essential, no filler. Front-loaded with main purpose.

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

Completeness5/5

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

Given no parameters and a rich output schema, the description covers purpose, usage guidelines, behavioral details, return structure, and errors. It is fully sufficient for an agent to decide when and how to use this tool.

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

Parameters4/5

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

No parameters exist, so the description cannot add parameter semantics. Baseline is 4 for zero-parameter tools. The description compensates by detailing return fields, which adds value beyond schema.

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

Purpose5/5

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

The description clearly states the tool validates visual references in the active model, specifying it checks invalid connections and nodes. It distinguishes itself from the sibling 'validate_semantics' by clarifying one is for visual references and the other for semantic checks.

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

Usage Guidelines5/5

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

Explicitly says when to use (for visual references) and when not to (use validate_semantics for semantic checks). Also clarifies that diagram-only annotation connectors are excluded from defect reporting, giving clear guidance on what is and isn't checked.

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

validate_semanticsA
Read-only

Run ArchiMate semantic checks beyond visual reference validation.

Checks include invalid relationship combinations, missing node
references, duplicate element names within the same folder/type,
elements not placed in any view, and orphan service/data elements.

Args:
    detail: `summary` (default) or `full`. The completeness checks
        fire once per element and once per relationship, so a
        mid-build model with no views yet produces one issue per
        concept — 214 issues, ~55 KB, on a 71-element model — of
        which the repeated `code`, `severity` and `message` strings
        are most of the weight. Ask for `full` only when you need
        to read individual issue dicts.

Returns:
    Success envelope with `data.is_valid` (bool),
    `data.issues_count`, `data.issue_counts`, and `data.detail`.

    Under `summary`: `data.issues_by_code` maps each code to
    `{count, severity, ids}`, and `data.errors` carries the
    error-severity issues in full, so `is_valid: false` always
    arrives with its reason. There is deliberately no `data.issues`
    key — read `full` if you want that list.

    Under `full`: `data.issues`, one dict per issue.

Errors:
    `ModelNotFoundError` if no model is active.
    `ModelOperationError` for an unknown `detail` level, with close
    matches in `error.details.suggestions`.
ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, and the description adds detailed behavioral traits: specific checks performed, parameter effects, return structure, and error types. No contradictions.

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 well-organized with clear sections (purpose, checks, args, returns, errors). Every sentence adds value, and it is front-loaded with the main purpose.

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

Completeness5/5

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

Despite having only one parameter and an existing output schema, the description fully covers the tool's behavior, return values, and errors. It is complete for its complexity and sibling context.

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

Parameters5/5

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

The single parameter detail is thoroughly explained with examples of output size and guidance on choosing summary vs full. This compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description clearly states it runs ArchiMate semantic checks beyond visual reference validation, and lists specific check categories. This distinguishes it from sibling tools like validate_model and repair_semantic_issues.

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

Usage Guidelines4/5

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

The description provides guidance on when to use the detail parameter (summary vs full) and mentions error conditions, but does not explicitly compare to sibling tools or state when not to use this tool.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.8.0
    • Changedauto_layout_view1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "summary",
        +  "title": "Detail",
        +  "type": "string"
        +}
    • Changedconnect_visible_relationships1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "summary",
        +  "title": "Detail",
        +  "type": "string"
        +}
    • Changedvalidate_semantics1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "summary",
        +  "title": "Detail",
        +  "type": "string"
        +}
  2. 45 tool updatesv0.1.0
    • First observedadd_connection_to_view
    • First observedadd_connections_to_view
    • First observedadd_element
    • First observedadd_elements
    • First observedadd_node_to_view
    • First observedadd_nodes_to_view
    • First observedadd_note_to_view
    • First observedadd_relationship
    • First observedadd_relationships
    • First observedassess_togaf_readiness
    • First observedauto_layout_view
    • First observedbuild_quality_report
    • First observedconnect_visible_relationships
    • First observedcount_by_type
    • First observedcreate_empty_model
    • First observedcreate_model_from_spec
    • First observedcreate_view
    • First observeddelete_element
    • First observeddelete_relationship
    • First observeddelete_view
    • First observedensure_all_relationships_in_views
    • First observedexport_elements_to_csv
    • First observedexport_model_content
    • First observedexport_model_to_file
    • First observedexport_relationships_to_csv
    • First observedget_relationship_compatibility
    • First observedget_usage_guide
    • First observedinspect_active_model
    • First observedlist_orphan_elements
    • First observedlist_supported_types
    • First observedload_model_from_content
    • First observedload_model_from_file
    • First observedquery_elements
    • First observedquery_relationships
    • First observedrecommend_relationship
    • First observedrender_view_to_svg_file
    • First observedrepair_semantic_issues
    • First observedsummarize_model
    • First observedsummarize_view
    • First observedupdate_element
    • First observedupdate_model
    • First observedupdate_relationship
    • First observedupdate_view
    • First observedvalidate_model
    • First observedvalidate_semantics

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, such as 'add_element' vs 'add_relationship' vs 'add_node_to_view'. However, there is some overlap between 'export_model_content' and 'export_model_to_file', and between 'validate_model' and 'validate_semantics', though descriptions help differentiate them.

Naming Consistency3/5

Tool names use a mix of verbs like 'add', 'create', 'update', 'delete', 'export', 'load', 'query', 'validate', etc. Without a consistent verb_noun pattern, but the names are still descriptive and readable.

Tool Count3/5

At 45 tools, the count is high but justifiable given the complexity of ArchiMate modeling, covering CRUD for multiple entity types, validation, layout, and reporting. However, some redundancy exists with batch operations and similar query tools.

Completeness4/5

The tool set covers core model lifecycle: creation, editing, deletion, validation, export, and layout. Notable gaps include lack of update/delete for notes and limited folder management, but overall domain coverage is strong.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/byrondelgado/mcp-archimate'

If you have feedback or need assistance with the MCP directory API, please join our Discord server