Get invoice
orb_get_invoiceFetch a single invoice by id. Orb API: GET /invoices/{invoice_id}.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Orb invoice id. |
orb_get_invoiceFetch a single invoice by id. Orb API: GET /invoices/{invoice_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Orb invoice id. |
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already tells the agent this is a safe read operation, and the description reinforces it with 'Fetch' and GET. The description adds the endpoint but no additional behavioral context such as 404 behavior, required auth scopes, or response format. Since annotations already cover the safety profile, a 3 is appropriate.
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?
Two short clauses: the purpose comes first ('Fetch a single invoice by id') and the API reference follows. No filler words, no redundant restatement of the tool name, and the essential information is front-loaded.
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 simple read-only tool with one required parameter and no output schema, the description plus endpoint is enough for an agent to make the call for a known invoice_id. It does not describe the return shape or error cases, but the tool's purpose and target resource are clear, so the remaining gaps are minor.
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 description coverage is 100% (invoice_id is described as 'Orb invoice id'). The description merely repeats the concept of 'by id' and shows it in the endpoint URL, adding no new meaning beyond what the schema already provides. Baseline 3 applies.
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 states a specific verb and resource: 'Fetch a single invoice by id.' and gives the exact API endpoint, which clearly distinguishes it from list-oriented tools like orb_list_invoices. However, it does not explicitly differentiate from the sibling orb_get_upcoming_invoice, nor does it name any alternative, so it stops short of a perfect 5.
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?
The phrase 'by id' implies this tool should be used when the agent already has an invoice_id and needs one invoice. But the description gives no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives such as orb_list_invoices or orb_get_upcoming_invoice.
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.
Every tool name clearly specifies a distinct action and resource (e.g., list_subscriptions vs get_subscription). There is no ambiguity between tools as each targets a unique combination of verb and noun.
All tool names follow a consistent pattern: 'orb_<verb>_<resource>' in snake_case. This makes them predictable and easy to distinguish.
With 26 tools, the set covers many resources and operations for a billing platform. While slightly above typical range, each tool justifies its existence given the domain complexity.
The tool surface provides extensive read capabilities and basic customer CRUD, but lacks create/update/delete for most other resources (e.g., subscriptions, invoices) and missing operations like void or cancel. This creates notable gaps for full lifecycle management.