多源数据查询平台

Dev MCP是一个基于Go的多云数据查询平台,提供统一的接口查询数据库、Grafana Loki、S3、Sentry和Swagger API等多种数据源,并支持AI助手集成。

  • by visla-perlin
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 visla-perlin/dev-mcp

使用说明

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规范的自动发现和注册
  • 结构化日志记录:支持调试模式的基于组件的日志记录系统
  • 错误处理:具有上下文保留功能的全面错误处理

关键重构亮点

  1. 工具系统重构:使用完成重写 ToolDefinition 与官方SDK兼容的结构
  2. 服务器实现:从自定义实现迁移到官方SDK Connect 方法
  3. 传输层:以SSE为强制默认值,增强对多种运输模式的支持
  4. 资源发现:数据库、日志、API和文档的自动资源管理系统
  5. 统一入口点:简化了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 (字符串,可选)

提供商架构

每个提供者都遵循相同的模式:

  1. 测试配置: Test(config interface{}) error -验证和测试配置
  2. 添加工具: AddTools(server *mcp.Server, config interface{}) error -如果测试通过,则注册工具
  3. 内部实施:使用现有服务客户端提供功能
  4. 安全:针对危险操作的内置安全验证

项目结构

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

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd dev-mcp
    
  2. 安装依赖项:

    go mod tidy
    

配置

应用程序可以通过多种方法配置,优先级如下(从高到低):

  1. 环境变量 (最高优先级)
  2. 配置文件 (configs/config.yaml)
  3. 默认值 (最低优先级)

环境变量

所有配置选项都可以使用带有前缀的环境变量进行设置 MCP_。变量名遵循以下规则:

  • 将YAML路径转换为大写
  • 用下划线替换圆点
  • 前缀为 MCP_

示例:

  • server.port 成为 MCP_SERVER_PORT
  • database.host 成为 MCP_DATABASE_HOST
  • llm.providers[0].api_key 成为 MCP_LLM_PROVIDERS_0_API_KEY

您还可以使用 .env 文件来设置环境变量。一个例子 .env.example 文件在项目根目录中提供。要使用它:

  1. 复制示例文件: cp .env.example .env
  2. 根据需要修改值
  3. 应用程序将自动加载这些变量

注意:环境变量优先于配置文件值。

服务器配置

配置文件

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通信的三种传输模式:

  1. SSE(服务器发送事件) - 默认/强制模式

    • 使用服务器发送事件的基于HTTP的传输
    • 最适合基于网络的AI助手
    • 提供实时双向通信
    • 默认端口:8080
  2. 超文本传输协议 -使用SSE实现

    • 带有SSE后端的标准HTTP传输
    • 与web浏览器和HTTP客户端兼容
  3. 标准 - 强制进入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个强大的工具:

  1. database_query -数据库操作

    • 查询MySQL数据库表和模式
    • 安全执行SQL SELECT语句
    • 检索表结构和元数据
    • 支持参数化查询
  2. loki_query -日志分析

    • 使用LogQL语法查询Grafana Loki日志
    • 基于时间范围的日志检索
    • 标签过滤和聚合
    • 基于流的日志数据访问
  3. s3_query -云存储访问

    • 从S3 URL检索和解析JSON数据
    • 支持经过身份验证的S3存储桶
    • 自动JSON解析和格式化
    • 跨区域S3访问
  4. sentry_query -错误跟踪

    • 查询哨兵问题和错误事件
    • 按项目、环境和时间筛选
    • 检索错误详细信息和堆栈跟踪
    • 监控应用程序运行状况指标
  5. swagger_query -API文件

    • 解析Swagger/OpenAPI规范
    • 提取端点定义和模式
    • 验证API文档结构
    • 生成API使用示例
  6. llm_chat -AI集成

    • 与多个LLM提供商(OpenAI、Anthropic、Local)互动
    • 支持聊天完成和文本生成
    • 与提供者无关的接口
    • 模型配置和选择
  7. 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终结点)

发展

添加新功能

  1. 在中创建新包 internal/ 对于该功能
  2. 实现功能
  3. 向添加配置选项 configs/config.yaml
  4. 在中初始化该功能 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 SDK
  • github.com/getsentry/sentry-go -用于错误跟踪的Sentry SDK
  • gopkg.in/yaml.v2 -YAML配置解析

遗留依赖关系

  • github.com/lib/pq -PostgreSQL驱动程序(已弃用,为兼容而保留)

MCP官方SDK的主要功能

  • 符合标准的模型上下文协议实现
  • 类型安全工具和资源定义
  • 多种传输支持(stdio、SSE、HTTP)
  • 使用官方MCP类型进行结构化内容处理
  • 会话管理和生命周期处理

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交您的更改
  4. 推到分支
  5. 创建拉取请求

许可证

(TODO:添加许可证信息)