MCP vs plain HTTP for connecting an agent to data
Use MCP when the agent should discover what a source offers and keep calling it across a session. Use plain HTTP when the agent already knows the URL and needs one answer. MCP buys discovery, typed arguments and a stateful connection; HTTP costs nothing to adopt and works from any client that can make a request.
/mcp. Nothing here needs an API key or a signup.
The two are not rivals at the transport layer, since MCP's own Streamable HTTP transport is HTTP. The real question is whether you want a described interface the model can browse, or a URL the model can call.
What MCP adds on top of a request
MCP is an open protocol that encodes messages as JSON-RPC 2.0 over stateful connections with capability negotiation at startup. A server exposes three kinds of thing: tools the model can execute, resources that carry context, and prompts that template a workflow. Clients can offer sampling, roots and elicitation back to the server.
Practically, that means the model reads a typed list of what is available before it calls anything. With plain HTTP, whatever the model knows about your API came from its training data, your documentation, or a URL somebody pasted into the prompt.
| MCP | Plain HTTP | |
|---|---|---|
| Discovery | Server lists its tools and their schemas | None, the client must already know |
| Argument validation | Typed schema per tool | Whatever your API returns on a bad request |
| Connection | Stateful, session negotiated at init | Stateless, one request |
| Client support | MCP-aware hosts only | Every HTTP client in existence |
| Setup cost for the caller | Install or configure a server | Zero |
| Cost per extra tool | Tokens in the context window on every turn | Zero until called |
The tool budget is the real constraint
Every tool an MCP server exposes occupies context in the model's window for the whole session, whether or not it gets used. Connect six servers with twenty tools each and a meaningful share of the context is a menu the model reads on every turn.
Plain HTTP has the opposite failure mode. It costs nothing until the model needs it, and the model may never work out that it should. A URL the agent does not know about is a URL the agent does not call.
This is why the choice usually resolves by frequency rather than preference:
- Recurring, multi-step work against the same source favours MCP. The
discovery cost is paid once and amortised over the session.
- One lookup mid-task favours HTTP. A single call beats installing anything.
- Data an agent finds at runtime, on a source it has never used, can only be
HTTP. There is no configuration step available to an agent mid-task.
Latency, transports and where the difference goes
MCP defines two standard transports. stdio launches the server as a subprocess and exchanges newline-delimited JSON-RPC over standard input and output, which is fast and local. Streamable HTTP uses POST and GET against a single endpoint, optionally streaming responses as server-sent events, with an MCP-Session-Id header carrying the session and an MCP-Protocol-Version header on every subsequent request.
Under stdio there is no network hop, so overhead is small. Under Streamable HTTP the wire cost is the same as calling the API directly plus one initialisation round trip per session. Neither is slow. The cost of MCP is context, not milliseconds.
One security note worth carrying over: the specification requires servers using Streamable HTTP to validate the Origin header and recommends binding to localhost when running locally, because otherwise a remote page can reach a local MCP server through DNS rebinding.
Payment changes the calculation
An agent-facing data source has a third consideration that neither protocol solves on its own: how the caller pays. MCP has no payment layer, and plain HTTP has status 402.
That is why this service ships both paths. Every wire is a plain URL that returns an x402 payment offer on first call, and the same wires are exposed through a remote MCP server at /mcp plus npx botwire-mcp for local stdio. An agent that already speaks MCP gets discovery across all 58 wires; an agent that found a route mid-task calls the URL and pays $0.005 to $0.01 per call.
# plain HTTP: one call, free preview, no client library curl "https://thebotwire.com/cve/preview?q=openssl" # plain HTTP paid: 402 offer on the first call, retry with the payment header curl -i "https://thebotwire.com/contracts/latest?since=14d" # MCP over local stdio: discovery across every wire npx botwire-mcp
The setup for a stdio server in a desktop client is covered in the MCP server connection guide, and the older question of whether to consume feeds directly instead is in RSS versus a data API for agents.
FAQ
Is MCP faster than calling an API directly?
No. MCP is a protocol layer, and over Streamable HTTP it makes the same network call plus a session initialisation. Over stdio it avoids the network entirely for local servers. Choose it for discovery and typed arguments, not for latency.
Do I need an MCP server to let an agent use my API?
No. Any agent that can make an HTTP request can use a plain URL, and that covers callers you have never met. An MCP server helps the subset of clients that speak MCP find your tools without being told about them.
Can one data source offer both?
Yes, and for an agent-facing service it is the sensible shape. The MCP server becomes a thin wrapper over the same routes, so the underlying API stays usable by anything that can send a GET while MCP clients get a described interface.
What happened to the HTTP+SSE transport?
Streamable HTTP replaced it in protocol version 2025-03-26. Servers wanting to support older clients can host both the old SSE and POST endpoints alongside the new single MCP endpoint, and clients can detect which transport a server speaks by attempting an initialisation POST first.
Sources
Protocol structure, JSON-RPC message format and server features are defined in the Model Context Protocol specification, with transport behaviour, session headers and the Origin validation requirement in the transports section. Live wire count, pricing and poll cadence for this service are at thebotwire.com/health.
Related: How do I connect an MCP server to Claude Desktop? · RSS vs a data API for real-time agent data