简单的MCP PY
用于构建具有多种API样式的模型上下文协议(MCP)服务器的现代Python框架
](https://www.python.org/downloads/)  
简单来说,MCP PY是Python的实现 简单来说就是mcp-ts,为构建MCP服务器的Python生态系统带来了同样的易用性和灵活性。
特性
- 多种API样式 -选择适合您工作流程的样式:
- 🎨 装饰师API -干净、声明性的基于类的方法 - 🔧 API功能 -使用方法链进行程序化服务器构建 - 📝 接口API -纯类型注释接口(即将推出) - 🤖 生成器API -人工智能驱动的工具开发(未来)
- 多个传输 -在任何地方运行服务器:
- 📟 工作室 -标准输入/输出(默认) - 🌐 超文本传输协议 -支持会话的RESTful HTTP服务器 - 📡 上海证券交易所 -服务器发送实时流媒体事件
- 零配置 -立即开始:
- 自动检测API风格 - 从类型提示自动生成架构 - 一切都是合理的违约 - 高级用例的可选配置
- 开发者体验:
- 🔥 带手表模式的热重新加载 - 📦 捆绑到独立可执行文件 - 🎯 类型安全,完全支持mypy - 📚 全面的文件
- 生产就绪:
- 🔒 速率限制和身份验证 - ⚡ 长期运营的进度报告 - 🔄 使用启动/关闭挂钩进行寿命管理 - 📊 二进制内容支持 - 🛡️ 安全最佳实践
快速开始
安装
选项1:尝试不安装(uvx)
# Install uvx
pip install uv
# Run directly without installing simply-mcp
uvx simply-mcp --version
uvx simply-mcp run server.py选项2:永久安装(pip)
pip install simply-mcp您的第一台服务器(Decorator API)
# server.py
from simply_mcp import mcp_server, tool
@mcp_server(name="my-server", version="1.0.0")
class MyServer:
@tool(description="Add two numbers")
def add(self, a: int, b: int) -> int:
"""Add two numbers together."""
return a + b
@tool(description="Greet a user")
def greet(self, name: str, formal: bool = False) -> str:
"""Generate a greeting."""
if formal:
return f"Good day, {name}."
return f"Hey {name}!"运行您的服务器
# Run with stdio (default)
simply-mcp run server.py
# Run with HTTP on port 3000
simply-mcp run server.py --transport http --port 3000
# Run with auto-reload
simply-mcp run server.py --watch注: 如果使用uvx,请在命令前加上前缀 uvx: uvx simply-mcp run server.py。第一次运行需要大约7-30秒来下载软件包,后续运行几乎是即时的。
API样式
装饰师API(推荐)
干净、声明性的基于类的方法:
from simply_mcp import mcp_server, tool, prompt, resource
@mcp_server(name="my-server", version="1.0.0")
class MyServer:
@tool(description="Calculate sum")
def add(self, a: int, b: int) -> int:
return a + b
@prompt(description="Generate code review")
def code_review(self, language: str) -> str:
return f"Please review this {language} code..."
@resource(uri="config://server", mime_type="application/json")
def get_config(self) -> dict:
return {"status": "running", "version": "1.0.0"}API功能
程序化服务器构建:
from simply_mcp import BuildMCPServer
mcp = BuildMCPServer(name="my-server", version="1.0.0")
@mcp.add_tool(description="Add two numbers")
def add(a: int, b: int) -> int:
return a + b
@mcp.add_prompt(description="Generate greeting")
def greet(name: str) -> str:
return f"Hello, {name}!"
# Method chaining
mcp.configure(port=3000).run()配置
创建 simplymcp.config.toml 文件:
[server]
name = "my-mcp-server"
version = "1.0.0"
[transport]
type = "http" # or "stdio", "sse"
port = 3000
[logging]
level = "INFO"
format = "json"
[security]
enable_rate_limiting = true
rate_limit_per_minute = 60或者使用环境变量:
export SIMPLY_MCP_TRANSPORT=http
export SIMPLY_MCP_PORT=3000
export SIMPLY_MCP_LOG_LEVEL=DEBUG高级功能
寿命管理
from simply_mcp import BuildMCPServer, Context
mcp = BuildMCPServer(name="my-server", version="1.0.0")
@mcp.on_startup()
async def initialize():
"""Run on server startup - load resources, connect to databases, etc."""
db = await create_database_connection()
mcp.server.lifespan['db'] = db # Store for later use
@mcp.on_shutdown()
async def cleanup():
"""Run on server shutdown - close connections, save state, etc."""
db = mcp.server.lifespan.get('db')
if db:
await db.close()
@mcp.tool()
async def query_data(query: str, ctx: Context) -> dict:
"""Access lifespan state in request handlers."""
db = ctx.request_context.lifespan_context['db']
result = await db.query(query)
return result进度报告
from simply_mcp import tool, Progress
@tool(description="Process large dataset")
async def process_data(data: list, progress: Progress) -> dict:
total = len(data)
for i, item in enumerate(data):
await progress.update(
percentage=(i / total) * 100,
message=f"Processing item {i+1}/{total}"
)
# Process item...
return {"processed": total}认证
# simplymcp.config.toml
[security.auth]
enabled = true
type = "api_key"
api_keys = ["your-secret-key"]二进制内容
@resource(uri="file://document.pdf", mime_type="application/pdf")
def get_document(self) -> bytes:
with open("document.pdf", "rb") as f:
return f.read()CLI命令
# Run a server
simply-mcp run server.py [--transport TYPE] [--port PORT] [--watch]
# Bundle to executable
simply-mcp bundle server.py --output dist/
# List available servers
simply-mcp list [--json]
# Configuration management
simply-mcp config init # Create config file
simply-mcp config validate # Validate config
simply-mcp config show # Show current config例子
看看 examples/ 目录:
simple_server.py-最小工作示例decorator_basic.py-装饰师API基础functional_api.py-API功能使用http_server.py-HTTP传输示例lifespan_management_example.py-启动/关闭挂钩、状态管理advanced_features.py-进度、身份验证、二进制内容
文档
与简单的mcp-ts进行比较
| 功能 | 简单mcp-ts | 简单mcp py |
|---|---|---|
| 装饰师API | ✅ | ✅ |
| API功能 | ✅ | ✅ |
| 接口API | ✅ | 🚧 (计划中) |
| 生成器API | ✅ | 🚧 (未来) |
| 标准运输 | ✅ | ✅ |
| HTTP传输 | ✅ | ✅ |
| 苏格兰和南方能源公司运输✅ | ✅ | |
| 监视模式 | ✅ | ✅ |
| 捆绑 | ✅ | ✅ |
| 模式验证 | Zod | Pydantic |
| 类型系统 | TypeScript | Python+mypy |
开发状态
✅ v0.1.0稳定版 -生产准备就绪。核心功能已完全实现和测试。API稳定,适合生产使用。看 ROADMAP.md 以了解未来版本中的计划功能。
贡献
我们欢迎捐款!请参阅 贡献.md 作为指导方针。
需求
- Python 3.10或更高版本
- 通过pip管理依赖关系
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
相关项目
- 简单来说就是mcp-ts -TypeScript版本
- 拟人化MCP SDK -官方Python MCP SDK
- 模型上下文协议 -协议规范
致谢
- 建在 拟人化MCP Python SDK
- 受启发于 简单来说就是mcp-ts
- 由...创建 钟表创新
支持
______________________________________________________________________
由...制作❤️ 钟表创新
