内容
# 上下文映射器 MCP 服务器
[](https://www.npmjs.com/package/context-mapper-mcp)
[](https://opensource.org/licenses/MIT)
一个 MCP(模型上下文协议)服务器,支持 AI 助手使用上下文映射器的 CML(上下文映射语言)处理领域驱动设计模型。
## 功能
- **解析和序列化 CML 文件** - 完全支持上下文映射器的 CML 语法
- **管理有界上下文** - 创建、更新、删除有界上下文
- **处理聚合** - 定义实体、值对象、领域事件、命令和服务
- **上下文映射关系** - 定义和管理有界上下文之间的关系(伙伴关系、共享内核、上游-下游,包含 OHS、PL、ACL、CF 等模式)
- **生成 PlantUML 图表** - 可视化上下文映射和聚合结构
- **实时验证** - 在创建时捕获错误,而不是在保存时
- **ID 值对象** - 用于创建 DDD 兼容的标识符类型的专用工具
## 验证功能
服务器实时验证模型,以防止常见的 CML 错误:
| 验证 | 何时 | 错误示例 |
| --- | --- | --- |
| 重复名称 | 创建时 | `'AgentId' 已经存在于 ContextA...` |
| 无效类型 | 创建时 | `Map<K,V> 不支持在 CML 中...` |
| 保留名称 | 创建时 | `'Resource' 是保留关键字...` |
| 保留属性 | 保存时 | 自动转义为 `^` 前缀 |
### 有效属性类型
- **原始类型**:`String`、`int`、`long`、`boolean`、`DateTime`、`BigDecimal`、`UUID`
- **集合**:`List<Type>`、`Set<Type>`
- **引用**:`- TypeName`(对领域对象的引用)
### 无效类型(拒绝)
- `Map<K,V>`、`Any`、`Tuple`、`Runnable`、`Callbacks`、嵌套泛型
## 安装
### Claude 代码
```bash
claude mcp add context-mapper -- npx -y context-mapper-mcp@latest
```
### Claude 桌面版
将以下内容添加到您的 Claude 桌面版配置(`claude_desktop_config.json`):
```json
{
"mcpServers": {
"context-mapper": {
"command": "npx",
"args": ["-y", "context-mapper-mcp@latest"]
}
}
}
```
### 可用工具
#### 模型管理
| 工具 | 描述 |
| --- | --- |
| `cml_create_model` | 创建新的空 CML 模型 |
| `cml_load_model` | 加载 CML 文件 |
| `cml_save_model` | 将模型保存到磁盘 |
| `cml_validate_model` | 验证 CML 语法和语义 |
| `cml_get_model_info` | 获取模型统计信息 |
#### 查询工具
| 工具 | 描述 |
| --- | --- |
| `cml_list_bounded_contexts` | 列出所有有界上下文 |
| `cml_get_bounded_context` | 获取上下文详细信息 |
| `cml_list_aggregates` | 列出聚合(可选,按上下文筛选) |
| `cml_get_aggregate` | 获取聚合及其所有元素 |
| `cml_find_elements` | 按名称模式(正则表达式)搜索 |
| `cml_list_relationships` | 列出上下文映射关系 |
#### 上下文工具
| 工具 | 描述 |
| --- | --- |
| `cml_create_context_map` | 创建上下文映射 |
| `cml_create_bounded_context` | 创建有界上下文 |
| `cml_update_bounded_context` | 更新有界上下文 |
| `cml_delete_bounded_context` | 删除有界上下文 |
#### 聚合工具
| 工具 | 描述 |
| --- | --- |
| `cml_create_aggregate` | 创建聚合 |
| `cml_update_aggregate` | 更新聚合 |
| `cml_delete_aggregate` | 删除聚合 |
| `cml_add_entity` | 向聚合添加实体 |
| `cml_add_value_object` | 添加值对象 |
| `cml_add_identifier` | 添加 ID 值对象(DDD 最佳实践) |
| `cml_add_domain_event` | 添加领域事件 |
| `cml_add_command` | 添加命令 |
| `cml_add_service` | 添加领域服务 |
| `cml_batch_add_elements` | **批量创建**多个领域对象 |
| `cml_delete_entity` | 删除实体 |
| `cml_delete_value_object` | 删除值对象 |
| `cml_delete_domain_event` | 删除领域事件 |
| `cml_delete_command` | 删除命令 |
| `cml_delete_service` | 删除服务 |
##### 批量创建 (`cml_batch_add_elements`)
在一个调用中创建多个领域对象,以提高效率:
```json
{
"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" }] }
]
}
```
**优点:**
- **更快**:单个往返请求代替 8+ 个单独的调用
- **原子验证**:在创建任何对象之前验证所有元素
- **错误处理**:使用 `failFast: false` 一次收集所有错误
#### 关系工具
| 工具 | 描述 |
| --- | --- |
| `cml_create_relationship` | 创建上下文映射关系 |
| `cml_update_relationship` | 更新关系 |
| `cml_delete_relationship` | 删除关系 |
| `cml_get_relationship` | 获取关系详细信息 |
支持的关系类型:
- **伙伴关系** - 对称的,双方合作
- **共享内核** - 对称的,共享代码/模型
- **上游-下游** - 非对称的,包含模式:
- 上游:OHS(开放主机服务),PL(发布语言)
- 下游:ACL(防腐层),CF(遵从者)
#### 生成工具
| 工具 | 描述 |
| --- | --- |
| `cml_generate_context_map_diagram` | 生成 PlantUML 上下文映射图 |
| `cml_generate_aggregate_diagram` | 生成聚合类图 |
| `cml_generate_full_diagram` | 生成完整模型图 |
## CML 文件示例
```cml
ContextMap ECommerceContextMap {
type = AS_IS
contains CustomerManagement, OrderManagement, Inventory
CustomerManagement [U,OHS,PL] -> [D,ACL] OrderManagement
OrderManagement [U] -> [D,CF] Inventory
}
BoundedContext CustomerManagement {
domainVisionStatement = "管理客户数据"
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
}
}
}
```
## 开发
```bash
git clone https://github.com/thijs-hakkenberg/contextmapper_mcp.git
cd contextmapper_mcp
npm install
npm run build
npm test
```
## 架构
- **解析器**:基于 Chevrotain 的 CML 语法词法分析器和解析器
- **写入器**:将模型序列化回 CML 格式
- **验证**:检查模型一致性和语义规则
- **工具**:所有操作的 MCP 工具实现
- **生成器**:PlantUML 图表生成器
## 许可证
MIT