# 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("./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文件。