Skip to content

服务端概述

McpServer 类向连接的 MCP 客户端暴露能力(工具、资源、提示)。

创建服务端

cpp
auto transport = std::make_shared<StdioServerTransport>();

ServerOptions opts;
opts.server_info = Implementation{"MyServer", "1.0.0"};
opts.capabilities = ServerCapabilities{};
opts.capabilities->tools = ToolsCapability{};

auto server = McpServer::Create(std::move(transport), opts);
server->Run();

对于 Streamable HTTP 模式:

cpp
StreamableHttpServerOptions http_opts;
http_opts.port = 3001;
http_opts.stateless = true;  // 或 false 使用会话模式

auto transport = std::make_shared<StreamableHttpServerTransport>(http_opts);

ServerOptions opts;
opts.server_info = Implementation{"MyServer", "1.0.0"};
opts.capabilities = ServerCapabilities{};
opts.capabilities->tools = ToolsCapability{};

auto server = McpServer::Create(std::move(transport), opts);
server->Run();

ServerOptions

字段类型描述
server_infooptional<Implementation>服务端标识(名称、版本)
capabilitiesoptional<ServerCapabilities>声明的能力
protocol_versionoptional<string>固定到特定协议版本
server_instructionsoptional<string>发送给客户端的指令
initialization_timeoutchrono::seconds握手超时时间(默认 60s)
validate_tool_inputbool启用 JSON Schema 输入验证
validate_tool_outputbool启用 JSON Schema 输出验证
task_storeshared_ptr<IMcpTaskStore>任务持久化后端
request_state_verifierfunction<bool(string_view)>MRTR 的 HMAC/AEAD 验证器
cache_hintsoptional<map<string, CacheHint>>按方法的缓存提示(ttlMs, cacheScope)
input_required_configoptional<InputRequiredConfig>MRTR/elicitation 行为的配置
input_required_config.max_roundsint最大启发式收集轮次(默认 8)
input_required_config.round_timeoutchrono::seconds每轮超时时间(默认 600s)
input_required_config.legacy_shimbool启用旧版兼容垫片(默认 true)
on_requestfunction收到每个入站 JSON-RPC 请求时回调,包含方法名和完整请求体
on_responsefunction发送每个出站 JSON-RPC 响应时回调
on_errorfunction发送每个出站 JSON-RPC 错误时回调
on_notificationfunction收到每个入站 JSON-RPC 通知时回调
on_method_calledfunction(string_view)简写——仅方法名(与 on_request 同时触发)
on_protocol_errorfunction(string_view)简写——仅错误消息(与 on_error 同时触发)
on_client_connectedfunction(Implementation)客户端完成 initialize 时回调
on_initializedfunction()客户端发送 notifications/initialized 时回调
on_transport_closefunction()传输连接关闭时回调
on_transport_errorfunction(string_view)传输层错误时回调
incoming_filtersshared_ptr<FilterPipeline>用于拦截/修改/阻断入站消息的管道
outgoing_filtersshared_ptr<FilterPipeline>用于拦截/修改/阻断出站消息的管道

简写回调(on_method_calledon_protocol_error)和完整消息回调(on_requeston_error)为链式触发 — 同时设置时两者都会触发。

生命周期

  1. 构造McpServer::Create — 创建会话处理器、挂载处理器、启动消息循环
  2. 注册:注册工具、资源、提示、扩展
  3. 运行server->Run() — 阻塞于 io_context.run()
  4. 关闭server->Close() — 取消待处理请求、关闭传输层

能力推导

能力从注册的原语中自动推导。例如,注册工具会设置 capabilities.tools.list_changed = trueServerOptions.capabilities 字段已声明但当前未被服务端消费——能力始终从已注册的工具、资源、提示和任务存储自动推导。