Inside MCP: 开发者指南 —— 开发第一个 MCP 服务器

引言

前面几篇文章,我们聊过 MCP 是什么、它如何连接系统,以及它怎样让智能体具备执行工作流的能力。今天我们不再停留在概念层面,而是动手实践。

这篇文章会带你从零开始,构建一个最简单的 MCP Server,并学会如何测试和调试它。


构建你的第一个 MCP Server

MCP Server 的作用,就是把一个系统(数据库、API 或其他服务)“包装”起来,让智能体能通过统一的协议访问它。大致可以分三步:

  1. 确定功能:服务器应该提供什么能力?(比如列出文件、读取数据)
  2. 实现接口:用 MCP 协议把这些能力暴露出来。
  3. 运行并测试:确认智能体或者工具能够真正调用到。

示例项目:用 Go 实现的文件系统 MCP Server

我在 GitHub 上放了一个完整示例:
👉 inside-mcp/cmd/first/main.go

你可以这样运行它:

# 克隆项目
git clone https://github.com/tendant/inside-mcp.git
cd inside-mcp/cmd/first

# 启动服务器(默认使用当前目录作为根目录)
go run .

# 或者指定一个自定义目录
MCP_FS_ROOT=/path/to/folder go run .

这样,一个最基础的文件浏览服务就跑起来了。


测试与调试 MCP Server

MCP 基于 JSON-RPC 协议,通过 stdio 与客户端通信。下面介绍几种常用的测试方法。

1. 编译服务器

go build cmd/first/main.go -o first

2. 安装测试工具 mcptools

go install github.com/f/mcptools/cmd/mcptools@latest

3. 探索服务器提供的工具

mcptools tools ./first
mcptools call list_resources ./first

你会看到服务器暴露出的工具,并且可以直接调用它们。

4. 直接发送 JSON(可选)

如果你想更底层地测试,可以直接发送 JSON 请求:

echo '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_roots",
    "arguments": {}
  }
}' | ./first

5. 写单元测试(Go 代码)

func TestListResources(t *testing.T) {
    args := ResourceParams{Path: "."}
    res, data, err := listResources(context.Background(), nil, args)
    if err != nil {
        t.Fatal(err)
    }
    if len(data.([]string)) == 0 {
        t.Fatal("expected files, got none")
    }
}

这样可以直接验证逻辑是否正常工作。

6. 在 Claude Desktop 中使用

Claude Desktop 原生支持 MCP。只需要配置一下:

  1. 打开配置文件:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %AppData%/Claude/claude_desktop_config.json
  2. 添加一段配置:

    {
      "mcpServers": {
        "filesystem": {
          "command": "/absolute/path/to/first"
        }
      }
    }

    /absolute/path/to/first 替换成你刚才编译好的二进制文件路径。

  3. 重启 Claude Desktop。

然后你就可以直接和 Claude 说:
“把我 home 目录下的文件列出来。”
Claude 会通过 MCP 调用 list_resources,并把结果展示给你。


总结

搭建 MCP 集成其实并不复杂:

  1. 用 Go + MCP SDK 写一个最简单的服务器。
  2. 跑起来,让它暴露出一个系统。
  3. mcptools、JSON 或者单元测试验证功能。
  4. 接入 Claude Desktop,看看真实的智能体如何使用它。

有了这个起点,你就能逐步扩展自己的 MCP Server,接入更多系统,支持更复杂的工作流。