Token导航 LogoToken导航TokenDH.com
Domain MCP Server logo
AI代理stdio官方级别未说明来源级核验

Domain MCP Server

MCP Server

一个将微服务生态系统转换为统一内存图谱的服务器,用于快速上下文推理和LLM工作流集成。

工具数

9

提示词数

0

GitHub Stars

1

资源数

0
代码分析JavaClaudeClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

waabox

提供方

waabox

最后核验

2026/5/17 20:22

运行时

Docker

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

docker run -p 8080:8080 domain-mcp-server

详细介绍

domain-mcp-server

域感知服务器,将整个微服务生态系统转化为统一的内存图。 它摄取代码和文档,提取业务逻辑、API和数据模型,并将所有内容链接为一流实体,以实现快速上下文推理。 所有知识都保存在PostgreSQL中用于长期查询,服务器公开了一个MCP接口,可以直接插入LLM工作流或其他基于MCP的工具。

目录

- list_项目 - 搜索项目 - get_class_context - get_method_context - get_stack_trace_context - get_ass_dependency - get_project_overview - get_service_api - graph_query - 仅REST端点

- 语法 - 令牌类型 - 关键词 - 例子

动机

现代后端进入了微服务和monorepos的动物园。 域mcp服务器集中了业务/域知识、链接代码、, 将文档、API和DB模型合并到LLM的单个结构化存储库中 以及工具。

这个MCP做什么

  • 通过JGit进行Git克隆(浅层克隆、分支选择)
  • 自动检测项目语言(Java、Node.js/TypeScript、Go)
  • 基于导入的依赖图构建(无LLM)
  • Per-class/module Claude API分析(语言软件提示)
  • PostgreSQL支持的类、方法和端点目录
  • 堆栈跟踪相关性与图增强邻居分辨率
  • MCP stdio+REST双传输

支持的语言

语言解析器源根入口点
Java JavaSourceParsersrc/main/java@RestController, @Controller, @KafkaListener, @Scheduled, @EventListener, @SpringBootApplication
Node.js/TypeScriptNodeJsSourceParsersrc NestJS @Controller,快递路线(app.get, router.post等),众所周知的文件(main.ts, index.ts, app.ts, server.ts)
去吧GoSourceParser. (项目根)func main()、HTTP处理程序注册(net/HTTP、gin、chi、echo、fiber)、gRPC服务注册

从项目标记文件中自动检测语言: pom.xml / build.gradle 对于Java, package.json 对于Node.js/TypeScript, go.mod 为Go。

建筑

Java 21+Spring Boot 3.3(启用MCP)\ JGit用于存储库克隆\ 每种语言源解析器(Java、Node.js/TypeScript、Go)\ Claude API(Sonnet 4.5),用于每类业务分析(语言软件提示)\ 基于导入的依赖关系图(图不需要LLM)\ PostgreSQL持久性(JDBI3)\ 用于克劳德代码集成的MCP stdio传输

与克劳德互动

连接MCP服务器后,您可以用自然语言与Claude交谈,它会自动选择合适的工具。下面是按用例组织的示例提示。

发现项目

哪些项目被编入索引?
给我看看你所知道的所有微服务。
支付服务是否已经过分析?

克劳德会打电话的 list_projects 并对结果进行总结。

在项目中搜索

在计费服务中查找与“发票”相关的所有类别。
在订单服务中搜索与“Kafka”相关的任何内容。
支付服务有哪些处理退款的课程?

克劳德会打电话的 search_project 使用项目名称和关键字。

理解一个类

什么意思 co.fanki.order.domain.OrderService 是吗?
解释PaymentGatewayClient在支付服务中的用途。
告诉我关于OrderController的情况,特别是在订单服务项目中。

克劳德会打电话的 get_class_context (可选 projectName 范围界定)并解释类类型、业务描述、方法和图关系。

理解一种方法

这是什么 placeOrder 方法do in co.fanki.order.domain.OrderService?
解释以下业务逻辑 processRefund 在支付服务的退款服务中。
哪些例外情况可以 chargeCustomer 扔?

克劳德会打电话的 get_method_context 并返回描述、业务逻辑步骤、异常、HTTP端点信息和参数类型。

调查Datadog的错误

我在生产中看到PaymentDecledException。这是堆栈跟踪:\[粘贴堆栈跟踪\]
关联此Datadog错误跟踪,并告诉我出了什么问题。
我们出了个错误 co.fanki.order.domain.OrderService.placeOrder 在第92行。这段代码的作用是什么,它的依赖关系是什么?

克劳德会打电话的 get_stack_trace_context 使用框架并解释执行路径中的每个步骤,标记缺失的上下文,并包含相关的依赖类。

探索依赖关系

什么意思 OrderService 依靠?
导入哪些类 PaymentGatewayClient?
向我展示完整的依赖关系图 co.fanki.billing.domain.InvoiceService 在计费服务中。

克劳德会打电话的 get_class_dependencies 并显示传出依赖关系、传入依赖关系和方法参数类型。

获取项目概述

给我一个订单服务架构的概述。
支付服务有哪些切入点?
计费服务有多少控制器、服务和存储库?

克劳德会打电话的 get_project_overview 并总结了架构:入口点、HTTP端点、类类型分解和项目描述。

与另一个微服务集成

为端点创建Feign客户端 getStock 从股票服务。
我需要打电话给支付服务 chargeCustomer 订单服务的端点。生成Feign客户端、请求DTO和响应DTO。
向我展示通知服务的完整API表面,以便我可以构建集成层。
计费服务对DTO的期望是什么 createInvoice 终点?在我的项目中生成它们。

克劳德会打电话的 get_service_apiget_method_context 检索端点详细信息(HTTP方法、路径、参数类型、响应),然后生成Feign客户端接口、DTO以及与目标服务集成所需的任何配置。

在一次对话中组合工具

你可以链接多个问题,克劳德会自动选择合适的工具:

1. 哪些项目被编入索引? 1. 在股票服务中搜索“股票”类别。 1. 我想使用 getStock 方法——它做什么,需要什么参数,我应该调用哪个端点? 1. 向我展示股票服务的完整API表面,这样我就可以构建一个Feign客户端。

克劳德将链 list_projects -> search_project -> get_method_context -> get_service_api 在整个对话过程中,建立上下文。

Datadog+域MCP组合工作流

当Datadog MCP和Domain MCP服务器都连接时:

检查过去一小时内订单服务的最后10个错误跟踪,关联日志,并解释堆栈跟踪中的每个类的作用。

Claude将自动链接Datadog工具(trace_list_error_traces, log_correlate)使用域MCP工具(get_stack_trace_context, get_class_context)进行全面的根本原因分析。

MCP工具

服务器暴露 9个MCP工具 通过stdio传输。所有工具都返回JSON响应。

______________________________________________________________________

list_projects

列出所有索引项目。使用此选项检查哪些存储库已被分析,并且可用于Datadog堆栈跟踪关联。包括源自README的项目描述。

参数:无

响应字段:

字段类型描述
idstring项目ID
namestring项目名称(从存储库URL派生)
repositoryUrlstringGit存储库URL
basePackagestring通用基础包(例如。, co.fanki.order)
descriptionstringREADME中的项目描述
status字符串PENDING, ANALYZING, ANALYZED, SYNCING,或 ERROR
lastAnalyzedAtstringISO-8601上次分析时间戳
classCountnumber索引类的数量
endpointCountnumber找到的HTTP端点数

请求示例:

{}

示例响应:

[
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "order-service",
    "repositoryUrl": "git@github.com:fanki/order-service.git",
    "basePackage": "co.fanki.order",
    "description": "Microservice for order lifecycle management",
    "status": "ANALYZED",
    "lastAnalyzedAt": "2025-06-15T14:30:00Z",
    "classCount": 42,
    "endpointCount": 12
  },
  {
    "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "name": "payment-service",
    "repositoryUrl": "git@github.com:fanki/payment-service.git",
    "basePackage": "co.fanki.payment",
    "description": "Handles payment processing and refunds",
    "status": "ANALYZED",
    "lastAnalyzedAt": "2025-06-14T10:00:00Z",
    "classCount": 28,
    "endpointCount": 8
  }
]

______________________________________________________________________

search_project

按部分名称搜索特定项目中的类。返回匹配的类及其类型、描述、入口点状态和源文件。当您不知道确切的完全限定名时,使用此功能可以发现项目中的类。

参数:

参数必填类型说明
projectNameyesstring返回的项目名称 list_projects
queryyesstring要搜索的部分类名或关键字(不区分大小写)

响应字段:

字段类型描述
foundboolean是否找到项目
projectNamestring项目名称
querystring搜索查询
matchesarray匹配类
matches[].classNamestring完全限定类名
matches[].classTypestring类类型(SERVICE, CONTROLLER, REPOSITORY, DTO等),如果未富集,则为空
matches[].descriptionstring业务描述,如果不丰富,则为空
matches[].entryPointboolean类是否是入口点(控制器、监听器)
matches[].sourceFilestring相对源文件路径
totalClassesInProjectnumber项目图中的类总数
messagestring信息消息(根据错误设置)

请求示例:

{
  "projectName": "order-service",
  "query": "Payment"
}

示例响应:

{
  "found": true,
  "projectName": "order-service",
  "query": "Payment",
  "matches": [
    {
      "className": "co.fanki.order.domain.PaymentService",
      "classType": "SERVICE",
      "description": "Orchestrates payment processing for orders",
      "entryPoint": false,
      "sourceFile": "src/main/java/co/fanki/order/domain/PaymentService.java"
    },
    {
      "className": "co.fanki.order.application.PaymentController",
      "classType": "CONTROLLER",
      "description": "REST endpoints for payment operations",
      "entryPoint": true,
      "sourceFile": "src/main/java/co/fanki/order/application/PaymentController.java"
    },
    {
      "className": "co.fanki.order.domain.PaymentResult",
      "classType": "DTO",
      "description": "Result of a payment attempt",
      "entryPoint": false,
      "sourceFile": "src/main/java/co/fanki/order/domain/PaymentResult.java"
    }
  ],
  "totalClassesInProject": 42,
  "message": null
}

______________________________________________________________________

get_class_context

通过类的完全限定名获取类的业务上下文。从README返回类类型、描述、所有方法和项目描述。当Datadog在特定类中显示错误时使用此选项,以了解其目的和行为。

参数:

参数必填类型说明
classNameyesstring完全限定类名(例如。, co.fanki.order.OrderService)
projectNamenostring将搜索范围限定到此项目(由返回 list_projects)

响应字段:

字段类型描述
foundboolean是否找到类
classNamestring完全限定类名
classTypestring类类型(SERVICE, CONTROLLER, REPOSITORY, DTO等等)
descriptionstring克劳德丰富的业务描述
projectDescriptionstringREADME中的项目描述
methodsarray此类中的方法
methods[].namestring方法名称
methods[].descriptionstring业务描述
methods[].businessLogicarray分步业务逻辑
projectUrlstringGit存储库URL
graphInfoobject图形关系数据(如果没有图形,则为空)
graphInfo.dependenciesarray此类导入的内容(输出边)
graphInfo.dependentsarray导入此类的内容(传入边)
graphInfo.entryPointboolean此类是否为入口点
knownProjectsarray可用项目(未找到类时填充)
messagestring信息消息(未找到时设置)

请求示例 (全局搜索):

{
  "className": "co.fanki.order.domain.OrderService"
}

请求示例 (仅限于一个项目):

{
  "className": "co.fanki.order.domain.OrderService",
  "projectName": "order-service"
}

示例响应:

{
  "found": true,
  "className": "co.fanki.order.domain.OrderService",
  "classType": "SERVICE",
  "description": "Core domain service for order lifecycle management. Handles order creation, validation, and state transitions.",
  "projectDescription": "Microservice for order lifecycle management",
  "methods": [
    {
      "name": "placeOrder",
      "description": "Creates a new order for a customer after validating stock and payment",
      "businessLogic": [
        "Validate order items against inventory",
        "Calculate total with discounts",
        "Reserve stock",
        "Process payment via PaymentService",
        "Persist order with PENDING status"
      ]
    },
    {
      "name": "cancelOrder",
      "description": "Cancels an existing order and releases reserved stock",
      "businessLogic": [
        "Load order by ID",
        "Verify order is cancellable (not shipped)",
        "Release reserved stock",
        "Initiate refund if paid",
        "Update status to CANCELLED"
      ]
    }
  ],
  "projectUrl": "git@github.com:fanki/order-service.git",
  "graphInfo": {
    "dependencies": [
      "co.fanki.order.domain.OrderRepository",
      "co.fanki.order.domain.PaymentService",
      "co.fanki.order.domain.InventoryClient"
    ],
    "dependents": [
      "co.fanki.order.application.OrderController"
    ],
    "entryPoint": false
  },
  "knownProjects": [],
  "message": null
}

______________________________________________________________________

get_method_context

从README获取特定方法的详细上下文,包括业务逻辑、依赖关系、异常、HTTP端点信息和项目描述。当Datadog在特定方法中显示错误时,使用此选项来了解它的作用以及它可能失败的原因。

参数:

参数必填类型说明
classNameyesstring完全限定类名
methodNameyesstring方法名
projectNamenostring将搜索范围限定到此项目(由返回 list_projects)

响应字段:

字段类型描述
foundboolean是否找到该方法
classNamestring完全限定类名
methodNamestring方法名称
httpEndpointstringHTTP端点(例如。, POST /api/orders),如果不是端点,则为null
descriptionstring业务描述
projectDescriptionstringREADME中的项目描述
businessLogicarray分步业务逻辑
exceptionsarray此方法可能引发的异常
sourceFilestring相对源文件路径
lineNumbernumber源文件中的行号
projectUrlstringGit存储库URL
parameterTypesarray从项目图解析的方法参数类型
parameterTypes[].position基于数字0的参数位置
parameterTypes[].typeNamestring参数类型的FQCN
knownProjectsarray可用项目(未找到时填充)
messagestring信息消息(未找到时设置)

请求示例:

{
  "className": "co.fanki.order.domain.OrderService",
  "methodName": "placeOrder"
}

请求示例 (仅限于一个项目):

{
  "className": "co.fanki.order.domain.OrderService",
  "methodName": "placeOrder",
  "projectName": "order-service"
}

示例响应:

{
  "found": true,
  "className": "co.fanki.order.domain.OrderService",
  "methodName": "placeOrder",
  "httpEndpoint": "POST /api/orders",
  "description": "Creates a new order for a customer after validating stock and payment",
  "projectDescription": "Microservice for order lifecycle management",
  "businessLogic": [
    "Validate order items against inventory",
    "Calculate total with discounts",
    "Reserve stock",
    "Process payment via PaymentService",
    "Persist order with PENDING status"
  ],
  "exceptions": [
    "InsufficientStockException",
    "PaymentDeclinedException"
  ],
  "sourceFile": "src/main/java/co/fanki/order/domain/OrderService.java",
  "lineNumber": 85,
  "projectUrl": "git@github.com:fanki/order-service.git",
  "parameterTypes": [
    {
      "position": 0,
      "typeName": "co.fanki.order.domain.CreateOrderRequest"
    }
  ],
  "knownProjects": [],
  "message": null
}

______________________________________________________________________

get_stack_trace_context

Datadog错误关联的主要工具。 获取完整的堆栈跟踪(className/methodName/lineNumber帧数组),并返回每个帧的业务上下文,以及README中的项目描述。在从Datadog获取错误跟踪或堆栈跟踪后立即使用此功能,以了解执行路径和根本原因。

参数:

参数必填类型说明
stackTraceyesarray堆栈跟踪帧数组
stackTrace[].classNameyesstring完全限定类名
stackTrace[].methodNameyesstring方法名称
stackTrace[].lineNumbernointeger源文件中的行号

响应字段:

字段类型描述
executionPatharray每个堆栈帧的有序条目
executionPath[].ordernumber执行路径中的位置
executionPath[].classNamestring完全限定类名
executionPath[].methodNamestring方法名称
executionPath[].classTypestring类类型,如果找不到则为null
executionPath[].descriptionstring业务描述,如果找不到则为空
executionPath[].businessLogicarray分步业务逻辑
executionPath[].httpEndpointstringHTTP端点,如果不适用,则为null
executionPath[].foundboolean业务上下文是否已解析
missingContextarray无法解析的帧
projectUrlstringGit存储库URL
projectDescriptionstringREADME中的项目描述
relatedDependenciesarray匹配类的图邻居(深度1)

请求示例:

{
  "stackTrace": [
    {
      "className": "co.fanki.order.application.OrderController",
      "methodName": "createOrder",
      "lineNumber": 45
    },
    {
      "className": "co.fanki.order.domain.OrderService",
      "methodName": "placeOrder",
      "lineNumber": 92
    },
    {
      "className": "co.fanki.order.domain.PaymentService",
      "methodName": "processPayment",
      "lineNumber": 67
    },
    {
      "className": "org.springframework.web.servlet.DispatcherServlet",
      "methodName": "doDispatch",
      "lineNumber": 1067
    }
  ]
}

示例响应:

{
  "executionPath": [
    {
      "order": 1,
      "className": "co.fanki.order.application.OrderController",
      "methodName": "createOrder",
      "classType": "CONTROLLER",
      "description": "Validates input and delegates to OrderService",
      "businessLogic": ["Validate request body", "Delegate to OrderService.placeOrder"],
      "httpEndpoint": "POST /api/orders",
      "found": true
    },
    {
      "order": 2,
      "className": "co.fanki.order.domain.OrderService",
      "methodName": "placeOrder",
      "classType": "SERVICE",
      "description": "Creates a new order after validating stock and payment",
      "businessLogic": ["Validate items", "Calculate total", "Reserve stock", "Process payment", "Persist order"],
      "httpEndpoint": null,
      "found": true
    },
    {
      "order": 3,
      "className": "co.fanki.order.domain.PaymentService",
      "methodName": "processPayment",
      "classType": "SERVICE",
      "description": "Charges the customer via the payment gateway",
      "businessLogic": ["Validate card", "Call payment gateway", "Handle response"],
      "httpEndpoint": null,
      "found": true
    },
    {
      "order": 4,
      "className": "org.springframework.web.servlet.DispatcherServlet",
      "methodName": "doDispatch",
      "classType": null,
      "description": null,
      "businessLogic": [],
      "httpEndpoint": null,
      "found": false
    }
  ],
  "missingContext": [
    {
      "className": "org.springframework.web.servlet.DispatcherServlet",
      "methodName": "doDispatch",
      "lineNumber": 1067
    }
  ],
  "projectUrl": "git@github.com:fanki/order-service.git",
  "projectDescription": "Microservice for order lifecycle management",
  "relatedDependencies": [
    {
      "order": 1,
      "className": "co.fanki.order.domain.OrderRepository",
      "methodName": "save",
      "classType": "REPOSITORY",
      "description": "Persists order entities to the database",
      "businessLogic": ["Insert order into orders table"],
      "httpEndpoint": null,
      "found": true
    }
  ]
}

______________________________________________________________________

get_class_dependencies

获取类周围的依赖关系图。返回此类导入的内容(依赖项)、导入的内容和方法参数类型。使用此方法了解类如何连接到系统的其他部分。

参数:

参数必填类型说明
classNameyesstring完全限定类名
projectNamenostring将搜索范围限定到此项目(由返回 list_projects)

响应字段:

字段类型描述
foundboolean是否找到类
classNamestring完全限定类名
entryPointboolean此类是否为入口点
dependenciesarray传出:这个类导入什么
dependencies[].classNamestring依赖关系的FQCN
dependencies[].classTypestring类类型,如果没有索引,则为null
dependencies[].descriptionstring业务描述,如果没有索引,则为空
dependentsarray传入:导入此类的内容
dependents[].classNamestring依赖项的FQCN
dependents[].classTypestring类类型,如果没有索引,则为null
dependents[].descriptionstring业务描述,如果没有索引,则为空
methodParameterTypesarray每个方法的参数类型
methodParameterTypes[].methodNamestring方法名称
methodParameterTypes[].parameterTypesarray参数类型摘要
messagestring信息消息(未找到时设置)

请求示例:

{
  "className": "co.fanki.order.domain.OrderService"
}

请求示例 (仅限于一个项目):

{
  "className": "co.fanki.order.domain.OrderService",
  "projectName": "order-service"
}

示例响应:

{
  "found": true,
  "className": "co.fanki.order.domain.OrderService",
  "entryPoint": false,
  "dependencies": [
    {
      "className": "co.fanki.order.domain.OrderRepository",
      "classType": "REPOSITORY",
      "description": "Persists order entities to the database"
    },
    {
      "className": "co.fanki.order.domain.PaymentService",
      "classType": "SERVICE",
      "description": "Charges the customer via the payment gateway"
    }
  ],
  "dependents": [
    {
      "className": "co.fanki.order.application.OrderController",
      "classType": "CONTROLLER",
      "description": "REST endpoints for order operations"
    }
  ],
  "methodParameterTypes": [
    {
      "methodName": "placeOrder",
      "parameterTypes": [
        {
          "className": "co.fanki.order.domain.CreateOrderRequest",
          "classType": "DTO",
          "description": "Request payload for creating a new order"
        }
      ]
    }
  ],
  "message": null
}

______________________________________________________________________

get_project_overview

获取索引项目的结构概述。返回入口点(控制器、侦听器)、HTTP端点、类类型细分和项目描述。在深入特定类之前,使用此工具了解架构。

参数:

参数必填类型说明
projectNameyesstring返回的项目名称 list_projects

响应字段:

字段类型描述
foundboolean是否找到项目
projectNamestring项目名称
repositoryUrlstringGit存储库URL
descriptionstringREADME中的项目描述
totalClassesnumber索引类的总数
totalEntryPointsnumber图中的入口点数量
classTypeBreakdownobject按类类型计数(例如。, {"SERVICE": 5, "CONTROLLER": 2})
entryPointsarray入口点摘要
entryPoints[].classNamestring入口点的FQCN
entryPoints[].classTypestring类类型
entryPoints[].descriptionstring业务描述
entryPoints[].httpEndpointsarrayHTTP端点(例如。, ["GET /api/users", "POST /api/users"])
messagestring信息消息(未找到时设置)

请求示例:

{
  "projectName": "order-service"
}

示例响应:

{
  "found": true,
  "projectName": "order-service",
  "repositoryUrl": "git@github.com:fanki/order-service.git",
  "description": "Microservice for order lifecycle management",
  "totalClasses": 42,
  "totalEntryPoints": 3,
  "classTypeBreakdown": {
    "CONTROLLER": 3,
    "SERVICE": 8,
    "REPOSITORY": 5,
    "DTO": 12,
    "ENTITY": 6,
    "CONFIGURATION": 2,
    "OTHER": 6
  },
  "entryPoints": [
    {
      "className": "co.fanki.order.application.OrderController",
      "classType": "CONTROLLER",
      "description": "REST endpoints for order operations",
      "httpEndpoints": [
        "POST /api/orders",
        "GET /api/orders/{id}",
        "PUT /api/orders/{id}/cancel"
      ]
    },
    {
      "className": "co.fanki.order.application.PaymentController",
      "classType": "CONTROLLER",
      "description": "REST endpoints for payment operations",
      "httpEndpoints": [
        "POST /api/payments",
        "GET /api/payments/{id}/status"
      ]
    },
    {
      "className": "co.fanki.order.application.OrderEventListener",
      "classType": "CONTROLLER",
      "description": "Kafka listener for order-related events",
      "httpEndpoints": []
    }
  ],
  "message": null
}

______________________________________________________________________

get_service_api

获取索引微服务的公共API表面。返回按控制器分组的所有HTTP端点,包括参数类型(DTO)、描述、业务逻辑和异常。当您需要与其他微服务集成或调用其他微服务时,请使用此功能。

参数:

参数必填类型说明
projectNameyesstring返回的项目名称 list_projects

响应字段:

字段类型描述
foundboolean项目是否已找到并具有图形数据
projectNamestring项目名称
repositoryUrlstringGit存储库URL
descriptionstringREADME中的项目描述
controllersarray控制器及其HTTP端点
controllers[].classNamestring控制器的FQCN
controllers[].descriptionstring业务描述
controllers[].endpointsarrayHTTP端点
controllers[].endpoints[].methodNamestringJava方法名
controllers[].endpoints[].httpMethodstringHTTP动词(GET, POST, PUT, DELETE)
controllers[].endpoints[].httpPathstringURL路径
controllers[].endpoints[].descriptionstring业务描述
controllers[].endpoints[].businessLogicarray分步业务逻辑
controllers[].endpoints[].exceptionsarray此端点可能引发的异常
controllers[].endpoints[].parametersarray已解析的参数类型
controllers[].endpoints[].parameters[].position基于数字0的参数位置
controllers[].endpoints[].parameters[].classNamestring参数类型的FQCN
controllers[].endpoints[].parameters[].classTypestring类类型(例如。, DTO),如果没有索引,则为null
controllers[].endpoints[].parameters[].descriptionstring业务描述,如果没有索引,则为空
messagestring信息消息(未找到时设置)

请求示例:

{
  "projectName": "order-service"
}

示例响应:

{
  "found": true,
  "projectName": "order-service",
  "repositoryUrl": "git@github.com:fanki/order-service.git",
  "description": "Microservice for order lifecycle management",
  "controllers": [
    {
      "className": "co.fanki.order.application.OrderController",
      "description": "REST endpoints for order operations",
      "endpoints": [
        {
          "methodName": "createOrder",
          "httpMethod": "POST",
          "httpPath": "/api/orders",
          "description": "Creates a new order for a customer",
          "businessLogic": [
            "Validate request body",
            "Delegate to OrderService.placeOrder",
            "Return created order with 201"
          ],
          "exceptions": ["InvalidOrderException"],
          "parameters": [
            {
              "position": 0,
              "className": "co.fanki.order.domain.CreateOrderRequest",
              "classType": "DTO",
              "description": "Request payload for creating a new order"
            }
          ]
        },
        {
          "methodName": "getOrder",
          "httpMethod": "GET",
          "httpPath": "/api/orders/{id}",
          "description": "Retrieves an order by its ID",
          "businessLogic": [
            "Parse order ID from path",
            "Query OrderRepository",
            "Return 404 if not found"
          ],
          "exceptions": ["OrderNotFoundException"],
          "parameters": []
        },
        {
          "methodName": "cancelOrder",
          "httpMethod": "PUT",
          "httpPath": "/api/orders/{id}/cancel",
          "description": "Cancels an existing order and releases reserved stock",
          "businessLogic": [
            "Load order by ID",
            "Verify order is cancellable",
            "Delegate to OrderService.cancelOrder",
            "Return updated order"
          ],
          "exceptions": ["OrderNotFoundException", "OrderNotCancellableException"],
          "parameters": []
        }
      ]
    }
  ],
  "message": null
}

______________________________________________________________________

graph_query

使用冒号分隔的DSL查询内存中的项目图。支持列出端点、类和入口点;按名称导航到任何顶点(类);子导航(方法、依赖关系、依赖项);投影修改器(+logic, +dependencies);以及存在检查(?methodName).所有查询都从内存中解析,没有数据库访问。看 图形查询DSL 获取完整的语法文档。

参数:

参数必填类型说明
queryyesstring冒号分隔图查询(例如。, order-service:endpoints:+logic)

响应字段:

字段类型描述
resultTypestring结果类型(endpoints, classes, entrypoints, class, methods, method, dependencies, dependents, check)
projectstring项目名称
countnumber结果数量
resultsarray结果数据(因查询类型而异)

请求示例:

{ "query": "order-service:endpoints" }
{ "query": "order-service:endpoints:+logic" }
{ "query": "order-service:UserService:methods" }
{ "query": "order-service:UserService:?createUser" }

示例响应 (端点):

{
  "resultType": "endpoints",
  "project": "order-service",
  "count": 2,
  "results": [
    {
      "className": "co.fanki.order.application.OrderController",
      "classType": "CONTROLLER",
      "methodName": "createOrder",
      "httpMethod": "POST",
      "httpPath": "/api/orders",
      "description": "Creates a new order"
    }
  ]
}

示例响应 (检查):

{
  "resultType": "check",
  "project": "order-service",
  "count": 1,
  "results": [
    {
      "className": "co.fanki.order.application.OrderController",
      "check": "createOrder",
      "exists": true,
      "methodName": "createOrder",
      "description": "Creates a new order for a customer",
      "httpEndpoint": "POST /api/orders"
    }
  ]
}

______________________________________________________________________

仅REST端点

这些操作可通过REST API(端口8080)使用,但不能作为MCP工具使用。请参阅 索引项目 有关详细用法的部分。

图形查询DSL

图形查询端点(POST /api/graph/query)提供了一个冒号分隔的DSL,用于查询内存中的项目图。所有查询都完全从内存中解析,在查询时没有数据库访问。

语法

project:target[:navigation]*[:+include]*[:?check]

查询是一个用冒号分隔的字符串,其中:

  • 第一节 始终是项目名称。
  • 第二部分 是目标:一个关键字(endpoints, classes, entrypoints)或图中的任何顶点(类名)。
  • 后续段由其前缀标记。

令牌类型

前缀令牌类型描述
*(无)*NAVIGATE遍历图表(例如。, methods, dependencies, UserService)
+INCLUDE投影修改器——在响应中添加额外数据(例如。, +logic, +dependencies)
?CHECK存在谓词——检查顶点上是否存在方法(例如。, ?createUser)

关键词

当用作第一个导航目标时,这些保留字充当列表操作:

关键字描述
endpoints列出项目中的所有HTTP端点
classes列出项目中的所有类/模块
entrypoints列出入口点类(控制器、侦听器)

任何其他值都将解析为图中的顶点(类名),并进行模糊匹配(精确、后缀、包含)。

例子

列出端点

# All HTTP endpoints in the project
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:endpoints"}'

# Endpoints with business logic included
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:endpoints:+logic"}'

答复:

{
  "resultType": "endpoints",
  "project": "order-service",
  "count": 5,
  "results": [
    {
      "className": "co.fanki.order.application.OrderController",
      "classType": "CONTROLLER",
      "methodName": "createOrder",
      "httpMethod": "POST",
      "httpPath": "/api/orders",
      "description": "Creates a new order",
      "businessLogic": ["Validate input", "Delegate to OrderService"]
    }
  ]
}

列出类

# All classes
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:classes"}'

# Classes with dependencies and dependents
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:classes:+dependencies:+dependents"}'

# Classes with method summaries
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:classes:+methods"}'

列出入口点

# All entry points (controllers, listeners)
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:entrypoints"}'

# Entry points with business logic on their endpoints
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:entrypoints:+logic"}'

导航到顶点(类)

按名称直接导航到任何类--否 class: 需要前缀。支持简单名称、FQCN或部分匹配。

# Class overview (methods summary, dependencies, dependents)
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService"}'

# Same with fully qualified name
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:co.fanki.order.domain.OrderService"}'

# Class overview with business logic in method summaries
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService:+logic"}'

答复:

{
  "resultType": "class",
  "project": "order-service",
  "count": 1,
  "results": [
    {
      "className": "co.fanki.order.domain.OrderService",
      "classType": "SERVICE",
      "description": "Core domain service for order lifecycle management",
      "sourceFile": "src/main/java/co/fanki/order/domain/OrderService.java",
      "entryPoint": false,
      "dependencies": ["co.fanki.order.domain.OrderRepository", "co.fanki.order.domain.PaymentService"],
      "dependents": ["co.fanki.order.application.OrderController"],
      "methods": [
        {
          "methodName": "placeOrder",
          "description": "Creates a new order after validating stock and payment",
          "httpEndpoint": null
        },
        {
          "methodName": "cancelOrder",
          "description": "Cancels an existing order and releases reserved stock",
          "httpEndpoint": null
        }
      ]
    }
  ]
}

顶点上的子导航

# All methods of a class
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService:methods"}'

# Methods with business logic
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService:methods:+logic"}'

# Single method detail
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderController:method:createOrder"}'

# Outgoing dependencies
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService:dependencies"}'

# Incoming dependents (who depends on this class)
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderService:dependents"}'

存在性检查(?)

检查一个类是否有特定的方法。退货 exists: true/false 找到方法细节后。

# Does OrderController have a createOrder method?
curl -X POST http://localhost:8080/api/graph/query \
  -H "Content-Type: application/json" \
  -d '{"query": "order-service:OrderController:?createOrder"}'

方法存在时的响应:

{
  "resultType": "check",
  "project": "order-service",
  "count": 1,
  "results": [
    {
      "className": "co.fanki.order.application.OrderController",
      "check": "createOrder",
      "exists": true,
      "methodName": "createOrder",
      "description": "Creates a new order for a customer",
      "httpEndpoint": "POST /api/orders"
    }
  ]
}

方法不存在时的响应:

{
  "resultType": "check",
  "project": "order-service",
  "count": 1,
  "results": [
    {
      "className": "co.fanki.order.application.OrderController",
      "check": "deleteOrder",
      "exists": false
    }
  ]
}

快速查阅

查询描述
proj:endpoints所有HTTP端点
proj:endpoints:+logic具有业务逻辑的端点
proj:classes所有课程
proj:classes:+dependencies与即将离任的deps一起上课
proj:classes:+dependents有新学员的课程
proj:classes:+methods带有方法摘要的类
proj:entrypoints入口点(控制器、监听器)
proj:entrypoints:+logic具有业务逻辑的入口点
proj:UserService课程概述
proj:UserService:+logic类概述,方法中有逻辑
proj:UserService:methods类的所有方法
proj:UserService:methods:+logic具有业务逻辑的方法
proj:UserService:method:create单一方法细节
proj:UserService:dependencies传出依赖关系
proj:UserService:dependents即将到来的家属
proj:UserService:?create检查方法 create 存在

安装

需求

  • Java 21+
  • 梅文
  • PostgreSQL 14+
  • SSH密钥(用于私有存储库)
  • 无烟煤API键

选项A:下载最新版本

从下载最新的稳定JAR 发布页面.

选项B:从源代码构建

mvn clean package -DskipTests

配置

服务器是通过中引用的环境变量配置的 application.yml.

克劳德/法学硕士

变量默认值描述
ANTHROPIC_API_KEY*(空)*用于Claude域分析的API密钥。

数据库(PostgreSQL)

变量默认值描述
DATABASE_URLjdbc:postgresql://host:port/db?currentSchema=domain_mcpJDBC URL,包括模式。
DATABASE_USERNAMEpostgresPostgreSQL用户名。
DATABASE_PASSWORDpostgresPostgreSQL密码。

Git/存储库访问

变量默认值描述
GIT_SSH_KEY_PATH*(空)*克隆存储库的SSH私钥路径。
GIT_CLONE_BASE_PATH/tmp/domain-mcp-reposGit存储库克隆和缓存的目录。

跑步

REST API(独立)

mvn spring-boot:run

使用REST端点在端口8080上启动web服务器,用于管理项目和查询上下文。

码头工人

docker build -t domain-mcp-server .
docker run -p 8080:8080 domain-mcp-server

Kubernetes

使用DB、SSH密钥、LLM密钥的env变量进行部署。

索引项目

在MCP工具返回有关代码的上下文之前,您需要通过REST API对存储库进行索引。建议的设置是将分析服务作为一个独立的进程(或容器)运行,访问Claude API和SSH密钥,然后将MCP服务器指向同一个PostgreSQL数据库进行只读查询。

Swagger用户界面

服务器运行后,可以在以下位置获得完整的REST API文档:

http://localhost:8080/swagger-ui/index.html

REST API端点

端点方法描述
/api/projects/analyzePOST分析git存储库并索引所有类和方法
/api/projectsGET列出所有已分析的项目及其元数据
/api/projects/{id}/rebuild-graphPOST在不重新运行Claude富集的情况下重建依赖关系图
/api/context/class/{className}GET通过完全限定名获取类上下文
/api/context/class?className=GET备选类上下文端点(查询参数)
/api/context/method?className=&methodName=GET获取具有业务逻辑和依赖关系的方法上下文
/api/context/stack-tracePOST将堆栈跟踪与业务上下文相关联
/api/graph/queryPOST使用以下命令查询内存中的项目图 图形查询DSL
/healthGET健康检查

分析存储库

要为项目建立索引,请向分析端点发送POST请求:

curl -X POST http://localhost:8080/api/projects/analyze \
  -H "Content-Type: application/json" \
  -d '{
    "repositoryUrl": "git@github.com:fanki/order-service.git",
    "branch": "main",
    "fixMissed": true
  }'
{
  "success": true,
  "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "classesAnalyzed": 42,
  "endpointsFound": 12,
  "message": "Analysis complete"
}

fixMissed 标志(默认 true)重新分析上次运行中失败的任何类。

重建依赖关系图

如果解析器已更新,或者您想在不重新运行Claude富集的情况下刷新结构图:

curl -X POST http://localhost:8080/api/projects/{projectId}/rebuild-graph
{
  "success": true,
  "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "message": "Graph rebuilt successfully"
}

推荐架构

分析服务和MCP服务器共享相同的PostgreSQL数据库,但用途不同:

                        +-----------------------+
                        |   Analysis Service    |
                        |  (REST API, port 8080)|
                        |  ANTHROPIC_API_KEY    |
                        |  GIT_SSH_KEY_PATH     |
                        +-----------+-----------+
                                    |
                                    | writes
                                    v
                        +-----------------------+
                        |     PostgreSQL        |
                        |   domain_mcp schema   |
                        +-----------+-----------+
                                    |
                                    | reads
                                    v
                        +-----------------------+
                        |   MCP Server (stdio)  |
                        |  Claude Code plugin   |
                        |  No API key needed    |
                        +-----------------------+
  • 分析服务:作为独立服务(或Docker容器)运行。需要 ANTHROPIC_API_KEYGIT_SSH_KEY_PATH 使用Claude克隆repos并分析代码。显示端口8080上的REST API。
  • MCP服务器:作为Claude Code启动的stdio进程运行。只需要数据库凭据即可读取索引数据。不需要API密钥或SSH访问。

这种分离意味着您可以运行一次分析(或按计划运行),MCP服务器保持轻量级和快速。

克劳德代码MCP设置

服务器支持 MCP标准传输 与Claude Code直接集成。MCP服务器只需要数据库凭据即可读取索引数据,而不需要Anthropic API密钥或SSH密钥(请参阅 推荐架构).

1.构建JAR

mvn clean package -DskipTests

2.确保PostgreSQL正在运行

MCP服务器连接到与REST API相同的数据库。确保PostgreSQL正在运行 domain_mcp 架构存在。

3.添加到克劳德代码

选项A:CLI(推荐)

claude mcp add --transport stdio domain-mcp-server \
  -e DATABASE_URL=jdbc:postgresql://localhost:5432/domain_mcp?currentSchema=domain_mcp \
  -e DATABASE_USERNAME=postgres \
  -e DATABASE_PASSWORD=postgres \
  -- java --enable-preview -Dspring.profiles.active=mcp \
  -jar /absolute/path/to/domain-mcp-server-1.7.jar

使用 --scope project 仅将其添加到当前项目中,或在用户范围配置中省略它。

选项B:手动JSON配置

将此添加到您的Claude Code MCP设置中(~/.claude/settings.json 或通过 /settings 克劳德代码):

{
  "mcpServers": {
    "domain-mcp-server": {
      "command": "java",
      "args": [
        "--enable-preview",
        "-Dspring.profiles.active=mcp",
        "-jar",
        "/absolute/path/to/domain-mcp-server-1.4.jar"
      ],
      "env": {
        "DATABASE_URL": "jdbc:postgresql://localhost:5432/domain_mcp?currentSchema=domain_mcp",
        "DATABASE_USERNAME": "postgres",
        "DATABASE_PASSWORD": "postgres"
      }
    }
  }
}

替换 /absolute/path/to/ 使用您机器上JAR的实际路径。只需要数据库凭据——MCP服务器从由 分析服务.

4.验证连接

重新启动克劳德代码。9个域mcp服务器工具(list_projects, search_project, get_class_context, get_method_context, get_stack_trace_context, get_class_dependencies, get_project_overview, get_service_api, graph_query)应该出现在您可用的工具中。

运作原理

  • mcp Spring配置文件激活stdio传输并将所有日志重定向到stderr
  • stdout专用于JSON-RPC消息
  • REST端点在端口8080上仍然可用,用于通过HTTP填充数据
  • 两种传输共享相同的数据库和服务层

与Datadog MCP服务器集成

与无缝协作 Datadog MCP服务器.

关联工作流程

在调查生产错误时,Claude会自动链接两个MCP服务器:

  1. 数据狗MCP trace_list_error_traces --查找服务的错误跟踪
  2. 数据狗MCP log_correlate --使用日志上下文获取完整堆栈跟踪
  3. 域MCP get_stack_trace_context --用业务上下文丰富每个框架(代码的作用、存在的原因、依赖关系)
  4. 如果帧缺少上下文, list_projects / analyze_project 首先对存储库进行索引
  5. 域MCP get_class_context / get_method_context --深入探究特定的类或方法

这给了你 根本原因分析 它将运行时可观察性(Datadog)与领域知识(领域mcp服务器)相结合。

数据模型

存储在PostgreSQL中(domain_mcp 模式):

  • projects --具有状态、图形数据(JSON)和分析元数据的git存储库
  • source_classes --使用FQCN、类型、描述、源文件提取类
  • source_methods --提取具有业务逻辑、依赖关系、异常和HTTP端点的方法

健康检查

最小化 "ok" / "up" 探测的HTTP端点。

路线图

额外的语言解析器(Python、Kotlin),改进的跨服务链接,更好的LLM模式。

贡献

PR欢迎。

许可证

麻省理工学院

目录标签

目录标签

代码分析JavaClaude微服务图谱本地部署LLM集成依赖关系图业务逻辑提取

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

api-key

运行时(runtime,运行环境)

Docker

工具数量(toolCount,工具数)

9

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdioapi-key部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP