Skip to main content
Glama

@brooswit/thatch

Un servidor MCP central HTTP, implementado como un plugin de Elysia(https://elysiajs.com). Muchas sesiones de Claude Code se conectan a un único servidor por URL; el servidor se dirige a ellas por nombre y puede enviar mensajes dentro de una sesión activa.

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 se conecta con:

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

Por qué el tipo de entrega no es void

Enviar a una sesión puede fallar de maneras que el SDK de MCP oculta: una conexión puede estar registrada sin que su flujo de notificaciones esté conectado, en cuyo caso el SDK descarta la trama en silencio. thatch lo rechaza en voz alta ("no-channel-stream") y solo afma C2 cuando esté de verda un flujo que puedqa transportar la trama. C3 (entró en la transcripción) y C4 (el model lo leyó) no son obsrvables, así que no hay API aquí que prétenda alcanzarlos.

Related MCP server: agent-network

API

  • thatch(options){ plugin, mcp }plugin monta el endpoint (por defecto /mcp); mcp es el controlador.

  • options: identify, onDuplicate ("replace" por defecto | "reject"), history (por defecto 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)`.

  • Una Connection contiere name, connectedAt, lastSeenAt, meta, channelReady, y history.

  • A and import { FakeConnection } from "@broker wit/atch/testing" para probas.

Layers

protocol (trama, entrega, método — puro) · registry (con exiones con nombra + historial) · channel (en viío, afirmaciones honestas) · plugin (el montaje de Elysia, un servidor MCP por conexión) · testing.

Scripts

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