I am trying to understand the low-level communication between an MCP client/orchestrator and an MCP server.
Suppose I have a backend server that acts as an orchestrator. It communicates with an LLM, and I also want it to connect to an external MCP server that provides tools.
I understand that MCP allows the client to discover tool names, descriptions, and input schemas. What I am trying to understand is how my backend actually obtains this information at the network level.
For example, without MCP, I might design a simple HTTP API like:
GET /tools
and the external server could respond with JSON containing the available tools and their schemas.
Is MCP doing something conceptually similar? For example, does the MCP client send a request over HTTP (for an HTTP-based MCP transport), using an MCP-defined operation such as tools/list, and receive a structured response containing the tool definitions?
I understand that MCP itself is a protocol rather than a REST API. My question is specifically about the underlying communication: when an MCP client communicates with an MCP server over HTTP, isn't this ultimately still a request/response exchange over HTTP, with MCP defining the format and semantics of the messages?
I would appreciate an explanation at the low/network level, without relying on the MCP SDK abstractions.