Use HTTP request for simple, discrete tool calls where the AI sends one prompt and gets one response, such as a lookup or status check. Use Server-Sent Events when the workflow benefits from a persistent connection and real-time updates. SSE is better for long-running, multi-step tasks because it lets the server push progress, partial results, and completion events without reopening the conversation.
Choosing the Transport Based on the Work, Not the Hype
For MCP tool communication, the transport should follow the interaction pattern of the tool, not the novelty of the protocol. HTTP request is the clean fit for one-and-done calls where the client submits a discrete request and waits for a single outcome. Server-Sent Events is the better fit when the tool execution is long-lived, stateful, or benefits from streamed progress, because it preserves the session while the server emits updates as the task advances.
That distinction matters because transport choice shapes usability, latency, retry behaviour, and operational visibility. A request/response model is easier to reason about, but it can force awkward polling or repeated reconnects when the workflow naturally unfolds over time. SSE reduces that friction, yet it also creates a persistent channel that security teams need to treat as an always-on communication path rather than a trivial implementation detail. In practice, many teams only notice the transport mismatch after a tool starts timing out, stalling, or leaking progress events into the wrong operational path.
When teams are evaluating MCP, the right question is usually whether the tool is transactional or conversational in the protocol sense. If the result is expected immediately and nothing useful happens in between, HTTP request usually keeps the design simpler. If intermediate state matters, or if users and downstream systems need to observe progress without reopening the exchange, SSE is usually the more natural model.
How It Works in Practice
HTTP request works best for short, bounded operations such as status lookups, single-record retrieval, or commands that complete before the client needs another update. It keeps the interaction stateless at the transport layer, which makes retries, load balancing, and logging easier to manage. That also means the client normally owns the timing model: send the request, wait, and handle the final response or failure.
SSE changes that pattern by keeping a connection open and allowing the server to push events as work progresses. This is useful when the tool may emit partial results, checkpoints, warnings, or a final completion signal. For MCP, that matters when the calling workflow is not really a single action but a sequence that benefits from observable milestones. Teams can use this model to avoid inventing their own polling layer just to simulate progress updates.
The main operational trade-off is complexity. Persistent connections can improve user experience and reduce repeated handshake overhead, but they also require closer attention to timeout handling, backpressure, reconnect logic, and event ordering. If the tool can fail partway through, teams should decide whether the client can resume from the last event or must restart from scratch. For reliable implementations, it helps to separate the transport choice from the application logic: the transport should carry the workflow, not define the workflow itself.
- Use HTTP request when the tool output is discrete, idempotent, and easy to retry.
- Use SSE when progress visibility, partial completion, or long-running execution is part of the user experience.
- Design explicit timeout and reconnect behaviour before exposing the tool to production clients.
- Log event boundaries and final completion states so operators can distinguish a slow task from a broken one.
If the environment has aggressive proxies, short idle timeouts, or uneven support for long-lived connections, SSE can become brittle even when it is the cleaner semantic fit.
Where the Transport Choice Becomes a Security and Governance Decision
The transport is not just an engineering preference, because it affects how much trust the tool channel carries over time. A short-lived HTTP exchange limits exposure by narrowing the window in which a request, token, or response remains active. SSE extends that window, which can be appropriate for long-running work but also increases the importance of session integrity, connection monitoring, and event hygiene. For MCP deployments, that matters because the channel often sits close to credentials, prompts, or operational data that should not linger longer than necessary.
At scale, persistent channels also make misuse easier to hide inside normal-looking event streams. The State of MCP Server Security 2025 notes that 53% of mcp server expose credentials through hard-coded values in configuration files, which is a reminder that transport decisions sit inside a broader control environment where secrets handling and access scoping are already fragile. If the transport is long-lived, weak surrounding controls become more consequential.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 address the attack and risk surface, while CIS Controls v8 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| CIS Controls v8 | 6 — Access Control Management | Transport choice affects channel exposure and session access scope. |
| Recommendation — Restrict MCP tool access and session reach to the minimum needed for each workflow. | ||
| NIST CSF 2.0 | PR.AC-4 — Access Permissions Management | MCP transport selection changes how permissions are enforced over active sessions. |
| PR.DS-2 — Data-in-Transit | SSE and HTTP both carry sensitive tool data that must be protected in transit. | |
| DE.CM-1 — Monitoring and Analysis | Persistent SSE channels need monitoring to detect abnormal tool traffic or misuse. | |
| Recommendation — Apply least-privilege access rules to each MCP tool channel and session. Protect MCP traffic in transit and verify endpoint-to-endpoint encryption. Monitor MCP sessions for unusual duration, volume, and event patterns. | ||
| OWASP Non-Human Identity Top 10 | NHI-08 — Secrets and Token Exposure | MCP tool transport often carries credentials or bearer tokens that can be exposed. |
| Recommendation — Minimise credential exposure in MCP requests and rotate any secret tied to tool access. | ||
Practitioner Guidance
What to prioritise: Match the transport to the failure mode you can tolerate. If the main concern is correctness and simple recovery, prefer HTTP request. If the main concern is keeping users informed during long-running work, prefer SSE, but only when the platform can support persistent connections reliably.
What to verify: Confirm that the tool’s response pattern is genuinely single-shot before choosing HTTP request, and confirm that the server can maintain event ordering, heartbeat behaviour, and reconnect handling before choosing SSE. If either assumption is weak, treat the design as unfinished rather than “good enough.”
Common mistake: Teams often choose SSE for anything that feels “more advanced,” then discover they have created unnecessary operational complexity for a tool that only ever needed one final response. The opposite mistake is using HTTP request for a workflow that needs progress visibility, then bolting on polling later to compensate.
What good looks like: The chosen transport should make the tool easier to operate, easier to observe, and easier to recover. If engineers need extra orchestration just to make the protocol behave, the transport choice is probably wrong for that use case.
Practitioner takeaway: The best choice is the one that keeps the communication pattern honest: discrete work should stay discrete, and long-running work should remain observable without turning transport mechanics into a separate system to manage.
Related resources from NHI Mgmt Group
- How should security teams choose between CLI and MCP for AI tool access?
- How should security teams govern MCP agents that can switch between tool calls and generated code?
- How should teams choose between an AD management tool and an AD security tool?
- How should security teams choose between a scan-based AD tool and continuous monitoring?