Deployment decisionChecked for MCP 2026-07-28 and product documentation reviewed 2026-08-26

Local vs Remote MCP Servers: Which Should You Use?

Choose between local and remote MCP servers. Compare machine access, stdio, HTTP, security, credentials and maintenance, with a practical decision table.

Version and test detailsThis guide uses MCP 2026-07-28. Product support, cloud features, URLs, and plan behavior were rechecked against first-party documentation on August 26, 2026.

On this page

Version verifiedChecked August 26, 2026 against MCP 2026-07-28 and product documentation reviewed 2026-08-26. Review method.

Choose the operating boundary

Pick where code and authority must live first; transport choice follows from that boundary.

  1. Machine-bound workChoose local for files, desktop apps, localhost services, or hardware whose authority should stay on one machine.
  2. Shared service workChoose remote for centrally operated APIs, shared policy, cross-device access, and one maintained deployment.
  3. Two real trust boundariesChoose both only when one workflow genuinely needs local machine context and a separately governed shared service.

Choose where the capability needs to run first. Then check transport support, permissions, credentials, and who will maintain the server.

Local vs remote MCP servers at a glance

A local MCP server runs in the user's machine or local execution environment, often as a subprocess using stdio. A remote MCP server runs as a network-accessible service, commonly using Streamable HTTP.

“Local” describes location—not a guarantee of privacy or offline operation. “Remote” does not mean the service must be public or shared with other customers. [S132] [S131]

Table 1: Local vs remote MCP servers at a glance
Decision Local server Remote server
Where code runs In a local machine or execution environment. In a separately hosted network service.
Typical fit Local files, development tools, desktop software, or hardware. Shared services, cloud systems, or cross-device access.
Common transport stdio; local HTTP is also possible. Streamable HTTP.
Maintenance The installation owner or device-management system maintains it. The service operator maintains it.
Main risk to examine What code and dependencies can do under local permissions. Who can connect, what they can access, and how users are isolated.

Which should you choose?

Table 2: Which should you choose?
Your requirement Start by evaluating What to verify before deciding
Read a repository or operate software on one computer. Local. File permissions, package trust, and access from the selected host.
Give several users access to one maintained service. Remote. User identity, upstream permissions, availability, and supported transport.
Keep the entire workflow offline. Local, if every dependency is local. The model, server, data sources, and all other network calls—not just server location.
Combine local files with a shared service. A hybrid. Which information may cross the boundary and which actions require approval.

These are design starting points, not measured product recommendations.

Do not choose on “local is safe” or “remote is scalable” alone. Local execution may expose files or credentials; a remote service may centralize sensitive access. Evaluate the actual permissions and failure modes.

For protocol details, use the MCP transport guide. For deployment risks, use the MCP security guide. The host-compatibility guide documents product-specific support and its verification dates.


Deployment location is not transport

Four concepts are often collapsed into two words:

  1. Deployment location asks where the server process runs: beside the user, inside a private network, at an edge location, or in a public cloud.
  2. Transport asks how MCP messages move between client and server. The standard choices are stdio and Streamable HTTP, and the specification allows compatible custom transports.
  3. Exposure asks who can reach an endpoint. A remote server can be private behind a network, access proxy, gateway, or supported tunnel. A local HTTP listener can accidentally be reachable beyond localhost.
  4. Tenancy asks whose data and authority share infrastructure. A remote service may be single-tenant, one-customer-per-deployment, or multi-tenant; location alone says nothing about isolation.

The typical pairings are useful defaults, not definitions. A host commonly launches a local process over stdio, while an independently deployed service commonly exposes Streamable HTTP. But a desktop application can talk to a localhost HTTP service, a container can run beside the host, and a remote execution environment can launch a stdio process inside its own VM. Cursor's Cloud Agent documentation is a concrete example: it can run a stdio server inside the cloud agent VM, so “stdio” does not mean “on the end user's laptop.” [S057] [S465]

This distinction prevents two design mistakes. First, teams sometimes expose a local HTTP listener and assume it has stdio's process boundary. It does not: HTTP introduces origin, binding, and network-reachability concerns. Second, teams sometimes move a server to the cloud and assume Streamable HTTP provides identity, tenant isolation, or safe authorization automatically. It does not: the transport carries messages; the deployment must supply those controls.

Master comparison

The table below condenses twelve high-value dimensions from the downloadable 30-row research matrix. It describes common patterns, not protocol requirements. [S121] [S057] [S132] [S131] [S133]

Table 3: Master comparison
Dimension Local MCP server Remote MCP server Important qualification
Definition Server process runs on or near the user/host environment. Server runs as a network-accessible service outside the immediate host process. Location and transport correlate but are not identical.
Typical transport stdio; local HTTP or custom stream transport also possible. Streamable HTTP; legacy SSE may remain for compatibility. Do not define local=stdio and remote=HTTP as absolute rules.
Process startup Host/client commonly launches subprocess. Independently deployed and already running. A local HTTP service may also be independently started.
Network exposure Minimal over stdio; local HTTP remains network-reachable and needs protection. First-class network and Internet/private-network boundary. Origin validation and localhost binding matter for local HTTP.
Authentication Often process/config trust rather than MCP HTTP auth. Frequently OAuth or bearer-token based; authless is possible. OAuth is optional, not a universal remote requirement.
Data residency Can keep processing and data on device, but model/host may still transmit context. Data travels to service and often underlying cloud systems. Server location alone does not prove end-to-end locality.
Installation Package, binary, container or MCPB per user/device. Usually connect by URL; no server binary on end-user device. A tunnel/proxy can reintroduce a local install.
Updates Per-installation rollout; may drift. Central operator updates service once. Central updates also create common-mode risk.
Scaling Scale by installing processes on more machines or local pooling. Horizontal/vertical scaling behind standard infrastructure. 2026 core removes protocol-session affinity for modern requests.
Offline operation Possible when dependencies and data are local. Normally requires network access. Local server may still depend on cloud APIs.
Audit/observability Logs are distributed across devices unless collected. Central logs, traces and policy easier to implement. Centralization does not guarantee correct audit.
Primary failure domain One device/workspace or distributed fleet rollout. Shared service, region, identity provider or network path. Centralization trades fragmented failures for common-mode failures.

How local MCP works

Diagram comparing local, remote, and hybrid MCP deployment boundaries.
Local and remote describe where authority is operated. A hybrid host keeps machine-bound and shared-service authority in separate servers. MCP 2026-07-28 · analytical deployment guidance

In the canonical local pattern, the MCP client starts a subprocess with a command and arguments. The client writes newline-delimited JSON-RPC messages to the process's standard input; the server writes only valid MCP messages to standard output and may write logs to standard error. Closing the input stream or terminating the parent relationship gives the client a direct lifecycle handle. There is no listening TCP port to scan or expose. [S132]

That tight lifecycle is operationally attractive. One user can restart one failed process, different projects can pin different server versions, and a server can use the logged-in user's filesystem and local tools without creating a public service. It also means installation is part of the product. Runtime availability, executable paths, native dependencies, environment variables, package signatures, updates, and host configuration all become support obligations.

The security boundary is easy to underestimate. A local server is code executing with some portion of the user's authority. If it inherits the full environment, it may receive unrelated credentials. If it can read an entire home directory when it only needs one workspace, a malicious package or prompt-influenced operation has an unnecessarily large blast radius. Approval dialogs do not make untrusted code safe after installation. Publisher verification, version pinning, least-privilege filesystem scopes, restricted environment inheritance, and sandboxing matter before the first tool call. The dedicated MCP security guide covers the full threat model. [S134] [S141]

Local also does not automatically mean offline. A local server may call GitHub, a database, or any other cloud API; it may require OAuth and a network connection even though the MCP hop itself stays on the machine. Conversely, a local server can be deliberately offline when its models, data, and dependencies are present. Document both network behavior and data flow instead of using “local” as a privacy claim.

Local HTTP is a different threat model

A server bound to 127.0.0.1 is local in placement but remote-like in transport. Current Streamable HTTP guidance says implementations must validate the Origin header and should bind to localhost rather than all interfaces when running locally. Those controls address DNS rebinding and unintended network exposure. Add authentication when local processes or browser contexts should not all share authority. Do not bind to 0.0.0.0 simply because it makes a container demo easier. [S131] [S134]

Use local MCP when the user must select and inspect machine resources, the work has a hard local latency loop, the capability should survive an internet outage, or transmitting the underlying data would violate policy. Prefer a managed package or bundle when you can make installation, permissions, updates, and removal understandable. A raw package-manager command can be appropriate for developers, but it is a weak default for a broad audience unless the trust and dependency story is explicit. [S258] [S463] [S464]


How remote MCP works

A remote MCP server is independently deployed and already running when the client connects. In MCP 2026-07-28, the standard Streamable HTTP shape is intentionally compatible with ordinary stateless infrastructure: one endpoint accepts POST requests, every JSON-RPC message is processed independently, and a response is either a single JSON value or an SSE stream scoped to that request. Implementations may still keep application state in databases, caches, queues, or explicit handles; “stateless protocol processing” does not mean the application has no state. [S131] [S055]

This shape makes load balancing, autoscaling, retries, and rolling deployments easier to reason about than the earlier protocol-session model. It does not remove the need for idempotency, cancellation, task state, or affinity when an upstream operation genuinely requires them. Put durable state in a system designed for it, make transient handles explicit, and decide which failures a client may safely retry.

Remote deployment moves the operational burden from every endpoint to the service owner. Users avoid runtime installation and receive a consistent version. The operator takes responsibility for HTTPS, identity, authorization, secrets, monitoring, capacity, incident response, regional behavior, data retention, tenant isolation, and compatibility. A central rollout reduces version drift but increases blast radius: one bad release can affect every consumer at once.

Remote is not synonymous with public. A service can sit behind a private network, gateway, identity-aware proxy, or outbound tunnel. Nor is it synonymous with multi-tenant. A company can run one deployment per customer or per trust zone. What matters is whether the intended host can reach it and whether every layer preserves the correct user, client, tenant, and resource identity.

Why remote MCP changed in 2026

The original 2024 HTTP+SSE binding used a long-lived SSE connection plus a separate POST endpoint. Streamable HTTP arrived in March 2025 and supported protocol sessions. The July 2026 revision removed the persistent GET stream and protocol sessions, placed client information and capabilities in per-request metadata, and introduced server discovery. Older deployments and clients still exist, so migration often requires a dual-era compatibility plan rather than a flag-day replacement. [S027] [S038] [S131] [S127] [S135]

For a new remote server, implement the current behavior first and add older transport paths only for a measured compatibility need. If a platform tutorial still assumes Mcp-Session-Id, a permanent GET event stream, or the core initialize handshake, treat it as version-scoped material. The stateful-to-stateless migration guide explains that transition in detail.


stdio vs Streamable HTTP

The transport decision usually follows the deployment boundary, but it still deserves explicit review.

stdio is direct and narrow. The client controls process startup and shutdown, there is no network listener, and messages do not require HTTP framing. Logging must stay on standard error because standard output is the protocol channel. Backpressure, cancellation, crash recovery, and maximum message sizes still require testing. A local child process can hang, consume excessive memory, or emit malformed output just as a network service can fail. [S132]

Streamable HTTP uses common network infrastructure and works across machine boundaries. It supports a single JSON response for ordinary calls and request-scoped SSE for streaming. It introduces TLS, origin validation, endpoint reachability, HTTP timeouts, proxies, authentication, rate limiting, and observability concerns. Current clients should not assume a GET event stream or a protocol session identifier. [S131]

Transport does not change MCP's tools, resources, prompts, or Tasks semantics. A correctly implemented server can expose the same capability over more than one binding, but maintaining two modes is real product work: packaging, identity, configuration, lifecycle, error behavior, and test matrices differ. The official TypeScript SDK documentation recommends stdio for local spawned integrations and Streamable HTTP for remote servers; treat that as SDK implementation guidance, not as a rule that redefines “local” and “remote.” [S057] [S461]

Choose a custom transport only when both ends control it and there is a clear constraint the standards do not meet. Document framing, message boundaries, connection lifecycle, error mapping, and security assumptions. Calling an arbitrary JSON API “MCP” without compatible protocol messages and negotiation creates an integration that tools cannot safely reuse.


Security: different risks, not a safer-versus-unsafe ranking

Neither placement is categorically safer. Local reduces network exposure but increases installed-code and machine-authority risk. Remote centralizes code and policy but creates a reachable service, an identity plane, and a shared operational blast radius. The correct comparison is between specific trust boundaries.

Local security priorities

  • Verify who published the server and how updates are signed or pinned.
  • Restrict filesystem, process, network, and device access to what the capability needs.
  • Pass a minimal environment instead of every secret inherited by the host.
  • Require confirmation for consequential actions, but also enforce authorization inside the server and upstream system.
  • Treat project-level MCP configuration as executable configuration. A repository should not silently gain broad machine authority merely because it was opened.
  • If local HTTP is used, bind narrowly, validate origins, and protect the endpoint from unrelated local callers.

VS Code's documentation explicitly warns that local MCP servers can run arbitrary code and provides sandboxing on supported operating systems. That is the right mental model: adding a server is closer to installing a privileged extension than bookmarking a website. [S141] [S134]

Remote security priorities

  • Authenticate the client and the user where the use case requires identity.
  • Authorize every tool and resource against the intended tenant and object, not only against a broad connection grant.
  • Validate OAuth issuer, audience, redirect, resource, and client metadata; prevent confused-deputy and token-passthrough designs.
  • Isolate tenant data, caches, queues, logs, connection pools, and rate limits.
  • Apply HTTPS, origin checks, request limits, timeouts, and abuse controls before application logic.
  • Keep server credentials in a managed secret store and use workload identity when the platform supports it.
  • Make audit records useful without logging tokens, private prompts, or sensitive tool results.

MCP authorization for HTTP is optional at the protocol level because some servers expose public or otherwise protected capabilities. That does not make “no auth” a safe production default. Pick an identity design from the threat model. The current authorization model builds on protected-resource metadata, resource indicators, OAuth security practices, and explicit separation between the MCP resource server and the authorization server. [S133] [S191] [S006] [S005]

Prompt injection crosses both models

An untrusted document, web page, repository, or tool result can influence the model regardless of where the server runs. Local placement does not make data trustworthy; remote placement does not make the operator trustworthy. The host should preserve a clear boundary between instructions and data, display consequential actions, and avoid passing one server's output directly into another high-authority action without policy. The server must validate arguments and authorization even when a host says the user approved a call.

Secrets follow authority

Local servers often need a narrow user credential or access to an OS credential broker. Remote servers commonly need workload credentials plus a delegated user token. Avoid placing long-lived secrets in command arguments, repository configuration, source code, or broad environment snapshots. Do not forward a client's bearer token to an upstream API simply because both speak OAuth; audiences and resource boundaries exist to prevent that shortcut. Rotate credentials, redact telemetry, and define how revocation affects active work. [S133] [S134] [S485]


Performance, cost, and operating model

Local is not always faster, and remote is not always slower. A local subprocess removes a network hop, which matters for interactive IDE loops, device control, or high-frequency small calls. But local startup, cold runtime initialization, limited laptop resources, antivirus scanning, and a slow upstream API can dominate. A remote service adds network latency yet can keep warm connections, cache shared data, run near upstream systems, and use larger or specialized compute.

Measure the complete path: host scheduling, process or connection startup, serialization, network transit, queueing, server execution, upstream APIs, streamed first byte, total completion, retries, and rendering. Report p50 and tail latency from the regions and devices users actually have. A single localhost benchmark does not support a global performance claim.

Cost also moves rather than disappears. Local compute is paid through endpoint hardware and support time. Remote compute appears on an infrastructure bill, along with gateways, logging, egress, databases, security tooling, and on-call work. Local packaging creates per-device installation and version-drift cost; remote operation creates availability and incident-response cost. There is no universally cheaper model.

Table 4: Performance, cost, and operating model
Cost or operations dimension Local MCP Remote MCP What to measure Interpretation
Compute User/device CPU and memory Hosted compute, containers, functions or edge runtime CPU seconds, memory, concurrency No universal cheaper model
Installation support High per-device variability Low end-user install burden Support tickets, failed starts, environment mismatch Remote shifts burden to operator
Updates Repeated across devices One central rollout Update completion and version drift Central update has wider blast radius
Network Usually local IPC; upstream calls still cost network Client-server plus upstream network Requests, egress, region RTT Tool work often dominates transport cost
Identity OS/process mechanisms plus upstream credentials OAuth, IAM, token storage, key rotation Auth infrastructure and support Remote identity is a real product surface
Observability Per-host logs unless exported Central logs, traces and metrics Ingest volume and retention Central audit may justify cost
Availability No shared service SLO On-call, redundancy and dependency management SLO, incident hours, failover Remote users depend on service uptime
Compliance Endpoint control and local data residency Central controls, reviews, residency and tenancy Audit evidence and control coverage Local fleets can be harder to inventory
Packaging Binary/runtime bundles and OS compatibility Container/build pipeline Build variants and signing MCPB can reduce runtime prerequisites
Scaling More user machines naturally add capacity Operator pays for concurrency and headroom Peak RPS, p95 concurrency, cold starts Scale-to-zero may hurt interactive latency
Support lifecycle Old clients and packages remain in field Server can evolve centrally but must preserve client compatibility Versions in use and migration time Gateway translation can ease transitions

Choose an economic unit before comparing: active user, tool call, completed workflow, tenant, or protected resource. Include support tickets, failed installations, deployment failures, security review, and incident time. A remote service that costs more in compute can still be cheaper if it eliminates fragile per-device setup; a local tool can be cheaper and safer when it avoids moving large private data into a shared service.


Current host compatibility

“Supports MCP” is not enough information. Check the exact product surface, transport, authorization path, deployment origin, extension mode, and plan. The following snapshot reflects first-party documentation reviewed August 26, 2026; it is not an interoperability test.

Table 5: Current host compatibility
Host or client Local pattern Remote pattern Important current qualification
ChatGPT No direct local stdio connection Remote MCP; supported private/on-prem paths use Secure MCP Tunnel Treat plan, admin, connector, and write-action rules as live product state. [S140] [S261]
Claude Desktop and Claude web Desktop extensions can run local servers; the web surface does not launch a process on the user's machine Remote custom connectors work across documented supported surfaces Anthropic distinguishes machine-bound desktop extensions from shared remote connectors. [S258] [S463] [S145]
VS Code Local stdio is documented Remote HTTP is documented Local servers execute code; stdio sandboxing is documented for macOS and Linux, not Windows. [S141]
Cursor IDE Local and remote MCP are documented Remote MCP and OAuth are documented Test IDE and cloud-agent behavior separately. [S269]
Cursor Cloud Agents A stdio server can run inside the cloud VM HTTP is recommended Cloud agents do not support SSE or mcp-remote; stdio receives the VM environment. [S465]
Gemini CLI Command-based local server configuration httpUrl plus legacy SSE configuration are documented Trust defaults, OAuth fields, and exact configuration should be pinned and tested. [S144]
Zed Local servers are documented Remote servers and standard OAuth prompting are documented The package's uncertainty about remote support is stale; current Zed docs explicitly cover both. [S284]

This table deliberately avoids a universal “yes/no” badge. A host may support a transport in one product but not another, require a public endpoint in an API while accepting a private connector elsewhere, or run a local command inside a cloud VM rather than on the user's device. Use the dedicated MCP host compatibility page for the site's narrower dated matrix, and keep a product-specific acceptance test in your release process.


Hosting a remote MCP server

Remote MCP can run on ordinary container, function, VM, Kubernetes, or edge infrastructure as long as the platform can expose the required HTTP behavior and preserve the security model. The important questions are less glamorous than the provider logo:

  • Can requests stream when needed, and what are the proxy and execution timeouts?
  • Does scale-to-zero produce acceptable cold starts and retry behavior?
  • Where do state, task progress, and idempotency keys live?
  • How are user identity, workload identity, tenant context, and upstream authorization separated?
  • Can the service deploy gradually, roll back, trace a request, and redact sensitive data?
  • Which protocol revisions and legacy clients must it support?

Cloudflare's current MCP handler API supports a stateless server shape aligned with modern independent-request processing; McpAgent is deprecated and feature-frozen, and the migration guide separates the paths. Azure documents multiple service choices rather than one universal MCP product; its platform-managed Container Apps Dynamic Sessions MCP path remains preview and version-scoped separately from a custom application. AWS AgentCore Gateway documents current and legacy MCP protocol-version support. Google-managed remote MCP endpoints currently advertise MCP 2025-11-25, so do not assume that every managed endpoint implements the site's 2026-07-28 editorial baseline. Product release notes can change independently of the MCP specification. [S467] [S489] [S490] [S491] [S493] [S492] [S476] [S494] [S486] [S495]

Serverless and edge platforms are attractive when requests are short, stateless processing is natural, and global ingress matters. They are less attractive when work requires long execution, local disks, specialized networking, stable in-memory affinity, or dependencies that do not fit the runtime. A queue, workflow engine, database, or explicit task handle may be the right companion; pretending the state does not exist is not.

Registry discovery is not hosting

The official MCP Registry is a metadata repository and remains preview. It helps consumers discover server metadata; it does not host the server's code or make a package trustworthy. Registry metadata, source repository, package artifact, deployment endpoint, publisher identity, and runtime operator are separate objects that should be verified separately. [S067] [S496]


Hybrid local and remote architectures

A hybrid architecture is often the most honest design. One host can use a local server for files or an IDE and a remote server for GitHub, CRM, cloud infrastructure, or an enterprise knowledge service. Each server gets only the authority appropriate to its boundary, and each can use the transport that fits.

Table 6: Hybrid local and remote architectures
Hybrid pattern Conceptual flow Why use it Principal risk to manage
Developer workstation hybrid Host → stdio Git/filesystem; Host → HTTPS GitHub/SaaS Keep machine access local while sharing cloud integrations Cross-server prompt injection and inconsistent approval/audit
Private enterprise bridge Cloud host → secure tunnel → private MCP server → internal system Avoid public inbound exposure while allowing cloud assistants Tunnel becomes critical infrastructure; prevent bypass
Enterprise gateway plus local tools Host → gateway → approved remote servers; Host → managed local bundle Centralize shared services without giving gateway local-machine power Two control planes and fragmented trace correlation
Remote orchestration with local agent Remote MCP service → user-authorized local bridge → desktop/hardware Remote workflow needs device capability Authority amplification and exfiltration
Vendor remote plus local cache Host → managed remote server; local component stores offline/cache Reduce repeated data transfer or support offline views Stale data, cache tenant mix-up and local leakage

Hybrid does not mean one enormous server that proxies everything. That design can collapse two trust zones into one high-authority component. Prefer independently permissioned servers and make cross-server data flow visible. If a remote planning service asks a local server to modify a file, the host should preserve user intent, show the target, and keep the local server's validation in the path.

Enterprise gateways can centralize approved remote endpoints, protocol-version handling, policy, and audit. They do not automatically solve local package trust, end-user consent, upstream authorization, or semantic prompt injection. A tunnel makes a private HTTP server reachable without a public inbound port; it does not make an insecure server safe or eliminate the need for MCP-layer authorization. [S134] [S485]


Failure domains and reliability

Placement changes who fails together. A local crash usually affects one user and may be recoverable by restarting the subprocess. A remote release, identity outage, overloaded database, or bad policy can affect every connected user. Hybrid systems can degrade partially, but they also create more paths to diagnose.

Table 7: Failure domains and reliability
Failure Local impact Remote impact Hybrid impact Practical mitigation
Server crash One host loses server; host may restart Replica replacement or whole service outage Local and remote parts fail independently Retries, idempotency, health checks, explicit task state
Laptop offline Local capability unavailable to that user Remote remains available from other devices Remote side remains; local bridge unavailable Clear degraded-mode UI and queued work only where safe
Identity provider outage Upstream OAuth calls may fail New/refresh auth and protected calls may fail broadly Remote portion affected Token lifetime strategy, fail-closed policy, status communication
Bad package update Affected installed endpoints, possibly staggered Operator deployment affects shared fleet immediately Local/remote blast radii differ Signed releases, staged rings, canary and rollback
Gateway outage No effect unless used All routed servers may become unreachable Local direct tools may remain Redundancy, bypass policy designed in advance, health visibility
Network partition Upstream calls may fail; pure local still works Client cannot reach service Local continues, remote fails Timeouts, circuit breakers and explicit offline boundaries
Credential leak Usually one device/user unless shared token Potential many users/tenants depending secret Depends which credential leaks Short-lived scoped credentials, rotation, audience binding
Tenant isolation bug Rare but possible on shared workstation Potential cross-customer incident Remote side dominant Server-side tenant checks, cacheScope, independent tests

Define success and failure at the workflow level. An HTTP 200 response does not mean a downstream action completed, and a restarted local process does not mean a partially applied change was rolled back. Use operation IDs, idempotency where appropriate, explicit task state for long work, bounded retries, cancellation, health checks, and human-readable failure messages. Test unavailable networks, revoked tokens, stale metadata, duplicate delivery, process crashes, timeouts, and partial upstream failures.

Observability should preserve the path without preserving secrets. Correlate host request, MCP method, server operation, upstream request, tenant, and deployment version. Record latency and outcome categories. Redact authorization headers, credentials, private resource contents, and sensitive tool results. For local deployments, give users useful logs without turning standard output into a mixed protocol-and-log stream.


Deployment decision framework

Nine-question decision tree for choosing local, remote, or hybrid MCP.
Start with required authority, then test reachability, installation, governance, latency, and failure boundaries. MCP 2026-07-28 · analytical deployment guidance

Run the questions in order. The first three establish where the capability can physically and safely operate. The remaining questions test whether the operational default should change or split. These are engineering heuristics, not MCP conformance requirements.

Table 8: Deployment decision framework
Order Decision question If yes If no Why it matters
1 Must the capability read files, control desktop software, access localhost or use attached hardware? Prefer local stdio or a managed local bundle. Continue. Machine-bound authority is difficult and risky to proxy remotely.
2 Is the upstream system a cloud API used by many users or devices? Prefer a remote Streamable HTTP service. Continue. One deployment and delegated auth usually beat per-device packaging.
3 Must a web/cloud-only host such as ChatGPT connect directly? Use remote HTTP or a secure tunnel/private endpoint supported by the host. Local remains possible. Cloud hosts cannot spawn a process on the user machine.
4 Does the organization require central audit, allowlists, rate limits and credential policy? Use a remote server or gateway, possibly combined with managed local packages. Continue. These controls are easier at a shared ingress.
5 Is offline operation or strict on-device data handling required? Prefer local, with OS sandbox and explicit data boundaries. Continue. Remote service availability and data transfer conflict with this constraint.
6 Can users safely install and update code on every endpoint? Local may be acceptable. Prefer remote. Installation support and supply-chain review are real lifecycle costs.
7 Is the capability multi-tenant? Use a remote architecture with explicit tenant identity, cache scope and object authorization. Single-tenant remote or local may suffice. Multi-tenancy belongs in the application and authorization design.
8 Does the operation require low-latency local interaction or large local data transfer? Local or split-plane hybrid. Remote network overhead may be acceptable. Measure total operation time, not transport folklore.
9 Does a remote workflow also need machine-bound tools? Use both; do not force every capability behind one server. Choose the simpler single model. Hybrid hosts are a normal MCP composition pattern.

Choose local when

  • the capability must directly reach selected files, desktop software, localhost services, or attached devices;
  • keeping sensitive data on the machine is a real enforced boundary, not just a slogan;
  • offline operation or a hard local latency loop matters;
  • the audience can safely install, update, and remove the server; and
  • a per-user failure domain is preferable to a shared service.

Choose remote when

  • the capability fronts a cloud API or shared data source used by many people or devices;
  • a cloud-only host must connect;
  • one centrally controlled version, tenant policy, SSO, audit, and incident response are valuable;
  • the service owner can operate HTTPS, identity, isolation, capacity, and monitoring; and
  • users should not install a runtime or grant a package local-machine authority.

Choose both when

  • a workflow genuinely spans machine-bound and cloud authority;
  • private systems need a narrowly controlled bridge to a supported cloud host;
  • developers need local repository tools and shared enterprise services; or
  • central governance should cover remote services while managed local packages retain endpoint-only access.

Do not use hybrid merely to avoid making a decision. Every extra server creates another identity, failure, version, approval, and observability path. Split only where the trust or operating boundary is real.


After you choose: connect the decision to an implementation

A location decision is complete only when the selected host can use the matching transport and someone owns the resulting operational boundary.

Table 9: After you choose: connect the decision to an implementation
Decision Configure next Verify before use
Local subprocess Confirm the host's documented local connection path, pin the executable, restrict its environment and working directory, and keep logs on stderr. The exact host compatibility row, one discovery/list call, one read-only operation, clean shutdown, and restart behavior.
Remote service Configure an authenticated Streamable HTTP endpoint with origin validation, tenant-aware authorization, timeouts, and useful errors. The current transport contract, token audience, one denied request, cancellation, and failure through the real proxy path.
Hybrid Keep machine-bound and shared-service capabilities in separately permissioned servers. Add a bridge only when the host cannot connect to the required boundary directly. Which data may cross, which component initiates each action, and the directional bridge acceptance test.

If the host, connection path, or authority owner is still unknown, return to the host, client, and server roles rather than adding another deployment layer.


Migration paths

Local to remote

Inventory every authority the local process currently receives: files, environment variables, OS identity, upstream tokens, binaries, localhost endpoints, and user prompts. Replace implicit machine identity with an explicit remote identity model. Move secrets to managed storage, define tenant isolation, add HTTPS and origin controls, design retries and idempotency, and decide how users authorize the new service. Keep the tool contract stable where possible, but do not preserve unsafe implicit permissions for compatibility.

Test the new network path from every intended host. Measure cold start and tail latency, confirm streaming and proxy timeouts, and make a rollback plan. If a capability still requires local files or devices, extract that part into a narrow local server rather than tunneling broad machine access into the remote service.

Remote to local

Remote-to-local migration is usually motivated by privacy, offline use, latency, customer-controlled infrastructure, or direct machine integration. The hard work is distribution: package the runtime and dependencies, define trusted update and rollback channels, minimize requested permissions, select a secret store, and support multiple operating systems. Replace shared server state with local or explicitly synchronized state. Ensure the host can show which executable runs and which directories it may access.

Session-era remote to current MCP

Remove assumptions that a protocol session lives on one replica. Replace Mcp-Session-Id and the long-lived GET stream with independent POST processing and request-scoped streaming. Move capabilities and client information to current metadata, implement server discovery, and put application state behind explicit handles or durable systems. Run modern and legacy acceptance tests separately; do not claim current compatibility because one handshake-era client still connects. [S131] [S055] [S127] [S135]

Migration is complete only when identity, authorization, observability, documentation, client configuration, and incident procedures match the new boundary. Moving code without moving those responsibilities creates a deployment that looks modern but behaves like the old one in failure and security.


Common myths

“Local means private.” Not necessarily. A local process may transmit files or telemetry to cloud services, and it may inherit more credentials than a narrow remote service. Privacy is an end-to-end data-flow property.

“Remote means public.” No. A remote service can be private, single-tenant, network-restricted, or reached through a supported tunnel. Reachability and placement are different dimensions.

“Local equals stdio; remote equals HTTP.” Those are strong defaults, not definitions. Local HTTP and cloud-VM stdio both exist. [S057] [S465]

“OAuth makes a remote server secure.” OAuth can establish delegated access, but secure deployment also requires correct audience and resource validation, authorization, tenant isolation, safe redirects, secret handling, abuse controls, and protected upstream actions. [S133] [S191]

“Stateless MCP cannot do long-running work.” Stateless protocol processing can return explicit task or operation handles backed by durable state. It removes hidden protocol-session affinity; it does not ban application state.

“The Registry hosts and certifies servers.” It is a preview metadata repository, not an artifact host or blanket security certification. Verify the publisher, source, artifact, endpoint, and operator independently. [S067] [S496]

“Remote is always easier.” It is easier for installation and central updates; it is harder for availability, identity, tenant isolation, capacity, and incident response.

“Local is always faster and cheaper.” Only measurement can establish that. Local removes a network hop but can pay startup and endpoint-support costs; remote adds network and infrastructure cost but can share caches, compute, operations, and updates.


Frequently asked questions

What is a local MCP server?

An MCP server whose code runs on or near the host environment, commonly as a client-launched stdio subprocess. Its defining trait is deployment location and machine authority, not the transport alone. Local placement does not keep all data on the computer when the server, host, model, or another dependency calls a remote service. S121 S057 S132 S131 S133 S055 S134

What is a remote MCP server?

An independently deployed, network-accessible MCP service. Current remote implementations normally use Streamable HTTP, but they may be private, single-tenant, or protected by a gateway. S121 S057 S132 S131 S133 S055 S134

What is the main difference between local and remote MCP?

The main difference is where code and authority run. Local places them near the user machine; remote places them in an operated network service. S121 S057 S132 S131 S133 S055 S134

Does every local MCP server use stdio?

No. stdio is a common local pattern, but a local server can expose HTTP. Location and transport are separate choices. S121 S057 S132 S131 S133 S055 S134

Which is safer: local or remote MCP?

Neither is universally safer. Local emphasizes package trust and least machine privilege; remote emphasizes identity, authorization, tenant isolation, network security, and shared-service operations. S121 S057 S132 S131 S133 S055 S134

Which is faster?

Local often removes a network hop, while remote can run near upstream systems and reuse warm shared infrastructure. Measure the complete workflow and tail latency. S121 S057 S132 S131 S133 S055 S134

Which is cheaper?

There is no universal answer. Local shifts cost to endpoint compute, installation, and support; remote shifts it to hosting, security, observability, and on-call operations. S121 S057 S132 S131 S133 S055 S134

Can a remote MCP server be private?

Yes. It can live behind a private network, gateway, identity-aware proxy, or supported tunnel. Remote describes placement, not public exposure. S121 S057 S132 S131 S133 S055 S134

Can a remote server directly read files on my laptop?

Not merely because it speaks MCP. The architecture needs an explicitly authorized path to those files, such as an upload, a local component, or a supported connection arrangement. S121 S057 S132 S131 S133 S055 S134

Does every remote MCP server require OAuth?

No. MCP's HTTP authorization framework is optional. A protected deployment still needs appropriate access controls, and implementations using the MCP authorization profile must follow its requirements. S121 S057 S132 S131 S133 S055 S134

What changed for remote MCP in 2026?

MCP 2026-07-28 removed protocol sessions and the persistent GET stream. Current Streamable HTTP processes independent POST requests and uses request-scoped SSE when streaming is needed. S121 S057 S132 S131 S133 S055 S134

When should I use both local and remote MCP?

Use both when one workflow genuinely needs machine-bound authority and a centrally operated cloud capability. Keep the servers separately permissioned and make cross-boundary actions visible. S121 S057 S132 S131 S133 S055 S134


After you choose: configure the matching path

Once you know where the server will run, check that your host can connect to it. These guides cover product support and configuration:

Table 10: After you choose: configure the matching path
Setup question Guide What to check
Does the selected product document this connection path and capability? MCP host compatibility The exact product surface, plan, local or remote path, and capability are documented or tested.
Which wire binding and protocol era must the endpoints share? MCP transports Both sides agree on stdio or a specific Streamable HTTP revision; any fallback is explicit.
Does a local-only host need a remote server, or must a local process be exposed remotely? The bridge recipe The bridge direction, identity boundary, failure behavior, and acceptance test are recorded.
What should the server expose once connected? Tools, resources, and prompts Every capability has one interaction model and appropriate authorization.

If a required host path is undocumented, stop and test it; do not convert a deployment preference into a compatibility claim.


Check the design before connecting

Use the role comparison to identify who controls the model, connection, and operation. Then check the protocol-version guide and the security guide for the deployment you actually intend to use.


Methodology, archive integrity, and downloads

The deployment comparison draws on MCP specifications and first-party product documentation. Product support, plans and hosting features reflect the dates shown in the article. Downloaded research files include a provenance manifest describing source-ID conflicts and differences between the original datasets.

Sources (39)
  1. S121 — Architecture 2026-07-28
  2. S057 — Transports overview 2026-07-28
  3. S132 — stdio transport
  4. S131 — Streamable HTTP
  5. S133 — Authorization
  6. S055 — Key changes 2026-07-28
  7. S127 — MCP Server Discovery
  8. S135 — Deprecated Features
  9. S134 — Security Best Practices
  10. S461 — MCP TypeScript SDK — Server
  11. S027 — Transports 2024-11-05
  12. S038 — Streamable HTTP 2025-03-26
  13. S258 — When to use desktop and web connectors
  14. S463 — Get Started with Local MCP Servers in Claude Desktop
  15. S145 — Get started with custom connectors using remote MCP
  16. S464 — Deploying Enterprise-Grade MCP Servers with Desktop Extensions
  17. S140 — Developer mode and MCP apps in ChatGPT
  18. S261 — Secure MCP Tunnel
  19. S141 — Add and manage MCP servers in VS Code
  20. S269 — Cursor Model Context Protocol documentation
  21. S465 — Cloud Agent Capabilities
  22. S144 — MCP servers with Gemini CLI
  23. S284 — Model Context Protocol in Zed
  24. S467 — Model Context Protocol
  25. S489 — MCP handler API
  26. S490 — MCP agent API
  27. S491 — Migrate to MCP SDK v2
  28. S485 — Securing MCP Servers
  29. S493 — Choose an Azure service to host an MCP server
  30. S492 — Host MCP servers on Azure Container Apps
  31. S476 — Use an MCP server with Amazon Bedrock AgentCore Gateway
  32. S494 — Use the Compute Engine MCP server
  33. S486 — Google Cloud Remote MCP Servers Overview
  34. S495 — Google Cloud remote MCP servers release notes
  35. S067 — The MCP Registry: About
  36. S496 — MCP Registry quickstart
  37. S191 — Best Current Practice for OAuth 2.0 Security
  38. S006 — RFC 9728: OAuth 2.0 Protected Resource Metadata
  39. S005 — RFC 8707: Resource Indicators for OAuth 2.0

See the source library and editorial policy for references and review dates.

Sources39 cited primary or authoritative sources
Last reviewedAugust 26, 2026
How we research