待办事项MCP服务器

一个结合REST API和模型上下文协议(MCP)服务器的待办事项管理系统,支持多种AI助手集成。

  • by cpateldev
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 cpateldev/TodoMCPServer

使用说明

Todo MCP服务器(支持MCP服务器的.NET最小API)

目录

概述

TodoMCPServer是一个现代化的。NET 10应用程序,它将传统的REST API与 模型上下文协议(MCP) 用于待办事项列表管理的服务器功能。该项目既是一个标准的web API,也是一个支持MCP的服务,可以与人工智能助手(如Claude Desktop、Gemini Code Assist和其他兼容MCP的工具)集成。

TodoMCPServer是一个综合实现,它将Todo-web API与模型上下文协议(MCP)服务器支持相结合。该项目演示了如何通过MCP用AI代理工具功能扩展传统的REST API,允许AI助手直接与您的应用程序交互。

架构图

在VS Code中需要美人鱼扩展名

flowchart TD
    A[Client Applications] --> B{Interaction Layer}
    B --> C[REST API<br/>11 Endpoints]
    B --> D[MCP Server<br/>11 Tools]
    C --> E[Business Logic Layer]
    D --> E
    E --> F[Data Access Layer]
    F --> G[In-Memory EF Context]

    H[Swagger UI] --> C
    I[Claude Desktop] --> D
    J[VSCode Gemini Code Assist] --> D
    K[VSCode GitHub Copilot] --> D
    L[Visual Studio GitHub Copilot] --> D

    classDef client fill:#3c4556,stroke:#5d6b84,stroke-width:2px,color:#d1d9e8
    classDef layer fill:#2a3244,stroke:#3c4556,stroke-width:2px,color:#d1d9e8
    classDef interface fill:#2e4a6e,stroke:#4a7bb9,stroke-width:2px,color:#d1d9e8
    classDef decision fill:#4a3a7a,stroke:#7b6aa8,stroke-width:2px,color:#d1d9e8
    classDef data fill:#2c554c,stroke:#4a8c7d,stroke-width:2px,color:#d1d9e8

    class A client
    class H,I,J,K,L client

    class B decision

    class C,D interface
    class E,F layer
    class G data

特性

  • 双接口:REST API(11个端点)和MCP服务器(11个工具)
  • 现代堆栈: .具有最小API体系结构的NET 10
  • 数据库:具有内存数据库提供程序的实体框架核心
  • API文档:OpenAPI/Swagger UI集成
  • MCP服务器支持:MCP服务器支持使用HTTP和STDIO传输类型
  • MCP集成:为主要AI开发工具预配置了Claude Desktop、Gemini Code Assist、Visual Studio Github Copilot和VSCode MCP客户端
  • **MCP检查器支持**:使用HTTP或STDIO传输类型的MCP检查器轻松测试MCP工具
  • 交叉平台的:在任何支持的平台上运行。净值10

工具和MCP客户端

先决条件

  • .NET 10 SDK 或以后
  • Visual Studio 2025+ 或 VS Code 使用C#开发工具包
  • Git 用于版本控制
  • 对于MCP测试: VS代码中的GitHub副本, 克劳德桌面, 双子座代码助手,或任何与MCP兼容的客户端

创建一个名为的新项目 TodoMCPServer

dotnet new webapi -n TodoMCPServer
cd TodoMCPServer

添加所需的NuGet包

使用以下命令安装所需的软件包:

以下是此项目中使用的NuGet包:

包 版本 描述
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore 10.0.5 ASP。NET Core中间件用于实体框架核心错误页面。
Microsoft.AspNetCore.OpenApi 10.0.5 提供用于为使用ASP.NET构建的web API生成和提供OpenAPI文档的API。NET核心。
Microsoft.EntityFrameworkCore.InMemory 10.0.5 实体框架核心内存数据库提供程序。
ModelContextProtocol 1.2.0 一种用于在客户端和服务器之间同步模型的协议。 (not needed in this project)
ModelContextProtocol.AspNetCore 1.2.0 ASP。NET Core中间件 ModelContextProtocol.
Scalar.AspNetCore 2.13.8 中间件,用于公开Swagger UI的嵌入式版本,以可视化您的web API并与之交互。

参见以下比较 ModelContextProtocol 对比 ModelContextProtocol.AspNetCore 这里

安装以下软件包:

dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore --version 10.0.5
dotnet add package Microsoft.AspNetCore.OpenApi --version 10.0.5
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 10.0.5
dotnet add package ModelContextProtocol.AspNetCore --version 1.2.0
dotnet add package ModelContextProtocol --version 1.2.0
dotnet add package Scalar.AspNetCore --version 2.13.8

注意:Asp实际上不需要ModelContextProtocol。Net Core项目。

更新 Program.cs 配置MCP服务器

builder.Services
    .AddMcpServer()               // Add MCP server services support
    .WithStdioServerTransport()   // Use stdio transport for local AI clients
    .WithHttpTransport()          // Use HTTP transport for web-based clients [not needed if deploying to Azure App Service]
    .WithToolsFromAssembly();     // Automatically register all MCP tools in the assembly

[!警告] 注:。WithStdioServerTransport()需要注释掉,以允许部署到Azure App Service,因为那里不支持stdio传输,否则它将在启动过程中抛出错误。

映射REST端点并添加MCP工具

创建一个新类 Tools\TodoService.cs 并实现用于todo操作的MCP工具。每个工具对应于一个REST API端点。

using ModelContextProtocol.AspNetCore.Tools;
using TodoMCPServer.Models;

public static class TodoService
{
    public static void MapEndPoints(this IEndpointRouteBuilder app)
    {
        app.MapGroup("/todoitems");

        app.MapGet("/", TodoTools.GetAllTodos)
            .WithSummary("Get All Todo Items")
            .WithDescription("Retrieve all todo items, optionally filtered by status query parameter (e.g., ?status=completed).");

        app.MapPost("/complete", TodoTools.CompleteTodoItem)
            .WithSummary("Complete Todo Item")
            .WithDescription("Mark a todo item as complete by its ID.");

        // Rest of the code
    }
}

[McpServerToolType]
public static class TodoTools
{
    // Get all todo items
    [McpServerTool(Name = "get_all_todos"), Description("Retrieve all todo items optionally filtered by status.")]
    public static async Task<List<Todo>> GetAllTodos(string? status, TodoDb db)
    {
        if (string.Equals(status, "completed", StringComparison.OrdinalIgnoreCase))
        {
            return await db.Todos.Where(t => t.IsComplete).ToListAsync();
        }
        else
        {
            return await db.Todos.ToListAsync();
        }
    }
    // Other MCP tool implementations go here...
}

如何运行应用程序

1.克隆和导航,如果你只想在现有项目中尝试它

git clone https://github.com/cpateldev/TodoMCPServer.git
cd TodoMCPServer

2.恢复依赖关系

dotnet restore

3.运行应用程序

dotnet run
# or for development with hot reload
dotnet watch run

4.访问接口

  • Swagger 用户界面: http://localhost:5000/scalar/v1
  • REST API: http://localhost:5000/
  • MCP服务器:通过端口5000上的stdio传输提供

5.替代发射方法

  • Visual Studio:打开 TodoMCPServer.sln 然后按F5
  • VS Code:打开文件夹并使用 .NET Core Launch 配置

Web API REST端点

API遵循RESTful约定,有11个端点用于全面的Todo管理。

端点详细信息表

# HTTP方法 端点 描述 参数 请求正文 响应类型
1 获取 /todoitems/ 获取所有待办事项 status (查询,可选)-按状态筛选 无 数组 Todo
2 发布 /todoitems/{id}/changestatus 更改待办事项状态 id (路径,必填), isComplete (可选) 无 单 Todo
3 获取 /todoitems/completed 获取所有已完成的待办事项 无 无 数组 Todo
4 获取 /todoitems/{id} 按ID获取特定待办事项 id (路径,必填)-待办事项ID 无 单 Todo
5 获取 /todoitems/ids 按ID获取多个待办事项 ids (查询,必填)-ID数组 无 ID数组 Todo
6 获取 /todoitems/search/{name} 按名称搜索待办事项 name (路径,必填)-搜索词 无 数组 Todo
7 发布 /todoitems/add 添加新待办事项 无 Todo 对象 单个 Todo
8 补丁 /todoitems/update/{id} 更新特定待办事项 id (路径,必填)-待办事项ID Todo 对象(部分更新) 单个 Todo
9 发布 /todoitems/batchupdate 批量更新待办事项 无 数组 Todo 对象 数组 Todo
10 删除 /todoitems/delete/{id} 删除特定待办事项 id (路径,必填)-待办事项ID 无 单 Todo (已删除项目)
11 获取 /todoitems/exists/{id} 检查待办事项是否存在 id (路径,必填)-待办ID 无 boolean

标量API资源管理器使用

  1. 打开 http://localhost:5000/scalar/v1 在您的浏览器中。
  2. 浏览可用REST端点的列表。
  3. 单击任何端点以查看详细信息、参数和示例有效载荷。
  4. 选择“试用”以发送实时请求并查看实时响应。
  5. 查看每个端点的请求/响应模式和示例数据。

Scalar UI为测试和探索API提供了交互式OpenAPI/Swagger体验。

MCP工具详细信息

MCP服务器提供11个镜像REST API功能的工具,使人工智能助手能够与Todo系统交互。

MCP工具表

# 工具名称 描述 输入参数 返回类型 HTTP等效值
1 get_all_todos 检索所有待办事项(可选按状态筛选)。 status (字符串,可选) 列表 获取/待办事项/
2 get_todo_by_id 根据待办事项的ID检索待办事项 id (int) Todo GET/todoitems/{id}
3 get_todos_by_ids 按ID检索多个待办事项。 ids (int[]) 列表 GET/todoitems/ids
4 search_todos_by_name 按名称搜索待办事项。 name (字符串) 列表 GET/todoitems/搜索/{name}
5 添加待办事项 添加一个新的待办事项。 todo (待办事项) 待办事项 发布/待办事项/添加
6 更新待办事项 按id更新现有待办事项 id (int), inputTodo (全部) 全部 PATCH /todoitems/update/{id}
7 batch_update_todo_items 批量更新待办事项。 todos (Todo[]) 列表 POST/待办事项/批更新
8 删除待办事项 按ID删除待办事项 id (int) 待办事项 删除/待办事项/删除/{id}
9 get_completed_todos 检索所有已完成的待办事项。 无 列表 GET/todoitems/已完成
10 change_status_todo_item 根据待办事项的ID更改其状态 id (int), isComplete (bool,可选,默认为true) Todo POST/todoitems/{id}/changestatus
11 todo_exists 按ID检查todo项目是否存在 id (int) bool GET/todoitems/exists/{id}

请求流提示

sequenceDiagram
    participant Client as MCP Client Prompt (Github Copilot / Claude / Gemini)
    participant MCPServer as Todo MCP Server
    participant API as REST API Layer
    participant DB as (EF Core) In-Memory DB

    Client->>MCPServer: Prompt to Tool Request (e.g., get_all_todo)
    MCPServer->>API: Process MCP Request
    API->>DB: Execute Database Operation
    DB-->>API: Return Data
    API-->>MCPServer: Format Response
    MCPServer-->>Client: Return Tool Result

MCP JSON配置文件和用法

Visual Studio Github复制副本配置

Visual Studio支持使用HTTP和stdio传输类型进行MCP集成。 创建新文件: <SOLUTIONDIR>\.mcp.json 或 %USERPROFILE%\.mcp.json。我们建议您使用Visual Studio编辑此文件,以便自动应用其JSON架构。

运输类型: http

{
  "servers": {
    "TodoMcpServer": {
      "type": "http",
      "url": "http://localhost:5000/api/mcp"
    }
  }
}

Visual Studio MCP支持

与Visual Studio GitHub Copilot一起使用: http:

  1. 仅适用于Visual Studio 2026。
  2. 将配置放入 .mcp.json 解决方案目录或用户配置文件目录中的文件。
  3. 使用VS 2026或使用 dotnet run 或 dotnet watch 命令
  4. 点击 Start json块上方的链接 .mcp.json
  5. 通过上图所示的GitHub Copilot AI助手面板访问todo工具

VS代码GitHub副本配置

VS Code支持使用HTTP和stdio传输类型的MCP集成。

.vscode\mcp.json

运输类型: http

{
  "servers": {
    "TodoMcpServer": {
      "type": "http",
      "url": "http://localhost:5000/api/mcp"
    }
  }
}

与VS Code GitHub Copilot一起使用: http:

  1. 确保在VS代码设置中chat.mcp.enabled为true。
  2. 将配置放入 .vscode\mcp.json。有关更多详细信息,请参阅VSCode MCP文档。
  3. 使用运行项目 dotnet run 或 dotnet watch 命令
  4. 点击 Start json块上方的链接 .vscode\mcp.json
  5. 通过AI助手面板访问todo工具

传输类型:stdio

{
  "servers": {
    "TodoMcpHttpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": ["run", "--project", "ToDoMCPServer.csproj"]
    }
  }
}

与VS Code GitHub Copilot一起使用: stdio

  1. 确保在VS代码设置中chat.mcp.enabled为true。
  2. 将配置放入 .vscode\mcp.json。有关更多详细信息,请参阅VSCode MCP文档。
  3. 点击 Start json块上方的链接 .vscode\mcp.json
  • 不需要使用运行项目 dotnet run 或 dotnet watch 命令as stdio transport将启动项目
  1. 在输出控制台中等待“MCP服务器已启动”消息
  2. 通过GitHub Copilot AI助手面板访问todo工具

GitHub Copilot对Todo MCP的回应

Claude桌面配置

运输类型: stdio only

claude-desktop-config.json

{
  "mcpServers": {
    "TodoMcpHttpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "<path to project directory>\\TodoMCPServer.csproj"
      ]
    }
  }
}

使用Claude Desktop:

  1. 找到Claude配置: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows)
  2. 使用上面显示的现有设置更新配置。确保提供完整的路径 TodoMCPServer.csproj
  3. 重新启动克劳德桌面
  4. 使用自然语言,如“显示我的所有待办事项”或“为明天的会议创建一个新的待办事项”

Claude Desktop对Todo MCP的回应

Gemini代码辅助配置

**运输类型: stdio only **

.gemini\settings.json

{
  "mcpServers": {
    "TodoMcpHttpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": ["run", "--project", "ToDoMCPServer.csproj"]
    }
  }
}

使用Gemini代码辅助:

  1. 打开VS Code>Gemini Code Assist聊天窗口
  2. 输入/mcp
  3. 打开命令面板(Ctrl + Shift + P)并选择 Developer: Reload Windows 选项。
  4. Gemini Code Assist将显示settings.json中的MCP服务器。本例将显示11个工具

Gemini Code协助对Todo MCP的响应

配置比较

AI MCP工具 配置位置 关键属性 注释
VS代码:GitHub副本 项目>.vcode\mcp.json type,command, args或 http, url 支持stdio或http传输
克劳德桌面 克劳德桌面配置 type,command, args 仅支持stdio传输
VS代码:Gemini代码辅助 项目>.ggemini\settings.json type,command, args 仅支持stdio传输

测试MCP工具

  1. 启动服务器: dotnet run 或 dotnet watch
  2. 连接客户端 使用上述配置之一
  3. 用自然语言测试:
    • “完成所有待办事项”
    • “创建修复错误报告的待办事项”
    • “将待办事项#3标记为完成”

使用MCP检查器进行测试

  1. MCP检验员测试
    • 使用 MCP检查员 通过发送请求和查看响应来直接测试MCP工具。
    • 根据您的设置,配置MCP检查器以使用HTTP或stdio传输连接到TodoMCPServer。
  2. 运行MCP检查器并连接到Todo MCP服务器
    • 打开PowerShell或终端并运行 npx -y @modelcontextprotocol/inspector 命令,请参阅下面的http和stdio传输示例
    • 这应该会在浏览器中打开MCP检查器UI
    • 使用HTTP或stdio传输配置与Todo MCP服务器的连接,如下图所示

使用MCP检查器进行测试-HTTP

MCP检查员命令 HTTP 运输:

对于http传输使用: http://localhost:5000/api/mcp,您必须首先使用以下命令启动服务器 dotnet run 命令。

npx -y @modelcontextprotocol/inspector http http://localhost:5000/api/mcp

使用MCP检查器进行测试-STDIO

MCP检查员命令 STDIO 运输:

对于stdio传输:单击 Connect MCP Inspector UI中的按钮,无需先启动服务器,因为stdio传输将启动服务器进程。

确保shell或终端的当前目录是项目目录,其中 ToDoMCPServer.csproj 文件已找到。

npx -y @modelcontextprotocol/inspector stdio "dotnet run --project ToDoMCPServer.csproj"

部署到Azure应用服务

选项A:使用Azure CLI

  1. 登录:
    az login
    
  2. 创建资源组:
    az group create --name TodoMcpRG --location eastus
    
  3. 部署应用服务:
    az webapp up --runtime "DOTNET|10.0" --sku B1 \
      --name TodoMcpServerApp --resource-group TodoMcpRG
    

此命令用于构建、发布和部署您的应用程序。


选项B:使用Visual Studio

  • 在Visual Studio中配置发布配置文件。
  • 右键单击项目→ 发布 → Azure应用服务(Windows/Linux).
  • 选择订阅、资源组和应用服务计划。
  • 发布。

在Azure中测试Todo REST API

  • 休息:
    curl https://TodoMcpServerApp.azurewebsites.net/todos
    
  • MCP工具:
    • get_todos → 退回物品
    • add_todo → 添加新项目

保护您的端点(可选)

添加JWT/OAuth身份验证:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://login.microsoftonline.com/<tenant-id>/v2.0";
        options.Audience = "<app-client-id>";
    });

builder.Services.AddAuthorization();

app.MapMcp("api/mcp").RequireAuthorization();

然后为您的服务器配置Azure AD应用程序注册。


监视器和标尺

  • 启用 应用洞察 用于记录MCP请求。
  • 配置 自动扩缩容 在应用程序服务计划中进行负载处理。

端到端流程图

flowchart TD
    subgraph "MCP Clients Ecosystem"
        A[Claude Desktop]
        B[VS Code with MCP]
        C[Cursor IDE]
        D[Gemini Code Assist]
        E[Custom MCP Client]
    end

    subgraph "Azure App Service Deployment"
        F[Azure App Service<br/>TodoMCPServer]
        G[Web API Layer<br/>ASP.NET Core 10]
        H[MCP Server Layer<br/>Stdio Protocol]
        I[Business Logic<br/>TodoTools.cs]
        J[Data Access<br/>Entity Framework]

        subgraph "Database Options"
            K1[Azure SQL Database]
            K2[Cosmos DB]
            K3[In-Memory<br/>Dev/Test]
        end

        L[Azure Key Vault<br/>Secrets Management]
        M[Application Insights<br/>Monitoring]
        N[Azure Monitor<br/>Logging & Alerts]
    end

    subgraph "Development & CI/CD"
        O[GitHub Repository]
        P[GitHub Actions<br/>CI/CD Pipeline]
        Q[Azure Container Registry]
        R[Docker Container]
    end

    %% Client Connections
    A -->|STDIO Protocol<br/>over SSH/WebSocket| F
    B -->|STDIO Protocol<br/>VS Code Extension| F
    C -->|STDIO Protocol<br/>Integrated Client| F
    D -->|STDIO Protocol<br/>Google Extension| F
    E -->|Custom MCP Protocol| F

    %% Internal Azure Flow
    F --> G
    F --> H
    G --> I
    H --> I
    I --> J
    J --> K1
    J --> K2
    J --> K3

    %% Security & Monitoring
    F --> L
    F --> M
    M --> N

    %% Deployment Flow
    O --> P
    P --> Q
    Q --> R
    R --> F

    %% External Services
    S[Azure Active Directory<br/>Authentication]
    T[Azure API Management<br/>Optional Gateway]
    U[Azure Front Door<br/>CDN & WAF]

    S --> F
    T --> F
    U --> F

客户端通信流程

sequenceDiagram
    participant C as MCP Client (Claude/VS Code)
    participant APIM as Azure API Management (Optional)
    participant AS as App Service
    participant MCP as MCP Server
    participant API as Web API
    participant DB as Azure SQL

    Note over C,DB: Initial Connection
    C->>APIM: MCP Handshake Request
    APIM->>AS: Forward Request
    AS->>MCP: Initialize MCP Server
    MCP-->>AS: Server Ready
    AS-->>APIM: Handshake Response
    APIM-->>C: Connection Established

    Note over C,DB: Tool Execution Flow
    C->>APIM: Tool Request (e.g., get_all_todos)
    APIM->>AS: Forward with Auth
    AS->>MCP: Parse & Validate Request
    MCP->>API: Call Internal API
    API->>DB: Database Query
    DB-->>API: Results
    API-->>MCP: Formatted Data
    MCP-->>AS: MCP-formatted Response
    AS-->>APIM: Response
    APIM-->>C: Final Result

项目结构

TodoMCPServer/
├── .gemini/                        # gemini Code Assist configuration folder
│   └── settings.json               # config for Gemini Code Assist (MCP)
├── .vscode/                        # VS Code configuration (MCP + editor settings)
│   └── mcp.json                    # MCP configuration for Visual Studio GitHub Copilot
├── ClaudeDesktopConfig/            # Cache folder of Claude Desktop config (MCP)
│   └── claude_desktop_config.json  # MCP configuration for Claude Desktop
├── Properties/                     # project properties (auto-generated by .NET)
│   └── …                           # (typically AssemblyInfo, launchSettings, etc.)
├── images/                         # static image assets (if any)
│   └── …                           # (files here)
├── Program.cs                      # main entry point (ASP.NET minimal API + MCP setup)
├── Readme.md                       # project README / documentation
├── ToDo.cs                         # model/entity class (Todo item)
├── ToDoDb.cs                       # EF Core in-memory DB context
├── TodoItemDTO.cs                  # Data Transfer Object for Todo (for API / MCP)
├── TodoMCPServer.csproj            # .NET project file
├── TodoMCPServer.sln               # Solution file
├── TodoMCPServer.http              # HTTP request collection (e.g. for testing via REST)
├── TodoService.cs                  # REST minimal api endpoints + MCP Tools for Todo operations logic
├── appsettings.json                # general configuration file
├── appsettings.Development.json    # development-specific configuration
└── .mcp.json                       # MCP configuration for Visual Studio 2026 GitHub Copilot (placed at solution root or user profile root)

MCP连接故障排除

  1. 服务器未启动:确保。NET 10 SDK已安装
  2. 连接被拒绝:检查端口5000是否可用
  3. 工具未出现:验证配置文件语法和路径
  4. 权限问题:确保项目的执行权限
  5. 数据库为空:内存中的数据库在重新启动时重置;可能需要种子数据

安全说明

  • 仅限开发:应用程序重新启动时,内存中的数据库重置
  • 无需认证:配置生产使用的身份验证
  • 本地网络:默认情况下在本地主机上运行;网络访问更新
  • 输入验证:确保所有输入在生产中得到验证

参考文献

转到顶部