Octri

Transports

The same tools run in four places. Each publish in MCP Studio updates all of them.

HostedLocal (stdio)Self-hosted HTTPCloudflare Workers
Who runs itOctriEach user's MCP clientYouYou, on Cloudflare
How clients connectA URLA config entryA URLA URL
CredentialsSign-in per person, or headersEach user's ownWhatever you start it withSecrets you set, or sign-in per person
Reaches private networksNoYesYesNo

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.

json
{
  "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:

bash
MCP_TRANSPORT=http PORT=3000 OCTRI_PROJECT_ID=YOUR_PROJECT_ID npx @octri/mcp

It 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:

bash
docker build -t my-api-mcp https://api.octri.dev/api/v1/public/mcp/YOUR_PROJECT_ID/docker.tar.gz

Cloudflare 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 shared server shares its credentials

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.