第 73 页 / 共 100 页 / 飞书修订版 6

4.Defining tools with MCP

此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)

邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org

==================================================

当您使用官方 Python SDK 时,构建 MCP 服务器变得更加简单。SDK 通过装饰器和类型提示为您处理所有复杂性,无需手动编写复杂的 JSON 模式来定义工具。

image1.jpeg

在这个示例中,我们正在创建一个 MCP 服务器来管理存储在内存中的文档。该服务器将提供两个基本工具:一个用于读取文档内容,另一个用于通过查找和替换操作来更新文档。

设置 MCP 服务器

Python MCP SDK 使服务器创建变得极其简单。您只需一行代码就可以初始化一个完整的 MCP 服务器:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("DocumentMCP", log_level="ERROR")

在此实现中,文档存储在一个简单的 Python 字典中,其中键是文档 ID,值包含文档内容:

docs = {

"deposition.md": "This deposition covers the testimony of Angela Smith, P.E.",

"report.pdf": "The report details the state of a 20m condenser tower.",

"financials.docx": "这些财务数据概述了项目的预算和支出",

"outlook.pdf": "本文档展示了项目的未来预期表现",

"plan.md": "该计划概述了项目实施的步骤。",

"spec.txt": "这些规格说明定义了设备的技术要求"

}

使用装饰器的工具定义

image2.jpeg

SDK将工具创建从冗长的过程转变为简洁易读的形式。您无需编写冗长的JSON模式,而是使用Python装饰器和类型提示。

创建文档阅读器工具

第一个工具允许Claude通过ID读取任何文档。以下是完整的实现:

@mcp.tool(

name="read_doc_contents",

description="读取文档内容并以字符串形式返回。"

)

def read_document(

doc_id: str = Field(description="要读取的文档ID")

):

if doc_id not in docs:

raise ValueError(f"未找到ID为 {doc_id} 的文档")

return docs[doc_id]

@mcp.tool 装饰器会自动生成 Claude 所需的 JSON schema。来自 Pydantic 的 Field 类提供参数描述,帮助 Claude 理解每个参数的预期内容。

构建文档编辑器工具

第二个工具在文档上执行简单的查找和替换操作:

@mcp.tool(

name="edit_document",

description="编辑文档,通过将文档内容中的字符串替换为新字符串来实现。"

)

def edit_document(

doc_id: str = Field(description="将要编辑的文档ID"),

old_str: str = Field(description="要替换的文本。必须完全匹配,包括空白字符。"),

new_str: str = Field(description="用于替换旧文本的新文本。")

):

if doc_id not in docs:

raise ValueError(f"未找到ID为 {doc_id} 的文档")

docs[doc_id] = docs[doc_id].replace(old_str, new_str)

这个工具接受三个参数:文档ID、要查找的文本和替换文本。为了简化实现,该实现使用了Python内置的字符串replace()方法。

Error Handling

这两个工具都包含基本的错误处理,用于管理Claude请求不存在文档的情况。当提供无效的文档ID时,工具会抛出一个带有描述性消息的ValueError,Claude可以理解并可能据此采取行动。

SDK方法的主要优势

  • 从Python类型提示自动生成JSON模式
  • 代码简洁易读,易于维护
  • 通过Pydantic内置参数验证
  • 相比手动编写模式,减少了样板代码
  • 为开发提供类型安全和IDE支持

MCP Python SDK将原本复杂的工具定义编写过程转变为Python开发者感觉自然的操作。您专注于业务逻辑,而SDK处理协议细节。

==================================================



此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org