Context Mapper MCP 服务

Context Mapper MCP 服务是一个用于领域驱动设计(DDD)建模的服务,支持 CML 模型的解析、序列化、校验与管理,并可生成 PlantUML、HTML 上下文地图及 Bounded Context Canvas,适用于 AI 助手辅助的 DDD 建模和上下文映射场景。

  • by thijs-hakkenberg
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 thijs-hakkenberg/contextmapper_mcp

使用说明

Context Mapper MCP Server

An MCP (Model Context Protocol) server that enables AI assistants to work with Domain-Driven Design models using Context Mapper's CML (Context Mapping Language).

Features

  • Parse and serialize CML files - Full support for Context Mapper's CML syntax
  • Manage bounded contexts - Create, update, delete bounded contexts
  • Work with aggregates - Define entities, value objects, domain events, commands, and services
  • Context map relationships - Define and manage relationships between bounded contexts (Partnership, SharedKernel, Upstream-Downstream with patterns like OHS, PL, ACL, CF)
  • Generate PlantUML diagrams - Visualize context maps and aggregate structures
  • Bounded Context Canvas - Create DDD Crew Bounded Context Canvases (v5), derived from the model and enriched with canvas-only sections
  • HTML artifacts - Interactive, self-contained HTML context map linked to an HTML canvas per bounded context (works offline, no Java needed)
  • Real-time validation - Catch errors at creation time, not at save time
  • ID Value Objects - Dedicated tool for creating DDD-compliant identifier types

Validation Features

The server validates models in real-time to prevent common CML errors:

Validation When Example Error
Duplicate names On create 'AgentId' already exists in ContextA...
Invalid types On create Map<K,V> is not supported in CML...
Reserved names On create 'Resource' is a reserved keyword...
Reserved attributes On save Auto-escaped with ^ prefix

Valid Attribute Types

  • Primitives: String, int, long, boolean, DateTime, BigDecimal, UUID
  • Collections: List<Type>, Set<Type>
  • References: - TypeName (reference to domain objects)

Invalid Types (Rejected)

  • Map<K,V>, Any, Tuple, Runnable, Callbacks, nested generics

Installation

Claude Code

claude mcp add context-mapper -- npx -y context-mapper-mcp@latest

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "context-mapper": {
      "command": "npx",
      "args": ["-y", "context-mapper-mcp@latest"]
    }
  }
}

Available Tools

Model Management

Tool Description
cml_create_model Create a new empty CML model
cml_load_model Load a CML file
cml_save_model Save model to disk
cml_validate_model Validate CML syntax and semantics
cml_get_model_info Get model statistics

Query Tools

Tool Description
cml_list_bounded_contexts List all bounded contexts
cml_get_bounded_context Get context details
cml_list_aggregates List aggregates (optionally filtered by context)
cml_get_aggregate Get aggregate with all its elements
cml_find_elements Search by name pattern (regex)
cml_list_relationships List context map relationships

Context Tools

Tool Description
cml_create_context_map Create a context map
cml_create_bounded_context Create a bounded context
cml_update_bounded_context Update a bounded context
cml_delete_bounded_context Delete a bounded context

Aggregate Tools

Tool Description
cml_create_aggregate Create an aggregate
cml_update_aggregate Update an aggregate
cml_delete_aggregate Delete an aggregate
cml_add_entity Add entity to aggregate
cml_add_value_object Add value object
cml_add_identifier Add ID value object (DDD best practice)
cml_add_domain_event Add domain event
cml_add_command Add command
cml_add_service Add domain service
cml_batch_add_elements Batch create multiple domain objects in one call
cml_delete_entity Delete entity
cml_delete_value_object Delete value object
cml_delete_domain_event Delete domain event
cml_delete_command Delete command
cml_delete_service Delete service
Batch Creation (cml_batch_add_elements)

Create multiple domain objects in a single call for improved efficiency:

{
  "contextName": "CustomerManagement",
  "aggregateName": "Customer",
  "identifiers": [
    { "name": "CustomerId" }
  ],
  "entities": [
    {
      "name": "Customer",
      "aggregateRoot": true,
      "attributes": [
        { "name": "id", "type": "- CustomerId", "key": true },
        { "name": "email", "type": "String" }
      ]
    }
  ],
  "valueObjects": [
    {
      "name": "Address",
      "attributes": [
        { "name": "street", "type": "String" },
        { "name": "city", "type": "String" }
      ]
    }
  ],
  "domainEvents": [
    { "name": "CustomerRegistered", "attributes": [{ "name": "customerId", "type": "- CustomerId" }] }
  ],
  "commands": [
    { "name": "RegisterCustomer", "attributes": [{ "name": "email", "type": "String" }] }
  ]
}

Benefits:

  • Faster: Single round-trip instead of 8+ individual calls
  • Atomic validation: All elements validated before any are created
  • Error handling: Use failFast: false to collect all errors at once

Relationship Tools

Tool Description
cml_create_relationship Create context map relationship
cml_update_relationship Update relationship
cml_delete_relationship Delete relationship
cml_get_relationship Get relationship details

Supported relationship types:

  • Partnership - Symmetric, both contexts cooperate
  • SharedKernel - Symmetric, shared code/models
  • UpstreamDownstream - Asymmetric with patterns:
    • Upstream: OHS (Open Host Service), PL (Published Language)
    • Downstream: ACL (Anticorruption Layer), CF (Conformist)

Generation Tools

Tool Description
cml_generate_context_map_diagram Generate PlantUML context map
cml_generate_aggregate_diagram Generate aggregate class diagram
cml_generate_full_diagram Generate full model diagram
cml_generate_context_map_html Generate an interactive HTML context map plus a linked canvas page per context

Bounded Context Canvas Tools

Tool Description
cml_set_bounded_context_canvas Set canvas sections CML cannot express (strategic classification, domain roles, business decisions, assumptions, verification metrics, open questions, extra collaborators and terms)
cml_get_bounded_context_canvas Get a context's canvas in the DDD Crew canonical format (JSON or YAML)
cml_generate_bounded_context_canvas Write canvases as HTML pages or as DDD Crew YAML for one or all contexts

Canvas sections are filled from the model where possible:

Canvas section Derived from
Purpose domainVisionStatement
Inbound / outbound communication Context map relationships: downstreams receive the domain events of the upstream's exposed aggregates (all aggregates when none are exposed); commands are attributed to downstreams only when aggregates are exposed explicitly. Relationship patterns (OHS, PL, ACL, CF, Partnership, Shared Kernel) become the relationship label.
Ubiquitous language Aggregates, entities and value objects (identifier-only value objects are skipped), with their documentation as definition

Explicitly set entries take precedence over derived ones with the same collaborator or term. Canvas data is saved by cml_save_model to a sidecar file next to the model (model.cml → model.canvas.yaml) in the DDD Crew YAML format, one YAML document per bounded context, and loaded again by cml_load_model.

Example CML File

ContextMap ECommerceContextMap {
    type = AS_IS
    contains CustomerManagement, OrderManagement, Inventory

    CustomerManagement [U,OHS,PL] -> [D,ACL] OrderManagement
    OrderManagement [U] -> [D,CF] Inventory
}

BoundedContext CustomerManagement {
    domainVisionStatement = "Manages customer data"
    implementationTechnology = "TypeScript"

    Aggregate Customer {
        Entity Customer {
            aggregateRoot
            key String customerId
            String email
            String firstName
        }

        ValueObject Address {
            String street
            String city
        }

        DomainEvent CustomerRegistered {
            String customerId
            Date registeredAt
        }

        Command RegisterCustomer {
            String email
            String firstName
        }
    }
}

Development

git clone https://github.com/thijs-hakkenberg/contextmapper_mcp.git
cd contextmapper_mcp
npm install
npm run build
npm test

Architecture

  • Parser: Chevrotain-based lexer and parser for CML syntax
  • Writer: Serializes model back to CML format
  • Validation: Checks model consistency and semantic rules
  • Tools: MCP tool implementations for all operations
  • Generators: PlantUML diagram generators, HTML context map and Bounded Context Canvas generators, Context Mapper CLI integration

License

MIT