Skip to content

SOP-006: Configuring MCP Transports

Fresh

Source: MCP Advanced Topics

Document Control

FieldValue
SOP IDSOP-006
Version1.0
StatusActive
Last Updated2024-12

Overview

Configure MCP transports for local (STDIO) and remote (HTTP) deployments.

Transport Types

TransportBest ForProsCons
STDIOLocal development, Desktop apps, CLI toolsSimple, No network, FastSame machine only
HTTPProduction, Multi-user, Remote accessScalable, Stateless option, Cloud-readyNetwork latency, More complex

STDIO Transport Setup

python
# server_stdio.py
from mcp.server import Server
from mcp.server.stdio import stdio_server

server = Server("stdio-server")

# ... define tools ...

async def main():
    async with stdio_server() as (read, write):
        await server.run(read, write)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

Client Configuration:

json
{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["server_stdio.py"]
    }
  }
}

HTTP Transport Setup

python
# server_http.py
from mcp.server import Server
from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette
from starlette.routing import Route

server = Server("http-server")

# ... define tools ...

# Create SSE transport
sse = SseServerTransport("/messages")

async def handle_sse(request):
    async with sse.connect_sse(
        request.scope,
        request.receive,
        request._send
    ) as streams:
        await server.run(
            streams[0],
            streams[1],
            server.create_initialization_options()
        )

app = Starlette(
    routes=[
        Route("/sse", handle_sse),
        Route("/messages", sse.handle_post_message, methods=["POST"])
    ]
)

# Run with: uvicorn server_http:app

Decision Flow: Which Transport?

HTTP Transport Modes

ModeFeaturesGood For
StatefulMaintains session between requests, Supports all MCP featuresInteractive apps, Long-running sessions
StatelessNo session state, Limited features (no sampling, notifications)Serverless, High-scale, Simple tools

Verification Checklist

  • [ ] Transport type selected for use case
  • [ ] Server starts without errors
  • [ ] Client connects successfully
  • [ ] Message exchange works
  • [ ] Proper cleanup on disconnect

Troubleshooting

IssueSolution
Connection timeoutCheck firewall/ports
Protocol errorVerify JSON-RPC format
State lostUse stateful mode if needed
Memory leakEnsure proper cleanup

See Also

Based on Anthropic Academy courses