One endpoint, many servers
A client hits https://your-strad/mcp?servers=granola,deepwiki, and strad
merges those upstreams into one toolset. Every tool is namespaced
server__tool, so granola__list_meetings never collides with anyone else.
?servers=, and get a single merged toolset — proxied, namespaced, and access-controlled server-side.strad is a self-hosted MCP platform. It is one endpoint in front of many MCP servers: a client asks for the servers it wants, presents a token, and strad returns exactly the tools that token is entitled to — merged, namespaced, and brokered server-side. The core ships with zero servers baked in. You attach them through a single config interface, and that config is the whole product surface.
One endpoint, many servers
A client hits https://your-strad/mcp?servers=granola,deepwiki, and strad
merges those upstreams into one toolset. Every tool is namespaced
server__tool, so granola__list_meetings never collides with anyone else.
The query proposes, the token disposes
?servers= can only ever narrow what a token is entitled to. It is a
selection hint, never an authorization boundary — entitlement is computed
server-side from the caller’s roles.
It fails closed
Ask for a server you can’t have and you get a 424 Failed Dependency naming
exactly what’s missing and where to authorize — not a 401 that marches
your client into a pointless OAuth loop against the gateway.
Stateless and spec-conformant
A fresh MCP server and transport is built per request and torn down when it
closes. The toolset is a pure function of (token, URL), which is what
keeps ?servers= conformant with the 2026-07-28 MCP spec revision.