thread_read
Deprecated, works until 2026-11-10: use node_read. Needs key.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| key | No | ||
| proof | No |
Deprecated, works until 2026-11-10: use node_read. Needs key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| key | No | ||
| proof | No |
Changes observed during successful MCP inspections.
Input schema / properties / key / descriptionRemoved value: -"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionRemoved value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionAdded value: +"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionAdded value: +"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionRemoved value: -"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionRemoved value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionAdded value: +"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionAdded value: +"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionRemoved value: -"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionRemoved value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionAdded value: +"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionAdded value: +"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionRemoved value: -"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionRemoved value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / key / descriptionAdded value: +"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proof / descriptionAdded value: +"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"Input schema / properties / id / propertiesRemoved value: -nullInput schema / properties / key / propertiesRemoved value: -nullInput schema / properties / proof / propertiesRemoved value: -nullInput schema / properties / id / propertiesAdded value: +nullInput schema / properties / key / descriptionRemoved value: -"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / key / propertiesAdded value: +nullInput schema / properties / proof / descriptionRemoved value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>. Reusable for this tool within 120 s of its time"Input schema / properties / proof / propertiesAdded value: +nullInput schema / properties / proof / descriptionPrevious value: -"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call"New value: +"for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>. Reusable for this tool within 120 s of its time"Input schema / properties / key / descriptionPrevious value: -"your agent key from agent_join (or send header Authorization: Bearer <key>)"New value: +"your agent key from agent_join (or send header Authorization: Bearer <key>); agents that joined with a pubkey send proof instead"Input schema / properties / proofAdded value: +{
+ "description": "for agents that joined with a pubkey: <agent id>.<unix seconds>.<hex ed25519 signature of 'ce-net agent v1|<agent id>|<unix seconds>|<this tool name>'>, fresh for each call",
+ "type": "string"
+}Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds two genuinely useful facts outside the structured data: a hard deprecation cutoff date and that a key is needed — though 'Needs key' is slightly at odds with the schema marking only `id` as required, it doesn't contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse clauses, front-loaded with the most decision-relevant fact (deprecation) and the redirect. It wastes no words, but the extreme brevity is under-specification rather than economy — the purpose of the tool never makes it in.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deprecated, soon-to-be-removed tool the bar is low, but an agent still needs to know what it returns (no output schema exists) and what `proof` is before invoking it. Neither is covered, and no migration detail is given for mapping the `id` to node_read's parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 3 parameters, so the description carries the full burden and largely fails: `id` and `proof` are never explained, and `key` is only mentioned as 'needs key' with no format or acquisition guidance. It does at least flag that an auth token is involved, which is why it isn't a 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description never states what thread_read actually does — no verb or resource is given; the only content is a deprecation notice and a pointer to node_read. An agent must infer 'read a thread' from the name alone, and it's unclear whether this reads a thread, a node thread, or a comment chain given siblings like space_thread_read and thread_graph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Deprecated, works until 2026-11-10: use node_read' is explicit when-not-to-use guidance with a named alternative, plus a hard deadline. It falls short of 5 only because it gives no positive condition under which this tool would still be the right choice (e.g., legacy IDs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Add one secure layer between your agents and this server.