项目简介
NextMCP 是一个基于 Model Context Protocol (MCP) 的 Python SDK,旨在简化 MCP 服务器的开发。它借鉴了 Next.js 的开发体验,提供了极简配置、强大的中间件和丰富的命令行工具,帮助开发者高效构建用于大型语言模型 (LLM) 应用的后端服务。您的 LLM 客户端可以通过标准化的 JSON-RPC 协议与 NextMCP 服务器通信,获取上下文信息、调用外部功能以及使用预定义的 Prompt 模板。
主要功能点
- 完整的 MCP 支持:全面支持 MCP 协议定义的工具(Tools)、Prompt 模板(Prompts)和资源(Resources)。
- 自动化发现:采用 Next.js 风格的基于文件结构的约定式配置,自动发现和注册您定义的工具、Prompt 和资源,无需手动注册。
- 即时部署:提供一键部署到 Docker、Railway、Render、Fly.io 等平台的能力,并内置健康检查和优雅停机功能。
- 丰富中间件:支持全局和特定功能的中间件,可轻松添加日志、认证、限流、缓存和输入验证等横切关注点。
- 异步支持:全面支持 Python 的 'async/await' 模式,助力构建高并发、高性能的 I/O 密集型服务。
- 身份认证与授权:内置 API Key、JWT、Session、OAuth 2.0(支持 GitHub/Google)以及细粒度 RBAC(角色/权限)控制。
- WebSocket 传输:支持实时双向通信的 WebSocket 协议,适用于交互式 LLM 应用。
- 插件系统:模块化、可重用的插件系统,方便扩展服务器功能。
- 可观测性:内置 Prometheus 兼容的指标与监控系统,帮助您洞察服务器运行状态。
安装步骤
安装 NextMCP 非常简单,推荐使用 'pip':
- 基础安装:
pip install nextmcp - 推荐完整安装 (包含 CLI 和所有可选依赖):
pip install nextmcp[all]
服务器配置 (MCP客户端使用)
作为 MCP 客户端,您需要知道如何启动 NextMCP 服务器以便与之通信。通常,MCP 客户端会配置一个 JSON 格式的服务描述,其中包含启动服务器的命令。
以下是一个典型的 NextMCP 服务器启动配置示例,您需要根据实际的项目入口文件和端口进行调整。MCP 客户端只需要了解这些信息即可与服务器建立连接,无需了解代码细节:
{ "server_name": "我的NextMCP服务器", "command": "python", "args": [ "server.py", // 替换为您的 NextMCP 项目的入口文件,例如 "app.py" "run", "--host", "0.0.0.0", // 服务器监听的 IP 地址 "--port", "8000" // 服务器监听的端口号 ], "description": "一个提供工具、Prompt 和资源服务的NextMCP后端。", "environment_variables": { "ENV_VAR_NAME": "value" // 可选:任何服务器运行所需的额外环境变量 } }
- 'server_name': 您服务器的友好名称,方便识别。
- 'command': 启动 Python 脚本的解释器,通常是 'python'。
- 'args': 启动服务器所需的命令行参数列表。
- 'server.py': 您的 NextMCP 项目的入口文件(例如,'server.py' 或 'main.py')。
- 'run': NextMCP CLI 运行服务器的子命令。
- '--host 0.0.0.0': 服务器监听的 IP 地址,'0.0.0.0' 表示监听所有可用网络接口。
- '--port 8000': 服务器监听的端口号。
- 'description': 服务器的简要描述。
- 'environment_variables': (可选) 任何服务器运行所需的额外环境变量。
请注意:如果您的 NextMCP 服务器配置了 WebSocket 传输,您可能需要将 'args' 调整为 '["server.py", "run", "--transport", "websocket", "--host", "0.0.0.0", "--port", "8765"]' 并关注其 WebSocket 端口(例如 '8765')。具体请参考服务器端的配置。
基本使用方法
1. 创建项目结构 (推荐使用约定式方法)
NextMCP 推荐使用类似于 Next.js 的约定式文件结构,方便自动发现:
my-mcp-server/ ├── nextmcp.config.yaml # 项目配置文件 ├── server.py # 服务器入口文件 ├── tools/ # 存放您的工具定义 │ ├── __init__.py │ └── posts.py # 示例:博客文章管理工具 ├── prompts/ # 存放您的 Prompt 模板定义 │ ├── __init__.py │ └── workflows.py # 示例:工作流 Prompt └── resources/ # 存放您的上下文资源定义 ├── __init__.py └── blog_resources.py # 示例:博客数据资源
2. 定义工具 (Tools)
在 'tools/posts.py' 中定义一个工具,例如创建博客文章:
# tools/posts.py from nextmcp import NextMCP app = NextMCP.from_config() # 从配置文件加载应用 @app.tool() def create_post(title: str, content: str) -> dict: """创建一个新的博客文章""" # 这里实现创建文章的业务逻辑,例如写入数据库 print(f"创建文章: {title}") return {"id": 1, "title": title, "content": content, "status": "created"} @app.tool() def list_posts() -> list: """列出所有博客文章""" return [{"id": 1, "title": "欢迎使用 NextMCP"}, {"id": 2, "title": "我的第二篇文章"}]
3. 定义 Prompt 模板 (Prompts)
在 'prompts/workflows.py' 中定义一个 Prompt 模板,例如规划度假:
# prompts/workflows.py from nextmcp import NextMCP, argument app = NextMCP.from_config() @app.prompt(description="计划一次完整的度假行程") @argument("destination", description="您希望前往的目的地", suggestions=["巴黎", "东京", "纽约"]) @argument("budget", type="integer", description="您的旅行预算金额(美元)") def vacation_planner(destination: str, budget: int) -> str: """ 根据目的地和预算,为您生成一份详细的度假行程计划。 AI 可以调用以下工具来辅助规划: - flight_search: 查找最佳航班 - hotel_search: 查找合适的酒店住宿 并参考以下资源获取上下文信息: - resource://user/preferences: 获取您的个人旅行偏好设置 """ return f"请为我规划一次前往 {destination} 的度假行程,总预算为 ${budget}。请确保行程经济实惠且充满乐趣。"
4. 定义资源 (Resources)
在 'resources/blog_resources.py' 中定义一个资源,例如博客统计数据:
# resources/blog_resources.py from nextmcp import NextMCP app = NextMCP.from_config() @app.resource("blog://stats", mime_type="application/json", description="博客实时统计数据") def blog_stats() -> dict: """提供博客文章的浏览量、评论数、活跃用户数等实时统计数据。""" return {"total_posts": 105, "total_views": 12345, "active_users": 68, "last_updated": "2024-07-30"} @app.resource_template("blog://posts/{post_id}", description="按 ID 获取单篇博客文章") def get_post_by_id(post_id: int) -> dict: """根据文章 ID 获取文章的详细内容。""" # 模拟从数据库获取文章 if post_id == 1: return {"id": 1, "title": "欢迎使用 NextMCP", "author": "管理员", "content": "这是我们的第一篇博客文章..."} return {"error": "文章未找到"}
5. 编写服务器入口
在 'server.py' 中,使用 'NextMCP.from_config()' 自动加载您的定义:
# server.py from nextmcp import NextMCP # NextMCP 会根据 nextmcp.config.yaml 或默认约定, # 自动在 'tools/', 'prompts/', 'resources/' 目录下发现并注册您的定义。 app = NextMCP.from_config() if __name__ == "__main__": print("NextMCP 服务器正在启动...") app.run(host="0.0.0.0", port=8000) # 启动服务器,默认使用 HTTP (Stdio) 传输协议 print("NextMCP 服务器已停止。")
6. 运行您的服务器
在项目根目录('my-mcp-server/')下打开终端,执行:
python server.py
或者使用 NextMCP 的命令行工具 (CLI):
mcp run server.py --host 0.0.0.0 --port 8000
服务器启动后,您的 MCP 客户端就可以通过 JSON-RPC 协议连接 'http://0.0.0.0:8000' (如果配置了 WebSocket 传输,则连接 'ws://0.0.0.0:<websocket_port>') 来发现和调用您的工具、Prompt 和资源了。
信息
分类
开发者工具