目 录CONTENT

文章目录

构建MCP Server

PySuper
2025-04-12 / 0 评论 / 0 点赞 / 11 阅读 / 0 字

MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 提出的一种开放标准,它就像一套精心设计的“交通规则”或“通用语言”,旨在让大型语言模型(LLM)能够安全、标准化地与外部世界进行交互。下面我们详细了解一下它。

一、是什么

你可以将 MCP 生态系统想象成一个现代化的办公室:

  • MCP Server(MCP 服务器):这就是办公室里的各种专业设备和部门,比如打印机、文件柜、数据库中心或邮件收发室。每个服务器都是一个提供特定功能的独立程序,例如文件系统访问、数据库查询或发送邮件。它们是能力的提供方。

  • MCP Client(MCP 客户端):这是办公室的行政助理或协调中心。它内置于你所使用的应用程序(如 Claude Desktop、Cursor 编辑器)中,其职责是理解你的需求(或 AI 的需求),然后去调用合适的 MCP Server 来完成任务。

  • MCP Host(MCP 主机):这就是你直接与之交互的整个办公环境,例如 Claude Desktop 应用或 Cursor 编辑器本身。

MCP 协议规定了这些部分之间如何安全、高效地通信,使得 AI 模型能够按需调用外部工具和获取数据,而无需为其内置所有功能,从而突破了其训练数据的限制。

二、为什么用

MCP 服务器核心上是连接 AI 模型与外部工具、数据和系统的桥梁。它的主要价值体现在:

  1. 突破模型限制:让 AI 能够访问实时信息(如网络搜索)、操作本地文件、执行代码或与专业 API(如 GitHub、Slack)交互,极大地扩展了 AI 的能力边界。

  2. 标准化与生态化:它解决了“重复造轮子”的问题。开发者只需遵循 MCP 协议开发一次服务器,这个服务器就能被所有支持 MCP 的客户端工具使用,促进了工具生态的繁荣。

  3. 保障安全与可控:用户对 AI 能做什么有最终控制权。MCP 服务器以可控的方式提供功能,敏感数据和 API 密钥无需泄露给 AI 模型本身,而是在用户信任的环境中运行,增强了安全性和隐私性。

根据功能,常见的 MCP 服务器可分为信息检索类(如网络搜索)、文件操作类、开发工具类(如 GitHub 集成)、自动化类(如浏览器自动化)等。

三、使用场景

自己实现 MCP Server 意味着你可以为 AI 助手定制专属的超能力,将其连接到任何你想要的内部或外部服务。这充满了无限可能:

  • 连接内部系统:为你公司的内部 Wiki、CRM、ERP 或项目管理工具创建一个 MCP Server,这样 AI 助手就能帮你查询项目进度、更新客户信息等。

  • 操作专属数据源:如果你有独特的数据库(如产品库、研究数据集),可以构建一个 MCP Server 让 AI 进行查询和分析,充当智能数据分析师。

  • 控制智能设备:结合家庭自动化系统,创建一个 MCP Server 让 AI 语音助手帮你控制灯光、空调等(需注意安全边界)。

  • 封装特定工作流:将你日常重复的复杂操作(如代码部署、数据备份、报告生成)封装成 MCP 工具,通过自然语言指令让 AI 助手一键完成。

简而言之,任何你想让 AI 通过自然语言来操作或访问的服务,都可以考虑通过自定义 MCP Server 来实现

四、Python 实现

由于 MCP 是一个基于 JSON-RPC 2.0 的协议,实现一个服务器需要遵循其规范。

虽然手动处理通信细节是可行的,但使用社区提供的 SDK 可以大大简化开发。

Anthropic 官方维护了一个 Python 库 mcp,以下是使用它创建一个简单 MCP Server 的基本步骤和概念框架。

由于搜索结果中未提供完整的代码示例,以下流程基于 MCP 协议的一般实现逻辑和该库的常见用法进行阐述。

1. 环境准备
首先,你需要安装必要的库。通常这会包括官方的 mcp SDK 和其他你可能需要的依赖。

pip install mcp

2. 导入库并创建 Server 实例

import mcp
import asyncio

# 创建一个 Server 实例
server = mcp.Server("my-first-server")

3. 定义工具(Tools)
工具是 MCP Server 提供能力的核心。你需要定义工具的名称、描述、参数 schema 以及实现其逻辑的函数。例如,创建一个查询天气的工具:

from mcp.types import Tool


# 使用装饰器注册工具
@server.list_tools
async def list_tools():
    return [
        Tool(
            name="get_weather",
            description="Get the current weather for a city",
            inputSchema={
                "type": "object",
                "properties": {"city": {"type": "string", "description": "The city name"}},
                "required": ["city"],
            },
        )
    ]


# 实现工具的逻辑
@server.call_tool
async def call_tool(name: str, arguments: dict) -> list[mcp.TextContent]:
    if name == "get_weather":
        city = arguments.get("city")
        # 这里可以替换为真实的天气 API 调用
        weather_info = f"假设这里是{city}的天气情况:晴朗,25°C。"
        return [mcp.TextContent(type="text", text=weather_info)]
    else:
        raise ValueError(f"Unknown tool: {name}")

4. 运行 Server
最后,配置服务器通过标准输入输出(stdio)进行通信,这是本地 MCP 连接的常见方式。

async def main():
    async with await mcp.run_stdio_server(server) as session:
        await session.wait_until_completed()


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

5. 在客户端中配置
将你的 Python 脚本(例如 my_weather_server.py)配置到支持 MCP 的客户端(如 Claude Desktop 或 Cursor)。

配置通常需要指定解释器路径和脚本路径。

  • Claude Desktop:在设置中添加 MCP Server,命令类似 python /path/to/your/my_weather_server.py

  • Cursor:在 Settings > Features > MCP Servers 中添加,选择 stdio 类型,并输入上述命令。

配置成功后,你就可以在客户端中向 AI 提问,例如“查询北京的天气”,AI 就会通过你创建的 MCP Server 调用 get_weather 工具来获取信息

希望这些信息能帮助你全面理解 MCP Server 并迈出实践的第一步。如果你有特定的工具或系统想连接,或许我可以帮你一起构思更具体的实现方案

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区