Skip to main content
Glama

@brooswit/thatch

Центральный HTTP MCP-сервер в виде плагина для Elysia. Множество сессий Claude Code подключаются к одному серверу по URL; сервер обращается к ним по имени и может отправлять сообщения в активную сессию.

import { Elysia } from "elysia";
import { thatch, z } from "@brooswit/thatch";

const { plugin, mcp } = thatch({
  identify: (req) => req.headers.get("x-connection-name"),   // names the connection; null rejects it
  tools: {
    status: { description: "Fleet status", input: {}, handler: (_a, c) => `hello ${c.name}` },
  },
});

const app = new Elysia().use(plugin).listen(3000);

// push a message into a named session — from anywhere
const d = await mcp.send("epic-kan-39", { content: "PR #296 approved", meta: { key: "KAN-39" } });
//  d: { claim: "C2" }  — a connected session's stream took it
//     { claim: "refused", reason: "not-connected" | "no-channel-stream" | "bad-meta" | "closed-mid-send" }

Claude Code подключается с помощью:

claude mcp add --transport http fleet http://localhost:3000/mcp --header "x-connection-name: epic-kan-39"

Почему тип доставки — не void

Отправка в сессию может падать такими способами, которые MCP SDK скрывает: подключение может быть зарегистрировано, а его поток уведомлений ещё не прикреплён — в этом случае SDK молча отбрасывает кадр. thatch не молчит: он явно отказывается (no-channel-stream) и заявляет C2 только когда поток, способный доставить кадр, действительно есть. C3 (попал в стенограмму) и C4 (модель прочитала кадр) не наблюдаемы, поэтому никакой API здесь не делает вид, что они достижимы.

Related MCP server: agent-network

API

  • thatch(options) → { plugin, mcp } — plugin монтирует эндпоинт (по умолчанию /mcp); mcp — это хендл.

  • options: identify(req), onDuplicate ("replace" по умолчанию | "reject"), history (по умолчанию 50), tools, path, serverInfo.

  • mcp.connections: list(), get(name), has(name), count(), waitFor(name, { timeoutMs }).

  • mcp.send(name, frame), mcp.sendMany(names, frame), mcp.sendAll(frame, { where? }).

  • mcp.on("connect" | "disconnect" | "send", handler).

  • Объект Connection содержит name, connectedAt, lastSeenAt, meta, channelReady и history.

  • import { FakeConnection } from "@brooswit/thatch/testing" Для тестов.

Слои

protocol (кадр, доставка, метод — чистая логика) · registry (именованные подключения + история) · channel (отправка, честные утверждения) · plugin (монтирование в Elysia, один MCP-сервер на подключение) · testing.

Скрипты

bun run check        # generate load tests + typecheck + unit + load + coverage ≥90%
bun test test/unit
MCP_LIVE=1 bun test test/live   # against a real Claude Code session (opt-in)

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers