MCP · the long version

Plug in anything
that speaks MCP.

STDIO, HTTP, SSE — every Model Context Protocol transport. OAuth flows for the protected APIs. Dynamic tool discovery so the model sees new tools the moment a server comes online. Tools run on the backend, not the browser; secrets stay where they belong.

Three transports

Local. Remote. Streamed.

Paste a command or a URL. Catalyst handles the initialization handshake, lists the tools, and surfaces them in the chat tool bar. No wrapping code, no glue layer.

STDIO

Local processes.

Filesystem, git, sqlite, your own scripts — anything that speaks MCP over stdin/stdout. Catalyst spawns the process, manages its lifecycle, and pipes the protocol both ways.

$ npx @modelcontextprotocol/server-filesystem ~/projects
HTTP

REST endpoints.

Hosted MCP servers — Linear, Notion, Stripe, your internal services. Paste the URL, pass an auth token (or run the OAuth dance), and the server's tools become first‑class in chat, workflows, and agents.

https://mcp.linear.app/sse
SSE

Streaming servers.

For long‑running tools that stream progress — image generation, web crawls, background queries. Server‑sent events flow through to the chat without polling or fake completion stubs.

data: {"tool":"crawl","progress":42}
How it works

Backend executes. Browser never sees the keys.

MCP server CRUD goes through Supabase with row‑level security; tool execution goes through a secure backend router using FastMCP. The two paths are decoupled — sandbox‑safe by design.

discovery

Dynamic tool listing.

The moment a server connects, its tools/list response is cached and surfaced to the model. New tools after a deploy? Refresh the server and they're available next turn.

oauth

Protected APIs, handled.

Servers behind OAuth get the full authorization‑code flow. Tokens live server‑side, refresh transparently, and never round‑trip through the chat client.

health

Status visible at a glance.

Each server shows Active / Connecting / Error in real time, with the actual error message — so when something breaks, you know whether to restart the script, refresh the OAuth token, or check the upstream service.

isolation

Per‑user, RLS‑enforced.

Your MCP servers belong to you. Supabase row‑level security ensures other tenants can't list them, execute them, or even see they exist. Multi‑tenant by default.

fastmcp

FastMCP 2.0 under the hood.

Connection pooling, lifecycle management, protocol versioning — all handled by FastMCP. The platform stays a thin orchestration layer; the heavy lifting is delegated to the upstream library.

first‑class

One tool, every surface.

A tool you wire up appears in chat, in workflows (as a tool node), and in agents (in the enabled‑tools list). No reconfiguration per surface.

it just works

Paste it. Watch tools appear.

The MCP servers page shows everything you've wired up — server name, transport, status, tool count — with one tap to add another. The chat tool bar updates immediately. No deploy, no rebuild, no API change.

  • Real‑time status. Supabase subscriptions keep server state in sync across devices and tabs.
  • Configuration is data. Add and remove servers without touching prompts or templates. Servers live in mcp_servers; tools live in mcp_tools.
  • Same model, more tools. The chat picker doesn't change. You just have more verbs available next turn.
catalyst · mcp servers
brave‑search HTTP · 14 tools · 42ms
github HTTP · 32 tools · OAuth
linear SSE · 11 tools · 88ms
filesystem STDIO · 6 tools · local
notion HTTP · token expired · refresh
+ add server STDIO · HTTP · SSE
Bring your tools

Any verb you can name.
Any service you can reach.

If it speaks MCP — and increasingly, everything does — Catalyst can call it. From chat, from workflows, from agents. One platform, every tool.