npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

context-mapper-mcp

v1.1.0

Published

MCP server for Domain-Driven Design with Context Mapper CML

Readme

Context Mapper MCP Server

npm version License: MIT

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

Claude Desktop

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

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

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 |

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

License

MIT