MCP Server

The API exposes its own MCP servers so users can work with their data from Claude and other MCP clients. This is separate from the Boost MCP server, which is local dev tooling for agents working on the codebase, see Agents.

Servers

There are two, mirroring the app and admin split in the rest of the API. /mcp is for the authenticated user working with their own data and /admin/mcp is for admins managing any user. The paths live in config/mcp.php.

Both sit behind the same middleware as their API counterparts, so an account that can't reach /profile or /admin/users can't reach the matching server either. Anything that should only gate some tools, like a subscription check, hides those tools from users who don't qualify instead of blocking the whole server.

Each server ships with a hello tool that greets the authenticated account, handy for checking a connection end to end. Real tools get added the same way, a class listed on the server.

Auth

Auth is OAuth through Passport. It's what the MCP spec documents and what hosted clients like claude.ai expect, since they don't take a custom header. A user pastes the server URL, logs in and approves in the browser, and they're connected. There are no tokens to copy around and nothing that expires on a weekly schedule.

The client only needs the URL. It follows the discovery metadata the API publishes, registers itself, and sends the user off to log in. The API serves no HTML, so the login and approval page is the frontend's job, at /oauth/authorize on FRONTEND_APP_URL for the app server and FRONTEND_ADMIN_URL for the admin one. Each server is its own authorization server in the metadata, so the two don't share a login.

Registration is open since there's no client to set up ahead of time, which is why it gets the stricter auth throttle. Where a client can send the user back afterwards is limited by redirect_domains in config/mcp.php. It ships with claude.ai and claude.com, plus localhost on any port for Claude Code.

Passport authenticates its own OAuth user model, which is swapped for the real user before anything else runs. That keeps the verified, password and admin checks behaving exactly as they do on the API, and a soft deleted account gets a 401.

Debugging

./dev inspector starts the MCP Inspector in its own Node container, so the API image doesn't need Node just for a debug tool. It sits behind a compose profile, so ./dev up leaves it alone. It lists the tools, calls them and shows the raw JSON-RPC, which is the quickest way to tell whether a problem is in the server or in a client's config.

The tests post JSON-RPC to the real routes instead of calling tools directly, so the full middleware stack is covered the same way a client would hit it.

© Websanova 2026 About Privacy