Token导航 LogoToken导航

MCP Server · 开发工具

MCP Protocol SDK

一个纯OCaml实现的模型上下文协议SDK,支持多种协议版本和传输方式,适用于AI工具和资源管理。

未说明官方级别未说明来源级核验工具 0
资源管理开发工具命令行工具

快速开始

公开资料没有提供安装命令,按仓库或官方文档接入。
作者 / 组织
jeong-sik
提供方
jeong-sik

工具数量

0

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

MCP Protocol SDK 属于开发工具类 MCP Server,公开资料标注 0 个工具,通过传输方式未标注接入,客户端适配情况以官方文档为准,没有现成的安装命令;接入前要先准备 OAuth 授权。

分类

开发工具

传输方式

未说明

认证方式

OAuth 授权

部署方式

公开资料未说明

安装与配置

公开目录没有给出安装命令,需要按仓库 README安装;下面按同类条目的通用流程说明。

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    先确认运行方式

    公开资料没有标注传输方式,先看仓库 README,确认是本地进程还是远程地址。

  2. 2

    获取服务

    公开目录没有给出安装命令,按仓库 README里的步骤安装或获取服务。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 0 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

公开资料仍需确认:安装命令

详细介绍

OCaml的MCP协议SDK

一个纯粹的OCaml 5.x实现 模型上下文协议 (MCP),涵盖规范版本2024-11-05至2025-11-25。

包裹

单层蛋白石包装 mcp_protocol 有三个子库:

库公共名称关键模块
核心mcp_protocolMcp_types, Jsonrpc, Sampling, Logging, Auth, Pagination
是的mcp_protocol.eioServer, Generic_server, Generic_client, Stdio_transport, Memory_transport, Middleware
HTTPmcp_protocol.httpHttp_server, Http_client, Oauth_client, Auth_middleware

项目状态

特征矩阵

协议版本

版本新增功能
2024-11-05工具、资源、提示(初始稳定)
2025-03-26可流式HTTP、OAuth 2.1、工具注释、音频内容
2025-06-18结构化输出、启发、资源链接、标题字段
2025-11-25采样、任务(实验)、图标、扩展

版本协商在初始化握手期间选择相互支持的最高版本。使用 Version.negotiate, Version.is_supported,以及 Version.features_of_version 在运行时查询功能。

运输

交通图书馆描述
\[UNK\]标准(NDJSON) mcp_protocol.eiostdin/stdout上以换行符分隔的JSON
流式HTTPmcp_protocol.http通过HTTP+SSE cohttp-eio,具有会话管理功能
在记忆中mcp_protocol.eio用于零IO测试的成对通道(Memory_transport)

服务器图元

原始字段
工具name, description, title, input_schema, output_schema, annotations (只读、破坏性、幂等、开放世界提示), icon, execution (任务支持)
资源uri, name, title, description, mime_type, icon.模板通过 resource_template.通过订阅 subscribe/unsubscribe.
提示name, title, description, arguments, icon

客户特点

功能模块描述
取样SamplingcreateMessage 和 model_preferences, sampling_tool 列表, sampling_tool_choice (自动/非/工具), include_context (无/此服务器/所有服务器)
激励Mcp_types_elicitation表单模式(模式驱动)和URL模式。操作:接受、拒绝、取消
任务Mcp_types_tasks实验(2025-11-25)。状态类型:工作、输入请求、已完成、失败、已取消。分为 terminal_status 和 active_status 在类型级别
日志记录LoggingRFC 5424级别:调试、信息、通知、警告、错误、严重、警报、紧急。 setLevel 请求和 notifications/message
根Mcp_types客户端文件系统根目录 list_changed 通知支持
竣工Mcp_types_completion及时完成资源参考 completion_context 多论证意识
进展Mcp_result进度通知 progress_token, progress, total,以及 message 字段
取消Mcp_result取消飞行中的请求 request_id 可选 reason

异步任务

异步任务是基板拥有的MCP原语。SDK提供了导线类型(Mcp_types_tasks)以及内存生命周期存储(Task_store)对于服务器。

基材保证什么:

  • 任务状态机:正在工作->已完成|失败|已取消|需要输入。无效的转换返回错误。
  • 电线处理机 tasks/get, tasks/list, tasks/cancel 通过 add_task_handlers.
  • 通过GC完成终端任务 Task_store.gc_terminal.
  • 使用线程安全存储 Stdlib.Mutex (适用于Eio和非Eio环境)。

下游运行时间适应什么:

  • 何时创建任务(例如,长时间运行的工具调用)。
  • 如何向客户轮询或推送任务进度。
  • 进程生命周期之外的持久性(默认情况下存储在内存中)。

服务器配方:

let store = Task_store.create () in
let server =
  Server.create ~name:"my-server" ~version:"1.0.0" ()
  |> Server.add_task_handlers (Task_store.to_task_handlers store)
in
(* In a tool handler: create a task, do work, update status *)
let task = Task_store.create_task store () in
(* ... run work in a fiber ... *)
Task_store.update_status store task.task_id Completed
  ~updated_at:(string_of_float (Unix.gettimeofday ())) |> ignore

内容类型

类型变量字段
文本TextContenttext, annotations
图片ImageContentdata (base64), mime_type, annotations
音频AudioContentdata (base64), mime_type, annotations
嵌入式资源ResourceContentresource (uri+文本/blob)
资源链接ResourceLinkContenturi, name, description, mime_type, annotations

结构化输出

工具可以声明 output_schema (JSON模式)。当存在时, tool_result.structured_content 将键入的JSON输出与人类可读的输出一起携带 content 列表。

OAuth 2.1(mcp_protocol.http)

能力RFC模块
PKCE (S256)RFC 7636Oauth_client.generate_pkce
授权码交换RFC 6749Oauth_client.exchange_code
令牌刷新RFC 6749Oauth_client.refresh_token
发现RFC 8414Oauth_client.discover
动态客户端注册RFC 7591Oauth_client.register_client
承载令牌注入RFC 6750Oauth_client.inject_bearer_token
服务器端承载验证RFC 6750 S3Auth_middleware.check_auth
受保护的资源元数据RFC 9728Auth_middleware.resource_metadata
CSRF状态参数Oauth_client.generate_state, validate_state
凭证存储Oauth_client.credential_store (可插拔)
增量同意build_authorization_url ~scopes

HTTPS通过以下方式自动启用 tls-eio +系统CA证书。

扩展数据

所有初始化参数/结果、工具结果、提示结果和采样消息都带有可选 _meta 现场(Yojson.Safe.t option)用于在不更改模式的情况下通过协议传递扩展数据。

扩展和实验

两者 server_capabilities 和 client_capabilities 包括 extensions 和 experimental 字段(Yojson.Safe.t option)用于非标准功能的能力协商。

建筑

基于函数的传输抽象

Generic_server.Make(T) 和 Generic_client.Make(T) 为满足以下条件的任何模块生成服务器或客户端 Transport.S 签名。这意味着相同的应用程序逻辑在stdio、HTTP或内存传输上运行,无需更改代码。

(* Stdio *)
module Stdio_server = Mcp_protocol_eio.Generic_server.Make(Stdio_transport)

(* In-memory for tests *)
module Test_server = Mcp_protocol_eio.Generic_server.Make(Memory_transport)

(* With logging middleware *)
module Logged = Mcp_protocol_eio.Middleware.Logging(Stdio_transport)
module Debug_server = Mcp_protocol_eio.Generic_server.Make(Logged)

中间件

Middleware.Logging(T) 用stderr消息日志记录包装任何传输。附加的中间件可以通过链接functor来组成。

Tool_arg——类型安全的参数提取

提取工具参数,无需手动匹配JSON模式:

let handler _ctx _name args =
  let open Tool_arg in
  let* text = required args "text" string in
  let count = optional args "count" int ~default:1 in
  Ok (Mcp_types.tool_result_of_text (String.concat "" (List.init count (fun _ -> text))))

可用提取器: string, int, float, bool, json, list_of. 现场访问: required (返回 Error 在丢失/解析失败时), optional (返回默认值), optional_opt (返回 'a option).

快速启动

opam pin add mcp_protocol git+https://github.com/jeong-sik/mcp-protocol-sdk.git

或添加到您的 dune-project:

(depends
 (mcp_protocol (>= 1.3.0)))

然后在您的 dune 文件:

(libraries mcp_protocol mcp_protocol.eio mcp_protocol.http)

用法

人机工程学服务器API

在一次调用中注册工具、资源和提示:

let server =
  Server.create ~name:"my-server" ~version:"1.0" ()
  |> Server.tool "echo" ~description:"Echo input"
       (fun _ctx _name args ->
         let open Tool_arg in
         let* text = required args "text" string in
         Ok (Mcp_types.tool_result_of_text text))
  |> Server.resource ~uri:"mcp://info" "info" ~mime_type:"application/json"
       (fun _ctx _uri ->
         Ok [Mcp_types.{ uri = "mcp://info"; mime_type = Some "application/json";
                         text = Some {|{"status":"ok"}|}; blob = None }])
  |> Server.prompt "greet" ~description:"Greeting"
       (fun _ctx _name args ->
         let who = match List.assoc_opt "name" args with Some n -> n | None -> "world" in
         Ok Mcp_types.{ description = None;
           messages = [{ role = User;
             content = PromptText { type_ = "text"; text = "Hello, " ^ who } }];
           _meta = None })

内存测试

module Mt = Mcp_protocol_eio.Memory_transport
module Test_server = Mcp_protocol_eio.Generic_server.Make(Mt)
module Test_client = Mcp_protocol_eio.Generic_client.Make(Mt)

let () =
  Eio_main.run @@ fun env ->
  Eio.Switch.run @@ fun sw ->
  let client_t, server_t = Mt.create_pair () in
  let server = Test_server.create ~name:"test" ~version:"1.0" ()
    |> Test_server.tool "ping" (fun _ _ _ -> Ok (Mcp_types.tool_result_of_text "pong"))
  in
  Eio.Fiber.fork ~sw (fun () ->
    Test_server.run server ~transport:server_t ~clock:(Eio.Stdenv.clock env) ());
  let client = Test_client.create ~transport:client_t ~clock:(Eio.Stdenv.clock env) () in
  match Test_client.initialize client ~client_name:"test" ~client_version:"1.0" with
  | Ok _ -> ignore (Test_client.call_tool client ~name:"ping" ())
  | Error e -> Printf.eprintf "Failed: %s\n" e

HTTP服务器(流式HTTP)

let () =
  Eio_main.run @@ fun env ->
  Eio.Switch.run @@ fun sw ->
  let server =
    Http_server.create ~name:"my-server" ~version:"1.0.0" ()
    |> Http_server.add_tool
         (Mcp_types.make_tool ~name:"echo" ~description:"Echo" ())
         (fun _ctx _name args ->
           let open Tool_arg in
           let* text = required args "text" string in
           Ok (Mcp_types.tool_result_of_text ("Echo: " ^ text)))
  in
  let net = Eio.Stdenv.net env in
  let addr = `Tcp (Eio.Net.Ipaddr.V4.loopback, 8080) in
  let socket = Eio.Net.listen ~sw net addr ~backlog:128 in
  Cohttp_eio.Server.run socket
    (Cohttp_eio.Server.make
       ~callback:(Http_server.callback server) ())
    ~on_error:(fun exn -> Printf.eprintf "%s\n" (Printexc.to_string exn))

HTTP客户端

let () =
  Eio_main.run @@ fun env ->
  Eio.Switch.run @@ fun sw ->
  let net = Eio.Stdenv.net env in
  let client = Http_client.create ~endpoint:"http://127.0.0.1:8080/mcp" ~net ~sw () in
  match Http_client.initialize client ~client_name:"my-client" ~client_version:"1.0" with
  | Ok result ->
    Printf.printf "Connected to %s\n" result.server_info.name;
    ignore (Http_client.close client)
  | Error e -> Printf.eprintf "Failed: %s\n" e

OAuth发现+HTTPS

let () =
  Eio_main.run @@ fun env ->
  Eio.Switch.run @@ fun sw ->
  let net = Eio.Stdenv.net env in
  match Oauth_client.discover ~net ~sw ~issuer:"https://auth.example.com" with
  | Error e -> Printf.eprintf "Discovery failed: %s\n" e
  | Ok metadata ->
    let verifier, challenge = Oauth_client.generate_pkce () in
    let state = Oauth_client.generate_state () in
    let auth_url = Oauth_client.build_authorization_url
      ~authorization_endpoint:metadata.authorization_endpoint
      ~client_id:"my-client" ~redirect_uri:"http://localhost:9999/callback"
      ~scopes:["read"] ~state ~code_challenge:challenge () in
    Printf.printf "Visit: %s\n" auth_url;
    ignore (Oauth_client.exchange_code ~net ~sw
      ~token_endpoint:metadata.token_endpoint
      ~client_id:"my-client" ~code:"AUTH_CODE"
      ~redirect_uri:"http://localhost:9999/callback"
      ~code_verifier:verifier)

错误代码

(* JSON-RPC standard *)
Error_codes.parse_error        (* -32700 *)
Error_codes.invalid_request    (* -32600 *)
Error_codes.method_not_found   (* -32601 *)
Error_codes.invalid_params     (* -32602 *)
Error_codes.internal_error     (* -32603 *)

(* MCP-specific *)
Error_codes.connection_closed      (* -32001 *)
Error_codes.request_timeout        (* -32002 *)
Error_codes.resource_not_found     (* -32003 *)
Error_codes.tool_execution_error   (* -32004 *)

测试

33个测试套件(565个测试),涵盖类型、序列化、传输、服务器/客户端生命周期、OAuth、SSE和集成场景。 Memory_transport 实现了零IO的确定性测试。

dune runtest
bash scripts/check-release-metadata.sh

可以对捆绑的示例服务器执行官方合规性:

bash scripts/run-conformance.sh

从源头构建

git clone https://github.com/jeong-sik/mcp-protocol-sdk.git
cd mcp-protocol-sdk
opam install . --deps-only
dune build

文档

许可证

MIT许可证

参考文献

工具与能力

工具数量

0

资源数量

0

提示词数量

0

能力标签

OCaml本地部署OCamlSDK模型协议AI工具管理资源管理多版本支持

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

让助手直接读代码

把仓库、提交记录和 issue 交给模型检索,补全和重构时不用来回复制文件。

在对话里跑命令

触发构建、测试和脚本,执行结果直接回到上下文,省去切终端。

接进开发流程

把 PR、CI 状态和代码审查接进助手,减少在几个工具之间跳。

选择建议

值得选的地方

  • 只提供 0 个工具,职责集中,接入后不容易误操作。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • 公开资料没有可直接复制的安装命令,第一次接入要自己找入口。
  • 需要自备OAuth 授权,没有凭据没法直接试。
  • 公开摘要偏短,具体能力和限制要回到仓库确认。

更适合

  • 需要在开发工具场景里让模型直接调用外部能力的人。
  • 愿意照着官方文档一步步配环境的人。

不太适合

  • 暂时拿不到OAuth 授权的人。
  • 希望一条命令就装好、不想看文档的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
MCP Protocol SDK

MCP World · 本页

0未说明未标注1 个2026-05-17
Git 838e2ec1

MCP World

12stdio有2 个2026-05-17
Markitdown MCP 2c653a5f

MCP World

1stdio有1 个2026-05-17
Context7 MCP C671e75a

MCP World

0stdio有1 个2026-05-17
Context7 831acf40

MCP World

0stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

MCP Protocol SDK 怎么安装?

公开目录没有给出可以直接复制的安装命令,需要按仓库 README里的步骤安装;装好后写进客户端的 MCP 配置再重启。

MCP Protocol SDK 怎么在 Claude Desktop、Cursor 里配置?

它是传输方式未标注,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

MCP Protocol SDK 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

MCP Protocol SDK 需要 API Key 吗?

公开资料标注的认证方式是OAuth 授权,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

MCP Protocol SDK 支持哪些客户端?

公开资料没有标注具体客户端;能配置本地 MCP 命令的客户端都能接,配置方式参照官方文档。

来源信息

继续浏览同类 MCP