什么是MCP?
        Model Context Protocol (MCP) 是一个开放协议,它为大型语言模型 (LLM)连接外部数据源和工具提供了一套标准化的通信方式。可以把它理解为 AI 模型与外部世界连接的“通用插头”或“桥梁”。

        简单来说,它主要由三个核心组成部分组成:
     下面用一个例子介绍MCP的工作流程:

第一步:连接与初始化 - 客户端“发现”可用的工具
        当MCP客户端(如Claude Desktop )启动并加载一个MCP服务器时,它们之间会立即进行一次初始化对话。这个过程是自动的。

        1客户端发送初始化请求:客户端会发送一个请求,表明自己准备开始了。这个请求会调用 initialize 方法,并携带客户端自身的信息和能力。

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      // ... 客户端支持的功能 ...
    },
    "clientInfo": {
      "name": "Claude Desktop",
      "version": "1.0.0"
    }
  }
}

 2服务器响应并列出所有“家当”:服务器收到初始化请求后,会回复一个成功的响应。紧接着,服务器会主动发送一个 tools/list 通知,告诉客户端:“我这里提供了所有这些工具,你记一下。”

        服务器发送 (tools/list):

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "get_student_count",        // 工具的唯一标识符
        "description": "获取学生的总人数。", // 这个工具是干什么的?
        "inputSchema": {                    // 工具所需的参数格式(本例中为空)
          "type": "object",
          "properties": {}
        }
      },
      {
        "name": "get_student_by_id",        // 另一个工具的例子
        "description": "根据学生ID查询学生详细信息。",
        "inputSchema": {
          "type": "object",
          "properties": {
            "studentId": {
              "type": "number",
              "description": "学生的唯一ID。"
            }
          },
          "required": ["studentId"]
        }
      }
      // ... 可能还有其他工具 ...
    ]
  }
}

至此,客户端就完成了“发现”过程。 它现在知道:

  • 服务器上有一个名为 get_student_count 的工具。

  • 这个工具的描述是“获取学生的总人数”。

  • 调用这个工具不需要任何参数。

第二步:AI 模型决策 - 匹配用户意图与工具
        现在,客户端(具体来说是客户端里的AI模型,如Claude)已经拥有了工具列表。当用户提出问题时:

用户提问:“多少名学生?”

AI模型推理:

AI读取用户的问题。

查看自己已知的工具列表(刚刚从服务器获取的)。

进行匹配:“用户想查询学生数量。我有一个名为 get_student_count 的工具,它的描述正好是‘获取学生的总人数’,而且不需要参数。这完全匹配用户的需求。”

AI决定行动:于是,AI模型决定调用 get_student_count 这个工具。

第三步:工具调用 - 客户端发起请求

        客户端向服务器发送结构化的工具调用请求

第四步:服务器执行 - 处理业务逻辑并返回结果
        服务器内部处理细节:

请求验证:检查工具是否存在、参数格式是否正确

业务逻辑执行:

连接数据库/外部API

执行查询:SELECT COUNT(*) FROM students;

处理结果集

结果格式化:将原始数据转换为MCP标准格式

第五步:结果整合 - 客户端呈现最终答案
        将服务器返回的数据转化为用户友好的响应。客户端处理过程:

响应解析:从MCP响应中提取核心数据(数字42)

上下文整合:AI模型结合对话历史和返回数据

自然语言生成:生成友好、信息完整的回复

后续建议:基于当前结果提供可能的下一步操作

完整业务流程总结

MCP核心功能
就像快递员帮你跑腿办事一样,MCP在电脑程序之间传递指令和结果。


核心三板斧:统一话术:所有工具都用JSON格式对话(类似网购时的订单模板)
灵活通道:支持本地直接通话(stdio)和网络远程呼叫(HTTP/2)
自动说明书:开发者加个@mcp.tool标签就能生成API文档

流程特征说明:

并行执行:工具A/B/C同时启动,互不阻塞
动态聚合:各工具输出自动合并为结构化数据
异步协调:MCP管理任务生命周期和超时控制

第一个 MCP Server:Hello World

创建基础服务器
# src/hello_mcp/server.py
from fastmcp import FastMCP

# 创建 MCP 服务器实例
mcp = FastMCP("hello-mcp-server")

@mcp.tool(description="Say hello to someone")
async def say_hello(name: str = "World") -> str:
    """Say hello to someone."""
    message = f"Hello, {name}! Welcome to MCP!"
    return message

@mcp.tool(description="Get current server time")
async def get_time() -> str:
    """Get the current server time."""
    import datetime
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return f"Current time: {current_time}"

def main():
    """Main entry point."""
    print("Starting Hello MCP Server...")
    # 使用 HTTP 传输模式
    mcp.run(transport="streamable-http")

if __name__ == "__main__":
    main()
项目配置
# pyproject.toml
[project]
name = "hello-mcp-server"
version = "0.1.0"
description = "A simple Hello World MCP Server"
requires-python = ">=3.10"
dependencies = [
    "fastmcp>=2.8.0",
]

[project.scripts]
hello-mcp-server = "hello_mcp:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/hello_mcp"]
运行测试
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境
source .venv/bin/active
#安装 uv
pip install uv
# 安装项目
uv pip install -e .
# 运行服务器
hello-mcp-server

# 服务器将在 HTTP 模式下启动,默认地址: http://127.0.0.1:8000

与客户端集成

Cursor 配置(HTTP 模式)
{
  "mcpServers": {
    "hello-mcp": {
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

参考文献:

https://blog.csdn.net/showyoui/article/details/148881282?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-148881282-blog-159252633.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.4&utm_relevant_index=7

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐