MCP 服务
模型上下文协议(MCP)允许你构建服务器,以安全、标准化的方式向LLM应用暴露数据和功能。可以把它看作是一个专门为大型语言模型交互设计的Web API。MCP服务器可:
- 通过资源暴露数据(可以把它们想象成GET端点;它们用来将信息加载到LLM的上下文中)
- 通过工具提供功能(有点像POST端点;它们用于执行代码或产生副作用)
- 通过提示(用于大型语言模型交互的可复用模板)定义交互模式
- mcp 库的文档:https://github.com/modelcontextprotocol/python-sdk
定义MCP的工具(Tools)
工具允许LLM通过您的服务器执行操作。与资源不同,工具需要执行计算并具有副作用。
MCP工具的定义规范:
- 必须要定义工具服务的,文档注释(告诉大模型或Agent,该工具的作用是什么)
- 工具必须定义参数及声明的参数类型(告诉大模型或Agent,该工具传什么样的参数)
- 对于工具返回的数据,类型和数据结构要声明(告诉大模型或Agent,该工具执行完之后的结果是什么样的,方便后面去进行解析和使用)
示例:
1 | from mcp.server.fastmcp import FastMCP |
定义MCP的资源(Resources)
资源是你向大型语言模型展示数据的方式。它们类似于REST API中的GET端点——它们提供数据,但不应该执行大量计算或带来副作用。
示例
1 | from mcp.server.fastmcp import FastMCP |
资源加载
1 | # @Time:2026/1/4 14:05 |
工具结构化输出
默认情况下,工具将返回结构化结果,如果其返回类型注释是兼容的。否则,它们将返回非结构化结果。
结构化输出支持以下返回类型:
- Pydantic模型(BaseModel子类)
- 类型字典
- 数据类和其他具有类型提示的类
- dict[str, T](其中T是任何JSON可序列化类型)
- 原始类型(str、int、float、bool、bytes、None)- 包装在{“result”: value}
- 泛型类型(列表、元组、联合、可选等)- 包装在{“result”: value}
1 | from typing import TypedDict |
定义MCP的提示词(Prompts)
提示是可重用的模板,可帮助LLM有效地与您的服务器交互。
1 | from mcp.server.fastmcp import FastMCP |
模版信息加载
1 | # @Time:2026/1/4 14:13 |
定义MCP的上下文(Context)
Context对象使您的工具和资源能够访问MCP功能。
上下文属性与方法
上下文对象提供以下功能:
ctx.request_id- 当前请求的唯一IDctx.client_id- 客户ID (如有)ctx.fastmcp- 访问FastMCP服务器实例(参见FastMCP属性))ctx.session- 访问底层会话以实现高级通信(参见会话属性和方法)ctx.request_context- 访问请求特定数据和生命周期资源(参见请求上下文属性))await ctx.debug(message)- 发送调试日志消息await ctx.info(message)- 发送信息日志消息await ctx.warning(message)- 发送警告日志消息await ctx.error(message)- 发送错误日志消息await ctx.log(level, message, logger_name=None)- 发送带有自定义电平的日志await ctx.report_progress(progress, total=None, message=None)- 报告运营进展await ctx.read_resource(uri)- 阅读URI的资源await ctx.elicit(message, schema)- 向用户请求额外信息并进行验证
1 | from mcp.server.fastmcp import Context, FastMCP |
MCP 添加认证
认证架构:
- 授权服务器(AS):处理OAuth流、用户身份验证和令牌颁发
- 资源服务器(RS):验证令牌并为受保护资源提供服务的MCP服务器
- 客户端:获取令牌,提交并将其与MCP服务器进行验证
MCP服务器可以通过提供协议的TokenVerifier实现来使用身份验证。
1 | from pydantic import AnyHttpUrl |
带有认证的MCP client示例
1 | from langchain_mcp_adapters.client import MultiServerMCPClient |
图片处理工具
FastMCP 提供了一个自动处理图像数据的类,可以用来对图片进行处理,安装依赖:pip install pillow
1 | from mcp.server.fastmcp import FastMCP, Image |