MCP 生成器
从 OpenAPI 规范生成模型上下文协议(MCP)服务器,用于与 Claude Code 和其他工具的 AI 集成。
安装
dotnet add package RestClient.Net.McpGenerator
前置条件
首先,生成 REST 客户端:
dotnet run --project RestClient.Net.OpenApiGenerator.Cli -- \
-u api.yaml -o Generated -n YourApi.Generated
命令行使用
dotnet run --project RestClient.Net.McpGenerator.Cli -- \
--openapi-url api.yaml \
--output-file Generated/McpTools.g.cs \
--namespace YourApi.Mcp \
--server-name YourApi \
--ext-namespace YourApi.Generated \
--tags "Search,Resources"
命令行选项
| 选项 | 描述 |
|---|---|
| `--openapi-url` | OpenAPI 规范的路径 |
| `--output-file` | 生成的 MCP 工具输出文件 |
| `--namespace` | MCP 服务器的 C# 命名空间 |
| `--server-name` | MCP 服务器的名称 |
| `--ext-namespace` | 生成的 REST 客户端的命名空间 |
| `--tags` | 要包含的 OpenAPI 标签(逗号分隔) |
生成的代码
生成器创建包装 REST 客户端的 MCP 工具定义:
[McpServerToolType]
public static partial class McpTools
{
[McpServerTool(Name = "get_user")]
[Description("通过 ID 获取用户")]
public static async Task<string> GetUser(
[Description("用户 ID")] string id,
HttpClient httpClient,
CancellationToken ct)
{
var result = await httpClient.GetUserById(id, ct);
return result switch
{
OkUser(var user) => JsonSerializer.Serialize(user),
ErrorUser(var error) => \$"错误: {error}"
};
}
}
Claude Code 集成
添加到您的 Claude Code 配置(`.claude/settings.json` 或 `claude_desktop_config.json`):
{
"mcpServers": {
"yourapi": {
"command": "dotnet",
"args": ["run", "--project", "YourApi.McpServer"]
}
}
}
MCP 服务器项目
创建控制台应用程序来托管 MCP 服务器:
// Program.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using YourApi.Mcp;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHttpClient();
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly(typeof(McpTools).Assembly);
var host = builder.Build();
await host.RunAsync();
工具命名
OpenAPI 操作会转换为 MCP 工具名称:
| OpenAPI | MCP 工具 |
|---|---|
| `GET /users/{id}` | `get_user` |
| `POST /users` | `create_user` |
| `PUT /users/{id}` | `update_user` |
| `DELETE /users/{id}` | `delete_user` |
按标签筛选
使用 `--tags` 为特定 API 部分生成工具:
# 仅生成搜索端点的工具
--tags "Search"
# 多个标签
--tags "Search,Users,Products"
错误处理
生成的工具在成功时返回 JSON,失败时返回错误字符串,便于 AI 理解:
// 成功:JSON 响应
{"id": "123", "name": "Alice", "email": "alice@example.com"}
// 错误:人类可读的消息
"错误: 用户未找到 (HTTP 404)"