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

mock MCP (Jimbo4794)

MCP Server

一个基于Go的HTTP流式MCP协议模拟服务器,用于开发和测试目的,支持动态工具管理和GitHub同步。

工具数

4

提示词数

0

GitHub Stars

0

资源数

0
开发工具GitHubGoHTTP服务器Docker

安装说明

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

作者 / 组织

Jimbo4794

提供方

Jimbo4794

最后核验

2026/5/17 20:20

运行时

Docker

快速接入

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

命令预览

docker run -d \

详细介绍

这是使用AI构建的

模拟MCP服务器

一个用Go编写的基于HTTP的流式模型上下文协议(MCP)服务器,用于模拟工具调用以进行测试和开发。

特性

  • HTTP/HTTPS支持:MCP协议的标准HTTP POST请求
  • 流媒体支持:用于流式响应的服务器发送事件(SSE)
  • WebSocket支持:完全支持WebSocket双向通信
  • 模拟工具:用于测试的预配置模拟工具
  • 动态工具管理:通过编辑YAML文件在运行时添加/删除工具
  • 热重新加载:当YAML配置文件更改时自动重新加载工具
  • 可扩展:通过YAML配置轻松添加自定义模拟工具

安装

go mod download

运行服务器

go run ./cmd/mock-mcp/main.go

或者构建并运行:

go build -o bin/mock-mcp-server ./cmd/mock-mcp
./bin/mock-mcp-server

默认情况下,服务器将在端口8080上启动。

配置文件

服务器使用YAML配置文件(config/tools.yaml 默认情况下)来管理工具。您可以使用以下命令指定自定义路径 TOOLS_CONFIG 环境变量:

TOOLS_CONFIG=/path/to/custom-tools.yaml go run ./cmd/mock-mcp/main.go

服务器会自动监视配置文件,并在检测到更改时重新加载工具。无需重新启动!

GitHub存储库同步

您可以填充 config/testcases/ 通过设置GitHub存储库中的目录 GITHUB_REPO_URL 环境变量。服务器将在启动时自动克隆或从存储库中提取最新更改。

用途:

GITHUB_REPO_URL=https://github.com/Jimbo4794/mcp-testcases go run ./cmd/mock-mcp/main.go

或者用更短的格式:

GITHUB_REPO_URL=Jimbo4794/mcp-testcases go run ./cmd/mock-mcp/main.go

私有存储库访问:

要从私有GitHub存储库同步,请提供您的GitHub用户名和个人访问令牌:

GITHUB_REPO_URL=https://github.com/user/private-repo \
GITHUB_USERNAME=your-username \
GITHUB_TOKEN=ghp_your_personal_access_token \
go run ./cmd/mock-mcp/main.go

注: 令牌应该是具有适当存储库访问权限的GitHub个人访问令牌(PAT)。令牌从不记录,仅用于git操作期间的身份验证。

它是如何工作的:

  1. 启动时,如果 GITHUB_REPO_URL 设置后,服务器将:

- 克隆存储库(如果尚未缓存)或提取最新更改 - 寻找 tools.yaml 在指定的路径上 GITHUB_TOOLS_CONFIG_PATH (默认值: config/tools.yaml) - 在指定的路径中查找测试用例 GITHUB_TESTCASES_PATH (默认值: testcases) - 复制 tools.yaml 文件从存储库到本地缓存 - 复制 testcases/ 从仓库到本地缓存的目录 - 将同步文件用于配置和测试用例

  1. 存储库在本地缓存在系统临时目录中,因此后续运行将拉取更新,而不是克隆新的。
  1. 存储库必须具有 tools.yaml 文件位于指定的路径 GITHUB_TOOLS_CONFIG_PATH (默认值: config/tools.yaml)和/或位于指定路径的testcases目录 GITHUB_TESTCASES_PATH (默认值: testcases).

Docker示例:

对于公共存储库:

docker run -d \
  --name mock-mcp-server \
  -p 8080:8080 \
  -e GITHUB_REPO_URL=https://github.com/Jimbo4794/mcp-testcases \
  mock-mcp-server:latest

对于私有存储库:

docker run -d \
  --name mock-mcp-server \
  -p 8080:8080 \
  -e GITHUB_REPO_URL=https://github.com/user/private-repo \
  -e GITHUB_USERNAME=your-username \
  -e GITHUB_TOKEN=ghp_your_personal_access_token \
  mock-mcp-server:latest

注: Docker镜像包括 git 支持GitHub同步功能。

GitHub Webhook集成

启用GitHub同步后,服务器会自动公开一个可以接收GitHub推送事件的webhook端点。当更改被推送到 config/testcases/ 在存储库中的目录中,服务器将自动同步最新更改。

设置GitHub Webhooks:

  1. 在您的GitHub存储库中,转到 设置网络钩子添加webhook
  2. 设置 有效载荷URL 致: http://your-server:8080/webhook/github
  3. 内容类型 致: application/json
  4. 选择 只是推送事件 (或个别事件→ push)
  5. (可选)设置 秘密 并将其配置为 GITHUB_WEBHOOK_SECRET 环境变量
  6. 点击 添加webhook

Webhook安全:

对于生产使用,建议启用webhook签名验证:

GITHUB_REPO_URL=https://github.com/Jimbo4794/mcp-testcases \
GITHUB_WEBHOOK_SECRET=your-secret-here \
go run ./cmd/mock-mcp/main.go

webhook密钥应与GitHub webhook设置中配置的密钥相匹配。如果 GITHUB_WEBHOOK_SECRET 未设置,webhook签名验证已禁用(对开发/测试有用)。

它是如何工作的:

  1. 当收到推送事件时,webhook处理程序会检查中是否有任何文件 config/testcases/ 已修改
  2. 如果检测到相关更改,则会触发存储库同步
  3. 服务器提取最新更改并更新本地缓存
  4. 如果发生以下情况,工具管理器会自动重新加载工具 tools.yaml 已修改(通过文件监视)

使用Webhook的Docker示例:

docker run -d \
  --name mock-mcp-server \
  -p 8080:8080 \
  -e GITHUB_REPO_URL=https://github.com/Jimbo4794/mcp-testcases \
  -e GITHUB_WEBHOOK_SECRET=your-secret-here \
  mock-mcp-server:latest

注: 确保您的服务器可以从GitHub的webhook服务器访问。对于本地开发,您可能需要使用以下服务 吸烟 暴露您的本地服务器。

码头工人

构建Docker镜像

docker build -t mock-mcp-server:latest .

使用Docker运行

使用Docker运行

docker run -d \
  --name mock-mcp-server \
  -p 8080:8080 \
  -v $(pwd)/config:/app/config:ro \
  -v $(pwd)/testcases:/app/testcases:ro \
  -e TOOLS_CONFIG=/app/config/tools.yaml \
  mock-mcp-server:latest

使用Docker Compose(推荐)

docker-compose up -d

这将:

  • 如果需要,构建图像
  • 用适当的容量支架启动容器
  • 安装 ./config/app/config (只读)
  • 安装 ./testcases/app/testcases (只读)
  • 暴露端口8080

停止:

docker-compose down

卷装载

Docker安装程序装载两个卷:

  1. 配置卷: ./config/app/config

- 包含 tools.yaml 带有工具定义 - 为安全起见,以只读方式安装 - 更改为 tools.yaml 自动检测并重新加载

  1. 测试用例数量: ./testcases/app/testcases

- 包含所有测试用例YAML文件 - 以只读方式安装 - 测试用例从该目录加载

自定义卷路径

您可以在中自定义卷路径 docker-compose.yml:

volumes:
  - /path/to/your/config:/app/config:ro
  - /path/to/your/testcases:/app/testcases:ro

环境变量

  • TOOLS_CONFIG:工具配置文件的路径(默认: /app/config/tools.yaml)
  • GITHUB_REPO_URL:GitHub存储库URL,用于同步配置和测试用例(例如。, https://github.com/user/repouser/repo)
  • GITHUB_USERNAME:(可选)用于访问私有存储库的GitHub用户名
  • GITHUB_TOKEN:(可选)用于访问私有存储库的GitHub个人访问令牌(PAT)。需要时 GITHUB_USERNAME 已设置。
  • GITHUB_TOOLS_CONFIG_PATH:(可选)相对于GitHub存储库根目录的tools.yaml文件的路径(默认值: config/tools.yaml)
  • GITHUB_TESTCASES_PATH:(可选)相对于GitHub存储库根目录的testcases目录路径(默认: testcases)
  • GITHUB_WEBHOOK_SECRET:(可选)用于验证GitHub webhook签名的密钥。如果未设置,则禁用签名验证。

健康检查

该容器包括一个健康检查,用于监控 /health 终点。您可以检查容器状态:

docker ps

项目结构

mock-mcp/
├── cmd/
│   └── mock-mcp/          # Application entry point
│       └── main.go
├── internal/
│   └── mcp/               # Internal MCP server package
│       ├── types.go        # Type definitions
│       ├── server.go       # HTTP server and MCP protocol handlers
│       ├── tools.go        # Tool management and YAML loading
│       ├── testcases.go    # Test case loading and matching
│       ├── github_sync.go  # GitHub repository sync functionality
│       └── webhook.go      # GitHub webhook handler for auto-sync
├── config/
│   └── tools.yaml         # Tool definitions
├── testcases/             # Test case YAML files
│   ├── mock_echo-test-case-1.yaml
│   ├── mock_calculator-test-case-1.yaml
│   └── ...
├── scripts/               # Utility scripts
│   └── example.sh         # Example test script
├── bin/                   # Build output (gitignored)
├── Dockerfile             # Docker build configuration
├── docker-compose.yml     # Docker Compose configuration
├── Makefile               # Build automation
├── go.mod
├── go.sum
└── README.md

端点

  • POST /mcp -标准MCP协议端点
  • GET /mcp?stream=true -流式MCP端点(服务器发送事件)
  • WS /mcp -WebSocket MCP端点
  • GET /health -健康检查端点
  • POST /webhook/github -GitHub webhook端点(仅在以下情况下可用 GITHUB_REPO_URL 已设置)

用法示例

初始化MCP连接

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {
        "name": "test-client",
        "version": "1.0.0"
      }
    }
  }'

列出可用工具

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }'

调用模拟工具

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "mock_echo",
      "arguments": {
        "message": "Hello, MCP!"
      }
    }
  }'

流媒体工具调用

curl -X POST http://localhost:8080/mcp?stream=true \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "mock_calculator",
      "arguments": {
        "operation": "add",
        "a": 10,
        "b": 5
      }
    }
  }'

可用的模拟工具

mock_echo

回显输入消息。

参数:

  • message (string,必填):要回显的消息

例子:

{
  "name": "mock_echo",
  "arguments": {
    "message": "Hello, World!"
  }
}

模拟计算器

执行基本算术运算。

参数:

  • operation (string,必填):要执行的操作(加、减、乘、除)
  • a (数字,必填):第一个数字
  • b (数字,必填):第二个数字

例子:

{
  "name": "mock_calculator",
  "arguments": {
    "operation": "multiply",
    "a": 6,
    "b": 7
  }
}

mock_delay

模拟延迟操作。

参数:

  • seconds (number,必填):延迟秒数

例子:

{
  "name": "mock_delay",
  "arguments": {
    "seconds": 2
  }
}

mock_greeter

用多种语言直呼某人的名字。

参数:

  • name (string,必填):要问候的人的名字
  • language (string,可选):问候语的语言(en,es,fr,de)。默认为“en”

例子:

{
  "name": "mock_greeter",
  "arguments": {
    "name": "Alice",
    "language": "es"
  }
}

YAML配置

可以通过编辑来动态添加、删除或修改工具 tools.yaml 文件。服务器会自动监视更改并重新加载工具,而无需重新启动。

配置文件格式

tools:
  - name: my_tool
    description: "Description of my tool"
    defaultTestCase: 1  # Optional: Use test-case-1.yaml as default if no match found (0 = no default, omit to disable)
    inputSchema:
      type: object
      properties:
        param1:
          type: string
          description: "Parameter description"
      required:
        - param1

默认测试用例配置

通过设置,您可以配置在找不到匹配的测试用例时使用哪个测试用例作为回退 defaultTestCase 在工具定义中:

  • defaultTestCase: 0 或省略-无默认值,如果找不到匹配项,则返回错误
  • defaultTestCase: 1 -使用 tool-name-test-case-1.yaml 默认
  • defaultTestCase: 2 -使用 tool-name-test-case-2.yaml 默认
  • 等等

例子:

tools:
  - name: mock_calculator
    description: "Performs basic arithmetic operations"
    defaultTestCase: 1  # Use test-case-1.yaml as default for unmatched inputs
    inputSchema:
      # ... schema definition

当您想为不匹配任何特定测试用例的输入提供通用响应时,这很有用。

配置示例

config/tools.yaml 查看所有可用工具的完整示例。

添加新工具

  1. 编辑 tools.yaml 并添加您的工具定义:
tools:
  - name: my_new_tool
    description: "My new tool"
    inputSchema:
      type: object
      properties:
        input:
          type: string
          description: "Input parameter"
      required:
        - input
  1. 保存文件-服务器将自动重新加载工具。
  1. 在中添加执行逻辑 executeMockTool() 功能在 main.go:
case "my_new_tool":
    input, _ := args["input"].(string)
    return ToolResult{
        Content: []ContentBlock{
            {
                Type: "text",
                Text: fmt.Sprintf("Processed: %s", input),
            },
        },
    }
  1. 重建服务器(仅在执行逻辑更改时需要):
go build -o mock-mcp-server main.go

移除工具

只需从中删除工具条目 tools.yaml 并保存。该工具将自动从服务器中删除。

测试用例

服务器使用YAML测试用例文件为工具调用提供预先录制的响应。工具不是执行代码,而是返回来自匹配测试用例文件的响应。

测试用例文件格式

测试用例文件已命名 -test-case-X.yaml 哪里 X 是一个数字(1、2、3等)。例如:

  • mock_echo-test-case-1.yaml
  • mock_calculator-test-case-2.yaml
  • mock_greeter-test-case-3.yaml

每个测试用例文件包含:

input:
  param1: "value1"
  param2: 42

response:
  content:
    - type: text
      text: "Response text here"
  isError: false

如何匹配测试用例

  1. 服务器在中搜索测试用例文件 testcases/ 目录(相对于配置文件位置)
  2. 它按顺序(1、2、3、…)尝试测试用例,最多100个
  3. 对于每个测试用例,它比较 input 带有实际工具调用参数的部分
  4. 使用第一个匹配测试用例
  5. 如果没有找到匹配项,则返回到 test-case-1.yaml 默认值(如果存在)
  6. 如果不存在测试用例,则返回错误

示例测试用例

文件: mock_echo-test-case-1.yaml

input:
  message: "Hello, World!"

response:
  content:
    - type: text
      text: "Echo: Hello, World!"
  isError: false

当调用工具时 {"message": "Hello, World!"},此测试用例将匹配并返回预先录制的响应。

创建测试用例

  1. 创建一个名为的YAML文件 -test-case-X.yamltestcases/ 目录
  2. 定义 input 带有预期论点的部分
  3. 定义 response 具有所需输出的部分
  4. 保存文件-无需重新启动!

多个测试用例

您可以为同一工具创建多个测试用例来处理不同的输入场景:

  • mock_calculator-test-case-1.yaml -用于添加
  • mock_calculator-test-case-2.yaml -用于乘法
  • mock_calculator-test-case-3.yaml -除以零误差

服务器将根据输入参数自动匹配适当的测试用例。

协议

此服务器实现了模型上下文协议(MCP)规范。所有请求和响应都遵循JSON-RPC 2.0格式。

请求格式

{
  "jsonrpc": "2.0",
  "id": ,
  "method": "",
  "params": { ... }
}

响应格式

{
  "jsonrpc": "2.0",
  "id": ,
  "result": { ... }
}

或者,如果出现错误:

{
  "jsonrpc": "2.0",
  "id": ,
  "error": {
    "code": ,
    "message": ""
  }
}

发展

添加自定义模拟工具

推荐方法(YAML配置):

  1. 将工具定义添加到 tools.yaml (参见 YAML配置 上文)
  2. 创建测试用例YAML文件(请参见 测试用例 上文)
  3. 无需更改代码!服务器自动从测试用例文件中读取响应

注: 服务器不再执行工具的代码。所有工具响应都来自YAML测试用例文件。这使得以下操作变得容易:

  • 在不更改代码的情况下测试不同的场景
  • 版本控制测试用例
  • 跨环境共享测试用例
  • 修改响应而不重建

工作流摘要

  1. 定义工具tools.yaml -指定工具名称、描述和输入模式
  2. 创建测试用例 作为 -test-case-X.yaml 文件-定义输入/输出对
  3. 呼叫工具 通过MCP API-服务器自动匹配测试用例的输入,并返回预先确定的响应

添加新工具或测试用例时不需要更改代码或重建代码!

许可证

麻省理工学院

目录标签

目录标签

开发工具GitHubGoHTTP服务器DockerMCP协议本地部署测试工具GitHub集成

接入字段

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

stdio

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

none

运行时(runtime,运行环境)

Docker

工具数量(toolCount,工具数)

4

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdionone部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP