151 lines
3.5 KiB
Markdown
151 lines
3.5 KiB
Markdown
|
# MCP Protocol Framework
|
|||
|
|
|||
|
Model Context Protocol (MCP) 是一个开放协议,为AI模型和代理提供与各种资源、工具和服务交互的标准化方式。本框架实现了MCP协议的核心功能,符合2024-11-05基本协议规范。
|
|||
|
|
|||
|
## 核心特性
|
|||
|
|
|||
|
- **JSON-RPC 2.0通信**: 基于JSON-RPC 2.0标准的请求/响应通信
|
|||
|
- **资源抽象**: 文件、API等资源的标准接口
|
|||
|
- **工具注册**: 注册和调用带有结构化参数的工具
|
|||
|
- **可扩展架构**: 易于扩展新的资源类型和工具
|
|||
|
|
|||
|
## 组件
|
|||
|
|
|||
|
### 核心协议 (`mcp_message.h`, `mcp_message.cpp`)
|
|||
|
|
|||
|
定义MCP的基本结构和类型:
|
|||
|
- 请求/响应处理
|
|||
|
- 错误代码
|
|||
|
- 工具定义
|
|||
|
|
|||
|
### 服务器 (`mcp_server.h`, `mcp_server.cpp`)
|
|||
|
|
|||
|
实现一个HTTP服务器,暴露MCP资源和工具:
|
|||
|
- 在特定路径注册资源
|
|||
|
- 注册带有处理程序的工具
|
|||
|
- 处理传入的HTTP请求
|
|||
|
- 将请求路由到适当的资源
|
|||
|
|
|||
|
### 客户端 (`mcp_client.h`, `mcp_client.cpp`)
|
|||
|
|
|||
|
实现连接到MCP服务器的客户端:
|
|||
|
- 连接到服务器
|
|||
|
- 发现可用的资源和工具
|
|||
|
- 向资源发出请求
|
|||
|
- 使用参数调用工具
|
|||
|
|
|||
|
### 资源 (`mcp_resource.h`, `mcp_resource.cpp`)
|
|||
|
|
|||
|
提供常见资源类型的基本实现:
|
|||
|
- 文件资源
|
|||
|
- API资源
|
|||
|
|
|||
|
### 工具 (`mcp_tool.h`, `mcp_tool.cpp`)
|
|||
|
|
|||
|
提供工具相关功能:
|
|||
|
- 工具构建器 (流畅API)
|
|||
|
|
|||
|
## 示例
|
|||
|
|
|||
|
### 服务器示例 (`examples/server_example.cpp`)
|
|||
|
|
|||
|
MCP服务器实现示例,带有自定义工具:
|
|||
|
- 时间工具: 获取当前时间
|
|||
|
- 计算器工具: 执行数学运算
|
|||
|
- 回显工具: 处理和分析文本
|
|||
|
|
|||
|
### 客户端示例 (`examples/client_example.cpp`)
|
|||
|
|
|||
|
连接到服务器的MCP客户端示例:
|
|||
|
- 获取服务器信息
|
|||
|
- 列出可用工具
|
|||
|
- 使用参数调用工具
|
|||
|
- 访问资源
|
|||
|
|
|||
|
## 如何使用
|
|||
|
|
|||
|
### 设置服务器
|
|||
|
|
|||
|
```cpp
|
|||
|
// 创建并配置服务器
|
|||
|
mcp::server server("localhost", 8080);
|
|||
|
server.set_server_info("MCP Example Server", "2024-11-05");
|
|||
|
|
|||
|
// 注册工具
|
|||
|
mcp::tool time_tool = mcp::tool_builder("get_time")
|
|||
|
.with_description("Get the current time")
|
|||
|
.build();
|
|||
|
|
|||
|
server.register_tool(time_tool, [](const mcp::json& params) {
|
|||
|
// 工具实现
|
|||
|
return mcp::json::object();
|
|||
|
});
|
|||
|
|
|||
|
// 注册资源
|
|||
|
auto file_resource = std::make_shared<mcp::file_resource>("./files");
|
|||
|
server.register_resource("/files", file_resource);
|
|||
|
|
|||
|
// 启动服务器
|
|||
|
server.start(true); // 阻塞模式
|
|||
|
```
|
|||
|
|
|||
|
### 创建客户端
|
|||
|
|
|||
|
```cpp
|
|||
|
// 连接到服务器
|
|||
|
mcp::client client("localhost", 8080);
|
|||
|
|
|||
|
// 初始化连接
|
|||
|
client.initialize("My Client", "1.0.0");
|
|||
|
|
|||
|
// 调用工具
|
|||
|
mcp::json params = {
|
|||
|
{"key", "value"}
|
|||
|
};
|
|||
|
mcp::json result = client.call_tool("tool_name", params);
|
|||
|
```
|
|||
|
|
|||
|
## 构建框架
|
|||
|
|
|||
|
框架依赖以下库:
|
|||
|
- httplib.h - HTTP服务器和客户端
|
|||
|
- json.hpp - JSON解析和生成
|
|||
|
|
|||
|
所有依赖项都包含在仓库中。
|
|||
|
|
|||
|
使用CMake构建示例:
|
|||
|
```bash
|
|||
|
cmake -B build
|
|||
|
cmake --build build --config Release
|
|||
|
```
|
|||
|
|
|||
|
## 扩展框架
|
|||
|
|
|||
|
### 添加新的资源类型
|
|||
|
|
|||
|
1. 定义一个继承自`mcp::resource`的新类
|
|||
|
2. 实现所需的方法:
|
|||
|
- `json get_metadata() const`
|
|||
|
- `json access(const json& params) const`
|
|||
|
|
|||
|
### 创建自定义工具
|
|||
|
|
|||
|
使用工具构建器API:
|
|||
|
```cpp
|
|||
|
// 创建工具定义
|
|||
|
mcp::tool my_tool = mcp::tool_builder("my_tool")
|
|||
|
.with_description("My custom tool")
|
|||
|
.with_string_param("input", "Input parameter", true)
|
|||
|
.with_number_param("count", "Count parameter", false)
|
|||
|
.build();
|
|||
|
|
|||
|
// 注册工具处理程序
|
|||
|
server.register_tool(my_tool, [](const mcp::json& params) {
|
|||
|
// 工具实现
|
|||
|
return mcp::json::object();
|
|||
|
});
|
|||
|
```
|
|||
|
|
|||
|
## 许可证
|
|||
|
|
|||
|
本框架根据MIT许可证提供。有关详细信息,请参阅LICENSE文件。
|