Skip to main content
Glama

list_client_invoices

Read-only

List the user's issued client invoices (accounts receivable) — who owes them money, how much, and when it is due. Examples: 'which invoices are outstanding', 'what does Acme still owe me', 'any overdue invoices', 'how much am I waiting to get paid'. status accepts 'active' (default), 'open', 'overdue', 'needs_review', 'paid', 'void', 'superseded', or 'all'. Returns invoice numbers, status, totals by currency, delivery state, and private document links. Read-only.

Input Schema

NameRequiredDescriptionDefault
limitNoMax invoices to return (default 25, max 100).
statusNoFilter by invoice status (default active/outstanding).
clientNameNoOptional: exact client name (case-insensitive).
clientEmailNoAccepted client's account email (accountants only).

Output Schema

NameRequiredDescriptionDefault
successYes
invoicesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / clientEmail / description
      Previous value: -"Client account email. Accountants may use this only for an accepted ExpenseBot client."New value: +"Accepted client's account email (accountants only)."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "invoices": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "advanceApplied": {
      +            "type": "number"
      +          },
      +          "clientName": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "currency": {
      +            "type": "string"
      +          },
      +          "displayStatus": {
      +            "enum": [
      +              "open",
      +              "overdue",
      +              "paid",
      +              "void",
      +              "superseded",
      +              "needs_review"
      +            ],
      +            "type": "string"
      +          },
      +          "grandTotal": {
      +            "type": "number"
      +          },
      +          "invoiceId": {
      +            "type": "string"
      +          },
      +          "invoiceNumber": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "issueDate": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "type": "string"
      +          },
      +          "total": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "success": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "success",
      +    "invoices"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "additionalProperties": true,
      -  "description": "Standard ExpenseBot tool result envelope. `message` is the human-readable summary the AI cites; `data` is the structured payload (totals, breakdowns, ids, etc.). On failure, `success` is false and `error` carries a code/message/hint triple.",
      -  "properties": {
      -    "data": {
      -      "additionalProperties": true,
      -      "description": "Structured payload. Shape varies per tool — common keys: total, breakdown, comparison, sampleMeta, ids, expenseId, reportId, signupUrl, results.",
      -      "type": "object"
      -    },
      -    "error": {
      -      "additionalProperties": true,
      -      "description": "Present only when success === false.",
      -      "properties": {
      -        "code": {
      -          "type": "string"
      -        },
      -        "hint": {
      -          "type": "string"
      -        },
      -        "message": {
      -          "type": "string"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "message": {
      -      "description": "Human-readable result text. Always present on success; prefer rendering this verbatim before any further reasoning.",
      -      "type": "string"
      -    },
      -    "sampleMeta": {
      -      "additionalProperties": true,
      -      "description": "Set when the underlying dataset was truncated. isTruncated=true means the agent saw a sample of `sampleCount` of `totalCount` rows; aggregate totals are still accurate.",
      -      "properties": {
      -        "isTruncated": {
      -          "type": "boolean"
      -        },
      -        "sampleCount": {
      -          "type": "integer"
      -        },
      -        "totalCount": {
      -          "type": "integer"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "success": {
      -      "description": "False on tool errors; check before reading `data`.",
      -      "type": "boolean"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  4. Changed2 schema fields changed
    • changedInput schema / properties / status / description
      Previous value: -"Filter by invoice status (default open)."New value: +"Filter by invoice status (default active/outstanding)."
    • changedInput schema / properties / status / enum
      Previous value: -[
      -  "open",
      -  "paid",
      -  "all"
      -]New value: +[
      +  "active",
      +  "open",
      +  "overdue",
      +  "needs_review",
      +  "paid",
      +  "void",
      +  "superseded",
      +  "all"
      +]
  5. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description reinforces scope ('the user's issued client invoices') and enumerates return contents (invoice numbers, status, totals by currency, delivery state, document links). Some of this overlaps the output schema, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and AR framing before the examples and status enum, and every sentence carries information. The example list is slightly long but each maps to a distinct status filter, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, a full output schema handling return values, and 100% parameter coverage, the description supplies sufficient scope, status semantics, and usage examples. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters and the enum. The description adds minor value by clarifying that 'active' is the default/outstanding bucket and restating the enum, but adds no syntax or behavioral nuance beyond the schema — baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the user's issued client invoices') plus the domain framing ('accounts receivable — who owes them money'). This clearly distinguishes it from get_client_invoice (single), create_client_invoice, and mark_client_invoice_paid without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example queries ('which invoices are outstanding', 'what does Acme still owe me', 'any overdue invoices') give concrete situations for use, and the default 'active' status is called out. It does not explicitly name sibling alternatives it should be preferred over (e.g., get_client_invoice for a single invoice), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.