Liking cljdoc? Tell your friends :D

im.ttalk.agent.server.mcp

MCP 的 Streamable HTTP 端点——Ring 处理器(designs/server-module.md §4)。协议在 clj-agent-mcp: im.ttalk.agent.mcp.server/handle-message(纯函数,一条进一条出)与 check-headers(HTTP 头与信封一致性); 这里只做 HTTP 那一层。转正自 examples/mcp/server_example.clj 的 http-kit 接线。

(require '[im.ttalk.agent.mcp.server :as srv]
         '[im.ttalk.agent.server.mcp :as mcp-http])
(def s (srv/server {:name "demo" :version "1.0" :tools [...]}))
(mcp-http/handler s {:origin-allowed nil})        ;; 一个 Ring 处理器,交给任何 Ring 服务端
(mcp-http/routes "/mcp" s opts)                   ;; 或 im.ttalk.agent.server.routing 的路由表
  • POST:读体(受 :max-body-bytes,超了 413)→ 解析 JSON(坏 ⇒ 400 -32700;JSON 数组 ⇒ 400 -32600,批量自 2025-06-18 起已从协议删除)→ check-headers(头与信封不一致 ⇒ 400 -32020)→ handle-message → 有响应 ⇒ JSON, 校验类错误(-32602 -32020 -32021 -32022)400、其余 200(客户端的双时代探测看状态码);通知 ⇒ 202 空体(协议禁止给 通知回响应)。handle-message 意外抛出 ⇒ 500 -32603(不把异常文本吐给客户端)。
  • GET / DELETE / 其他 ⇒ 405 带 Allow: POST, OPTIONS:本端点不开服务端推送流、也没有会话(规范允许)。
  • OPTIONS ⇒ 预检 204。
  • Origin 缺省拒:带 Origin 且不在 :origin-allowed 里 ⇒ 403(规范要求服务端校验 Origin 防 DNS rebinding); 不带 Origin(非浏览器客户端)放行。白名单用 im.ttalk.agent.server.agui.http/origin-allow。
  • 只回 JSON、不回 SSE:一条请求一条响应,没有要推的中间消息(规范允许服务端选 JSON)。

选项::origin-allowed(Origin 谓词;缺省 nil = 拒所有带 Origin 的):credentials?(回 Allow-Credentials) :allow-headers(预检额外放行的请求头):max-body-bytes(缺省 4 MiB)。

MCP 的 Streamable HTTP 端点——**Ring 处理器**(designs/server-module.md §4)。协议在 clj-agent-mcp:
`im.ttalk.agent.mcp.server/handle-message`(纯函数,一条进一条出)与 `check-headers`(HTTP 头与信封一致性);
这里只做 HTTP 那一层。转正自 examples/mcp/server_example.clj 的 http-kit 接线。

```clojure
(require '[im.ttalk.agent.mcp.server :as srv]
         '[im.ttalk.agent.server.mcp :as mcp-http])
(def s (srv/server {:name "demo" :version "1.0" :tools [...]}))
(mcp-http/handler s {:origin-allowed nil})        ;; 一个 Ring 处理器,交给任何 Ring 服务端
(mcp-http/routes "/mcp" s opts)                   ;; 或 im.ttalk.agent.server.routing 的路由表
```

- `POST`:读体(受 `:max-body-bytes`,超了 413)→ 解析 JSON(坏 ⇒ 400 `-32700`;JSON 数组 ⇒ 400 `-32600`,批量自
  2025-06-18 起已从协议删除)→ `check-headers`(头与信封不一致 ⇒ 400 `-32020`)→ `handle-message` → 有响应 ⇒ JSON,
  校验类错误(`-32602 -32020 -32021 -32022`)400、其余 200(客户端的双时代探测看状态码);通知 ⇒ 202 空体(协议禁止给
  通知回响应)。`handle-message` 意外抛出 ⇒ 500 `-32603`(不把异常文本吐给客户端)。
- `GET` / `DELETE` / 其他 ⇒ 405 带 `Allow: POST, OPTIONS`:本端点不开服务端推送流、也没有会话(规范允许)。
- `OPTIONS` ⇒ 预检 204。
- **Origin 缺省拒**:带 Origin 且不在 `:origin-allowed` 里 ⇒ 403(规范要求服务端校验 Origin 防 DNS rebinding);
  不带 Origin(非浏览器客户端)放行。白名单用 `im.ttalk.agent.server.agui.http/origin-allow`。
- 只回 JSON、不回 SSE:一条请求一条响应,没有要推的中间消息(规范允许服务端选 JSON)。

选项:`:origin-allowed`(Origin 谓词;缺省 nil = 拒所有带 Origin 的)`:credentials?`(回 Allow-Credentials)
`:allow-headers`(预检额外放行的请求头)`:max-body-bytes`(缺省 4 MiB)。
raw docstring

default-max-body-bytesclj

source

handlerclj

(handler server)
(handler server opts)

MCP Streamable HTTP 的 Ring 处理器(见 ns 文档)。同步与 Ring 异步(3 元)两种元数都有。

MCP Streamable HTTP 的 Ring 处理器(见 ns 文档)。同步与 Ring 异步(3 元)两种元数都有。
sourceraw docstring

routesclj

(routes path server)
(routes path server opts)

挂在 path 下的路由表(im.ttalk.agent.server.routing 的格式):任何方法都交给 handler(它自己回 405 / 预检)。

挂在 `path` 下的路由表(im.ttalk.agent.server.routing 的格式):任何方法都交给 `handler`(它自己回 405 / 预检)。
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close