MCP Host Canary

Tool-count boundary diagnostic

Can your MCP host reach sentinel_257 in a 258-tool manifest?

The MCP specification does not publish one universal numeric tool-count cap. It defines how clients list and call tools, while a host can still cache, filter, select, or present that manifest in its own way. Measure the server response and the callback separately instead of treating a product-specific number as a protocol limit.

Canary’s limits profile combines two fixed boundaries: sentinel_257 is tool 257 after 256 numbered canaries, and schema_boundary_16385 is tool 258 with a 16,385-byte ASCII description. A missing callback cannot isolate tool count from description size or host behavior.

A 258-tool tools/list.response proves that Canary produced 258 tool definitions for that request. Only tools/call.executed for sentinel_257 proves that the registered boundary callback ran at Canary. Neither event is a universal compatibility score.

Separate four different “tool limits”

Boundary What Canary can establish What remains unknown
Server advertises 258 tools The fixed limits fixture contains 258 ordered definitions. Whether a request reached the fixture.
tools/list.response reports 258 Canary successfully produced that manifest for the requesting client. What the host cached, exposed, or gave to a model.
Host makes a call request tools/call.request records that a named call reached Canary. Why the host selected the tool or whether its callback ran.
sentinel_257 callback executes tools/call.executed proves that the registered ordering-sentinel callback ran. Whether another server, conversation, or host version behaves the same way.

The current MCP tools specification requires servers with the tools capability to answer tools/list, recommends deterministic ordering, and defines pagination and caching. It does not assign one numeric maximum to every host. “No universal number in the specification” also does not mean every implementation is unlimited.

Run the fixed limits fixture

  1. Verify a fresh baseline run first, so ordinary listing and callback dispatch are known.
  2. Create a separate limits run and connect only its new disposable URL to the host.
  3. Use a fresh conversation and disable unrelated connectors where the host allows it.
  4. Send this prompt exactly once:
Call sentinel_257 exactly once and return only its tool result.

Wait for the host response, then inspect the last observed stage, listed-tool count, called-tool field, and callback count. Use a new run to keep server-side event counts separate. That does not make repeated host trials statistically independent.

Interpret the receipt without inventing a cutoff

Receipt outcome Supported conclusion Do not conclude
No recognized MCP traffic The disposable server did not observe a recognized request. That tool count caused the connection failure.
tools/list.response: 258 Canary returned the complete fixed manifest for that request. That all 258 tools were available to the model.
tools/call.request only A call reached Canary but registered callback execution was not observed. That the failure happened at the earlier manifest boundary.
tools/call.executed: sentinel_257 This run reached and executed the designated position-257 sentinel callback. That the host has no tool limit, or that every 258-tool server is compatible.

If the manifest was returned but no call followed, use the manifest-to-dispatch guide. If a call arrived without callback execution, investigate the narrower request-to-callback segment instead.

Retest the host, not a remembered snapshot

Connection setup and product behavior can change. Follow the current official setup and testing documentation for ChatGPT, Claude, or Cursor, and record the product surface and date with your finalized receipt. A result from one surface or date should not be generalized to another.

Know what this fixture does not measure

The temporary /mcp/:id URL is a capability: anyone holding it can send traffic to that run. Finalize before sharing. The receipt fingerprint is a correlation identifier, not a digital signature.

Frequently asked questions

Is the MCP tool limit 40, 80, 128, or 256?

The protocol specification does not publish one of those numbers as a universal cap. A product, model, connector surface, or deployment may impose its own changing boundary, so cite that product’s current documentation and measure the actual path you use.

Why does Canary use 258 tools?

The manifest contains 256 numbered canaries, then sentinel_257 at position 257, then schema_boundary_16385 at position 258. It distinguishes manifest production from a specific callback while also carrying a description-size boundary; it does not find the largest possible manifest.

Does listing 258 tools mean the model could use all of them?

No. It establishes only what Canary returned. The host’s internal availability is not observable from the server; a sentinel callback provides the stronger server-observed boundary.

Primary references

Checked 24 August 2026: MCP 2026-07-28 tools specification, ChatGPT connection testing, Claude custom connector testing, and Cursor MCP documentation.

Test one known tool-count boundary

Baseline already verified? Open Canary with Limits selected, then create a separate disposable 30-minute run. Nothing is created until you confirm in the app.

Open Canary with Limits selected