Skip to main content
Glama
mmar-mcp-server
by ProTech001

MMAR-MCP Server

An MCP (Model Context Protocol) server that connects Large Language Models to the MM-AR metamodeling platform, enabling users to create complete metamodels and model instances through natural language interaction.

Overview

MMAR-MCP exposes the MM-AR platform's capabilities through the Model Context Protocol:

  • 62 tools for authentication, metamodel CRUD, and instance CRUD operations

  • 5 resources providing platform architecture docs, VizRep templates, the meta-model schema, attribute types, and a reference metamodel

  • 3 prompts encoding guided workflows for metamodel creation, instance creation, and model analysis

The server communicates via STDIO transport and works with any MCP-compatible host (Cursor, Claude Desktop, or any client implementing the MCP specification).

Related MCP server: OpenKer Modeler MCP Server

Prerequisites

Requirement

Version

Purpose

Node.js

v18+

Run the MCP server

Docker

Latest

Run the MM-AR platform stack

MCP host

Any

Connect LLMs to the server (e.g., Cursor, Claude Desktop)

Quick Start

Follow these five steps to go from zero to a working setup.

Step 1: Start the MM-AR Platform

Option A: Full Docker deployment (recommended for first-time setup)

Clone and start the full MM-AR stack using Docker:

git clone https://github.com/MM-AR/mmar-docker-installation.git
cd mmar-docker-installation
docker compose --env-file .env up -d

Wait until all containers are healthy. You can check with:

docker compose ps

Option B: Hybrid deployment (PostgreSQL in Docker, services local)

This is the setup used during the thesis experiments. It requires cloning the main MM-AR repository:

# 1. Start PostgreSQL in Docker
docker run -d --name mmar_postgres \
  -e POSTGRES_USER=api -e POSTGRES_PASSWORD=root -e POSTGRES_DB=api \
  -p 5432:5432 postgres:16

# 2. Start the API server (requires mmar-server/.env with JWT_SECRET)
cd mmar-server
export $(cat .env | xargs)
cd ..
node dist/mmar-server/index.js

# 3. Start web clients (in separate terminals)
cd mmar-metamodeling-client && npm start   # port 8070
cd mmar-modeling-client && npm start        # port 8080

Once running, the following services are available:

Service

URL

Description

API Server

http://localhost:8000

REST API (the MCP server connects here)

Metamodeling Client

http://localhost:8070

Define modeling languages

Modeling Client

http://localhost:8080

Create model instances

VizRep Client

http://localhost:8090

Design visual representations

Verify the API is up by visiting http://localhost:8000/login in your browser. You should see a login page. Default credentials: admin / admin.

Step 2: Clone and Build the MCP Server

git clone https://github.com/ProTech001/mmar-mcp-server.git
cd mmar-mcp-server
npm install
npm run build

The npm run build step compiles TypeScript to JavaScript in the dist/ folder. This step is required before the server can run.

Step 3: Verify the Installation

Run the end-to-end test suite to confirm everything works:

npm test

This spawns the MCP server as a child process and sends JSON-RPC messages via STDIO, exactly as a real MCP host would. It tests the handshake, authentication, tool listing, resource reading, prompt retrieval, and a full create/verify/delete cycle.

Expected output (all tests should pass):

==============================================
  MM-AR MCP Server — End-to-End Test
==============================================

  ✅ PASS  Initialize (handshake)
           → Server: mmar-mcp-server

  ✅ PASS  List Tools
           → 62 tools registered (expected 62)

  ✅ PASS  List Resources
           → 5 resource(s) (expected 5)

  ✅ PASS  Read Platform Info Resource
           → ...

  ...

==============================================
  Results: 16 passed, 0 failed, 16 total
==============================================

If any test fails, see the Troubleshooting section below.

Step 4: Configure Your MCP Host

The server runs over STDIO. Configure your MCP host to launch it as a subprocess.

Cursor IDE — create or edit .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "mmar": {
      "command": "node",
      "args": ["/absolute/path/to/mmar-mcp-server/dist/index.js"],
      "env": {
        "MMAR_API_URL": "http://localhost:8000"
      }
    }
  }
}

Claude Desktop — add to your Claude Desktop configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "mmar": {
      "command": "node",
      "args": ["/absolute/path/to/mmar-mcp-server/dist/index.js"],
      "env": {
        "MMAR_API_URL": "http://localhost:8000"
      }
    }
  }
}

Replace /absolute/path/to/mmar-mcp-server with the actual path where you cloned the repository.

Step 5: Start Using

Once configured, the MCP host can invoke any of the 62 tools. Three guided prompts are available for common workflows:

  1. create-metamodel — Create a new modeling language from a natural language description

  2. create-model — Create a model instance using an existing metamodel

  3. analyze-model — Inspect and analyze existing models

Example: "Use the create-metamodel prompt to create a Petri Net modeling language with Place nodes, Transition nodes, and Arc connections."

Configuration

The server reads one environment variable:

Variable

Default

Description

MMAR_API_URL

http://localhost:8000

Base URL of the MM-AR REST API

Set it via your shell, the MCP host config (see Step 4), or inline:

MMAR_API_URL=http://your-host:8000 node dist/index.js

Tool Catalog

All 62 tools are prefixed with mmar_ and grouped into three categories:

Authentication (3 tools)

Tool

Description

mmar_login

Authenticate with username and password

mmar_check_session

Check whether a session is active

mmar_logout

End the current session

Metamodel Operations (26 tools)

Category

Tools

Scene types

list_scene_types, get_scene_type, create_scene_type, update_scene_type, delete_scene_type

Classes

get_classes_for_scene_type, get_class, create_class, update_class, delete_class

Relation classes

get_relationclasses_for_scene_type, get_relationclass, create_relationclass, update_relationclass, delete_relationclass

Attributes

get_attribute, list_attribute_types, get_attribute_type, create_attribute_for_class, create_attribute_for_scene_type, update_attribute

Roles

get_role, update_role

Ports

get_port, create_port, update_port

Instance Operations (33 tools)

Category

Tools

Scenes

list_scene_instances, get_scene_instance, create_scene_instance, update_scene_instance, delete_scene_instance

Class instances

get_class_instances, get_class_instance, create_class_instance, update_class_instance, delete_class_instance

Relation instances

get_relationclass_instances, get_relationclass_instance, create_relationclass_instance, update_relationclass_instance, delete_relationclass_instance

Attribute instances

get_attribute_instance, get_attribute_instances_for_class_instance, get_attribute_instances_for_relationclass_instance, update_attribute_instance, delete_attribute_instance

Role instances

get_role_instance, get_role_from_for_relationclass_instance, get_role_to_for_relationclass_instance, update_role_instance

Port instances

get_port_instance, get_port_instances_for_scene_instance, create_port_instance, update_port_instance, delete_port_instance

Bendpoints

get_bendpoints_for_relationclass_instance, create_bendpoint, update_bendpoint, delete_bendpoint

All tool names carry the mmar_ prefix (e.g., mmar_create_class). The prefix is omitted in the table above for readability.

Resources

URI

Description

mmar://platform/info

Platform architecture overview and guided workflows

mmar://reference/vizrep-templates

VizRep code templates for visual representations

mmar://reference/metamodel-schema

JSON schema for the meta-model structure

mmar://reference/attribute-types

Available attribute types (String, Float, Boolean, etc.)

mmar://reference/example-metamodel

Complete Petri Net metamodel as a reference example

Project Structure

mmar-mcp-server/
├── src/
│   ├── index.ts              # Entry point (STDIO transport)
│   ├── server.ts             # MCP server setup and capability registration
│   ├── config.ts             # Configuration (reads MMAR_API_URL)
│   ├── api-client.ts         # MM-AR REST API client with JWT auth and retry logic
│   ├── tools/
│   │   ├── index.ts          # Tool registration hub
│   │   ├── auth.tools.ts     # Authentication tools (3)
│   │   ├── meta.tools.ts     # Metamodel CRUD tools (26)
│   │   └── instance.tools.ts # Instance CRUD tools (33)
│   ├── resources/
│   │   └── index.ts          # Resource definitions (5)
│   └── prompts/
│       └── index.ts          # Prompt definitions (3)
├── test-mcp.mjs              # End-to-end test suite
├── test-data/                 # Example payloads for MCP Inspector testing
│   ├── README.md
│   ├── example-ER-diagram-metamodel.json
│   └── example-petri-net-metamodel.json
├── package.json
├── tsconfig.json
└── .gitignore

Reproducible Evaluation Harness

Controlled trials (not Cursor chat). Start here:

→ experiments/README.md — setup, how to run, where JSON lives
→ experiments/EVALUATION-PROCEDURE.md — isolation / scoring protocol
→ experiments/harness-results/PRELIMINARY-RESULTS.md — Petri Net preliminary (6 trials)

cd experiment-harness
npm install
cp .env.example .env   # add ANTHROPIC_API_KEY; never commit .env

export MMAR_API_URL=http://127.0.0.1:8000
curl -s -o /dev/null -w "API %{http_code}\n" http://127.0.0.1:8000/login   # must be 200

npm run one -- --phase metamodel --language petri-net --trial a
npm run one -- --phase instance --language petri-net --trial a
npm run scoreboard
open ../experiments/harness-results/scoreboard.html

Prefer 127.0.0.1 over localhost if you see connection refused. Re-run npm run scoreboard after new trials.

npm run pilot                 # scorer self-test
npm run pilot -- --with-api   # + reset + MCP dry-run + GT seed (API must be up)

Testing with MCP Inspector

For interactive debugging, you can use the MCP Inspector:

npm run inspect

This opens a web UI where you can browse tools, call them manually, and inspect request/response payloads. See test-data/README.md for step-by-step instructions and example payloads.

Troubleshooting

ECONNREFUSED or "Cannot connect to MM-AR API"

The MM-AR platform is not running or not reachable at the configured URL.

  1. Check that Docker containers are running: docker compose ps

  2. Verify the API is up: curl http://localhost:8000/login

  3. If using a custom URL, ensure MMAR_API_URL is set correctly

"Port 8000 already in use"

Another process is using port 8000. Either stop that process or configure the MM-AR platform to use a different port (see the mmar-docker-installation docs).

Tests fail at "Login as admin"

The MM-AR database may not be fully initialized yet. The Docker containers need a few seconds after startup to complete database initialization. Wait 10-15 seconds after docker compose up and retry.

"Cannot find module dist/index.js"

You need to compile the TypeScript source first:

npm run build

MCP host does not detect the server

  • Ensure the path in your MCP host config points to the absolute path of dist/index.js

  • Restart the MCP host after changing the configuration

  • Check that Node.js v18+ is installed: node --version

License

ISC

Citation

If you use this software in your research, please cite:

@inproceedings{chima2026mmar-mcp,
  title={Agentic Creation of Modeling Languages: Extending the MM-AR Metamodeling Platform with MCP},
  author={Chima, Prosper and Fill, Hans-Georg and Curty, Simon},
  booktitle={Proceedings of the International Conference on Conceptual Modeling (ER), Demos and Posters},
  year={2026}
}

Available Tools

62 tools
mmar_check_sessionA

Check if there is an active MM-AR session (i.e., if the user is currently logged in).

Inputs: no named parameters.

mmar_create_attribute_for_classA

Add a new attribute to an existing class. The attribute_data must include uuid, name, attribute_type (with uuid and name of an existing AttributeType), default_value, sequence, and ui_component.

Inputs: class_uuid (required), attribute_data (required).

mmar_create_attribute_for_scene_typeA

Add a new attribute to an existing SceneType (scene-level attribute, not on a class). Same structure as class attributes.

Inputs: attribute_data (required), scene_type_uuid (required).

mmar_create_bendpointA

Create a new bendpoint on a relationclass instance (connection). Bendpoints add waypoints to the connection line for routing.

Inputs: bendpoint_data (required), relationclass_instance_uuid (required).

mmar_create_classA

Create a new class (node/shape type) and add it to an existing SceneType. Use this for incremental metamodel building instead of recreating the whole SceneType.

The class_data JSON should include: uuid, name, geometry (VizRep function or null), is_reusable, is_abstract, attributes (array), and ports (array).

Inputs: class_data (required), scene_type_uuid (required).

mmar_create_class_instanceA

Create a new class instance (element/node) within a scene instance.

IMPORTANT: The API does NOT auto-create attribute instances. You MUST include them in the payload. For each attribute on the meta-Class, create an attribute_instance with:

  • uuid: new UUIDv4

  • name: same as meta-attribute name

  • value: the desired value (or the meta-attribute's default_value)

  • uuid_attribute: the meta-attribute's UUID

Example payload: { "uuid": "", "uuid_class": "", "name": "My Element", "coordinates_2d": {"x": 0, "y": 0, "z": 0}, "attribute_instance": [ { "uuid": "", "name": "Name", "value": "My Element", "uuid_attribute": "" } ] }

Inputs: class_instance_data (required), scene_instance_uuid (required).

mmar_create_portA

Create a new port (connection point) on a class. Ports define where connections can attach to an element.

Inputs: uuid (required), port_data (required).

mmar_create_port_instanceB

Create a new port instance within a scene instance.

Inputs: port_instance_data (required), scene_instance_uuid (required).

mmar_create_relationclassA

Create a new relationclass (edge/connection type) and add it to an existing SceneType.

IMPORTANT: The classes referenced in role_from.class_references and role_to.class_references MUST already exist in the SceneType.

The relationclass_data JSON should include: uuid, name, geometry, role_from (with uuid, name, class_references[{uuid, min, max}]), role_to (same structure), bendpoint, attributes, ports.

Inputs: scene_type_uuid (required), relationclass_data (required).

mmar_create_relationclass_instanceA

Create a new relationclass instance (connection/edge) within a scene instance.

Include:

  • uuid, uuid_class, uuid_relationclass (all set to the meta-Relationclass UUID)

  • role_instance_from: { uuid, uuid_role, uuid_has_reference_class_instance }

  • role_instance_to: { uuid, uuid_role, uuid_has_reference_class_instance }

  • attribute_instance: [...] (for each attribute on the meta-Relationclass)

line_points are AUTO-POPULATED from source/target coordinates — you do NOT need to provide them.

Inputs: scene_instance_uuid (required), relationclass_instance_data (required).

mmar_create_scene_instanceA

Create a new model instance (diagram) for a specific SceneType. The scene_instance_data should be a JSON object with at minimum: uuid (generate a new UUID v4), name, and optionally class_instances, relationclasses_instances, role_instances, attribute_instances, and port_instances arrays.

Inputs: scene_type_uuid (required), scene_instance_data (required).

mmar_create_scene_typeA

Create a complete modeling language (SceneType) in MM-AR in a SINGLE atomic transaction. This is the primary way to create metamodels.

IMPORTANT RULES:

  1. Pre-generate ALL UUIDs (v4) for every object in the payload (SceneType, Classes, Attributes, RelationClasses, Roles).

  2. Call mmar_list_attribute_types FIRST to get AttributeType UUIDs (e.g., String, Float).

  3. Classes are created BEFORE RelationClasses — role class_references must point to class UUIDs in the same payload.

  4. Duplicate UUID → 409 CONFLICT.

  5. The entire operation is atomic — all or nothing.

The scene_type_data JSON must follow this structure: { "uuid": "", "name": "My Language", "description": "...", "classes": [{ uuid, name, geometry, attributes: [{ uuid, name, attribute_type: { uuid, name }, default_value, sequence }], ports: [] }], "relationclasses": [{ uuid, name, geometry, role_from: { uuid, name, class_references: [{ uuid, min, max }] }, role_to: { uuid, name, class_references: [{ uuid, min, max }] }, attributes: [], ports: [] }], "attributes": [], "ports": [], "procedures": [] }

Inputs: uuid (required), scene_type_data (required).

mmar_delete_attribute_instanceB

Delete a specific attribute instance by its UUID.

Inputs: uuid (required).

mmar_delete_bendpointA

Delete a specific bendpoint from a connection by its UUID.

Inputs: uuid (required).

mmar_delete_classA

Delete a class (node type) from a metamodel permanently. This also removes its attributes, ports, and any role references to it.

Inputs: uuid (required).

mmar_delete_class_instanceA

Delete a specific class instance (element/node) from a diagram by its UUID.

Inputs: uuid (required).

mmar_delete_port_instanceA

Delete a specific port instance by its UUID.

Inputs: uuid (required).

mmar_delete_relationclassA

Delete a relationclass (edge type) from a metamodel permanently. This also removes its roles, attributes, and ports.

Inputs: uuid (required).

mmar_delete_relationclass_instanceA

Delete a specific relationclass instance (connection/edge) from a diagram by its UUID.

Inputs: uuid (required).

mmar_delete_scene_instanceA

Delete a specific model instance (diagram) and all its contents by UUID.

Inputs: uuid (required).

mmar_delete_scene_typeA

Delete a modeling language (SceneType) and ALL its contents (classes, relationclasses, attributes, etc.) permanently. This cannot be undone.

Inputs: uuid (required).

mmar_get_attributeA

Get the full details of a specific meta-attribute by UUID. Returns the attribute definition including its type, default value, sequence, and UI component.

Inputs: uuid (required).

mmar_get_attribute_instanceA

Get the full details of a specific attribute instance by its UUID. Returns the attribute value, type reference, and which element it belongs to.

Inputs: uuid (required).

mmar_get_attribute_instances_for_class_instanceA

Get all attribute instances for a specific class instance (element).

Inputs: class_instance_uuid (required).

mmar_get_attribute_instances_for_relationclass_instanceA

Get all attribute instances for a specific relationclass instance (connection).

Inputs: relationclass_instance_uuid (required).

mmar_get_attribute_typeA

Get full details of a specific attribute type by UUID. Returns the type definition including its regex validation pattern, name, and description.

Inputs: uuid (required).

mmar_get_bendpoints_for_relationclass_instanceA

Get all bendpoint instances for a specific relationclass instance (connection). Bendpoints define intermediate waypoints on a connection line.

Inputs: relationclass_instance_uuid (required).

mmar_get_classA

Get the full details of a specific class (node type) by its UUID. Returns the class with its attributes, ports, and geometry (VizRep).

Inputs: uuid (required).

mmar_get_classes_for_scene_typeA

Get all classes (node/shape types) defined in a specific modeling language (SceneType). Classes represent the elements that can be placed on a diagram.

Inputs: scene_type_uuid (required).

mmar_get_class_instanceA

Get the full details of a specific class instance (element/node) by its UUID. Returns the class instance with its attribute instances, port instances, and position.

Inputs: uuid (required).

mmar_get_class_instancesA

Get all class instances (elements/nodes) within a specific scene instance (diagram).

Inputs: scene_instance_uuid (required).

mmar_get_portB

Get the full details of a specific port by UUID. Ports are connection points on classes.

Inputs: uuid (required).

mmar_get_port_instanceA

Get the full details of a specific port instance by its UUID.

Inputs: uuid (required).

mmar_get_port_instances_for_scene_instanceA

Get all port instances within a specific scene instance.

Inputs: scene_instance_uuid (required).

mmar_get_relationclassA

Get the full details of a specific relation type (edge type) by its UUID. Returns the relationclass with its role_from, role_to, attributes, and connection rules.

Inputs: uuid (required).

mmar_get_relationclasses_for_scene_typeA

Get all relation types (edge/connection types) defined in a specific modeling language (SceneType). Relationclasses define how elements can be connected to each other, including their roles (source/destination rules).

Inputs: scene_type_uuid (required).

mmar_get_relationclass_instanceA

Get the full details of a specific relationclass instance (connection/edge) by its UUID.

Inputs: uuid (required).

mmar_get_relationclass_instancesA

Get all relationclass instances (connections/edges) within a specific scene instance (diagram).

Inputs: scene_instance_uuid (required).

mmar_get_roleA

Get the full details of a specific role by UUID. Returns the role definition including its class_references (which classes it can connect to), port_references, and cardinality (min/max).

Inputs: uuid (required).

mmar_get_role_from_for_relationclass_instanceA

Get the source (from) role instance of a specific relationclass instance.

Inputs: relationclass_instance_uuid (required).

mmar_get_role_instanceA

Get the full details of a specific role instance by its UUID. Returns the role instance with its class instance reference and cardinality.

Inputs: uuid (required).

mmar_get_role_to_for_relationclass_instanceA

Get the destination (to) role instance of a specific relationclass instance.

Inputs: relationclass_instance_uuid (required).

mmar_get_scene_instanceA

Get the full details of a specific model instance (diagram) by its UUID. Returns the complete SceneInstance including all class instances, relationclass instances, attribute instances, role instances, and port instances.

Inputs: uuid (required).

mmar_get_scene_typeA

Get the full details of a specific modeling language (SceneType) by its UUID. Returns the complete SceneType including all its classes, relationclasses, attributes, ports, and roles.

Inputs: uuid (required).

mmar_list_attribute_typesA

List all available attribute types in MM-AR (e.g., String, Float, Integer, Boolean, Enumeration, Table). These are the primitive data types that attributes can use. You MUST know these UUIDs before creating attributes on classes or relationclasses.

Inputs: no named parameters.

mmar_list_scene_instancesA

List all model instances (diagrams) for a specific modeling language (SceneType). Returns an array of SceneInstance objects with their UUIDs, names, and content.

Inputs: scene_type_uuid (required).

mmar_list_scene_typesA

List all available modeling languages (SceneTypes) in MM-AR. Each SceneType defines a modeling language with its classes, relations, and rules. Returns an array of SceneType objects with their UUIDs and names.

Inputs: no named parameters.

mmar_loginA

Log in to the MM-AR metamodeling platform. This MUST be called first before using any other MM-AR tools. Returns a confirmation that the session is active.

Inputs: password (required), username (required).

mmar_logoutA

Log out from the MM-AR platform by clearing the stored session token.

Inputs: no named parameters.

mmar_update_attributeB

Update an existing meta-attribute. Send the updated attribute data including name, default_value, sequence, ui_component, and attribute_type.

Inputs: uuid (required), attribute_data (required).

mmar_update_attribute_instanceA

Update the value of an attribute instance. Use this to change data values on elements (e.g., setting a name, description, or any custom attribute).

Inputs: attribute_data (required), attribute_instance_uuid (required).

mmar_update_bendpointA

Update an existing bendpoint. Use this to change the waypoint position.

Inputs: uuid (required), bendpoint_data (required).

mmar_update_classA

Update an existing class (node type). Send the complete desired state — the server will diff and apply changes to attributes, ports, and other properties.

Inputs: uuid (required), class_data (required).

mmar_update_class_instanceA

Update an existing class instance. Send the complete desired state including position, attribute instances, etc.

Inputs: uuid (required), class_instance_data (required).

mmar_update_portA

Update an existing port. Send the complete desired state of the port.

Inputs: uuid (required), port_data (required).

mmar_update_port_instanceA

Update an existing port instance. Send the complete desired state.

Inputs: uuid (required), port_instance_data (required).

mmar_update_relationclassA

Update an existing relationclass (edge type). Send the complete desired state — the server will diff and apply changes to roles, attributes, and other properties.

Inputs: uuid (required), relationclass_data (required).

mmar_update_relationclass_instanceA

Update an existing relationclass instance (connection/edge). Send the complete desired state.

Inputs: uuid (required), relationclass_instance_data (required).

mmar_update_roleA

Update an existing role on a relationclass. Use this to change cardinality (min/max) or which classes a role can connect to (class_references). Send the complete desired state of the role.

Inputs: uuid (required), role_data (required).

mmar_update_role_instanceA

Update an existing role instance. Use this to change which class instance a connection endpoint references.

Inputs: uuid (required), role_instance_data (required).

mmar_update_scene_instanceA

Update an existing model instance (diagram). Uses smart diffing — new elements are added, existing ones updated.

IMPORTANT: This is the RECOMMENDED way to add connections (relationclass instances). Include uuid_scene_type in the payload. New relationclasses_instances entries will be created.

The payload must include at minimum: uuid, name, uuid_scene_type. Add relationclasses_instances array with connection objects including role_instance_from/to.

Inputs: scene_instance_data (required), scene_instance_uuid (required).

mmar_update_scene_typeA

Update an existing modeling language (SceneType). Uses smart diff-based updates by default — new children are added, existing ones are updated.

Set hardpatch=true for FULL REPLACEMENT mode: children not in the payload will be DELETED. Use with caution.

Send the complete desired state of the SceneType (same structure as mmar_create_scene_type).

Inputs: uuid (required), scene_type_data (required), hardpatch.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 62 tools

    Disambiguation5/5

    Every tool targets a distinct resource-action pair, with detailed descriptions that differentiate even similar operations like getting the 'from' vs 'to' role of a relationclass instance. There is no ambiguity between tools.

    Naming Consistency5/5

    All tools follow a consistent `mmar_` prefix with snake_case verb_noun naming (e.g., `mmar_create_class`, `mmar_get_scene_instance`). Verbs are used predictably: `list` for collections, `get` for individual items, and `create`/`update`/`delete` for mutations.

    Tool Count2/5

    62 tools is far beyond the typical MCP scope, making the surface unwieldy. While the domain is complex, the count is excessive and could likely be consolidated by grouping related operations or using parameterized actions.

    Completeness3/5

    The tool set covers most CRUD operations for both metamodel and instance levels, but notable gaps exist: there is no way to delete a meta-attribute, a role, or a port. These missing operations could hinder agents trying to fully modify a metamodel.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables AI agents to traverse SysML v2 model graphs, query requirements, and perform impact analysis for model-based systems engineering. It allows agents to interact with plain-text models to automate documentation and refine system architectures.
      -
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables AI-driven graphical diagram creation and manipulation using natural language, with support for BPMN workflows, analysis, and manual editing via the Model Context Protocol.
      1
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables natural language conversion of production and queueing systems into Petri net models, with simulation and PNML export via MCP tools.
      66
      MIT