返回市场
MCP服务器

MCP服务器

作者:peppemas23 星标更新:2025-08-26

项目介绍

CPP MCP-SERVER

这是一个具有可插拔模块架构的模型上下文协议服务器的C++实现。

服务器资源提示工具抽样通知根目录引发
MCP-SERVER✅*✅**

* 尚不支持资源模板

** 部分支持

支持的传输方式

传输方式支持授权
Stdio
SSE
HttpStream

支持的操作系统

操作系统支持编译器
WindowsMINGW64
Ubuntu LinuxGCC
Mac OSGCC

如何编译

在本地机器上克隆仓库

git clone https://github.com/peppemas/mcp_server.git

编译

cd mcp_server
mkdir build
cd build
cmake ..
make

MCP服务器架构

MCP服务器旨在实现一个模型上下文协议,支持模块化和可扩展的架构。以下是项目架构概述:

核心组件

  1. 服务器核心
    处理服务器初始化和管理所有主要功能的核心组件,包括与客户端通信、日志记录和插件管理。

  2. 命令行界面
    提供用于配置的命令行参数:

    • -n:指定要暴露给客户端的服务器名称。(可选)
    • -p:设置插件目录的路径,在该目录中搜索插件(也搜索子目录)。
    • -l:设置日志目录的路径。
  3. 插件系统
    服务器设计为从指定目录(-p 参数)动态加载插件。每个插件扩展服务器的功能,允许未来扩展而不修改核心代码库。

  4. 日志模块
    日志是集中化的,存储在由 -l 参数指定的目录中。这增强了调试和监控服务器活动的能力。

执行流程

  1. 初始化

    • 服务器通过解析命令行参数来配置服务器名称、插件目录和日志目录。
    • 初始化日志,并准备插件系统。
  2. 插件加载

    • 识别并从指定目录动态加载插件。
    • 每个插件被初始化并注册到服务器。
  3. 处理客户端请求

    • 服务器监听传入的客户端连接。
    • 根据实现的模型上下文协议处理请求,该协议依赖于已注册的插件以提供扩展能力。
  4. 错误处理

    • 启动或运行时发生的错误会被记录在日志目录中,确保对服务器操作的影响最小。

插件扩展性

MCP服务器的扩展性由其插件系统驱动,使开发者能够在不修改核心逻辑的情况下扩展服务器的功能。插件是动态加载的库,可以根据操作系统以多种方式实现:

  • 在Windows上:插件编译为.dll文件。
  • 在Linux/MacOS上:插件编译为.so.dylib(共享对象)文件。

示例插件

  1. 天气插件
    天气插件允许服务器提供与天气相关的功能。此插件可以处理与天气数据相关的请求,如当前温度、预报和其他气象信息。插件从第三方API获取数据,以确保信息是最新的和准确的。它展示了如何扩展MCP服务器以提供需要外部数据集成的服务。

  2. 睡眠插件
    睡眠插件在服务器处理管道中引入延迟或“睡眠”功能。这对于模拟响应延迟或管理协议中的定时操作非常有用。开发者可以利用此插件构建和测试与基于时间的操作相关的功能,而无需更改核心服务器行为。它突显了自定义插件如何针对特定的利基用例。

  3. 代码审查插件
    代码审查插件旨在帮助开发者执行自动代码审查。此插件分析提交到服务器的代码,并提供有用的反馈,例如识别潜在的bug、代码异味和优化机会。它遵循标准编码实践,并可以配置为强制执行特定的风格指南(例如Google C++风格指南)。此外,它支持多语言检查,确保与各种编程语言的兼容性。插件可以与版本控制系统集成,直接检索代码更改进行评估,使其成为协作开发工作流中的宝贵工具。

Claude桌面配置

{
  "mcpServers": {
    "mcp-server": {
      "command": "C:\\mcp-server\\mcp_server.exe",
      "args": [
        "-n","developer-server",
        "-l","C:\\mcp-server\\logs",
        "-p","C:\\mcp-server\\plugins"
      ],
      "env": {
        "CUSTOM_API_KEY_1": "your-api-key-here",  
        "CUSTOM_API_KEY_2": "your-api-key-here",
        "SAVE_DIR": "/path/to/save/directory"
      }      
    }
  }
}

注意:在“env”块中,您可以传递参数给您的插件

待办事项列表