使用说明
Dev MCP-开发多云平台
🔄 最近重构:此项目已完全重构为使用 官方模型上下文协议(MCP)Go SDK,确保标准合规性、类型安全,并以SSE作为强制默认模式加强运输支持。
Dev MCP是一个基于Go的平台,它提供了一个统一的接口来查询各种数据源,包括数据库、Grafana Loki、S3、Sentry和Swagger API。它还包括一个内置的HTTP请求模拟器,用于测试目的。该平台支持独立模式和MCP(模型上下文协议)模式,用于与AI助手集成。
特性
- 数据库查询:支持MySQL表模式检查和数据查询
- Grafana Loki集成:使用LogQL查询日志
- S3 JSON数据访问:从S3 URL检索和解析JSON数据
- 哨兵集成:错误跟踪和问题管理
- Swagger API解析:分析和检查Swagger/OpenAPI规范
- 大型语言模型(LLM)服务:支持OpenAI、Anthropic Claude和本地模型
- HTTP请求模拟:模拟HTTP请求以进行测试
- MCP协议支持:将所有功能作为MCP工具公开,用于AI助手集成
建筑
官方MCP框架集成
Dev MCP已经完全重构,可以使用 官方模型上下文协议(MCP)Go SDK (github.com/modelcontextprotocol/go-sdk),提供:
- 标准合规:与官方MCP规范完全兼容
- 类型安全:强类型工具定义和内容处理
- 运输灵活性:支持多种传输模式(stdio、SSE、HTTP)
- 资源管理:数据库表、日志流、S3数据和API规范的自动发现和注册
- 结构化日志记录:支持调试模式的基于组件的日志记录系统
- 错误处理:具有上下文保留功能的全面错误处理
关键重构亮点
- 工具系统重构:使用完成重写
ToolDefinition与官方SDK兼容的结构 - 服务器实现:从自定义实现迁移到官方SDK
Connect方法 - 传输层:以SSE为强制默认值,增强对多种运输模式的支持
- 资源发现:数据库、日志、API和文档的自动资源管理系统
- 统一入口点:简化了main.go的模式选择和传输配置
MCP协议实现
服务器通过以下方式实现模型上下文协议:
- 工具:7种不同的工具类型(数据库、洛基、S3、哨兵、Swagger、LLM、模拟器)
- 资源:数据库、日志、S3存储桶和API规范的动态资源发现
- 运输:SSE第一种方法,支持stdio和HTTP回退
- 内容类型:通过官方MCP类型完全支持文本、图像和结构化数据
可用的MCP工具
所有供应商都实施 ProviderClient 与...对接 Test(config) 和 AddTools(server, config) 方法。
哨兵提供者
- 哨兵_问题:使用可选过滤解决哨兵问题
- 参数:
query(字符串,可选),limit(整数,默认值:50)
- 参数:
- 哨兵_问题_详细信息:获取有关特定哨兵问题的详细信息
- 参数:
issue_id(字符串,必填)
- 参数:
- 哨兵_制造_问题:创建新的Sentry问题以进行测试
- 参数:
title(字符串,必填),message(字符串,必填),level(字符串,默认值:“error”)
- 参数:
洛基供应商
- loki_query:使用LogQL查询Grafana Loki日志
- 参数:
query(字符串,必填),limit(整数,默认值:100)
- 参数:
- loki标签:从Loki获取可用日志标签
- 参数:无
数据库提供程序
- 数据库查询:执行带有安全验证的SQL查询
- 参数:
query(字符串,必填)
- 参数:
- 数据库模式:获取表架构信息
- 参数:
table(字符串,可选)
- 参数:
S3提供商
- s3_get_对象:从S3检索对象
- 参数:
bucket(字符串,必填),key(字符串,必填)
- 参数:
- s3_list_objects:列出S3存储桶中的对象
- 参数:
bucket(字符串,必填),prefix(字符串,可选),limit(整数,默认值:100)
- 参数:
文件提供程序
- file_read:通过安全验证读取文件内容
- 参数:
path(字符串,必填)
- 参数:
- file_list:列出目录中具有安全验证的文件
- 参数:
path(字符串,默认值:“.”),pattern(字符串,可选)
- 参数:
提供商架构
每个提供者都遵循相同的模式:
- 测试配置:
Test(config interface{}) error-验证和测试配置 - 添加工具:
AddTools(server *mcp.Server, config interface{}) error-如果测试通过,则注册工具 - 内部实施:使用现有服务客户端提供功能
- 安全:针对危险操作的内置安全验证
项目结构
dev-mcp/
├── cmd/
│ └── main.go # Main application entry point with transport mode support
├── configs/
│ └── config.yaml # Main configuration file
├── internal/
│ ├── config/ # Configuration loading utilities
│ ├── database/ # Database query functionality
│ ├── loki/ # Grafana Loki integration
│ ├── s3/ # S3 JSON data access
│ ├── sentry/ # Sentry integration
│ ├── swagger/ # Swagger API parsing
│ ├── llm/ # Large Language Models service
│ ├── simulator/ # HTTP request simulation
│ ├── logging/ # Structured logging system (NEW)
│ ├── errors/ # Error handling with context (NEW)
│ └── mcp/ # Official MCP protocol implementation
│ ├── server/ # MCP server with official SDK
│ ├── tools/ # Tool definitions using official SDK
│ ├── resources/ # Resource discovery and management (NEW)
│ └── types/ # MCP type definitions
├── scripts/ # Utility scripts including transport mode tests
│ ├── test-mcp.bat # MCP functionality tests (Windows)
│ ├── test-mcp.sh # MCP functionality tests (Unix)
│ ├── test-transport-modes.bat # Transport mode tests (Windows) (NEW)
│ └── test-transport-modes.sh # Transport mode tests (Unix) (NEW)
├── pkg/ # Reusable packages
├── docs/ # Documentation
└── go.mod # Go module definition with official MCP SDK
安装
-
克隆存储库:
git clone <repository-url> cd dev-mcp -
安装依赖项:
go mod tidy
配置
应用程序可以通过多种方法配置,优先级如下(从高到低):
- 环境变量 (最高优先级)
- 配置文件 (
configs/config.yaml) - 默认值 (最低优先级)
环境变量
所有配置选项都可以使用带有前缀的环境变量进行设置 MCP_。变量名遵循以下规则:
- 将YAML路径转换为大写
- 用下划线替换圆点
- 前缀为
MCP_
示例:
server.port成为MCP_SERVER_PORTdatabase.host成为MCP_DATABASE_HOSTllm.providers[0].api_key成为MCP_LLM_PROVIDERS_0_API_KEY
您还可以使用 .env 文件来设置环境变量。一个例子 .env.example 文件在项目根目录中提供。要使用它:
- 复制示例文件:
cp .env.example .env - 根据需要修改值
- 应用程序将自动加载这些变量
注意:环境变量优先于配置文件值。
服务器配置
配置文件
server:
port: 8080
host: localhost
环境变量
MCP_SERVER_PORT=8080
MCP_SERVER_HOST=localhost
数据库配置
配置文件
database:
host: localhost
port: 3306
username: root
password: password
dbname: dev_mcp
环境变量
MCP_DATABASE_HOST=localhost
MCP_DATABASE_PORT=3306
MCP_DATABASE_USERNAME=root
MCP_DATABASE_PASSWORD=password
MCP_DATABASE_DBNAME=dev_mcp
Grafana Loki配置
配置文件
loki:
host: http://localhost:3100
username: ""
password: ""
环境变量
MCP_LOKI_HOST=http://localhost:3100
MCP_LOKI_USERNAME=
MCP_LOKI_PASSWORD=
S3配置
配置文件
s3:
endpoint: ""
region: us-east-1
access_key: ""
secret_key: ""
bucket: ""
环境变量
MCP_S3_ENDPOINT=
MCP_S3_REGION=us-east-1
MCP_S3_ACCESS_KEY=
MCP_S3_SECRET_KEY=
MCP_S3_BUCKET=
哨兵配置
配置文件
sentry:
dsn: ""
environment: development
release: "1.0.0"
环境变量
MCP_SENTRY_DSN=
MCP_SENTRY_ENVIRONMENT=development
MCP_SENTRY_RELEASE=1.0.0
Swagger配置
配置文件
swagger:
url: "/swagger/"
filepath: "./docs/swagger.json"
环境变量
MCP_SWAGGER_URL=/swagger/
MCP_SWAGGER_FILEPATH=./docs/swagger.json
大型语言模型(LLM)配置
配置文件
llm:
providers:
- name: "openai"
type: "openai"
api_key: "your-openai-api-key"
enabled: false
model: "gpt-3.5-turbo"
- name: "anthropic"
type: "anthropic"
api_key: "your-anthropic-api-key"
enabled: false
model: "claude-3-haiku-20240307"
- name: "local"
type: "local"
endpoint: "http://localhost:8000/v1"
enabled: false
model: "llama-2-7b"
环境变量
# OpenAI Provider
MCP_LLM_PROVIDERS_0_NAME=openai
MCP_LLM_PROVIDERS_0_TYPE=openai
MCP_LLM_PROVIDERS_0_API_KEY=your-openai-api-key
MCP_LLM_PROVIDERS_0_ENABLED=false
MCP_LLM_PROVIDERS_0_MODEL=gpt-3.5-turbo
# Anthropic Provider
MCP_LLM_PROVIDERS_1_NAME=anthropic
MCP_LLM_PROVIDERS_1_TYPE=anthropic
MCP_LLM_PROVIDERS_1_API_KEY=your-anthropic-api-key
MCP_LLM_PROVIDERS_1_ENABLED=false
MCP_LLM_PROVIDERS_1_MODEL=claude-3-haiku-20240307
# Local Provider
MCP_LLM_PROVIDERS_2_NAME=local
MCP_LLM_PROVIDERS_2_TYPE=local
MCP_LLM_PROVIDERS_2_ENDPOINT=http://localhost:8000/v1
MCP_LLM_PROVIDERS_2_ENABLED=false
MCP_LLM_PROVIDERS_2_MODEL=llama-2-7b
用法
独立模式
以独立模式运行应用程序进行基本开发和测试:
go run cmd/main.go
这将执行健康检查并显示可用服务。
MCP服务器模式
要在具有传输支持的MCP(模型上下文协议)模式下启动应用程序:
基本MCP模式(默认SSE传输)
go run cmd/main.go mcp
显式传输模式选择
# SSE (Server-Sent Events) mode - Recommended
go run cmd/main.go mcp --sse
# HTTP mode (uses SSE implementation)
go run cmd/main.go mcp --http
# Using transport parameter
go run cmd/main.go mcp --transport sse
调试模式
# Enable debug logging
go run cmd/main.go mcp --sse --debug
运输方式
Dev MCP支持MCP通信的三种传输模式:
-
SSE(服务器发送事件) - 默认/强制模式
- 使用服务器发送事件的基于HTTP的传输
- 最适合基于网络的AI助手
- 提供实时双向通信
- 默认端口:8080
-
超文本传输协议 -使用SSE实现
- 带有SSE后端的标准HTTP传输
- 与web浏览器和HTTP客户端兼容
-
标准 - 强制进入SSE模式
- 传统的stdio通信(为了更好的兼容性,强制使用SSE)
- 所有stdio请求都会自动重定向到SSE模式
备注:根据要求,目前所有传输模式都强制使用SSE(服务器发送事件)传输,以实现最佳兼容性和性能。
可用命令
| 命令 | 描述 |
|---|---|
go run cmd/main.go |
在独立模式下运行,并进行健康检查 |
go run cmd/main.go mcp |
使用默认的SSE传输启动MCP服务器 |
go run cmd/main.go mcp --sse |
使用显式SSE传输启动MCP服务器 |
go run cmd/main.go mcp --http |
使用HTTP传输启动MCP服务器(使用SSE) |
go run cmd/main.go mcp --stdio |
启动MCP服务器(强制进入SSE模式) |
go run cmd/main.go mcp --debug |
使用调试日志记录启动MCP服务器 |
可用的MCP工具(官方SDK实现)
Dev MCP通过官方MCP SDK公开了7个强大的工具:
-
database_query-数据库操作- 查询MySQL数据库表和模式
- 安全执行SQL SELECT语句
- 检索表结构和元数据
- 支持参数化查询
-
loki_query-日志分析- 使用LogQL语法查询Grafana Loki日志
- 基于时间范围的日志检索
- 标签过滤和聚合
- 基于流的日志数据访问
-
s3_query-云存储访问- 从S3 URL检索和解析JSON数据
- 支持经过身份验证的S3存储桶
- 自动JSON解析和格式化
- 跨区域S3访问
-
sentry_query-错误跟踪- 查询哨兵问题和错误事件
- 按项目、环境和时间筛选
- 检索错误详细信息和堆栈跟踪
- 监控应用程序运行状况指标
-
swagger_query-API文件- 解析Swagger/OpenAPI规范
- 提取端点定义和模式
- 验证API文档结构
- 生成API使用示例
-
llm_chat-AI集成- 与多个LLM提供商(OpenAI、Anthropic、Local)互动
- 支持聊天完成和文本生成
- 与提供者无关的接口
- 模型配置和选择
-
http_request-请求模拟- 模拟HTTP请求以进行测试
- 支持所有HTTP方法(GET、POST、PUT、DELETE等)
- 自定义标头和有效负载配置
- 响应解析和验证
MCP资源(自动发现)
服务器通过官方MCP SDK自动发现并公开资源:
- 数据库表:自动发现的表架构和元数据
- 日志流:可用的Loki日志流和标签
- S3对象:可访问的S3存储桶内容和JSON数据
- API规范:可用的Swagger/OpenAPI文档
- 错误报告:哨兵项目问题和错误摘要
测试MCP功能
基本MCP测试:
- 在Unix/Linux/macOS上:
scripts/test-mcp.sh - 在Windows上:
scripts/test-mcp.bat
运输模式测试:
- 在Unix/Linux/macOS上:
scripts/test-transport-modes.sh - 在Windows上:
scripts/test-transport-modes.bat
手动测试示例:
# Test SSE transport mode (default)
go run cmd/main.go mcp --sse --debug
# Test HTTP transport mode (uses SSE backend)
go run cmd/main.go mcp --http
# Test with transport parameter
go run cmd/main.go mcp --transport sse
# Test stdio mode (forced to SSE)
go run cmd/main.go mcp --stdio
构建和测试:
# Build the project
go build -o dev-mcp cmd/main.go
# Run tests
go test ./...
# Test with different transport modes
./dev-mcp mcp --sse # SSE mode
./dev-mcp mcp --http # HTTP mode (uses SSE)
./dev-mcp mcp --stdio # stdio mode (forced to SSE)
大型语言模型(LLM)服务
LLM服务提供了一个统一的接口来处理不同的大型语言模型:
支持的提供商
- OpenAIGPT-3.5、GPT-4和其他OpenAI模型
- Anthropic:克劳德模型
- 局部模型:具有与OpenAI兼容的API的任何模型
配置
要启用LLM提供程序,请设置 enabled: true 并提供所需的API密钥或端点。
示例用法
// Chat with a model
chatReq := &models.ChatRequest{
Model: "gpt-3.5-turbo",
Messages: []models.Message{
{Role: models.UserRole, Content: "Hello, how are you?"},
},
}
chatResp, err := llmService.Chat(context.Background(), chatReq)
if err != nil {
log.Fatal(err)
}
fmt.Println(chatResp.Choices[0].Message.Content)
API终点
(TODO:为每个服务定义API终结点)
发展
添加新功能
- 在中创建新包
internal/对于该功能 - 实现功能
- 向添加配置选项
configs/config.yaml - 在中初始化该功能
cmd/main.go
测试
使用以下工具运行单元测试:
go test ./...
依赖项
核心依赖关系
github.com/modelcontextprotocol/go-sdk- 官方MCP Go SDK 新github.com/go-sql-driver/mysql-MySQL驱动程序github.com/go-resty/resty/v2-用于HTTP请求的REST客户端github.com/aws/aws-sdk-go-用于S3集成的AWS SDKgithub.com/getsentry/sentry-go-用于错误跟踪的Sentry SDKgopkg.in/yaml.v2-YAML配置解析
遗留依赖关系
github.com/lib/pq-PostgreSQL驱动程序(已弃用,为兼容而保留)
MCP官方SDK的主要功能
- 符合标准的模型上下文协议实现
- 类型安全工具和资源定义
- 多种传输支持(stdio、SSE、HTTP)
- 使用官方MCP类型进行结构化内容处理
- 会话管理和生命周期处理
贡献
- 分叉存储库
- 创建要素分支
- 提交您的更改
- 推到分支
- 创建拉取请求
许可证
(TODO:添加许可证信息)
