MCP简介

MCP(Model Context Protocol)是Anthropic开发的一个开放协议,用于标准化应用程序如何向大语言模型(LLM)提供上下文。你可以将MCP想象成AI应用的”USB-C接口”,它提供了一种标准化的方式来连接AI模型与不同的数据源和工具。

MCP使用客户端-服务器架构:

  • MCP Host:如Claude Desktop等应用程序,需要通过MCP访问数据
  • MCP Client:维护与服务器的1:1连接的协议客户端
  • MCP Server:通过标准化的MCP协议暴露特定功能的轻量级程序

开始构建Hello World MCP Server

我们将使用Python来构建一个简单的MCP Server,它将提供一个hello工具,可以返回”Hello, World!”或者向特定名称问好。

环境准备

首先,我们需要设置开发环境:

  1. 确保你已安装Python 3.10或更高版本
  2. 安装uv工具(Python包和虚拟环境管理工具)
  1. # Windows
  2. powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  3. # macOS/Linux
  4. curl -sSf https://astral.sh/uv/install.sh | sh
  1. 创建并设置项目
  1. # 创建项目目录
  2. uv init hello-mcp
  3. cd hello-mcp
  4. # 创建并激活虚拟环境
  5. uv venv
  6. # Windows激活虚拟环境
  7. .venv\Scripts\activate
  8. # macOS/Linux激活虚拟环境
  9. source .venv/bin/activate
  10. # 安装依赖
  11. uv add mcp[cli]

创建Hello World服务器

现在,让我们创建一个简单的MCP服务器。创建一个名为hello_server.py的文件:

  1. from typing import Optional
  2. from mcp.server.fastmcp import FastMCP
  3. # 初始化FastMCP服务器
  4. mcp = FastMCP("hello-world")
  5. @mcp.tool()
  6. async def hello(name: Optional[str] = None) -> str:
  7. """
  8. 返回一个简单的问候语。
  9. Args:
  10. name: 要问候的名称(可选)
  11. Returns:
  12. str: 问候语
  13. """
  14. if name:
  15. return f"Hello, {name}!"
  16. else:
  17. return "Hello, World!"
  18. if __name__ == "__main__":
  19. # 初始化并运行服务器
  20. mcp.run(transport='stdio')

FastMCP类使用Python类型提示和docstrings自动生成工具定义,使MCP工具的创建和维护变得简单。

测试服务器

创建完服务器后,我们可以运行它来测试:

  1. uv run hello_server.py

这个命令将启动MCP服务器,但目前还没有任何客户端连接到它。

配置Claude Desktop以使用我们的服务器

为了让Claude Desktop使用我们创建的MCP服务器,我们需要修改Claude Desktop的配置文件:

  1. 打开Claude Desktop

  2. 打开Claude Desktop的配置文件:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. 编辑配置文件,添加我们的服务器:

  1. {
  2. "mcpServers": {
  3. "hello-world": {
  4. "command": "uv",
  5. "args": [
  6. "--directory",
  7. "/绝对路径/到你的/hello-mcp",
  8. "run",
  9. "hello_server.py"
  10. ]
  11. }
  12. }
  13. }

请确保将/绝对路径/到你的/hello-mcp替换为你实际的项目目录的绝对路径。

  1. 保存文件并重启Claude Desktop

重启后,你应该能在Claude Desktop的输入框下方看到锤子图标,点击它会显示可用工具,其中包括我们创建的”hello”工具。 实现第一个自己的MCP Server:Hello MCP! - 图1

实现第一个自己的MCP Server:Hello MCP! - 图2

测试我们的Hello World服务器

在Claude Desktop中,你可以通过以下方式测试我们的服务器:

  1. 输入:”你能用hello工具向我问好吗?”
  2. Claude应该会请求权限调用hello工具,然后返回”Hello, World!”
  3. 你也可以尝试:”你能用hello工具向’小明’问好吗?”
  4. Claude应该会返回”Hello, 小明!”

实现第一个自己的MCP Server:Hello MCP! - 图3

深入理解MCP的工作原理

通过这个简单的例子,我们可以理解MCP的一些核心概念:

1. MCP服务器结构

MCP服务器由以下部分组成:

  • 服务器标识:我们定义了名为”hello-world”的服务器
  • 工具定义:我们创建了”hello”工具
  • 工具实现:我们实现了工具的功能

2. MCP交互流程

当你在Claude Desktop中请求使用工具时,发生了以下步骤:

  1. Claude分析你的请求并决定使用哪个工具
  2. Claude请求用户权限调用该工具
  3. 请求发送到MCP服务器
  4. 服务器执行工具功能并返回结果
  5. Claude接收结果并形成自然语言响应

3. MCP工具定义

FastMCP使用Python类型提示和docstrings自动生成工具定义:

  • 函数名称成为工具名称
  • 参数类型定义了输入架构
  • 返回类型定义了输出格式
  • Docstring提供了工具的描述

进阶扩展

现在你已经理解了基本概念,我们可以扩展这个Hello World服务器,添加更多功能:

添加更多工具

我们可以添加更多工具到我们的服务器,例如一个简单的计算器工具:

  1. @mcp.tool()
  2. async def calculate(expression: str) -> str:
  3. """
  4. 计算一个简单的数学表达式。
  5. Args:
  6. expression: 要计算的数学表达式(如"1 + 2")
  7. Returns:
  8. str: 计算结果
  9. """
  10. try:
  11. result = eval(expression)
  12. return f"计算结果: {result}"
  13. except Exception as e:
  14. return f"计算错误: {str(e)}"

添加资源支持

MCP不仅支持工具,还支持资源。我们可以添加一个简单的资源:

  1. import mcp.types as types
  2. @mcp.list_resources()
  3. async def list_resources() -> list[types.Resource]:
  4. """列出可用资源"""
  5. return [
  6. types.Resource(
  7. uri="hello://example",
  8. name="示例资源",
  9. description="一个简单的示例资源"
  10. )
  11. ]
  12. @mcp.read_resource()
  13. async def read_resource(uri: str) -> str:
  14. """读取资源内容"""
  15. if uri == "hello://example":
  16. return "这是一个示例资源的内容"
  17. raise ValueError(f"未知资源: {uri}")

总结

通过这个Hello World级别的MCP服务器,我们学习了:

  1. MCP的核心概念(服务器、客户端、工具、资源)
  2. MCP服务器的基本结构和实现方法
  3. 如何连接MCP服务器到Claude Desktop
  4. MCP交互的基本流程

MCP是一个强大的协议,允许AI模型安全地访问外部数据和功能。通过创建自定义MCP服务器,你可以扩展AI助手的能力,使其能够与你的应用程序、数据和工具进行交互。

随着你对MCP的深入理解,你可以探索更复杂的使用场景,如数据库访问、API集成、文件系统操作等。MCP的模块化设计使得你可以根据需要选择和组合不同的功能,创建强大的AI集成解决方案。