待办事项管理服务器

一个基于模型上下文协议(MCP)构建的简单待办事项列表应用程序,用于AI助手如Claude管理待办事项。

  • by oscarwang20
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 oscarwang20/mcp-demo

使用说明

全MCP服务器

一个使用模型上下文协议(MCP)构建的简单待办事项列表应用程序。此服务器演示了如何创建MCP工具,Claude等AI助手可以使用这些工具来管理待办事项列表。

什么是MCP?

模型上下文协议(MCP)是一个开放标准,使AI助手能够安全地与外部工具和数据源进行交互。把它想象成人工智能的REST——它规范了LLM如何发现和调用应用程序中的函数。

特性

此服务器提供两个工具:

  • 全部添加:添加一个带有标题、描述和优先级的新待办事项
  • list_所有:列出所有待办事项

先决条件

  • Node.js 18或更高版本
  • pnpm(或npm/yarn)
  • 克劳德桌面(用于测试)

安装

  1. 克隆此存储库:
git clone git@github.com:oscarwang20/mcp-demo.git
cd mcp-demo
  1. 安装依赖项:
pnpm install
  1. 构建项目:
pnpm build

用法

使用Claude Desktop进行测试

  1. 构建服务器:
pnpm build
  1. 将服务器添加到您的Claude Desktop配置中:

在macOS上: ~/Library/Application Support/Claude/claude_desktop_config.json 在Windows上: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "todo": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-demo/build/index.js"]
    }
  }
}
  1. 重新启动克劳德桌面

  2. 试试看!试着问克劳德:

    • “将‘购买杂货’添加到我的待办事项列表中”
    • “显示我的所有待办事项”
    • “添加高优先级任务以完成演示文稿”

项目结构

mcp-demo/
├── src/
│   └── index.ts          # Main server code
├── build/                # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
└── README.md

运作原理

1.服务器设置

服务器使用MCP SDK创建通过stdio通信的服务器:

const server = new McpServer({
  name: "Todo App MCP Server",
  version: "1.0.0",
  description: "A simple TODO application using MCP",
  capabilities: {
    resources: {},
    tools: {},
  },
});

2.工具登记

工具在定义其输入和输出的模式中注册:

server.registerTool(
  "add_todo",
  {
    description: "Adds a new todo item",
    inputSchema: {
      title: z.string().min(1),
      description: z.string().optional(),
      priority: z.enum(["low", "medium", "high"]).default("medium").optional(),
    },
    outputSchema: {
      success: z.boolean(),
    },
  },
  async ({ title, description, priority }) => {
    // Your tool logic here
    return {
      content: [{ type: "text", text: "Success message" }],
      structuredContent: { success: true },
    };
  }
);

3.响应格式

重要:MCP响应必须遵循以下结构:

return {
  content: [                          // Array of content items
    { type: "text", text: "..." }     // Human-readable text
  ],
  structuredContent: { /* ... */ }    // Optional: structured data
};

这 content 数组是 必需的 -忽略它会导致验证错误!

黑客马拉松挑战

要扩展此服务器吗?尝试添加:

初学者:

  • delete_todo(id) -按ID删除待办事项
  • complete_todo(id) -将待办事项标记为已完成/未完成
  • update_priority(id, priority) -更改待办事项的优先级

中级:

  • search_todos(query) -按标题或描述搜索待办事项
  • filter_todos(priority, completed) -按条件筛选待办事项
  • 在待办事项中添加截止日期

高级:

  • 将待办事项持久化为JSON文件或数据库
  • 添加待办事项类别/标签
  • 实现用户之间的待办事项共享
  • 添加定期待办事项

发展

在开发中运行:

pnpm build && node build/index.js

进行更改:

  1. 编辑 src/index.ts
  2. 跑 pnpm build
  3. 重新启动Claude Desktop以查看更改

常见问题

“输出验证错误”

确保您的工具返回正确的格式 content 数组:

return {
  content: [{ type: "text", text: "..." }],  // ← Don't forget this!
  structuredContent: { /* your data */ }
};

克劳德找不到服务器

  • 检查路径是否正确 claude_desktop_config.json 是绝对的
  • 确保你跑了 pnpm build
  • 配置更改后重新启动Claude Desktop

未显示更改

  • 始终运行 pnpm build 代码更改后
  • 重新启动Claude Desktop以重新加载服务器

资源

贡献

请随时提交问题和增强请求!


专为MCP碰撞课程演示而设计