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)
F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • An authenticated remote MCP server for user-owned devices and one-shot capability invocation.

  • Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).

  • Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/brooswit/thatch'

If you have feedback or need assistance with the MCP directory API, please join our Discord server