# 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文件。