How to Deploy a Remote MCP Server with Streamable HTTP A developer outlined the deployment decisions for running a remote MCP server over Streamable HTTP, covering endpoint shape, transport, authentication, credential passthrough, tool-surface curation, and testing. The guide recommends a stable endpoint such as https://mcp.yourcompany.com/mcp, keeping login and token operations out of the model-selected tool list, and testing API keys, Bearer tokens, and OAuth separately so invalid credentials fail safely. It also notes that hosted providers like 0mcp pass API keys, Bearer tokens, and OAuth credentials through during requests rather than storing them. Building an MCP server locally is useful for development. Deploying it for production is a different job. Once the MCP server becomes remote, you need to think about endpoint shape, transport, authentication, API credentials, testing, logs, latency, versioning, and what happens when the upstream API changes. For API-backed MCP servers, a production deployment usually has one goal: expose a stable remote MCP endpoint that AI clients can connect to, while the original API remains responsible for business logic and authorization. This guide walks through the deployment decisions I would check before shipping a remote MCP server over Streamable HTTP. A local MCP server usually runs on one developer machine. Many local servers use stdio , where the MCP client starts a local process and communicates through standard input and output. That model is helpful when: A remote MCP server is different. It runs as a reachable service and exposes an endpoint that an MCP-compatible client can connect to over the network. That model makes more sense when: Neither model is automatically better. They fit different stages. Local is good for development and private workflows. Remote is the production path for most SaaS API integrations. Streamable HTTP gives a remote MCP server a network-friendly transport. Instead of launching a local process, the client connects to an HTTP endpoint. A production endpoint usually looks like: https://mcp.example.com/mcp Or, for a default hosted endpoint: https://your-server-name.0mcp.dev/mcp When you deploy with Streamable HTTP, your testing needs to include the full HTTP path: The MCP tool may be mapped correctly, but the deployment can still fail because the proxy drops streaming responses, the path is wrong, or the client is pointed at an old endpoint. Deployment is MCP code plus ordinary web-service work, with the added requirement that clients must discover and call MCP capabilities correctly. Pick a stable endpoint before production. For example: https://mcp.yourcompany.com/mcp Then write down: This sounds like admin work, but it prevents real bugs. If the team cannot tell which API environment the MCP server calls, or which version is currently active, debugging gets painful fast. For custom domains, also check: /mcp path reaches the MCP server rather than a website route For 0mcp specifically, eligible plans can use custom subdomains such as mcp.example.com . Root domains are not supported. The default hosted endpoint format is yourservername.0mcp.dev/mcp . A remote MCP deployment has two authentication concerns. First, the MCP client needs to connect to the MCP server. Second, the MCP server needs to call the original API. For API-backed tools, avoid turning authentication routes into model-selected tools. The model should not need tools like: login user refresh token create api key get secret Those operations belong in the connection and credential flow, not in the ordinary tool list. For an API-to-MCP server, the common pattern is: Test API keys, Bearer tokens, and OAuth separately. A valid credential should work. A missing, expired, revoked, wrong-tenant, or under-scoped credential should fail safely. With 0mcp https://0mcp.io/ , existing API authentication continues to be used. API keys, Bearer tokens, and OAuth credentials are passed through during requests rather than stored by 0mcp. The hosted MCP server gives teams a Streamable HTTP endpoint, while the original API remains the source of truth for authorization and business rules. Do not deploy every API endpoint because the importer can see it. Production remote servers need a smaller, cleaner surface: If a tool changes data, say that in the description. If a tool needs user confirmation, say that too. If two tools look almost the same, rename them or remove one. Similar tools are one of the easiest ways to confuse an agent during tool selection. For example, this pair is vague: update customer modify customer This pair is better: update customer billing email update customer support status The second pair tells the client what each tool changes. It also helps the developer write focused tests. A production readiness test should cover connection, discovery, calls, auth, errors, and logs. Start with the connection: Then check discovery: Then run tool calls: For write tools, use a safe environment and test: The test should prove that the server behaves predictably across realistic cases, beyond one successful response. Remote MCP servers need operational visibility. At minimum, you want to see: Individual logs help debug one call. Analytics help you see patterns. Be careful with what you store. Logs should help debugging without storing secrets, request headers, raw credentials, or full response content unless your privacy model explicitly allows it. 0mcp logs include fields such as time, capability name, source, status, duration or latency, and outbound size. The outbound field stores response size, not response content. An MCP server sits between clients and your API. When either side changes, users can feel it. Version these parts: Some changes are safe: Some changes can break clients: For breaking changes, keep a rollback path. If your platform supports restoring previous configuration versions, test that restore flow before you need it under pressure. 0mcp supports saving, reviewing, and restoring configuration versions, so teams can manage selected operations and tool configuration changes without rebuilding the hosted endpoint from scratch. Self-hosting gives your team direct control over the runtime, network, deployment pipeline, and infrastructure choices. It also means your team owns: A hosted platform reduces that infrastructure burden. The tradeoff is that you work inside the platform's supported inputs, transports, configuration model, and product limits. For 0mcp, that means: stdio servers are not supported That is a practical fit for SaaS teams that want an MCP endpoint for their existing API but do not want to own the full infrastructure layer.