todo-full

todo-full

A todo list MCP server with Tools, Resources, and Prompts, demonstrating MCP features and compatible with DeepSeek and Claude Code.

Category
访问服务器

README

todo-full · 串起手册要点的完整示例

一个 todo list,两条路对比实现,接真 DeepSeek。用一份可运行代码把 MCP 全套手册的要点串起来。

覆盖的要点

  • 三原语:MCP server 里 Tools + Resources + Prompts 都有
  • function calling:MCP client 把工具翻译成 DeepSeek 的 tools,跑工具循环
  • JSON-RPC 原始消息VERBOSE=1 打印底层 tools/call 请求与响应
  • 手搓 vs MCPmanual_way.py 是不用 MCP 的对照组
  • 换个 Host 也能跑:同一个 server 经 .mcp.json 接进 Claude Code,代码一行不改

文件

文件 是什么
db.py 共用的 SQLite 数据库层(两条路都调它)
mcp_server.py 路 A:MCP server,三原语齐全
mcp_client.py 路 A:MCP client + DeepSeek 工具循环(主程序)
manual_way.py 路 B:手搓 prompt + 解析 + 分发(对照组)
对照说明.md 代码 ↔ 手册要点的逐条对照
pyproject.toml / uv.lock uv 项目清单与锁文件,统一管理依赖

跑起来

需要 uv 和一个 DeepSeek API key。

# 首次运行前安装依赖(uv run 也会自动同步,这一步可省略)
uv sync

# 路 A:MCP(主示例)
DEEPSEEK_API_KEY=sk-xxx uv run mcp_client.py

# 路 A + 看底层 JSON-RPC 消息
DEEPSEEK_API_KEY=sk-xxx VERBOSE=1 uv run mcp_client.py

# 路 B:手搓对照
DEEPSEEK_API_KEY=sk-xxx uv run manual_way.py

mcp_client.py 会自动把 mcp_server.py 当子进程拉起(stdio),你不用单独启动它。 依赖统一声明在 pyproject.toml 里,uv run 会按 uv.lock 自动建虚拟环境并安装,无需手动管理。

配合 Claude Code 使用

除了跑 mcp_client.py(自己当 Host+Client),也可以让 Claude Code 直接当 Host 连这个 server —— 同一个 mcp_server.py 一行不用改,这正是「server 不关心对面是谁」的体现。

.mcp.json 已经把它注册好了:

{
  "mcpServers": {
    "todo": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-primer", "mcp_server.py"]
    }
  }
}

在项目目录里启动 claude 即可自动加载,/mcp 面板能看到连接状态和三原语。用法:

  • Tools:直接说「加一个任务:写周报」,模型会调 mcp__todo__add_task
  • Resources@todo:todos://all 引用全部任务;todos://{status} 是模板资源, @todo:todos://done / @todo:todos://pending 同样可读(模板资源不会出现在资源列表里,但能直接取)
  • Promptsdaily_review 也会一并暴露,具体入口见 /mcp 面板

这条路看不到 JSON-RPC 原始消息

VERBOSE=1mcp_client.py 自己在应用层打印的,走 Claude Code 这条路不生效。Claude Code 的 claude --debug mcp --debug-file <path> 只给连接生命周期的摘要,不含协议报文:

[DEBUG] MCP server "todo": Successfully connected (transport: stdio) in 313ms
[DEBUG] MCP server "todo": Connection established with capabilities: {"hasTools":true,...}
[DEBUG] ToolSearchTool: selected mcp__todo__add_task

实测这份日志里 grep jsonrpc / tools/call / tools/list 命中数为 0。/mcp 面板同理,是状态面板不是协议探针。

想看原始报文,就在 Host 和 server 之间插一层 tee —— stdio 传输本质就是两条管道,原样转发不影响功能:

#!/bin/bash
# mcp_server_debug.sh,记得 chmod +x
DIR="$(cd "$(dirname "$0")" && pwd)"
mkdir -p "$DIR/mcp_logs"
tee -a "$DIR/mcp_logs/in.jsonl" \
  | uv run --directory "$DIR" mcp_server.py \
  | tee -a "$DIR/mcp_logs/out.jsonl"

.mcp.jsoncommand 指向这个脚本("command": "/path/to/mcp_server_debug.sh", "args": []),重连后 in.jsonl(Host→server)和 out.jsonl(server→Host)会记下全部方法的报文 —— 不只是 tools/callinitializetools/listresources/read 都在里面,比 VERBOSE=1 只覆盖 tools/call 更全。 日志是追加写且含任务内容,记得加进 .gitignore

说明

  • 数据库文件 todos.db 首次运行自动创建在项目目录,重启后任务不丢。
  • 若访问 DeepSeek 需要代理,脚本已带 httpx[socks],设置 ALL_PROXY 即可。
  • mcp 锁在 1.x(mcp>=1.28,<2):2.0 是大改版、API 不同,示例按 1.x 写。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选