Transports
The same tools run in four places. Each publish in MCP Studio updates all of them.
| Hosted | Local (stdio) | Self-hosted HTTP | Cloudflare Workers | |
|---|---|---|---|---|
| Who runs it | Octri | Each user's MCP client | You | You, on Cloudflare |
| How clients connect | A URL | A config entry | A URL | A URL |
| Credentials | Sign-in per person, or headers | Each user's own | Whatever you start it with | Secrets you set, or sign-in per person |
| Reaches private networks | No | Yes | Yes | No |
Hosted
Streamable HTTP at https://api.octri.dev/api/v1/public/mcp/YOUR_PROJECT_ID/mcp, or at your own domain. Nothing to run. See Hosted server and sign-in.
stdio
The MCP client starts the process and talks to it over stdin and stdout.
{
"mcpServers": {
"my-api-docs": {
"command": "npx",
"args": ["@octri/mcp", "--project-id", "YOUR_PROJECT_ID"]
}
}
}No ports and no network exposure. Use it when the API is on localhost or a private network, or when each developer should call it with their own credential.
Self-hosted HTTP
Run the server yourself over Streamable HTTP so a team shares one instance:
MCP_TRANSPORT=http PORT=3000 OCTRI_PROJECT_ID=YOUR_PROJECT_ID npx @octri/mcpIt listens on 127.0.0.1 and serves /mcp, plus /health for a load balancer. To listen on another interface, set MCP_HOST and also MCP_AUTH_TOKEN; the server refuses to start on a public interface without a token, and every caller then sends it as a bearer token. MCP_ALLOWED_ORIGINS lists the browser origins allowed to call it.
MCP_TRANSPORT=sse still starts the older SSE transport for clients that need it.
Docker
Every publish stores a Docker build context with your tools inside, so you can build an image straight from its URL:
docker build -t my-api-mcp https://api.octri.dev/api/v1/public/mcp/YOUR_PROJECT_ID/docker.tar.gzCloudflare Workers
MCP Studio's self-host block downloads a Workers project: a wrangler.jsonc, the server, and your tools. Set the credential with wrangler secret put and deploy with npx wrangler deploy, or deploy with -c wrangler.oauth.jsonc so each person signs in to your API. Each session runs in its own Durable Object, so approval prompts work the same as on the hosted server.
A self-hosted server started with one credential, on Docker, Node or Workers, calls your API with it on behalf of everyone connected. Every user of that server can do whatever that credential can do, and your API logs attribute all of it to one identity.
Give it the narrowest credential that works, or none so it serves documentation tools only. For per-person access, use the hosted server with sign-in.
From the CLI
octri mcp package download --target docker saves the Docker build context, and --target worker the Workers project. See packages and plugins.