# Tool

> Five paths the server opens on a tool container: the four MCP exchanges into the container’s own MCP server, answered with exactly one message each, and its notifications as they occur.

Canonical: https://provider.diverge.network/2.3.0/proxy/tool/
Specification revision: 2.3.0

Five paths carry the MCP exchanges of the server into the MCP server
of a tool container. The server opens each path; the proxy answers.

| Path | The server sends | The proxy sends |
|------|------------------|-----------------|
| [`/tool/list-tools`](/2.3.0/proxy/tool/list-tools/) | the params | exactly one response frame |
| [`/tool/list-resources`](/2.3.0/proxy/tool/list-resources/) | the params | exactly one response frame |
| [`/tool/call-tool`](/2.3.0/proxy/tool/call-tool/) | the params | exactly one response frame |
| [`/tool/read-resource`](/2.3.0/proxy/tool/read-resource/) | the params | exactly one response frame |
| [`/tool/notifications`](/2.3.0/proxy/tool/notifications/) | nothing | one message per notification, for the life of the path |

- **The first binary message is the params**, on every path that has
  one, as JSON read as [Notation](/2.3.0/endpoints/#notation) provides. The
  types named from `rmcp::model` are those of the Model Context
  Protocol, incorporated by reference.
- **Every exchange is answered.** Params that do not parse are
  answered with an error whose code is invalid params. A container
  whose MCP server cannot be reached is answered with an error whose
  code is internal error. An error the MCP server of the container
  itself returned is sent as that error, with its code.
- **On a tool container only.** The server opens these paths only on
  a container whose entrypoint is an MCP server.
- **No repetition.** An exchange whose path ended abruptly has
  failed. No party retries it.
