Python MCP服务器 Python中功能齐全的模型上下文协议(MCP)服务器实现,提供笔记、任务管理、计算和系统监控工具。 特性 🛠️ 工具
笔记管理:创建、列出和检索笔记 任务管理:创建、列出和更新具有优先级和截止日期的任务 计算器:执行数学计算 系统信息:获取实时系统指标
📚 资源
Notes数据库:访问包含所有笔记的SQLite数据库 任务数据库:访问包含所有任务的SQLite数据库 服务器日志:访问服务器活动日志
💬 鼓励
每日摘要:生成全面的每日摘要 任务提醒:为即将到来的任务创建提醒
安装 先决条件
Python 3.7+ pip包管理器
快速设置
克隆或下载文件: bash#创建新目录 mkdir mcp服务器 cd-mcp服务器
保存Python文件(mcp_server.py、test_client.py)
保存requirements.txt和setup.sh
运行安装脚本: bashcmod+x setup.sh ./setup.sh
激活虚拟环境: bashsource venv/bin/activate
手动设置 bash#创建虚拟环境 python3-m venv-venv 源venv/bin/activate
安装依赖项
pip安装psutil
使脚本可执行
chmod+x mcp_server.py chmod+x test_client.py 用法 启动服务器 MCP服务器通过JSON-RPC在stdin/stdout上进行通信: bashpython mcpserver.py 服务器将在stdin上等待JSON-RPC请求,并在stdout上响应。 使用演示客户端进行测试 完整演示 运行一个全面的演示,测试所有服务器功能: bashpython测试客户端.py 交互模式 使用交互式客户端进行手动测试: bashpython test_client.py交互式 可用的交互式命令:
create_note -创建新笔记 list_notes-列出所有笔记 创建任务 \[description\]\[priority\]\[due_date\]-创建任务 list_tasks\[状态\]-列出任务(可选按状态筛选) 计算 -执行计算 system_info-显示系统信息 quit-退出交互模式
交互式会话示例: mcp>create_note“会议笔记”“讨论了项目时间表和可交付成果” ✅ 注释创建成功
mcp>create_task“审核代码”“审核拉取请求#123”2“2025-07-01” ✅ 任务创建成功
mcp>列表任务 1:审核代码-待定(优先级:2)
mcp>计算2+2\*3 = 8
退出 api参考 工具 create_note 创建一个带有标题和内容的新笔记。 json{ “name”:“create_note”, “论点”:{ “title”:“注释标题”, “内容”:“在此处注意内容” } } list_notes 列出所有带有基本信息的注释。 json{ “name”:“list_notes”, “参数”:{} } get_note 按ID检索特定笔记。 json{ “name”:“get_note”, “论点”:{ “note_id”:1 } } 创建任务 使用可选元数据创建新任务。 json{ “name”:“create_task”, “论点”:{ “title”:“任务标题”, “description”:“可选描述”, “优先级”:3, “due_date”:“2025-07-01” } } list_tasks 列出具有可选状态筛选的任务。 json{ “name”:“list_tasks”, “论点”:{ “status”:“pending”//可选:“pendion”、“completed”、“canceled” } } update_task_status 更新现有任务的状态。 json{ “name”:“update_task_status”, “论点”:{ “task_id”:1, “状态”:“已完成” } } 计算 进行数学计算。 json{ “name”:“compute”, “论点”:{ “表达式”:“2+2\*3” } } get_system_info 检索当前系统信息。 json{ “name”:“get_system_info”, “参数”:{} } 资源 sqlite://notes 直接访问笔记数据库。 sqlite://tasks 直接访问任务数据库。 file://server.log 访问服务器活动日志。 鼓励 每日摘要 生成全面的每日摘要。 json{ “name”:“daily_summary”, “论点”:{ “date”:“2025-06-23”//可选,默认为今天 } } 任务提醒器 为即将到来的任务生成提醒。 json{ “name”:“task_reminder”, “论点”:{ “days_ahead”:7//可选,默认为7天 } } JSON-RPC协议示例 初始化连接 json{ “jsonrpc”:“2.0”, “id”:1, “方法”:“初始化”, “参数”:{ “协议版本”:“2024-11-05”, “能力”:{}, “客户端信息”:{ “name”:“我的客户”,\ “版本”:“1.0.0” } } } 列出可用工具 json{ “jsonrpc”:“2.0”, “id”:2, “方法”:“工具/列表” } 调用工具 json{ “jsonrpc”:“2.0”, “id”:3, “方法”:“工具/调用”, “参数”:{ “name”:“create_note”, “论点”:{ “title”:“我的笔记”, “内容”:“这是我的笔记内容” } } } 阅读资源 json{ “jsonrpc”:“2.0”, “id”:4, “方法”:“资源/读取”, “参数”:{ “uri”:sqlite://notes" } } 数据存储 服务器使用存储在系统临时目录中的SQLite数据库:
备注:id、标题、内容、created_at、updated_at 任务:id、标题、描述、状态、优先级、created_at、due_date
数据库位置:{temp_dir}/mcp_server.db 安全考虑
计算器工具使用eval()和字符过滤来实现基本安全 只允许基本的数学运算:0-9、+、-、\*、/、(、)、。,和空间 数据库使用参数化查询来防止SQL注入 临时数据库之外没有网络访问或文件系统操作
错误处理 服务器按照JSON-RPC标准提供详细的错误响应:
-32700:解析错误(JSON无效) -32601:未找到方法 -32602:参数无效 -32603:内部错误
扩展服务器 添加新工具
在register_tools()中定义工具:
pythonself.tools\[“my_tool”\]=工具( name=“my_tool”, description=“工具功能描述”, inputSchema={ “类型”:“对象”, “属性”:{ “param1”:{“type”:“string”,“description”:“参数描述”} }, “必需”:\[“param1”\] } )
在execute_tool()中实现工具逻辑:
pythonelif工具名==“my_tool”: return等待self.my_tool_implementation(参数\[“param1”\])
创建实现方法:
pythonasync def my_tool_implementation(self,param1:str)->Dict\[str,Any\]: #你的工具逻辑在这里 return{“result”:“工具执行成功”} 添加新资源 在register_resources()和handle_read_resource()中遵循相同的模式。 添加新提示 在register_prompts()和generate_prompt()中遵循相同的模式。 故障排除 常见问题
psutil的导入错误:运行pip install psutil 权限被拒绝:确保脚本可以使用chmod+x执行 数据库锁定:关闭使用该数据库的任何其他进程 JSON解析错误:确保请求格式正确的JSON-RPC
调试模式 通过设置日志级别启用详细日志记录: pythonlogging.basicConfig(级别=logging.DEBUG) 测试单个组件 您可以使用交互式客户端或通过发送手动JSON-RPC请求来测试单个工具。 贡献 您可以使用其他工具、资源或提示来扩展此MCP服务器实现。模块化设计使添加新功能变得容易。 许可证 本实施方案按原样提供,用于教育和发展目的。
