使用说明
MCP服务器演示
一个演示项目,展示了使用FastMCP的模型上下文协议(MCP)服务器实现。
概述
本项目演示了如何使用FastMCP框架构建一个简单的MCP服务器。该服务器提供:
- 一个基本的算术工具(
add)将两个整数相加 - 生成个性化问候的动态问候资源
什么是MCP?
模型上下文协议(MCP)是用于将AI模型与外部工具和资源连接的标准化协议。它能够:
- 工具:AI模型可以调用的函数来执行操作
- 资源:AI模型可以读取的数据源
- 鼓励:AI交互模板
项目结构
mcp-server-demo/
├── README.md # This file
├── pyproject.toml # Project configuration and dependencies
├── uv.lock # Dependency lock file
├── main.py # Simple entry point
├── server.py # MCP server implementation
├── .python-version # Python version specification (3.12)
├── .gitignore # Git ignore patterns
└── prompt/ # Status reports directory
特性
工具
- add(a:int,b:int)->int:将两个整数相加并返回结果
资源
- 问候语://{姓名}:为指定名称生成问候消息的动态资源
需求
- Python 3.12+(指定于
.python-version) - uv(用于依赖性管理)
- 带CLI附加功能的MCP库
依赖项
该项目使用以下主要依赖项:
mcp[cli]>=1.9.0:支持CLI的模型上下文协议库
关键传递依赖关系:
anyio:异步I/O库httpx:HTTP客户端库pydantic:数据验证库starlette:Web框架uvicorn:ASGI服务器typer:CLI框架
安装
-
克隆存储库:
git clone <repository-url> cd mcp-server-demo -
使用uv安装依赖项:
uv sync
用法
运行基本脚本
uv run python main.py
这将输出: Hello from mcp-server-demo!
运行MCP服务器
服务器可以在不同的模式下运行:
STDIO模式(标准输入/输出)
uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_stdio_async())"
SSE模式(服务器发送事件)
uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_sse_async())"
HTTP流模式
uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_streamable_http_async())"
测试服务器功能
您可以通过编程方式测试服务器组件:
from server import mcp
import asyncio
async def test_server():
# Test the add tool
result = await mcp.call_tool('add', {'a': 5, 'b': 3})
print(f"5 + 3 = {result}")
# Test the greeting resource
greeting = await mcp.read_resource('greeting://World')
print(greeting)
# Run the test
asyncio.run(test_server())
代码示例
服务器实现(Server.py)
from mcp.server.fastmcp import FastMCP
# Create an MCP server instance
mcp = FastMCP("Demo")
# Define a tool (function that can be called)
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two integers together."""
return a + b
# Define a dynamic resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Generate a personalized greeting."""
return f"Hello, {name}!"
主入口点(Main.py)
def main():
print("Hello from mcp-server-demo!")
if __name__ == "__main__":
main()
发展
建立发展环境
- 确保您已安装Python 3.12+
- 安装紫外线:
curl -LsSf https://astral.sh/uv/install.sh | sh - 克隆存储库并安装依赖项:
git clone <repository-url> cd mcp-server-demo uv sync
项目配置
该项目使用 pyproject.toml 配置:
[project]
name = "mcp-server-demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"mcp[cli]>=1.9.0",
]
添加新工具
要向服务器添加新工具,请执行以下操作:
@mcp.tool()
def your_tool_name(param1: type, param2: type) -> return_type:
"""Tool description."""
# Your implementation here
return result
添加新资源
要添加新资源,请执行以下操作:
@mcp.resource("resource://pattern/{param}")
def get_resource(param: str) -> str:
"""Resource description."""
# Your implementation here
return resource_content
建筑
MCP服务器是使用FastMCP框架构建的,该框架提供:
- 异步支持:基于asyncio构建,用于并发操作
- 多种运输方式:STDIO、SSE和HTTP流媒体
- 类型安全:使用Pydantic进行数据验证
- 易于集成:工具和资源的简单装饰器
故障排除
常见问题
- Python版本:确保你使用的是Python 3.12+
- 依赖项:运行
uv sync安装所有依赖项 - 导入错误:确保您在正确的目录中并使用
uv run
开发技巧
- 使用
uv run在项目环境中执行Python脚本 - 服务器函数是异步的,因此使用
asyncio.run()用于测试 - 检查
prompt/开发过程中的状态报告目录
许可证
该项目仅用于演示目的。请检查MCP库许可证的使用权限。
贡献
这是一个演示项目。有关对MCP库本身的贡献,请参阅主MCP存储库。
资源
最后更新时间:2024-07-16
