构建 MCP 服务器:将 Claude 和 VSCode 连接到外部工具

发布: (2025年12月4日 GMT+8 09:16)
5 min read
原文: Dev.to

Source: Dev.to

介绍

模型上下文协议(MCP)是 Anthropic 开发的一个开放协议,允许像 Claude 这样的 AI 助手连接外部数据源和工具。本文将手把手教你构建自己的 MCP 服务器,供 Claude Desktop、VSCode 以及其他兼容客户端使用。

什么是 MCP?

MCP 为 AI 助手与外部系统交互提供了标准化的方式。可以把它看作一个通用适配器,使 Claude 能够:

  • 访问数据库和 API
  • 读取和写入文件
  • 执行命令
  • 与 Web 服务交互

该协议定义了客户端‑服务器架构,其中:

  • MCP 客户端(如 Claude Desktop 或 VSCode)连接到服务器。
  • MCP 服务器暴露特定的能力(资源、工具和提示)。
  • 通信通过 JSON‑RPC 2.0 在 stdio 或 HTTP 上进行。

架构概览

MCP 服务器由三个主要组件组成:

资源

资源是服务器可以向客户端提供的数据来源。可以是:

  • 文件系统中的文件
  • 数据库记录
  • API 响应
  • 实时数据流

工具

工具是客户端可以通过服务器调用的功能:

  • 执行系统命令
  • 进行计算
  • 与外部 API 交互
  • 操作数据

提示

提示是预定义的模板,帮助结构化交互:

  • 查询模板
  • 命令模式
  • 工作流指令

构建你的第一个 MCP 服务器

让我们一步步构建一个简单的 MCP 服务器。示例使用 Python,但 MCP 服务器可以用任何语言实现。

前置条件

pip install mcp

服务器基本结构

from mcp.server import Server
from mcp.types import Resource, Tool
import asyncio

app = Server("my-mcp-server")

@app.list_resources()
async def list_resources() -> list[Resource]:
    return [
        Resource(
            uri="file:///example.txt",
            name="Archivo de Ejemplo",
            mimeType="text/plain"
        )
    ]

@app.read_resource()
async def read_resource(uri: str) -> str:
    if uri == "file:///example.txt":
        return "¡Hola desde el Servidor MCP!"
    raise ValueError(f"Recurso desconocido: {uri}")

@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="saludar",
            description="Saludar a alguien por su nombre",
            inputSchema={
                "type": "object",
                "properties": {
                    "nombre": {"type": "string"}
                },
                "required": ["nombre"]
            }
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> str:
    if name == "saludar":
        return f"¡Hola, {arguments['nombre']}!"
    raise ValueError(f"Herramienta desconocida: {name}")

if __name__ == "__main__":
    asyncio.run(app.run())

连接 Claude Desktop

要在 Claude Desktop 中使用你的 MCP 服务器,在 Claude 设置的 Developer 部分进行配置:

{
  "mcpServers": {
    "mi-servidor": {
      "command": "python",
      "args": ["ruta/a/tu/servidor.py"]
    }
  }
}

重启 Claude Desktop 后,你的服务器提供的工具和资源就会出现在 Claude 中。

连接 VSCode

在 VSCode 中集成 MCP,使用 MCP 扩展:

  1. 从 Marketplace 安装 MCP 扩展。
  2. .vscode/mcp.json 中配置你的服务器:
{
  "servers": [
    {
      "name": "mi-servidor",
      "command": "python",
      "args": ["ruta/a/tu/servidor.py"]
    }
  ]
}

真实场景用例

访问数据库

创建一个服务器,让 Claude 安全地查询数据库:

@app.list_tools()
async def list_tools():
    return [Tool(name="consultar_bd", description="Ejecutar consultas SQL")]

文件系统操作

构建一个服务器来管理项目文件:

@app.list_resources()
async def list_resources():
    return [Resource(uri=f"file:///{archivo}") for archivo in os.listdir()]

与 API 集成

将 Claude 连接到外部 API:

@app.call_tool()
async def call_tool(name, args):
    if name == "obtener_datos":
        response = await http_client.get(args['url'])
        return response.json()

最佳实践

  • 安全第一:验证输入并对输出进行清理。
  • 错误处理:提供清晰的错误信息。
  • 文档:详尽记录你的工具和资源。
  • 性能:使用 async/await 处理 I/O 操作。
  • 测试:在不同客户端上测试你的服务器。

示例仓库

你可以在我的 GitHub 仓库中找到完整可运行的示例:

仓库

该仓库包含:

  • 基础 MCP 服务器实现
  • Claude 与 VSCode 的配置示例
  • 文档和配置说明
  • 示例用例

结论

构建 MCP 服务器为扩展 AI 助手的能力打开了无限可能。无论是连接数据库、文件系统还是外部 API,MCP 都提供了一种标准且强大的方式,让你的数据和工具对 AI 可用。

模型上下文协议仍在持续演进,生态系统也在快速成长。通过创建自己的 MCP 服务器,你可以定制 Claude 以及其他兼容客户端,以满足特定需求和工作流。

资源

Back to Blog

相关文章

阅读更多 »

被遗忘的 tech 墓地 by kiroween

一次 Hackathon 之旅:走进旧发明的墓园 每年十月,创意世界里总会掀起一阵奇异的波动。今年,Kiroween 发起挑战,……