MCP工具-开放式贡献平台
为模型上下文协议(MCP)创建和共享工具。此存储库包含用于构建与MCP服务器集成的工具的模板和示例。
快速开始
构建工具
dotnet build创建您的工具
看 工具_TEMPLATE.md 完整的指南。
基本示例:
public class MyTool : IMCPTool {
public string ToolId => "my-tool";
public ToolMetadata GetMetadata() => new() { Name = "My Tool", Version = "1.0.0" };
public List GetFunctions() => new() { /* functions */ };
public Task ExecuteAsync(string function, Dictionary parameters) => /* ... */;
}项目结构
├── src/
│ ├── MCPServer.ToolTemplate/ # Tool interfaces & base classes
│ └── MCPServer.Examples/ # Example tool implementations
├── docs/ # Documentation
└── .github/workflows/ # CI/CD - builds and publishes tools工作流程:贡献工具
- 分叉 此存储库
- 创建 新工具
src/MCPServer.YourToolName/ - 跟随 这 工具_TEMPLATE.md 指南
- 提交 使用您的工具进行公关
- CI验证 工具(构建、测试、结构)
- 合并 → 工具已发布到您的自定义提要
- MCP服务器 通过NuGet安装您的工具
示例:文本处理工具
位于 src/MCPServer.Examples/,实现:
- 统计单词和字符
- 转换案例(上/下)
- 反转文本
- 删除空白
文档
工具如何发布
- 构建与测试 -GitHub Actions验证所有PR(公共)
- 自动包装 -作为工件创建和上传的NuGet包
- 本地下载 -从GitHub操作获取包
- 私下发布 -使用凭据推送到您的自定义提要(本地)
所有凭证保留 私有的。从未存储在GitHub中。
看 公共位置.md 用于发布步骤。
获取工具详细信息
GET /api/tools/{toolId}获取工具功能
GET /api/tools/{toolId}/functions执行工具功能
POST /api/tools/{toolId}/execute
Content-Type: application/json
{
"functionName": "FunctionName",
"parameters": {
"param1": "value1",
"param2": "value2"
}
}创建你的第一个工具
看 工具_TEMPLATE.md 有关创建和发布工具的详细说明。
示例:文本处理工具
public class MyTool : MCPToolBase
{
public MyTool(ILogger logger) : base(logger) { }
public override ToolMetadata GetMetadata() => new()
{
ToolId = "my-tool",
Name = "My Tool",
Version = "1.0.0",
Author = "Your Name",
Description = "What it does"
};
public override List GetFunctions() => new()
{
new ToolFunction
{
Name = "Process",
Description = "Process some data",
Parameters = new()
{
new ToolParameter { Name = "input", Type = "string", Required = true }
}
}
};
public override async Task ExecuteAsync(string functionName, Dictionary parameters)
{
return functionName switch
{
"Process" => Success(new { result = "processed" }),
_ => Failure("Unknown function")
};
}
}工具管理
工具发现
服务器会自动从以下位置发现并加载工具:
- 这
.NET ServiceProvider(注册工具) - 这
./plugins目录(插件程序集)
插件目录结构
./plugins/
├── MyTool.dll
├── AnotherTool.dll
└── ThirdTool.dll项目结构
├── src/
│ ├── MCPServer.Core/ # Main server application
│ ├── MCPServer.ToolTemplate/ # Tool template and interfaces
│ └── MCPServer.Examples/ # Example tool implementations
├── tools/ # Community contributed tools
├── docs/ # Documentation
├── .github/workflows/ # CI/CD pipelines
└── MCPServer.slnCI/CD集成
工具验证工作流程
当您使用新工具提交PR时,CI/CD管道会自动:
- 验证结构 -确保所需的文件和接口
- 建筑 -编译工具
- 测试 -运行单元测试
- 分析 -静态代码分析
- 整合 -MCP服务器中的测试加载
- 包裹 -创建NuGet包
- 发布 -发布到NuGet注册表(在主分支上)
看
贡献
我们欢迎社区捐款!要添加新工具,请执行以下操作:
- 在下创建新目录
tools/使用您的工具名称 - 实施
IMCPTool接口(使用MCPToolBase作为基础) - 在a中添加单元测试
YourTool.Tests目录 - 包含README.md和文档
- 提交PR
看 贡献.md 详细指南。
建筑
核心组件
工具管理器
- 管理工具生命周期
- 处理工具发现和加载
- 将函数调用路由到适当的工具
- 跟踪执行指标
MCPServer应用程序
- HTTP API主机
- REST端点定义
- 请求/响应处理
IMCP工具界面
- 所有工具的基础合同
- 定义元数据、函数和执行
MCPToolBase
- 抽象基类
- 创建结果的辅助方法
- 参数验证
配置
环境变量
ASPNETCORE_ENVIRONMENT:开发或生产ASPNETCORE_URLS:服务器URL(默认值:http://localhost:5000)
应用程序设置
创建 appsettings.json 配置:
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"PluginDirectory": "./plugins"
}发展
调试服务器
dotnet run --project src/MCPServer.Core --configuration Debug运行测试
dotnet test MCPServer.sln打包工具
dotnet pack src/MCPServer.ToolTemplate -c Release部署
码头工人
docker build -t mcp-server:latest .
docker run -p 5000:5000 mcp-server:latestKubernetes
看 k8s/ 部署清单目录。
Azure
使用Azure容器实例或应用程序服务进行部署。
文档
演出
- 异步I/O:所有操作都使用async/await
- 依赖注入:高效的服务解决方案
- 插件加载:工具组件的延迟加载
- 缓存:加载后缓存的工具元数据
安全考虑
- 验证所有输入参数
- 使用具有已知安全补丁的托管依赖关系
- 对生产部署实施速率限制
- 要求对敏感工具进行身份验证
故障排除
工具未加载
- 检查插件目录:
./plugins/ - 验证DLL是否存在并以net8.0为目标
- 检查日志以获取详细的错误消息
- 确保机具
IMCPTool
函数执行失败
- 验证参数名称和类型
- 检查响应中的错误消息
- 查看工具日志
- 使用有效参数值进行测试
支持
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
内置:
- .NET 8.0
- ASP。NET核心
- Serilog
- 微软。扩展。依赖注入
