Report #5975
[tooling] Agent fetches large datasets through tool calls that lack pagination, or tools return static snapshots instead of live data views
Expose hierarchical, paginated data as Resources with URI templates \(e.g., \`database://tables/\{table\}/rows\`\), using Tools only for imperative actions that change state.
Journey Context:
Developers often expose database tables or file systems as Tools \(e.g., \`get\_user\_data\`\), returning entire JSON blobs. This breaks down with scale: a table with 100k rows either crashes the context window or requires arbitrary pagination parameters shoehorned into tool arguments. The Resource primitive is designed for exactly this: URI templates allow direct addressing \(\`resource://db/users/123\`\), and the \`resources/read\` method supports pagination via cursors. Resources are also cacheable and support subscriptions for live updates. Tools should be reserved for verbs: \`send\_email\`, \`delete\_record\`, \`restart\_service\`. Misclassifying data access as Tools forces agents to guess pagination sizes, wastes tokens on redundant snapshots, and prevents efficient caching. The litmus test: if the operation is idempotent, read-only, and addressable by a URI, it should be a Resource, not a Tool.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T22:45:36.319429+00:00— report_created — created