Skip to main content
Glama

lob-mcp

A Model Context Protocol server for the Lob.com API. Lets any MCP-compatible LLM (Claude, ChatGPT, etc.) verify addresses and send physical mail — postcards, letters, self-mailers, and printed checks — through Lob.

⚠️ Lob produces real physical mail and charges your account. lob-mcp ships a layered safety harness: dual-key configuration (test required, live optional), preview/commit gating with payload binding, mandatory idempotency, an exact piece-count cap, optional narrow elicitation for high-value sends, and bundled Lob design-spec resources so AI design tools can produce print-correct artwork that respects auto-stamped address blocks. Default mode is test. Live mode requires an explicit opt-in.

Quick start

npx lob-mcp init

Walks through keys + safety caps, then prints a paste-ready Claude Desktop config snippet and a claude mcp add one-liner. No files written automatically.

Related MCP server: Gmail MCP Server

Features

  • 78 tools + 23 design-spec resources across 12 resource groups — address verification, address book, postcards, letters, self-mailers, checks, templates (incl. lob_templates_search), campaigns + creatives, buckslips/cards + print orders, QR-code analytics, resource proofs, bank accounts, webhooks, and design specifications.

  • Preview/commit split on every billable resource — lob_<resource>_preview returns a Lob-rendered proof PDF (postcards/letters/self-mailers) or a textual summary (checks/inventory orders) plus a confirmation_token. The matching lob_<resource>_create requires that token in live mode and rejects payload mutations.

  • Dual-key model with split read/commit modesLOB_TEST_API_KEY (always required) backs previews and is the fallback for everything. LOB_LIVE_API_KEY (optional) drives commits when LOB_LIVE_MODE=true AND drives reads (lists, gets, searches) automatically whenever it's configured, so analytics like "how many letters last week?" return real-account data without unlocking billable sends. LOB_READS_USE_TEST=true overrides the read default. Previews always render against the test key.

  • Idempotency by default on every billable POST — auto-generated when omitted; deterministic from the confirmation token when present, so retries de-dupe at Lob automatically.

  • Exact piece-count cap via LOB_MAX_PIECES_PER_RUN. Hard ceiling, not estimate.

  • Narrow elicitation (off by default) — opt-in confirmation forms for check amount over a USD threshold or bulk inventory orders over a piece threshold.

  • Complete tool annotation matrix — every tool sets readOnlyHint, destructiveHint, idempotentHint, and openWorldHint so hosts can render appropriate confirmation prompts.

  • PII redaction in error output.

  • Generic extra parameter on every create/update tool — any Lob field not enumerated in the schema is merged verbatim.

  • Design-spec resources — Lob's official template PDFs and structured JSON specs (dimensions, bleed, safe area, no-print zones, file-format requirements) for every supported variant. AI tools can fetch them before generating artwork to avoid the auto-stamped address-block clipping that catches naive designs.

  • Spec-driven schemas mirroring Lob's published OpenAPI spec, verified against Lob's live API.

Requirements

Installation

Run via npx (no install)

npx lob-mcp           # start the server (reads env from your host config)
npx lob-mcp init      # interactive setup wizard — prints config snippets

Install globally

npm install -g lob-mcp
lob-mcp

Install from source

git clone https://github.com/optimize-overseas/lob-mcp.git
cd lob-mcp
npm install
npm run build
node build/index.js

Configuration

The server is configured entirely through environment variables. Run lob-mcp init for an interactive walkthrough that emits a paste-ready snippet.

Keys

Variable

Required

Description

LOB_TEST_API_KEY

Yes

Lob test_… key. Used for previews via /resource_proofs and as the fallback for everything when no live key is configured.

LOB_LIVE_API_KEY

No

Lob live_… key. Used for live-account work — see Modes below.

Migration from 0.x: LOB_API_KEY has been replaced. A test_… key in LOB_API_KEY is silently accepted as the test key (soft fallback). A live_… key in LOB_API_KEY is rejected with a migration error — set LOB_TEST_API_KEY and LOB_LIVE_API_KEY explicitly.

Modes

Every request is classified into one of four operation kinds, which decides both the key it uses and whether it is allowed at all. This separation exists because reads (how many letters last week?) want real-account data, billable commits (send 10,000 letters) want a separate explicit opt-in, and state-changing mutations must never touch the live account by accident.

Kind

Examples

Key / gate

preview

*_preview (/resource_proofs)

Always the test key — proofs are a test-account artifact. Never refused.

commit

the 6 billable *_create (postcards, letters, self-mailers, checks, buckslip/card orders)

LOB_LIVE_MODE gate: test unless LOB_LIVE_MODE=true + a live key. In test mode it runs as a $0 test send.

read

lists, gets, searches, and pure lookups (address verification / autocompletion / identity validation)

live whenever LOB_LIVE_API_KEY is configured (opt out with LOB_READS_USE_TEST=true). No state-change or physical-mail risk (address verification is a metered lookup, not mail).

mutation

deletes, cancels, updates, and non-billable creates (templates, campaigns, creatives, webhooks, addresses, bank accounts, inventory)

FAIL-CLOSED: refused before any network call unless LOB_LIVE_MODE=true. When live mode is on, routes to the live key.

Variable

Default

Controls

Description

LOB_LIVE_MODE

false

Commit + mutation gate

Set to true (requires LOB_LIVE_API_KEY) to enable real mail/charges for the 6 billable *_create tools AND to permit state-changing mutations against the live account. Without it, billable commits stay on the test key (no real mail, no charges) and mutations are refused entirely — a live key present in the environment can never change live-account state while this is off.

LOB_READS_USE_TEST

false

Read mode (opt-out)

When LOB_LIVE_API_KEY is configured, read operations (lists, gets, searches, verifications) automatically query the live account so analytics return real data. Set this to true to force reads back onto the test key (uncommon — useful in dev environments where the live key is mounted but you want test responses).

Typical configurations:

Setup

Test key

Live key

LOB_LIVE_MODE

Result

Test-only

Reads + commits on test; mutations refused.

Cautious analytics (recommended)

unset

Reads on live, commits on test, mutations refused — real analytics, safe writes.

Full live

true

Reads + commits on live; mutations permitted (live key).

Force test reads

any

+ LOB_READS_USE_TEST=true → reads on test regardless.

The boot banner prints both modes on startup so you can verify how requests will route before invoking any tool.

Test-mode limitation (by design). Because mutations are refused (not routed to the test key) unless LOB_LIVE_MODE=true, any flow that depends on a mutating setup step cannot be exercised end-to-end in a test-only or cautious-analytics deployment. Specifically: check sends need a verified bank account (lob_bank_accounts_create / _verify are mutations), and buckslip/card inventory orders need the asset to exist first (lob_buckslips_create / lob_cards_create are mutations). The billable order/send itself still runs as a $0 test send, but its setup must be done in live mode (or out-of-band). Plain letter / postcard / self-mailer sends have no mutating prerequisite and work fully in test mode. This is the deliberate cost of fail-closing the live account; do not "fix" it by routing mutations to the test key (that reopens the hole this gate closes).

Safety knobs

Variable

Default

Description

LOB_REQUIRE_CONFIRMATION

true

When true, live-mode commits require a confirmation_token from the matching *_preview tool. Set to false to skip the gate (loses payload-binding safety).

LOB_CONFIRMATION_TTL_SECONDS

600

How long a preview's confirmation_token stays valid.

LOB_MAX_PIECES_PER_RUN

(unset)

Exact ceiling on the total number of mail pieces this server process may create. Counter resets when the server restarts.

LOB_REQUIRE_ELICITATION_FOR_CHECKS_OVER_USD

(unset)

If set, fires an MCP elicitation form when a check amount exceeds this threshold. The form must be confirmed before the send.

LOB_REQUIRE_ELICITATION_FOR_BULK_OVER_PIECES

(unset)

If set, fires elicitation when a buckslip or card inventory order's quantity exceeds this threshold.

Lob HTTP

Variable

Default

Description

LOB_API_VERSION

(account default)

Pin a specific Lob API version via the Lob-Version header (e.g. 2020-02-11).

LOB_BASE_URL

https://api.lob.com/v1

Override the Lob API base URL.

LOB_REQUEST_TIMEOUT_MS

30000

Per-request HTTP timeout for outbound Lob calls. A timeout surfaces as a LobTimeoutError whose tool message points back at this knob. Each request gets its own AbortController — slow requests cannot abort siblings.

Use with Claude Desktop

Run npx lob-mcp init to generate the JSON snippet. Paste it under mcpServers in your claude_desktop_config.json:

{
  "mcpServers": {
    "lob": {
      "command": "npx",
      "args": ["-y", "lob-mcp"],
      "env": {
        "LOB_TEST_API_KEY": "test_your_key_here",
        "LOB_LIVE_API_KEY": "live_your_key_here",
        "LOB_LIVE_MODE": "true",
        "LOB_MAX_PIECES_PER_RUN": "10"
      }
    }
  }
}

Restart Claude Desktop. The Lob tools should appear in the tool picker.

Use with Claude Code

claude mcp add lob \
  --env LOB_TEST_API_KEY=test_your_key_here \
  --env LOB_LIVE_API_KEY=live_your_key_here \
  --env LOB_LIVE_MODE=true \
  --env LOB_MAX_PIECES_PER_RUN=10 \
  -- npx -y lob-mcp

Use with the MCP Inspector

npm run inspector

Then open the URL printed to your terminal. Set LOB_TEST_API_KEY (and optionally the live key + LOB_LIVE_MODE=true) in the inspector's environment panel before invoking tools.

Safety model

The 1.0 hardening release implements a layered safety harness:

  1. Default test commits. Without LOB_LIVE_MODE=true, every billable *_create runs against the test key — no real mail, no charges. Reads route by their own switch (see Modes above): if a live key is configured they default to the live account so analytics return real data, but LOB_READS_USE_TEST=true forces them back to test.

  2. Preview/commit split. Every billable tool has a matching *_preview that calls Lob via the test key against /resource_proofs (postcards/letters/self-mailers) or returns a textual summary (checks/inventory orders). The preview returns a confirmation_token. Calling *_create in live mode requires that token AND rejects any payload mutation between preview and commit.

  3. Mandatory idempotency. No billable POST leaves the server without an Idempotency-Key. The server auto-generates a UUID if you don't supply one; when a confirmation token is present, the key is lob-mcp-${token} so retrying the same commit de-duplicates at Lob (24-hour window).

  4. Exact piece cap. LOB_MAX_PIECES_PER_RUN is checked at commit time. Exceeding it raises LOB_PIECE_CAP_EXCEEDED before any Lob call.

  5. Narrow elicitation. Two opt-in env vars (LOB_REQUIRE_ELICITATION_FOR_CHECKS_OVER_USD, LOB_REQUIRE_ELICITATION_FOR_BULK_OVER_PIECES) fire an MCP elicitation form on high-value sends. Both default off.

  6. Tool annotations. Every tool sets readOnlyHint, destructiveHint, idempotentHint, and openWorldHint so hosts render appropriate confirmation prompts.

  7. PII redaction. Address, name, and contact fields are stripped from any error payload echoed back to the client. The full request body is never logged.

If you only do one thing, run lob-mcp init and accept the recommended LOB_MAX_PIECES_PER_RUN value.

Design specifications

lob-mcp exposes Lob's official mail-piece design specifications so AI design tools can produce print-correct artwork. Three access surfaces, all reading from a single source-of-truth manifest:

Hosts that support MCP resources (Claude Desktop, MCP Inspector, Cursor 0.40+, most modern agent frameworks) can browse and attach specs to chat context:

  • JSON speclob://specs/{mail_type}/{variant}.json returns structured data: dimensions (in inches), bleed, safe area, no-print zones with anchor + offset semantics, surface descriptions, and file-format requirements.

  • PDF templatelob://specs/{mail_type}/{variant}.pdf returns Lob's official boundary template as a base64 blob, bundled with the npm package (no external fetch).

resources/list returns 23 entries (12 JSON + 11 PDF — card has a JSON spec but no Lob-published PDF). Each is annotated with audience: ["user", "assistant"] so hosts surface them in resource pickers.

Inline in preview responses

Every lob_*_preview tool response includes a design_spec field with the spec for the variant being previewed. The model has the no-print-zone coordinates in scope when reviewing a Lob proof, so it can self-audit before committing.

Fallback tool

For hosts without resource support, call lob_design_specs_get(mail_type, variant) — same JSON, returned inline.

Supported variants

mail_type

variant

PDF?

postcard

4x6, 6x9, 6x11

letter

standard_no10, flat_9x12, legal_8.5x14, custom_envelope

self_mailer

6x18_bifold, 11x9_bifold

check

standard

buckslip

standard

card

standard

(Lob does not publish a standalone PDF)

Why this matters

Lob auto-stamps the recipient address, IMb barcode, and postage indicia onto specific zones of every billable mail piece. A 4×6 postcard, for example, has a 3.2835″×2.375″ ink-free zone in the lower-right of the back side — any text or critical artwork placed there will be clipped at print. The spec resources document this zone (and every other surface constraint) in machine-readable form so an LLM can lay out artwork that respects it.

Refreshing PDF templates

Maintainers can pull the latest PDFs from Lob's S3 with:

node scripts/download-spec-pdfs.mjs
npm run build

Re-commit the refreshed specs/pdfs/*.pdf files. The build step copies them into build/specs/pdfs/ so they ship in the npm tarball.

Tool reference

All tools are namespaced lob_<resource>_<action>. The six billable tools come in _preview + _create pairs:

Resource

Preview

Commit (BILLABLE)

Postcards

lob_postcards_preview

lob_postcards_create

Letters

lob_letters_preview

lob_letters_create

Self-mailers

lob_self_mailers_preview

lob_self_mailers_create

Checks

lob_checks_preview

lob_checks_create

Buckslip orders

lob_buckslip_orders_preview

lob_buckslip_orders_create

Card orders

lob_card_orders_preview

lob_card_orders_create

Address book

  • lob_addresses_create · lob_addresses_list · lob_addresses_get · lob_addresses_delete

Address verification

  • lob_us_verifications_create · lob_us_verifications_get

  • lob_us_autocompletions_create

  • lob_intl_verifications_create

  • lob_bulk_us_verifications_create · lob_bulk_intl_verifications_create

  • lob_identity_validation

Postcards

  • lob_postcards_preview · lob_postcards_create (BILLABLE) · lob_postcards_list · lob_postcards_get · lob_postcards_cancel

Letters

  • lob_letters_preview · lob_letters_create (BILLABLE) · lob_letters_list · lob_letters_get · lob_letters_cancel

Self-mailers

  • lob_self_mailers_preview · lob_self_mailers_create (BILLABLE) · lob_self_mailers_list · lob_self_mailers_get · lob_self_mailers_cancel

Checks

  • lob_checks_preview · lob_checks_create (BILLABLE + DRAWS FUNDS) · lob_checks_list · lob_checks_get · lob_checks_cancel

Checks have no Lob proof endpoint. lob_checks_preview returns a textual summary instead of a PDF. The token still binds the payload — committing a different amount, to, or bank account is rejected with LOB_TOKEN_PAYLOAD_MISMATCH.

Templates and template versions

  • lob_templates_create · lob_templates_list · lob_templates_get · lob_templates_update · lob_templates_delete

  • lob_template_versions_create · lob_template_versions_list · lob_template_versions_get · lob_template_versions_update · lob_template_versions_delete

Campaigns + creatives (live-mode key required)

  • lob_campaigns_create · lob_campaigns_list · lob_campaigns_get · lob_campaigns_update · lob_campaigns_delete

  • lob_creatives_create · lob_creatives_get · lob_creatives_update · lob_creatives_delete

Creative content quirk. Lob's /v1/creatives endpoint accepts only Lob template IDs (tmpl_…) for the front, back, inside, outside, and file content fields — not HTML strings or remote URLs. To use a URL or HTML as creative content, first call lob_templates_create to upload it as a template, then pass the resulting tmpl_… here.

Buckslips, cards, and print orders

  • lob_buckslips_create · lob_buckslips_list · lob_buckslips_get

  • lob_buckslip_orders_preview · lob_buckslip_orders_create (BILLABLE) · lob_buckslip_orders_list

  • lob_cards_create · lob_cards_list · lob_cards_get

  • lob_card_orders_preview · lob_card_orders_create (BILLABLE) · lob_card_orders_list

Buckslip and card create endpoints require a publicly-reachable PDF URL with exact dimensions (8.75″×3.75″ for buckslips, 3.375″×2.125″ for cards). Lob's buckslip create accepts only multipart/form-data and is sent as such by this server. Inventory orders have no Lob proof endpoint, so the preview is textual.

QR codes and resource proofs

  • lob_qr_codes_list

  • lob_resource_proofs_create · lob_resource_proofs_get · lob_resource_proofs_update

Bank accounts (required to draw checks)

  • lob_bank_accounts_create · lob_bank_accounts_list · lob_bank_accounts_get · lob_bank_accounts_delete · lob_bank_accounts_verify

Webhooks

  • lob_webhooks_create · lob_webhooks_list · lob_webhooks_get · lob_webhooks_update · lob_webhooks_delete

The extra escape hatch

Lob's API has many resource-specific options that aren't worth enumerating in a tool schema. Every create/update tool accepts an optional extra object whose keys are merged verbatim into the request body, with explicitly-typed fields taking precedence:

{
  "to": "adr_123…",
  "from": "adr_456…",
  "front": "<html>…</html>",
  "back": "<html>…</html>",
  "extra": {
    "billing_group_id": "bg_…",
    "use_type": "marketing"
  }
}

Refer to https://docs.lob.com/ for the full set of parameters per resource.

Development

npm install
npm run typecheck
npm run build
npm test                         # node:test unit suite
npm run inspector                # interactive smoke testing
node tests/integration.mjs       # live integration smoke (needs .env.test)

The compiled output lives in build/. Source is in src/.

Architecture

src/
├── index.ts            # stdio entry — boots McpServer + LobClient + stores
├── env.ts              # dual-key env loading + safety knobs
├── version.ts          # SERVER_VERSION + USER_AGENT
├── init/
│   └── wizard.ts       # `lob-mcp init` interactive setup
├── lob/
│   ├── client.ts       # fetch-based HTTP client (dual auth, idempotency assertion)
│   ├── errors.ts       # LobApiError + LobMcpError + tool-friendly formatter
│   └── redact.ts       # recursive PII redaction
├── preview/
│   ├── token-store.ts  # TokenStore interface + InMemoryTokenStore
│   ├── payload-hash.ts # canonical JSON + SHA-256
│   ├── preview-record.ts
│   └── preview-commit.ts # buildPreviewCommit helper
├── safety/
│   ├── piece-counter.ts # exact piece-count cap
│   └── elicit.ts        # narrow elicitOrFail helper
├── schemas/
│   ├── common.ts       # address, pagination, idempotency, metadata schemas
│   └── mail.ts         # mail-piece-shared schemas
└── tools/
    ├── helpers.ts      # registerTool + ToolAnnotationPresets
    ├── register.ts     # wires every group into the server
    └── *.ts            # one file per resource group

The HTTP client is intentionally thin — it does not depend on the official lob-typescript-sdk, which keeps the dependency surface small and gives this server tighter control over headers, retries, multipart encoding, and PII handling.

Limitations

  • Multipart file uploads from disk are supported by the underlying client (asForm: true) but the user-facing tools accept content via URL, HTML string, or Lob template ID — not a local filesystem path.

  • OAuth is not supported because Lob does not offer it. Auth is HTTP Basic with an API key.

  • Some endpoints require a live-mode key. The campaigns + creatives API and the verification-retrieval endpoint return 403 in test mode.

  • Token store is in-memory. A multi-process or restart-resilient deployment would need a Redis or Firestore backend; the TokenStore interface is shaped for this.

Contributing

Issues and pull requests welcome at https://github.com/optimize-overseas/lob-mcp.

License

MIT — see LICENSE.

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by Lob.com. "Lob" is a trademark of Lob.com, Inc. Use of the Lob API is subject to Lob's Terms of Service and Acceptable Use Policy.

Available Tools

78 tools
lob_addresses_createSave address to address bookA
Idempotent

Save an address to the Lob address book so it can be reused by ID (adr_…) when creating mail pieces. Stored addresses are NOT automatically verified — call lob_us_verifications_create or lob_intl_verifications_create separately if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRecipient name (max 40 chars).
companyNoCompany name (max 40 chars).
address_line1YesPrimary street address line.
address_line2NoApartment/suite/unit line.
address_cityNo
address_stateNoTwo-letter US state code, or full state/province/region name for international.
address_zipNoZIP/postal code.
address_countryNoTwo-letter ISO country code. Omit or use 'US' for domestic.
phoneNo
emailNo
descriptionNoInternal description of the address.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

Discloses key behavioral trait that stored addresses are not automatically verified, which is not covered by annotations. Annotations already indicate idempotentHint and non-destructive, so description adds verification context. Does not mention error handling or return value details.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and immediate caveat. No redundant information; every sentence adds value.

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

Completeness4/5

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

Given 13 parameters and no output schema, description covers main behavioral aspects and caveat. Might benefit from mentioning the return value (e.g., created address ID), but overall adequate with annotations providing idempotent and open-world hints.

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 description coverage is 77%, so baseline is 3. Description does not add per-parameter details beyond schema, but overall purpose is clear. No misinterpretation risk due to schema completeness.

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?

Description clearly states the verb 'Save an address' and the resource 'Lob address book', with specific purpose of reuse by ID. Distinguishes from sibling verification tools by explicitly mentioning they must be called separately for verification.

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?

Explicitly states when to use (to save an address for reuse) and when not to rely on it (not automatically verified), naming alternative verification tools. Could mention prerequisites like API configuration, but overall clear guidance.

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

lob_addresses_deleteDelete a saved addressA
DestructiveIdempotent

Delete a saved address from the address book. Does not affect mail pieces already created with it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLob address ID to delete.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false; the description reinforces this by saying 'delete'. It adds valuable context that existing mail pieces are unaffected, which is beyond 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.

Conciseness5/5

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

Two concise sentences, no fluff. The purpose is front-loaded, and the second sentence provides critical non-effect information.

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?

For a simple one-parameter delete tool with no output schema, the description is complete. It explains the action, what is affected, and what is not. No gaps.

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?

Only one parameter (id) is fully described in the input schema with pattern and description. The description does not add extra parameter-level details beyond what the schema provides, which is acceptable given 100% schema coverage.

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?

The description clearly states the tool deletes a saved address, distinguishing it from create/get/list siblings. It also adds important nuance: it does not affect already created mail pieces.

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?

Explicitly states when to use (delete a saved address) and provides a key exclusion (does not affect existing mail pieces). Lacks explicit alternatives but is sufficient for a simple delete operation.

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

lob_addresses_getRetrieve a saved addressA
Read-onlyIdempotent

Retrieve a single saved address by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLob address ID (`adr_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, covering safety. The description adds no beyond-schema behavioral context (e.g., rate limits, auth needs), so it is adequate but not additive.

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

Conciseness5/5

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

A single 8-word sentence stating the exact purpose; every word contributes, no filler.

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

Completeness4/5

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

For a simple one-parameter retrieval tool with no output schema but rich annotations, the description is nearly sufficient; it could optionally mention the return format but is not incomplete.

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% and the description does not elaborate on the parameter beyond what the schema already states, so it meets the baseline but adds no extra meaning.

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?

The description clearly specifies the verb 'Retrieve', the resource 'saved address', and the method 'by ID', making it distinct from sibling tools like list, create, and delete.

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

Usage Guidelines3/5

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

The description implies usage when you have an address ID, but does not explicitly state when to use it versus alternatives (e.g., list for multiple addresses), lacking guidance on context.

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

lob_addresses_listList address book entriesA
Read-onlyIdempotent

List addresses stored in your Lob address book. For 'how many addresses?' counts, pass include: ['total_count'] with limit: 1. Filter by date_created (e.g. { gt: '<iso>' } for recently-added) or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds useful behavioral context about pagination (cursor-based) and the total_count parameter's limitations on certain endpoints, which goes beyond 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.

Conciseness5/5

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

The description is very concise, two sentences plus a parenthetical note. It is front-loaded with the main purpose, then delivers specific, actionable tips. Every sentence earns its place without redundancy.

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

Completeness4/5

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

The description covers key use cases: listing, counting, filtering by date and metadata. It explains cursor-based pagination implicitly via parameter names (before/after). While it doesn't describe the return format, that is not required as there is no output schema. It is complete enough for typical usage.

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

Parameters5/5

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

Schema coverage is 100% but the description adds significant meaning beyond the schema: it explains the efficient count pattern (include with limit 1), date filter syntax (ISO with gt/gte/lt/lte), and notes where total_count is not accepted. This provides practical guidance that the schema alone does not.

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?

The description clearly states 'List addresses stored in your Lob address book', which is a specific verb (list) and resource (address book). It distinguishes from sibling list tools like lob_bank_accounts_list by focusing on addresses.

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 description provides explicit guidance on when to use this tool, including patterns for counting (include total_count with limit 1) and filtering by date or metadata. It notes that total_count is not accepted on nested endpoints, giving clear context. Could be improved by naming specific alternatives for counting other resources.

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

lob_bank_accounts_createCreate a bank accountA
Idempotent

Register a bank account that can be used to draw checks. Requires routing number, account number, account type, and signatory. Bank accounts must be verified (lob_bank_accounts_verify) before use in lob_checks_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
routing_numberYes9-digit US routing number.
account_numberYesAccount number.
account_typeYes
signatoryYesName of authorized signer printed on checks.
descriptionNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and openWorldHint=true. The description adds value by explaining the purpose (draw checks) and the mandatory verification step, which are not obvious from annotations. No contradictions.

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

Conciseness5/5

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

The description is two sentences, front-loaded with purpose and requirements, followed by critical usage guidance. No redundancy or filler.

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

Completeness4/5

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

Despite lacking output schema, the description covers the tool's role in the verification-check workflow. It omits mention of optional parameters like metadata and extra, but these are documented in the schema. The agent can piece together the full context.

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 description coverage is 71%, and the description merely lists required fields ('routing number, account number, account type, and signatory') already present in the schema. It adds no additional semantic meaning beyond restating requirements.

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?

The description clearly states 'Register a bank account that can be used to draw checks', providing a specific verb and resource. It differentiates from sibling tools like lob_bank_accounts_delete, lob_bank_accounts_get, and lob_bank_accounts_verify by mentioning the verification and usage for checks.

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 description explicitly advises that bank accounts must be verified before use in lob_checks_create, giving clear context on the workflow. However, it does not state when not to use this tool or mention alternatives for other resources.

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

lob_bank_accounts_deleteDelete a bank accountA
DestructiveIdempotent

Remove a bank account. Pending checks drawn against it will continue to clear.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank account ID (`bank_…`).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds value by specifying that pending checks will continue to clear after deletion, which is a key behavioral detail not captured in annotations. This helps the agent understand side effects.

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

Conciseness5/5

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

The description is extremely concise: two sentences that front-load the core action and add one critical behavioral note. No superfluous words; every sentence earns its place.

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

Completeness4/5

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

Given the simplicity of the tool (1 param, no output schema), the description covers the main action and a key side effect. However, it lacks information about prerequisites or reversibility, and could be more complete for a deletion tool.

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?

With 100% schema description coverage for the single parameter (id), the baseline is 3. The description does not add any additional meaning or context for the parameter beyond what the schema already provides.

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?

The description clearly states the action ('Remove a bank account') and adds a specific behavioral nuance about pending checks continuing to clear, which distinguishes it from generic delete operations. The resource and action are unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., lob_checks_cancel for cancelling checks, or other delete operations). The description only notes a post-deletion behavior but does not help an agent decide if this tool is appropriate.

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

lob_bank_accounts_getRetrieve a bank accountA
Read-onlyIdempotent

Retrieve a single bank account by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank account ID (`bank_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already fully declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no behavioral context beyond the verb 'Retrieve', which aligns with annotations. It does not contradict them.

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

Conciseness5/5

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

A single 7-word sentence that is front-loaded and contains no extraneous information. Every word earns its place.

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

Completeness4/5

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

Given the simplicity of the tool (one parameter, good annotations, no output schema), the description is complete enough to guide an agent. It could optionally mention the return type, but the current description is adequate.

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% and the parameter 'id' has a clear description in the schema. The description reinforces that the tool retrieves by ID, which adds minimal extra value beyond the schema.

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?

The description 'Retrieve a single bank account by ID' uses a specific verb and resource, and clearly distinguishes from sibling tools like create, delete, verify, and list.

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

Usage Guidelines3/5

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

The description implies usage for retrieving a single bank account by ID, but does not explicitly state when to use it vs alternatives or mention any prerequisites. Context from sibling names provides some guidance, but the description itself lacks explicit direction.

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

lob_bank_accounts_listList bank accountsA
Read-onlyIdempotent

List bank accounts on your Lob account. For 'how many bank accounts?' counts, pass include: ['total_count'] with limit: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds a performance optimization tip (counting) but no behavioral traits beyond that. No contradiction with annotations.

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

Conciseness5/5

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

Extremely concise: one sentence immediately stating purpose, followed by a bold tip for a key use case. No wasted words, front-loaded.

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?

For a simple list tool with good annotations and full schema coverage, the description covers purpose and a critical usage pattern. No output schema exists, but the tool's return is standard list format, so no further explanation needed.

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

Parameters4/5

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

Input schema has 100% coverage with descriptions for all parameters. The description adds valuable guidance on how to use the `include` parameter with `limit: 1` for efficient counting, going beyond the schema's description.

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?

The description clearly states the tool lists bank accounts on the Lob account, using a specific verb and resource. It distinguishes from sibling tools like create, delete, get, verify by focusing on listing.

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?

Provides explicit guidance for a common use case: counting bank accounts by using `include: ['total_count']` with `limit: 1`. However, it does not explicitly differentiate from using `get` for a single account or other filtering scenarios, but the context is clear enough.

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

lob_bank_accounts_verifyVerify a bank accountA
Idempotent

Verify a bank account by submitting two micro-deposit amounts (in cents) that Lob deposited into the account during registration. Required before the account can be used to draw checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBank account ID (`bank_…`).
amountsYesTwo micro-deposit amounts in cents, e.g. [11, 35].
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide idempotentHint and openWorldHint; description adds that it is a necessary step before check drawing, enhancing understanding of the tool's role.

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

Conciseness5/5

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

Two sentences, direct and front-loaded, with no extraneous information.

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

Completeness3/5

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

No output schema; description does not indicate the response format or success/failure indicators, leaving a gap for the agent.

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 covers both parameters with descriptions; description reiterates the micro-deposit amounts purpose but adds no new semantic detail beyond schema.

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?

Clearly states the tool verifies a bank account using micro-deposit amounts, and distinguishes it from sibling tools like create, delete, get, list.

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?

Explicitly states that verification is required before the account can be used to draw checks, providing clear context for when to use it.

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

lob_buckslip_orders_createOrder buckslip inventory (BILLABLE)A
DestructiveIdempotent

Commit a buckslip-inventory order. Billable in live mode — Lob prints and stocks the requested quantity. Requires a confirmation_token from lob_buckslip_orders_preview that matches the current payload (live mode only). If LOB_REQUIRE_ELICITATION_FOR_BULK_OVER_PIECES is set and quantity_ordered exceeds it, an elicitation form must be confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
buckslip_idYesBuckslip ID (`bck_…`).
quantity_orderedYesNumber of buckslips to order.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_buckslip_orders_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already provide idempotentHint and destructiveHint, but the description adds critical behavioral details: billing implication, prerequisite token, and special condition for bulk orders. No contradictions.

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

Conciseness5/5

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

Two concise sentences, front-loaded with action and billing. No redundant information.

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?

For a tool with 5 params (2 required) and no output schema, the description covers core action, billing, prerequisites, and special conditions. Sufficient for agent to use 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% with clear descriptions for each parameter. The description reinforces the confirmation_token role but adds minimal new parameter-level detail beyond schema.

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?

The description clearly states the verb 'Commit' and resource 'buckslip-inventory order', distinguishing it from sibling tools like lob_buckslip_orders_preview and lob_buckslip_orders_list. It also highlights billing in live mode.

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 description specifies when to use (after preview, to commit an order) and prerequisites (confirmation_token, possible elicitation form). It doesn't explicitly state when not to use, but the context is clear.

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

lob_buckslip_orders_listList buckslip ordersA
Read-onlyIdempotent

List orders for a specific buckslip. Note: this nested endpoint does NOT accept include: ['total_count'] — counting requires walking pages, or read aggregate fields (quantity_ordered, quantity_remaining) off the parent via lob_buckslips_get.

ParametersJSON Schema
NameRequiredDescriptionDefault
buckslip_idYesBuckslip ID (`bck_…`).
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds context about the limitation of the `include` parameter for nested endpoints, which goes beyond annotations. It also clarifies that nested order endpoints have this constraint, providing additional behavioral insight.

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

Conciseness5/5

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

The description consists of two concise sentences. The first states the core function, and the second adds a critical caveat. No redundant information, every word earns its place.

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

Completeness4/5

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

Given the annotations (readOnlyHint, idempotentHint, openWorldHint) and full schema coverage, the description covers the essential behavior. It lacks details about pagination (cursor semantics) but that is partially covered by parameter names and the openWorldHint. It is complete enough for effective use.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the `include` parameter's limitation specifically for this endpoint, which is not obvious from the schema alone. This extra context warrants a 4.

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?

The description clearly states 'List orders for a specific buckslip', which is a specific verb (list) and resource (orders for a buckslip). This differentiates it from sibling tools like lob_buckslip_orders_create and lob_buckslip_orders_preview.

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

Usage Guidelines5/5

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

The description explicitly notes that the nested endpoint does not accept `include: ['total_count']` and provides alternative methods (walking pages or using parent endpoint). This gives clear when-to-use and when-not-to-use guidance.

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

lob_buckslip_orders_previewPreview a buckslip orderA
Idempotent

Validate a buckslip-inventory-order payload and return a textual summary. Returns a confirmation_token to pass to lob_buckslip_orders_create — required in live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
buckslip_idYesBuckslip ID (`bck_…`).
quantity_orderedYesNumber of buckslips to order.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true, and the description adds that it returns a confirmation_token, but does not provide additional behavioral context beyond what annotations offer. No contradiction found.

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

Conciseness5/5

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

Two sentences, no filler. The purpose and key output are front-loaded. Highly concise.

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

Completeness4/5

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

Covers the core functionality and relationship to create tool. Lacks details on the summary content or handling of extra parameters, but adequate for a validation tool with good annotations.

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 description adds no extra parameter details beyond what is already in the schema. Baseline score of 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?

The description clearly states the tool validates a buckslip order payload and returns a textual summary and confirmation token. It differentiates from sibling tools like lob_buckslip_orders_create by noting the token is passed to it.

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 description indicates that the token is required in live mode for creation, implying this tool should be used before creating an order. However, it does not explicitly state when not to use it or list alternatives.

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

lob_buckslips_createCreate a buckslipA
Idempotent

Upload a buckslip — an 8.75"×3.75" promotional insert that can be included in letters. front must be a publicly-reachable PDF URL (or base64 data URI). Inventory is reserved on Lob's side and consumed when ordered. Note: Lob's buckslips API only accepts multipart/form-data, so this tool sends the body as multipart.

ParametersJSON Schema
NameRequiredDescriptionDefault
frontYesFront content source — PDF URL (required).
backNoBack content source — PDF URL.
descriptionNo
sizeNoBuckslip size, e.g. '8.75x3.75'.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.6/5.0
Behavior5/5

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

The description reveals key behavioral traits beyond annotations: the requirement for a publicly-reachable PDF URL or base64 data URI for 'front', the multipart/form-data encoding (important for HTTP handling), and inventory reservation behavior. These details are not covered by annotations (idempotentHint, openWorldHint) and add significant value for correct invocation.

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

Conciseness5/5

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

The description is extremely concise: three sentences that each serve a purpose. It defines the object in the first sentence, specifies the front parameter format in the second, and clarifies the API encoding in the third. No redundancy or filler.

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

Completeness4/5

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

For a create tool with 6 parameters and no output schema, the description covers the most critical aspects (front format, multipart encoding, inventory behavior). It does not detail every parameter, but the schema already provides descriptions for most. Some information about the response or error conditions could enhance completeness, but it is adequate for an agent.

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

Parameters4/5

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

With 83% schema description coverage, the baseline is 3. The description adds meaning by specifying that 'front' must be a PDF URL or base64 data URI, and notes the multipart encoding (which relates to how parameters are sent). This improves understanding beyond the schema descriptions.

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?

The description clearly states the verb 'Upload' and the resource 'buckslip', defining it as an 8.75"x3.75" promotional insert for letters. This distinguishes it from sibling tools like lob_cards_create or lob_letters_create, as it specifies the exact resource type.

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 description implicitly indicates when to use this tool (to create a buckslip) and provides context about inventory reservation and multipart requirement. However, it does not explicitly state when not to use it or provide alternatives, but the context is clear enough for an agent to decide.

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

lob_buckslips_getRetrieve a buckslipA
Read-onlyIdempotent

Retrieve a single buckslip by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBuckslip ID (`bck_…`).

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the description's 'retrieve' adds minimal behavioral context. It is adequate given annotations cover safety and idempotency.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. Every part is essential.

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?

Given the tool's simplicity (one parameter, no output schema, comprehensive annotations), the description is complete. It covers what the tool does and its key constraint (by ID).

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 description coverage is 100%, and the schema already explains the 'id' parameter with pattern and description. The description adds no new parameter information beyond 'by ID', so baseline 3 applies.

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?

The description explicitly states 'Retrieve a single buckslip by ID,' using a specific verb and resource. It clearly distinguishes from sibling tools like lob_buckslips_list (list all) and lob_buckslips_create (create).

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 description implies usage when you have a specific buckslip ID, but does not explicitly state when not to use it or mention alternatives. However, the sibling tool names provide implicit context.

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

lob_buckslips_listList buckslipsA
Read-onlyIdempotent

List buckslip inventory on your account. For 'how many buckslips?' counts, pass include: ['total_count'] with limit: 1. Filter by date_created or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations (readOnlyHint, destructiveHint false). It explains the counting trick and filtering capabilities. It does not contradict annotations and provides practical usage details. Could mention pagination defaults.

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

Conciseness5/5

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

Two sentences, to the point. Essential information is front-loaded. Uses bold for emphasis. No redundant or extraneous text.

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

Completeness3/5

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

Without an output schema, the description could hint at the return structure (e.g., paginated list). It mentions filters and counting but omits details about pagination defaults or expected response shape. Adequate but leaves some contextual gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description enhances parameter understanding by explaining the interplay between include and limit for counting, and re-emphasizing filters. This adds value beyond the schema.

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?

The description clearly states the tool lists buckslip inventory on the account, distinguishing it from sibling tools like create, get, or orders. It specifies the resource (buckslips) and the action (list), with no ambiguity.

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 description explicitly advises when to use the total_count parameter with limit:1 for counting, which is a valuable usage guideline. It also mentions filtering by date_created or metadata. However, it does not explicitly state when not to use this tool or list alternatives, though no direct alternatives exist for listing inventory.

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

lob_bulk_intl_verifications_createBulk verify international addressesA
Read-onlyIdempotent

Verify up to 1,000 non-US addresses in a single request.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressesYes
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.5/5.0
Behavior3/5

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

The description adds no behavioral context beyond annotations. Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description does not clarify verification behavior (e.g., result format, error handling). With annotations present, the bar is lower, but no added value.

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

Conciseness5/5

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

A single sentence that front-loads key information: bulk, up to 1,000, non-US addresses. No unnecessary words.

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

Completeness2/5

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

No output schema is present, and the description does not mention return values, error handling, or detailed behavior. The nested addresses parameter is complex but only partially documented. The tool is incomplete in providing context for an AI agent to use correctly.

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

Parameters2/5

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

Schema coverage is 50%, and the description does not explain parameter meaning beyond what the schema provides. The 'extra' parameter is mentioned in schema but not in description. The description does not compensate for undocumented fields like secondary_line or city.

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?

The description clearly states it verifies non-US addresses in bulk (up to 1,000), distinguishing it from single international verification (lob_intl_verifications_create) and US bulk verification (lob_bulk_us_verifications_create). The verb 'verify' and resource 'bulk international addresses' are specific.

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

Usage Guidelines3/5

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

The description implies bulk use vs single but does not explicitly state when to use this tool versus alternatives like lob_intl_verifications_create or lob_bulk_us_verifications_create. No mention of when not to use or prerequisites.

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

lob_bulk_us_verifications_createBulk verify US addressesA
Read-onlyIdempotent

Verify up to 1,000 US addresses in a single request. Returns one verification result per input, in the same order.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressesYes
caseNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds context about order preservation and one-to-one output, which is valuable and consistent. No contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with key information (batch size and purpose), no extraneous text. Efficient.

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

Completeness2/5

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

No output schema, so description should describe return format beyond 'one verification result per input'. It omits details on result structure, possible error states, or pagination behavior. Incomplete for a batch tool.

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

Parameters2/5

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

Schema description coverage is 33% (low). Description adds no parameter details beyond what schema already provides. It does not explain the 'case' enum or the 'extra' object's purpose. Does not compensate for low coverage.

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?

The description clearly states the verb (verify), resource (US addresses), batch size (up to 1,000), and order preservation. It distinguishes from siblings like lob_us_verifications_create (single) and lob_bulk_intl_verifications_create (international).

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., lob_us_verifications_create for single address, or lob_bulk_intl_verifications_create). No prerequisites or exclusions mentioned.

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

lob_campaigns_createCreate a campaignA
Idempotent

Create a campaign — a container for batched mail-piece sends with a shared creative, schedule, and audience. Creating a campaign does not by itself send mail; you trigger sends per Lob docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name for the campaign.
descriptionNo
schedule_typeNoWhether the campaign should send immediately or on a schedule.
send_dateNoISO 8601 timestamp for scheduled campaigns.
target_delivery_dateNo
cancel_window_campaign_minutesNoMinutes before send during which the campaign can still be cancelled.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations, explaining that the tool creates a container and does not trigger sends. This complements the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) without contradiction.

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

Conciseness5/5

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

The description is two sentences long and front-loaded with the main purpose. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the 8 parameters and lack of output schema, the description sufficiently explains what a campaign is and the tool's role. However, it could briefly mention that additional steps (like adding creatives or mail pieces) are needed, but this is acceptable.

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 75%, and the description does not add per-parameter details. The description focuses on the overall purpose, so it provides minimal added meaning beyond the schema descriptions.

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?

The description clearly states the verb 'Create' and the resource 'campaign', and explains that a campaign is a container for batched mail-piece sends. This distinguishes it from sibling tools like campaigns_delete and campaigns_update.

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 description explicitly notes that creating a campaign does not send mail, guiding the agent to use this tool for campaign setup and not for sending. It provides clear context on when to use the tool, though it does not name alternative tools for sending.

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

lob_campaigns_deleteDelete a campaignA
DestructiveIdempotent

Delete a campaign. Only allowed before send.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID (`cmp_…`).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already set destructiveHint=true and idempotentHint=true. The description adds valuable behavioral context by specifying 'Only allowed before send,' which is not captured in annotations. No contradiction.

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

Conciseness5/5

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

Two sentences with zero waste. Every word serves a purpose, making it highly efficient and easy to parse.

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?

For a simple one-parameter destructive tool with annotations covering safety profiles, the description is complete, covering the essential constraint and purpose.

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% with a clear description for the single parameter. The tool description adds no additional parameter detail beyond what the schema provides, so 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?

The description clearly states the action 'Delete a campaign' and adds a crucial constraint 'Only allowed before send,' distinguishing it from siblings like create, get, list, and update.

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 description provides clear context for when to use the tool (before send) but does not explicitly state when not to use it or mention alternatives, leaving some room for improvement.

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

lob_campaigns_getRetrieve a campaignA
Read-onlyIdempotent

Retrieve a single campaign by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID (`cmp_…`).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint. Description adds no extra behavioral context (e.g., auth, rate limits). No contradiction.

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

Conciseness5/5

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

Single sentence with no redundancy. Efficiently conveys purpose.

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

Completeness3/5

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

Simple tool with one param, but no output schema and no mention of return value format or usage context relative to siblings. Adequate but not enriched.

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%. Description only restates that it retrieves by ID, adding no new meaning beyond the schema's parameter description.

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?

Clear verb ('Retrieve'), specific resource ('campaign'), and scope ('single by ID'). Distinguishes from sibling list tool.

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

Usage Guidelines3/5

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

Implied usage: use when you have a campaign ID. No explicit when-to-use or when-not-to-use compared to list or other tools.

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

lob_campaigns_listList campaignsA
Read-onlyIdempotent

List campaigns on your Lob account. For 'how many campaigns?' counts, pass include: ['total_count'] with limit: 1. Filter by date_created or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent. Description adds value by noting include parameter restrictions and the counting shortcut. Does not discuss pagination further, but schema covers it.

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

Conciseness5/5

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

Two sentences with no fluff. Main purpose front-loaded, optimization tip bolded. Every word earns its place.

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

Completeness4/5

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

Covers main functionality and a key optimization. Lacks explanation of pagination flow, but schema documents cursors. No output schema, so response format not described, but adequate for typical use.

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

Parameters4/5

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

Schema has 100% coverage, baseline 3. Description adds practical guidance for include and limit combination, and mentions filtering by date_created and metadata, improving usability.

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?

Clearly states 'List campaigns on your Lob account.' Specifies verb and resource, distinguishes from sibling CRUD tools. Mentions filtering options for added precision.

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?

Provides specific optimization tip for counting campaigns using include and limit. Does not explicitly contrast with alternatives like lob_campaigns_get, so no exclusion guidance.

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

lob_campaigns_updateUpdate a campaignA
Idempotent

Update a campaign's metadata or schedule before it has been sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID (`cmp_…`).
nameNo
descriptionNo
send_dateNo
target_delivery_dateNo
cancel_window_campaign_minutesNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.7/5.0
Behavior3/5

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

The description correctly implies mutation (consistent with readOnlyHint=false). Annotations already convey idempotency and non-destructiveness. The 'before it has been sent' constraint adds useful context beyond annotations, but no further behavioral traits (e.g., error handling, partial update behavior) are disclosed.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundancy. Every word earns its place, clearly conveying the core purpose and a key constraint.

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

Completeness2/5

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

For a tool with 8 parameters (including nested objects), no output schema, and low schema coverage, the description should provide more context about return values, error conditions, parameter usage, or the update semantics (e.g., partial vs full replacement). It only covers the basic purpose and one temporal constraint.

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

Parameters2/5

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

Schema description coverage is low (38%). The description mentions 'metadata or schedule' but does not map these to specific parameters or explain their formats, defaults, or interactions. Even though purpose hints at relevant fields, the description does not compensate for the sparse schema descriptions.

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?

The description clearly states the action ('Update'), the resource ('a campaign'), and the scope ('metadata or schedule before it has been sent'). This distinguishes it from sibling tools like create, delete, get, and list.

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 description provides a critical usage condition ('before it has been sent'), implying that the tool should not be used for sent campaigns. It does not explicitly list alternatives or exclusions, but the condition is clear and helpful.

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

lob_card_orders_createOrder card inventory (BILLABLE)A
DestructiveIdempotent

Commit a card-inventory order. Billable in live mode — Lob prints and stocks the requested quantity. Requires a confirmation_token from lob_card_orders_preview that matches the current payload (live mode only). If LOB_REQUIRE_ELICITATION_FOR_BULK_OVER_PIECES is set and quantity exceeds it, an elicitation form must be confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idYesCard ID (`card_…`).
quantityYesNumber of cards to order. (Note: buckslip orders use `quantity_ordered`; Lob's API differs per resource.)
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_card_orders_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A4/5.0
Behavior4/5

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

Annotations provide destructiveHint and idempotentHint. The description adds valuable context: billability in live mode, need for confirmation_token, and elicitation condition. No contradiction with annotations.

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?

The description is three sentences long, with the main action stated first. It is clear and avoids unnecessary detail, though the elicitation part could be more concise.

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

Completeness3/5

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

Given the lack of output schema, the description covers the key aspects (billing, token requirement, bulk elicitation). However, it omits details about test mode behavior and expected return value, which are needed for full completeness.

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% and each parameter has a description. The description adds minimal additional meaning beyond what the schema already provides (e.g., mentions confirmation_token requirement and elicitation condition related to quantity). Baseline score of 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?

The description clearly states 'Commit a card-inventory order' with the verb 'commit' and resource 'card inventory'. It distinguishes itself from sibling tools like lob_card_orders_preview by emphasizing the finalization and billing aspect.

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 description specifies the prerequisite of a confirmation_token from lob_card_orders_preview and notes the elicitation condition for bulk orders. It implies when to use (after preview) but does not explicitly state when not to use or list alternatives.

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

lob_card_orders_listList card ordersA
Read-onlyIdempotent

List orders for a specific card. Note: this nested endpoint does NOT accept include: ['total_count'] — counting requires walking pages, or read aggregate fields off the parent via lob_cards_get.

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idYesCard ID (`card_…`).
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.8/5.0
Behavior5/5

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

Adds behavioral context beyond annotations by specifying this is a nested endpoint with restrictions on the include parameter, and explains alternative counting methods.

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

Conciseness5/5

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

Two sentences: first states purpose, second provides critical usage caveat. No wasted words.

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

Completeness4/5

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

Given a detailed schema covering all parameters and no output schema, the description sufficiently covers key behavior (nested endpoint limitation) and does not need to explain return format.

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

Parameters4/5

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

Schema covers all parameters with descriptions (100% coverage), but the description reinforces the include parameter restriction and references lob_cards_get for aggregate counts, adding value.

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?

The description clearly states 'List orders for a specific card,' using a specific verb and resource. It distinguishes from sibling tools like creation and preview endpoints.

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

Usage Guidelines5/5

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

Explicitly notes that the endpoint does not accept include: ['total_count'] and provides alternatives (walking pages or using lob_cards_get), guiding proper usage.

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

lob_card_orders_previewPreview a card orderA
Idempotent

Validate a card-inventory-order payload and return a textual summary. Returns a confirmation_token to pass to lob_card_orders_create — required in live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idYesCard ID (`card_…`).
quantityYesNumber of cards to order. (Note: buckslip orders use `quantity_ordered`; Lob's API differs per resource.)
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations by noting the tool is required in live mode and returns a confirmation_token. Annotations already indicate it is safe to call multiple times (idempotentHint=true) and not destructive. No contradictions.

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

Conciseness5/5

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

The description is extremely concise at two sentences, front-loading the purpose and return value. Every word adds value with no redundancy.

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

Completeness4/5

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

The description provides sufficient context for a preview tool, including the need for the confirmation token in the create step. However, it does not detail the content of the textual summary, which could be improved.

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?

The input schema has 100% coverage with detailed descriptions for each parameter. The description does not add additional meaning beyond what is already in the schema, so a baseline score of 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?

The description clearly states it validates a card-inventory-order payload and returns a textual summary and confirmation token. It distinguishes from siblings like lob_card_orders_create by specifying it is a preview/validation step required in live mode.

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 description indicates this tool should be used before creating an order to obtain a confirmation token, and that it is required in live mode. While it does not explicitly state when not to use or list alternatives, the context from sibling tools makes it clear.

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

lob_cards_createCreate a cardB
Idempotent

Upload a card — a small printed insert (e.g. business card, plastic gift card) that can be inserted with a letter.

ParametersJSON Schema
NameRequiredDescriptionDefault
frontYesFront content source.
backNoBack content source.
descriptionNo
sizeNoCard size per Lob docs.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate non-read-only, non-destructive, idempotent, and open-world behavior. The description adds that the card can be inserted with a letter, but doesn't expand on other behavioral traits (e.g., authentication required, response format, resource lifetime). No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, concise sentence that conveys the essence of the tool without extraneous words. It is front-loaded with the action and followed by a clarifying example.

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

Completeness2/5

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

Given the tool has 6 parameters, no output schema, and no return value description, the description is insufficient. It doesn't explain what the tool returns, how to handle errors, or how the card creation fits into a larger workflow. The annotations provide some guidance, but the description alone leaves important gaps.

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?

With 83% schema coverage, the schema describes most parameters. The description doesn't add meaning beyond the schema; it mentions the card's purpose but doesn't clarify how to specify 'front' or 'back' (e.g., file path or template ID). Baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states 'Upload a card' – a specific verb and resource – and explains what a card is (small printed insert). It distinguishes itself from sibling card tools like get/list/orders, though it could be more explicit about creation vs other actions.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., postcards, letters). There are no prerequisites, context, or mentions of complementary tools, leaving the agent to infer usage from the name alone.

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

lob_cards_getRetrieve a cardA
Read-onlyIdempotent

Retrieve a single card by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCard ID (`card_…`).

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no behavioral context beyond 'Retrieve a single card', which is already clear from the name. Since it fails to add value beyond annotations, it scores low.

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

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. It is maximally efficient and easily parsed.

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

Completeness4/5

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

For a simple single-parameter retrieval tool with full annotation coverage, the description is nearly complete. It could optionally mention the return type, but the absence does not hinder agent understanding given the simplicity.

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 description coverage is 100% with a clear pattern and description for the 'id' parameter. The description does not add additional meaning beyond 'by ID', so 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?

The description clearly states the action ('Retrieve'), the resource ('a single card'), and the method ('by ID'). It distinguishes from sibling tools like lob_cards_list (multiple) and lob_cards_create (create), so the purpose is unambiguous.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. It is implied by the name and siblings, but no direct guidance is provided, scoring at the adequate baseline.

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

lob_cards_listList cardsA
Read-onlyIdempotent

List card inventory on your account. For 'how many cards?' counts, pass include: ['total_count'] with limit: 1. Filter by date_created or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable behavioral context: pagination support (before/after) and the efficient counting trick. There is no contradiction, and the description enhances understanding beyond annotations.

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

Conciseness5/5

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

The description is two sentences plus a bolded tip. Every sentence serves a purpose: stating the main function, providing a counting pattern, and listing filters. No fluff, front-loaded with key information.

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

Completeness4/5

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

For a list tool with 6 parameters and no output schema, the description covers the core use cases (listing, filtering, counting). Lacks details on return format or error conditions, but annotations (readOnly, idempotent) reduce the need. Adequate for typical agent use.

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?

The input schema has 100% coverage with descriptions for all parameters. The description reinforces key usage (total_count trick, date filter) but does not add new semantic meaning beyond what the schema already provides. Baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states 'List card inventory on your account' which is a specific verb-resource pair. It also highlights filtering by date_created and metadata, but does not explicitly differentiate from sibling list tools like 'lob_letters_list' or 'lob_cards_get', though the context of cards is clear.

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 description provides explicit advice for efficient counting: pass 'include: ['total_count']' with 'limit: 1'. It also mentions filtering options. However, it does not explicitly state when not to use this tool or list alternatives, but the tips are actionable and contextually relevant.

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

lob_checks_cancelCancel a scheduled checkA
DestructiveIdempotent

Cancel a check before its send_date. Once printed/mailed, checks cannot be cancelled — you would need to issue a stop-payment with the bank.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCheck ID (`chk_…`).

TDQS

A4.7/5.0
Behavior5/5

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

Discloses critical behavioral trait: checks cannot be cancelled once printed/mailed, and that a stop-payment is needed thereafter. Adds context beyond annotations (destructiveHint=true). No contradiction.

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

Conciseness5/5

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

Two concise sentences that front-load the purpose and provide necessary condition and alternative. No wasted words.

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?

Given low complexity (one param, no output schema), the description fully covers the action, timing constraint, and post-cancellation guidance. Complete for agent decision-making.

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?

Only one parameter 'id' is fully described in the input schema (pattern, description). The tool description adds no additional parameter meaning, but schema coverage is 100%, so 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?

The description clearly states the tool cancels a scheduled check before its send_date. It distinguishes from sibling cancel tools by specifying checks.

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

Usage Guidelines5/5

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

Explicitly states when to use (before send_date) and when not (after printed/mailed), and suggests an alternative (bank stop-payment) for after.

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

lob_checks_createCreate a check (BILLABLE + DRAWS FUNDS)A
DestructiveIdempotent

Commit a check send. HIGH IMPACT: incurs Lob fees AND draws the check amount from the linked bank account when cashed. Requires a verified bank account ID (bank_…). In live mode, requires a confirmation_token from lob_checks_preview that matches the current payload. If LOB_REQUIRE_ELICITATION_FOR_CHECKS_OVER_USD is set and amount exceeds it, an elicitation form must be confirmed by the user before dispatch.

For the bottom of the check page, Lob requires exactly one of message (plain text, max 400 chars) or check_bottom (custom template / HTML / PDF, typically paired with merge_variables).

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
bank_accountYesVerified Lob bank account ID.
amountYesCheck amount in USD (e.g. 125.50).
check_numberNoOptional check number; auto-assigned if omitted.
memoNoMemo line on the check (max 40 chars).
messageNoPlain-text message printed on the bottom of the check page (max 400 chars). Mutually exclusive with `check_bottom`.
check_bottomNoCustom artwork for the bottom half of the check page. Accepts a Lob template ID (`tmpl_…`), an HTML string, an https:// URL, or a base64 PDF. Mutually exclusive with `message`.
logoNoLogo printed on the check face (upper-left, grayscale; PNG or JPG).
attachmentNoSecondary document included in the envelope after the check page. Up to 6 pages.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_checks_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (destructiveHint: true, idempotentHint: true), the description adds that it incurs fees, draws funds, requires confirmation_token, and an elicitation form condition. No contradiction with annotations.

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

Conciseness5/5

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

The description is two concise paragraphs. The first covers impact and prerequisites; the second clarifies bottom options. Every sentence is necessary and well-placed, with no redundancy.

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

Completeness4/5

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

Given 20 parameters and full schema descriptions, the description covers the critical behavioral aspects (fees, validation, mutual exclusivity). It doesn't need to list all params; the schema does that. Additional output schema absence is not a gap here.

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

Parameters4/5

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

With 100% schema coverage, the description adds value by explaining the message/check_bottom mutual exclusivity and confirming the idempotency key behavior. It also references the elicitation condition related to amount.

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?

The description clearly states 'Commit a check send' and highlights 'HIGH IMPACT' with financial implications, distinguishing it from sibling tools like lob_checks_cancel, lob_checks_get, etc. It also mentions the need for a verified bank account and confirmation token, which are key to its purpose.

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 description provides explicit prerequisites (verified bank account, confirmation_token in live mode), an elicitation condition, and the mutual exclusivity of message/check_bottom. It doesn't explicitly compare to alternatives but implies this is the creation tool.

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

lob_checks_getRetrieve a checkB
Read-onlyIdempotent

Retrieve a single check by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCheck ID (`chk_…`).

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no behavioral context beyond what annotations declare, so it doesn't add value.

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

Conciseness5/5

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

The description is a single, concise sentence with no wasted words. It is front-loaded with the key information.

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

Completeness2/5

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

The tool has no output schema, so the description should hint at what is returned. It does not mention the return type or structure, leaving the agent potentially unclear about the output.

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%, providing a baseline of 3. The description does not add meaning beyond the schema's parameter description (Check ID (`chk_…`)).

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?

The description clearly states the verb 'Retrieve' and the resource 'a single check by ID', which distinguishes it from siblings like lob_checks_list (list) and lob_checks_create (create).

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

Usage Guidelines3/5

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

Usage is implied by the description: use this when you have a specific check ID and need its details. No explicit when-not or alternatives are given, but the sibling names provide context.

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

lob_checks_listList checksA
Read-onlyIdempotent

List checks on your Lob account. For 'how many checks?' counts, pass include: ['total_count'] with limit: 1 — never paginate to count. Filter by date_created (e.g. { gt: '<iso>' } for 'last N days'), send_date, scheduled, or metadata. Default sort is most-recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
scheduledNo
send_dateNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint), the description adds that default sort is most-recent first, and that counting via `include` is cheaper than pagination. It also clarifies filter semantics with examples, which annotations do not cover.

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

Conciseness5/5

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

The description is three sentences, each serving a clear purpose: purpose statement, critical usage tip, and filter/sort summary. It is front-loaded with the most important information, very concise without losing necessary details.

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?

Given the tool's complexity (8 parameters, filters, counting needs) and no output schema, the description covers key aspects: listing, efficient counting, filtering options, and default sorting. It enables effective use without needing to refer to external documentation.

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

Parameters5/5

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

The description adds meaning beyond the schema: it emphasizes the `include` parameter usage for counting, provides filter examples for `date_created` and `send_date`, and notes that `include` is not accepted on nested endpoints. This complements the 88% schema coverage effectively.

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?

The description clearly states the tool lists checks on Lob account. It specifies the verb (list) and resource (checks) and provides specific usage details like filtering and counting, distinguishing it from other siblings that operate on different resources or actions.

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

Usage Guidelines5/5

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

The description gives explicit guidance: for counting, use `include: ['total_count']` with `limit: 1` and never paginate to count. It also explains how to filter by date and metadata. This directly helps the agent choose appropriate parameters.

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

lob_checks_previewPreview a checkA
Idempotent

Validate a check payload and return a textual summary. Lob does not produce check proofs, so no PDF is rendered. Returns a confirmation_token to pass to lob_checks_create — required in live mode. The token binds the payload: committing a different amount or recipient is rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
bank_accountYesVerified Lob bank account ID.
amountYesCheck amount in USD (e.g. 125.50).
check_numberNoOptional check number; auto-assigned if omitted.
memoNoMemo line on the check (max 40 chars).
messageNoPlain-text message printed on the bottom of the check page (max 400 chars). Mutually exclusive with `check_bottom`.
check_bottomNoCustom artwork for the bottom half of the check page. Accepts a Lob template ID (`tmpl_…`), an HTML string, an https:// URL, or a base64 PDF. Mutually exclusive with `message`.
logoNoLogo printed on the check face (upper-left, grayscale; PNG or JPG).
attachmentNoSecondary document included in the envelope after the check page. Up to 6 pages.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and destructiveHint=false. The description adds critical behavioral insight: 'Lob does not produce check proofs, so no PDF is rendered.' This goes beyond annotations. It also explains the token's binding behavior (rejects different amount/recipient). No contradiction with annotations.

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

Conciseness5/5

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

The description is only three sentences, front-loading the core purpose and providing essential context without any fluff. Every sentence adds value.

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

Completeness4/5

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

The tool has 19 parameters and no output schema. The description explains the main output (textual summary and token) and its usage. It could be more complete about error scenarios or the summary format, but it covers the most critical aspects for correct invocation.

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% with detailed descriptions for all parameters. The description does not elaborate on individual parameters but adds value by explaining the role of the confirmation_token. Given the schema already does the heavy lifting, this is adequate.

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?

The definition clearly states 'Validate a check payload and return a textual summary', specifying both the action (validate) and the output (textual summary + confirmation_token). The title 'Preview a check' further reinforces the purpose. It distinguishes itself from siblings like lob_checks_create, which actually creates the check.

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 description explicitly says to use this before lob_checks_create, and explains that the confirmation_token binds the payload, making it clear when and how to use the tool. However, it does not mention scenarios where preview might be skipped or alternative approaches.

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

lob_creatives_createCreate a creativeA
Idempotent

Create a campaign creative — the artwork (front/back / inside/outside / file) used by a campaign for postcards, letters, or self-mailers. Important: unlike lob_postcards_create and the other mail-piece create tools, Lob's /v1/creatives endpoint does NOT accept HTML strings, remote URLs, or inline PDFs in the content fields — it accepts ONLY a Lob template ID (tmpl_…). To use a URL or HTML as creative content, first call lob_templates_create to upload it as a template, then pass the resulting tmpl_… here. Required by resource_type: postcard → front + back; letter → file + from; self_mailer → inside + outside. Live-mode key required.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesParent campaign ID.
resource_typeYes
frontNoPostcard creative front: a Lob template ID (`tmpl_…`). Required for postcard creatives.
backNoPostcard creative back: a Lob template ID (`tmpl_…`). Required for postcard creatives.
insideNoSelf-mailer creative inside: a Lob template ID.
outsideNoSelf-mailer creative outside: a Lob template ID.
fileNoLetter creative file: a Lob template ID. Required for letter creatives.
detailsNoResource-specific options. Per Lob's spec, accepted keys for postcard creatives are `mail_type` (usps_first_class | usps_standard) and `size` (4x6 | 6x9 | 6x11). For letters: `mail_type`, `color`, `double_sided`, `address_placement`, `extra_service`. Empty `{}` is valid.
descriptionNo
fromNoSender address — saved address ID (`adr_…`) or inline. Required for letter creatives.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations are consistent; description adds critical behavioral details: only template IDs accepted, required fields per type, live-mode key required. No contradiction.

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

Conciseness5/5

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

Two sentences, front-loaded with core purpose, no unnecessary words. Efficient and informative.

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

Completeness4/5

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

Covers main constraints and required fields, but lacks return value description (no output schema exists). Could mention error cases or rate limits, but overall sufficient given complexity.

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

Parameters5/5

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

Adds meaning beyond schema: explains that front/back/inside/outside/file must be tmpl_ IDs, and describes details parameter's accepted keys per resource type. Schema coverage is high but description enriches context.

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?

Description clearly states the tool creates a campaign creative (artwork) for postcards, letters, or self-mailers. It distinguishes from sibling tools by highlighting the key constraint that only Lob template IDs are accepted.

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

Usage Guidelines5/5

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

Explicitly contrasts with lob_postcards_create etc., noting they accept HTML/URLs while this tool requires template IDs. Provides alternative workflow: call lob_templates_create first. Also specifies required fields per resource_type.

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

lob_creatives_deleteDelete a creativeB
DestructiveIdempotent

Delete a creative.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCreative ID (`crv_…`).

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description 'Delete' adds no behavioral context beyond what annotations provide. It does not mention side effects or permission requirements.

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

Conciseness5/5

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

The description is a single concise sentence with no unnecessary words. It is front-loaded with the essential action.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema, annotations covering destructiveness), the description is nearly complete. Could mention irrevocability, but not required for the minimal viable description.

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%, with the single parameter 'id' fully described in the schema. The description adds no additional meaning beyond the schema.

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?

The description 'Delete a creative' clearly states the action and resource. It differentiates from sibling tools which have verbs like create, get, update for the same resource.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no prerequisites or context provided. For a delete operation, it's straightforward but the description lacks any when-to-use or when-not-to-use information.

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

lob_creatives_getRetrieve a creativeA
Read-onlyIdempotent

Retrieve a single creative by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCreative ID (`crv_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, aligning with the description. The description adds no extra behavioral context beyond what annotations provide.

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

Conciseness5/5

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

Single sentence, six words, front-loaded with no fluff. Every word serves a purpose.

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

Completeness4/5

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

Given low complexity (1 param, no output schema) and good annotations, the description is adequate. Could mention return type, but not essential.

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?

The input schema has 100% coverage with a pattern and description for the ID parameter. The description only repeats 'by ID', adding no new meaning beyond the schema.

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?

The description clearly states 'Retrieve a single creative by ID', using a specific verb (Retrieve) and resource (creative) with the retrieval method (by ID). This distinguishes it from sibling tools like create, delete, or update.

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

Usage Guidelines3/5

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

No explicit guidance on when to use vs. alternatives, but for a simple get-by-ID tool, the context is clear. It neither provides exclusions nor alternative tool names.

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

lob_creatives_updateUpdate a creativeA
Idempotent

Update a creative's description or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCreative ID (`crv_…`).
descriptionNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate the tool is read-write (readOnlyHint=false) and idempotent, but the description adds no further behavioral insight (e.g., about the 'extra' parameter or side effects).

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

Conciseness5/5

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

The description is a single, well-structured sentence with no wasted words, front-loading the key information (verb, resource, updated fields).

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

Completeness4/5

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

For a simple update tool with no output schema, the description adequately covers the core functionality; it could mention the 'id' requirement and 'extra' parameter for completeness, but it remains sufficient.

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 high (75%): two parameters (description and metadata) are explicitly mentioned in the description, but 'id' and 'extra' are not elaborated beyond the schema. The description adds no new meaning beyond the schema.

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?

The description clearly states the action ('Update') and the resource ('a creative'), and specifies which attributes are updatable ('description or metadata'), distinguishing it from create/delete/get/list siblings.

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

Usage Guidelines3/5

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

The description provides minimal usage guidance; it does not explain when to use this tool versus other creative-related tools (e.g., create or delete) or mention prerequisites like requiring an existing creative ID.

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

lob_design_specs_getGet Lob design specA
Read-onlyIdempotent

Return the design specification (dimensions, bleed, safe area, no-print zones, file requirements) for a Lob mail-piece variant. Call this BEFORE generating artwork so the design respects Lob's auto-stamped address blocks. Same data is also available as MCP resources at lob://specs/{mail_type}/{variant}.json.

ParametersJSON Schema
NameRequiredDescriptionDefault
mail_typeYesMail-piece category.
variantYesVariant identifier within the mail_type. For postcards: 4x6, 6x9, 6x11. For letters: standard_no10, flat_9x12, legal_8.5x14, custom_envelope. For self-mailers: 6x18_bifold, 11x9_bifold. For checks: standard. For buckslip / card: standard.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), description adds rationale about respecting 'auto-stamped address blocks' and lists output contents. Enhances understanding.

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

Conciseness5/5

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

Two-front-loaded sentences: first states core function, second gives usage timing and alternative resource. No unnecessary words.

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

Completeness4/5

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

Though no output schema, description enumerates returned fields. Annotations provide safety cues. Complete for an agent to understand purpose and usage.

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 provides 100% coverage with enums and examples for both parameters. Description does not add extra meaning, so 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?

Description uses specific verb 'Return' and resource 'design specification' with enumerated components. Clearly distinguishes from sibling CRUD tools by focusing on spec retrieval for mail-piece variants.

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?

Explicitly advises calling 'BEFORE generating artwork', providing clear usage context. Does not explicitly exclude cases but mentions alternative resource access, sufficient for guidance.

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

lob_identity_validationValidate identity for an addressA
Read-onlyIdempotent

Validate a person/business name against a US address. Returns whether the recipient is associated with the address.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipientYesName to validate.
primary_lineYes
secondary_lineNo
cityNo
stateNo
zip_codeNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's addition of 'returns whether recipient is associated' adds specific behavioral context. However, it lacks details on error handling, response structure, or rate limits beyond what annotations imply.

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

Conciseness5/5

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

Two efficient sentences, front-loaded with the core purpose, no redundant or filler content.

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

Completeness3/5

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

Given no output schema and 7 parameters, the description is minimal. It explains the core action but omits parameter constraints (e.g., zip_code format), output details (e.g., boolean or match level), and edge cases. Adequate but not thorough.

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 only 29%, so the description must compensate. It identifies recipient as the name and primary_line as the address, but does not explain secondary_line, city, state, or zip_code beyond being part of the address. The 'extra' parameter is mentioned in schema but not described.

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?

The description clearly states the tool validates a person/business name against a US address and returns association, which precisely defines its function and distinguishes it from address verification siblings like lob_us_verifications_create.

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

Usage Guidelines3/5

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

The description implies usage for US-based identity verification but does not explicitly contrast with sibling tools like lob_intl_verifications_create or explain when to choose this over address-only verifications. No when-not or alternative guidance is provided.

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

lob_intl_verifications_createVerify an international addressA
Read-onlyIdempotent

Verify a single non-US address. Returns deliverability status and standardized components for the destination country.

ParametersJSON Schema
NameRequiredDescriptionDefault
primary_lineYesPrimary street address line.
secondary_lineNo
cityNo
stateNoState, province, or region.
postal_codeNo
countryYesTwo-letter ISO country code.
addressNoFull single-line address (alternative to fields above).
recipientNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior; description adds that it returns deliverability status and standardized components, providing value beyond annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no unnecessary words.

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

Completeness3/5

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

Given the complexity (9 parameters, no output schema), the description provides a basic overview but lacks details on input alternatives, error handling, and return format assumptions.

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

Parameters2/5

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

With 56% schema description coverage, several parameters lack descriptions in both schema and tool description. The description does not explain parameter-specific details beyond the general purpose.

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?

The description clearly states the verb 'Verify' and the resource 'a single non-US address', distinguishing it from siblings like lob_us_verifications_create and lob_bulk_intl_verifications_create.

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 description implies usage for single international address verification but lacks explicit when-not or alternative tool recommendations.

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

lob_letters_cancelCancel a scheduled letterA
DestructiveIdempotent

Cancel a letter before its send_date. Production-locked letters cannot be cancelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLetter ID (`ltr_…`).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent hints. The description adds valuable behavioral context: cancellation is only possible before send_date and not for production-locked letters, which is beyond what annotations provide.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the core action, and every word adds value. No unnecessary text.

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?

Given the simple tool with one parameter, clear annotations, and no output schema, the description covers the essential information: what it does, when it works, and a key failure condition.

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?

The input schema already provides complete coverage (100%) with description for the 'id' parameter. The tool description does not add further meaning to the parameter, meeting the baseline expectation.

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?

The description clearly states the verb 'Cancel' and the resource 'a letter', and adds constraints ('before its send_date', 'production-locked letters cannot be cancelled'), distinguishing it from sibling tools that operate on different resources.

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 description specifies when to use the tool (to cancel a letter before send_date) and when not to (production-locked letters). It does not explicitly mention alternatives, but the condition is clear and contextually sufficient.

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

lob_letters_createCreate a letter (BILLABLE)A
DestructiveIdempotent

Commit a letter send. Billable in live mode. Requires a confirmation_token from lob_letters_preview that matches the current payload (live mode only).

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
fileYesLetter body content source (HTML, URL, template ID, or base64 PDF).
colorNoPrint in color (true) or black-and-white (false). Affects pricing.
double_sidedNoPrint on both sides. Defaults to true for letters.
address_placementNoWhere the recipient address window appears on a letter.
return_envelopeNoInclude a return envelope. Boolean true for default, or a return envelope ID.
perforated_pageNoPage number to perforate (used with return_envelope).
custom_envelopeNoCustom envelope reference for letters/checks.
extra_serviceNoUSPS extra service add-on. Affects pricing and delivery time.
cardsNoCard IDs (`card_…`) to insert. Up to 4.
buckslipsNoBuckslip references to insert.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_letters_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=true, but the description adds confirmation_token requirement and billing note. However, it does not explain the consequence of creating (e.g., cost consumption) or the idempotency behavior. The description provides minimal behavioral context beyond what annotations convey.

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

Conciseness5/5

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

The description is extremely concise—two clear sentences that convey the core purpose and key constraint. No wasted words, front-loaded with the action. Ideal conciseness for a tool with strong annotations and schema.

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

Completeness2/5

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

Despite having 22 parameters and no output schema, the description omits many crucial details: what the response contains (presumably a Letter object), error conditions, validation rules, and the workflow to use confirmation_token. It is incomplete for the complexity level.

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?

With 100% schema description coverage, the baseline is 3. The description adds marginal semantic value by stressing the confirmation_token requirement and its relation to preview, but this is already in the schema. No other parameter meanings are enhanced.

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?

The description clearly states the action ('Commit a letter send') and explicitly distinguishes from sibling lob_letters_preview by requiring a confirmation token from that preview tool. It also highlights that it is billable in live mode, which is a key distinguishing trait.

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 description implies a workflow: use lob_letters_preview first to obtain confirmation_token, then use this tool to commit. It specifies that confirmation_token is required in live mode, but does not explicitly mention when not to use or provide alternative tools. The guidance is clear but lacks exclusions.

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

lob_letters_getRetrieve a letterA
Read-onlyIdempotent

Retrieve a single letter by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLetter ID (`ltr_…`).

TDQS

A3.5/5.0
Behavior3/5

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

The description is consistent with annotations (readOnlyHint, etc.) but adds no extra behavioral context (e.g., error behavior, rate limits). Annotations already provide a clear safety profile.

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

Conciseness5/5

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

One sentence with no filler. Directly states the action and resource. Every word earns its place.

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

Completeness3/5

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

Adequate for a simple retrieval tool, but lacks mention of return value or error cases. With many siblings and no output schema, the description could hint at the response structure. Still minimally viable.

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?

The single parameter 'id' is fully covered by the schema (including pattern and description). The description adds no additional meaning beyond the schema, so 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?

The description uses 'Retrieve' (specific verb) and 'letter by ID' (resource and method), clearly distinguishing from sibling tools like lob_letters_list or lob_letters_create.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., lob_letters_list, lob_letters_preview). The description does not specify context or exclusions.

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

lob_letters_listList lettersA
Read-onlyIdempotent

List letters on your Lob account. For 'how many letters?' counts, pass include: ['total_count'] with limit: 1 — never paginate to count. Filter by date_created (e.g. { gt: '<iso>' } for 'last N days'), send_date, mail_type, color, scheduled, or metadata. Default sort is most-recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
colorNo
scheduledNo
send_dateNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds default sort order and filtering behavior, enhancing transparency.

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

Conciseness5/5

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

Two efficient sentences with inline code examples, front-loaded with purpose, no superfluous information.

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?

Covers key usage patterns, counting optimization, and filters. Adequate for an agent despite 10 parameters and no output schema.

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

Parameters4/5

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

Adds value beyond schema by explaining the total_count use case and providing filter examples. Schema coverage is 80%, description compensates with practical guidance.

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?

The description clearly states 'List letters on your Lob account.' with specific filters and sorting, distinguishing it from sibling list tools like lob_addresses_list.

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?

Provides explicit guidance on efficient counting via include: ['total_count'] with limit:1, and mentions filtering options. No explicit when-not-to-use, but context is clear.

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

lob_letters_previewPreview a letterA
Idempotent

Render a Lob proof PDF for a letter without charging or sending. Returns a confirmation_token to pass to lob_letters_create. Required in live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
fileYesLetter body content source (HTML, URL, template ID, or base64 PDF).
colorNoPrint in color (true) or black-and-white (false). Affects pricing.
double_sidedNoPrint on both sides. Defaults to true for letters.
address_placementNoWhere the recipient address window appears on a letter.
return_envelopeNoInclude a return envelope. Boolean true for default, or a return envelope ID.
perforated_pageNoPage number to perforate (used with return_envelope).
custom_envelopeNoCustom envelope reference for letters/checks.
extra_serviceNoUSPS extra service add-on. Affects pricing and delivery time.
cardsNoCard IDs (`card_…`) to insert. Up to 4.
buckslipsNoBuckslip references to insert.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds that the tool does not charge or send, and returns a confirmation_token, which is beyond the idempotentHint and destructiveHint annotations. It does not contradict any annotation.

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

Conciseness5/5

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

The description is two sentences, front-loading the core function and then adding output and requirement details. Every sentence is necessary and there is no waste.

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

Completeness4/5

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

Despite having 21 parameters and no output schema, the description covers the essential points: what it does, the return value, and when it's required. It omits details like error conditions or quota information, which are less critical given the schema coverage.

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 description coverage is 100%, so baseline is 3. The tool description does not add extra meaning to any parameters beyond the schema, but the overall usage hint ('Required in live mode') provides context.

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?

The description clearly states the tool renders a proof PDF without charging or sending, and returns a confirmation_token. This distinguishes it from lob_letters_create and other related tools.

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 description explicitly says 'Required in live mode' and indicates the output token is for lob_letters_create, providing context for when to use it. However, it does not explicitly list alternatives or when not to use it.

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

lob_postcards_cancelCancel a scheduled postcardA
DestructiveIdempotent

Cancel a postcard before its send_date. Only works while the postcard is still in a cancellable state — production-locked pieces cannot be cancelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPostcard ID (`psc_…`).

TDQS

A4.3/5.0
Behavior4/5

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

Adds state requirement (before send_date, not production-locked) beyond annotations. Annotations include destructiveHint: true, idempotentHint: true. No contradiction.

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

Conciseness5/5

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

Two sentences, front-loaded with main action. No unnecessary words.

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?

Given one parameter, no output schema, and annotations providing some context, the description is complete by explaining the action, condition, and limitation.

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?

Only one parameter (id) fully described in schema (pattern and description). Description does not add additional meaning beyond schema, so baseline 3 applies.

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?

The description clearly states the action (cancel), resource (postcard), and key condition (before send_date, not production-locked). It distinguishes from sibling tools like lob_postcards_create, get, list, preview.

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?

Provides clear context: cancel only before send_date and while cancellable. Excludes production-locked pieces. Does not explicitly name alternatives but context of siblings implies this is the only cancel tool for postcards.

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

lob_postcards_createCreate a postcard (BILLABLE)A
DestructiveIdempotent

Commit a postcard send. Billable in live mode: produces real physical mail and is charged to your Lob account. In live mode, requires a confirmation_token from lob_postcards_preview that matches the current payload. In test mode, the token is optional (dev ergonomics).

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
frontYesFront-of-postcard content source.
backYesBack-of-postcard content source.
sizeNoPostcard size. Defaults to 4x6.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_postcards_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A4.2/5.0
Behavior4/5

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

Over annotations (destructiveHint=true, idempotentHint=true), the description adds that the tool is billable in live mode and produces real physical mail. It also explains the token requirement. No contradictions.

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

Conciseness5/5

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

Three sentences that are concise and front-loaded. Every sentence provides essential information without redundancy.

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

Completeness4/5

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

Given 15 parameters and no output schema, the description covers key behavioral context (billing, preview requirement, mode differences). It is sufficient for an agent to use correctly, though more detail on content sources could help.

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 description coverage is 100% and the description adds no new parameter details beyond the schema. The baseline of 3 applies as the description does not enhance parameter understanding.

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?

The title and description clearly state the tool creates a postcard and commits a send. It explicitly mentions billing and the relationship with the preview step (lob_postcards_preview), distinguishing it from sibling tools like lob_postcards_preview.

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 description explains when to use the tool (after preview, to commit) and clarifies mode-dependent behavior (live requires confirmation_token, test optional). It does not list alternatives but the context is clear.

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

lob_postcards_getRetrieve a postcardA
Read-onlyIdempotent

Retrieve a single postcard by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPostcard ID (`psc_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the bar is lower. The description adds no extra behavioral context (e.g., handling of invalid IDs or canceled postcards), but does not contradict annotations.

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

Conciseness5/5

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

The description is a single short sentence, front-loaded with the purpose, and contains no extraneous words.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema), the description is largely sufficient. However, it could mention the return value (the postcard object) to be fully complete.

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?

The input schema has one parameter with 100% coverage (description: 'Postcard ID (`psc_…`)'), so the schema already provides meaning. The description adds nothing about parameters.

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?

The description 'Retrieve a single postcard by ID' clearly states the verb (retrieve) and resource (postcard), and distinguishes it from siblings like list, create, cancel, and preview.

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

Usage Guidelines3/5

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

The description does not provide when to use this tool versus alternatives, such as for a specific postcard versus listing all. Adequate for a simple get-by-ID but lacks explicit guidance.

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

lob_postcards_listList postcardsA
Read-onlyIdempotent

List postcards on your Lob account. For 'how many postcards?' counts, pass include: ['total_count'] with limit: 1 — never paginate to count. Filter by date_created (e.g. { gt: '<iso>' } for 'last N days'), send_date, size, mail_type, scheduled, or metadata. Default sort is most-recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
sizeNo
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
scheduledNoFilter to scheduled-but-not-sent postcards.
send_dateNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. Description adds value by specifying default sort order and the efficient counting pattern, without contradicting annotations.

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

Conciseness5/5

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

Two sentences with front-loaded counting tip in bold. No redundant information; every sentence adds value.

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

Completeness3/5

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

Covers counting, filtering, and ordering well, but lacks description of the response structure. Agent may not know what fields the returned items contain, though schema provides property details.

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

Parameters4/5

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

With 90% schema coverage, description adds meaning beyond schema, especially for `include` (count pattern) and date filters (example syntax). Does not fully explain `before`/`after` cursors.

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?

Description clearly states 'List postcards' with specific verb and resource. Provides distinct usage guidance for counting and filtering, differentiating from create/get/cancel/preview siblings.

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?

Explicitly shows how to efficiently count postcards and lists filterable fields. Lacks explicit when-not-to-use, but context implies this is for listing multiple items, not single retrieval.

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

lob_postcards_previewPreview a postcardA
Idempotent

Render a Lob proof PDF for a postcard without charging or sending. Returns a confirmation_token to pass to lob_postcards_create. The token is required in live mode (LOB_LIVE_MODE=true). Token TTL: LOB_CONFIRMATION_TTL_SECONDS (default 600). Sizes: 4x6 (default), 6x9, 6x11.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
frontYesFront-of-postcard content source.
backYesBack-of-postcard content source.
sizeNoPostcard size. Defaults to 4x6.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations (idempotentHint, readOnlyHint false, destructiveHint false) are consistent. The description adds context about the token's purpose and TTL, and clarifies the non-charging nature. It does not discuss rate limits or authentication but is fairly transparent.

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

Conciseness5/5

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

Three concise sentences with no wasted words. The core purpose, token usage, and sizes are front-loaded and clear.

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

Completeness4/5

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

For a complex tool with 14 parameters and no output schema, the description adequately covers the workflow token, TTL, sizes, and non-charging aspect. It could mention response structure but the token is sufficient for an agent.

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

Parameters4/5

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

Schema coverage is 100%, so the description need not repeat. It adds value by explaining the token's role in the creation workflow and the significance of the size parameter beyond enum values.

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?

The title and name clearly indicate previewing a postcard. The description states it renders a proof PDF without charging or sending, distinguishing it from lob_postcards_create and other preview tools for different resources.

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 description implies using this tool before creation in live mode by mentioning the confirmation token passed to lob_postcards_create and the token TTL. However, it does not explicitly state when to use versus when to skip.

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

lob_qr_codes_listList QR code analyticsA
Read-onlyIdempotent

List QR-code scan / analytics events for QR codes embedded in your mail pieces. For 'how many scans?' counts, pass include: ['total_count'] with limit: 1. Filter by date_scanned (e.g. { gt: '<iso>' } for 'last N days'), resource_id (scans tied to a specific mail piece), or campaign_id (scans for a whole campaign).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
resource_idNoFilter to scans tied to a specific mail-piece ID.
campaign_idNo
date_scannedNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate safe read-only operation. Description adds valuable behavioral insights like the counting optimization using include:['total_count'] with limit:1, and filter syntax examples, which go beyond annotations.

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

Conciseness5/5

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

Two sentences plus a bolded tip. No redundant information. The most important detail (list) comes first, followed by a key use case, then filter guidance. Highly efficient.

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

Completeness4/5

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

While there is no output schema, the description covers input parameters and a common use case well. It could mention what fields are returned, but for a list tool the input focus is sufficient.

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

Parameters5/5

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

With 89% schema coverage, the description enhances understanding by demonstrating filter usage (date_scanned, resource_id, campaign_id) and explaining the special behavior of include for total counts. It also provides concrete ISO example for date filters.

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?

Clearly states it lists QR-code scan/analytics events for mail pieces. Distinguishes itself from sibling list tools by focusing on QR codes, and provides a specific example for counting scans.

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?

Provides clear usage context: listing analytics events and counting scans via include and limit. Does not explicitly exclude other scenarios, but the specific resource makes usage obvious.

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

lob_resource_proofs_createCreate a resource proofA
Idempotent

Create a proof — a PDF preview of how a resource (postcard, letter, self-mailer) will print — for review before committing to a mail send. Pass resource_parameters with the same shape you would pass to the underlying create endpoint (e.g. { front, back, to } for a postcard). Note: the lob_*_preview tools call this endpoint internally; this raw tool is exposed for advanced use cases.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesType of resource being proofed.
resource_parametersYesParameters matching the resource type's create shape — e.g. `{ front, back, to }` for a postcard, `{ file, to }` for a letter. Each field accepts an HTML string, URL, or template ID.
template_idNoOptional template ID to associate with the proof.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds context that it is a preview before committing to a send, which aligns with annotations. No contradiction, but no additional rich behavioral details beyond what annotations cover.

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

Conciseness5/5

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

Description is four sentences, each providing essential information without redundancy. It is front-loaded with purpose, followed by parameter guidance, internal usage note, and advanced use case. No wasted words.

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

Completeness4/5

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

Given complexity (4 params, no output schema), description adequately covers purpose, parameter usage, and relationship to siblings. Lacks explicit mention of return format or error handling, but the raw tool nature and annotations provide sufficient context.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds value by providing concrete examples of resource_parameters shapes for different resource types and explaining that fields accept HTML, URL, or template IDs. The extra parameter is also clarified.

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?

Description clearly states it creates a PDF preview of a resource for review before sending, specifying resource types (postcard, letter, self-mailer). It distinguishes itself from sibling ‘lob_*_preview’ tools by noting it is a raw tool for advanced use cases.

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?

Description explains how to pass resource_parameters matching the create endpoint shape and suggests using preview tools normally. However, it does not explicitly state when not to use this tool or provide alternatives beyond the note.

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

lob_resource_proofs_getRetrieve a resource proofA
Read-onlyIdempotent

Retrieve a resource proof by ID, including a URL to download the proof PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource proof ID.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate read-only, safe, idempotent behavior. Description adds that response includes a download URL, but no further behavior details.

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

Conciseness5/5

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

Single clear sentence, no redundancy, directly addresses the action and key output (PDF URL).

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

Completeness4/5

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

For a simple retrieval with one parameter and no output schema, the description adequately mentions the key return value (download URL). Minor omission: no mention of additional response fields beyond URL, but acceptable for this tool's simplicity.

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 covers 100% of parameters; description merely restates the ID parameter. No added semantics beyond schema.

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?

Title and description clearly state retrieving a resource proof by ID, with additional detail about including a PDF download URL. Distinct from sibling create/update tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings (e.g., create or update). No context about prerequisites or typical use cases.

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

lob_resource_proofs_updateApprove/reject a resource proofB
Idempotent

Approve or reject a resource proof.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource proof ID.
statusNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the description adds minimal behavioral context beyond confirming the approval/rejection action. The description does not contradict annotations, but it doesn't enrich the agent's understanding of side effects or requirements.

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?

The description is a single concise sentence that gets straight to the point. It is front-loaded and efficient, though it could be slightly more informative without becoming verbose.

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

Completeness2/5

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

The description is minimal and lacks important context such as what happens after approval/rejection (e.g., whether it triggers a generation), the role of the 'extra' parameter, or the response structure. Given no output schema, more completeness is expected.

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 description coverage is 67% (two of three parameters have descriptions). The description does not add any meaning beyond the schema; for instance, the 'status' parameter's enum values are only listed in the schema. Baseline score of 3 is appropriate given the coverage.

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?

The description 'Approve or reject a resource proof' clearly states the verb (approve/reject) and resource (resource proof). It distinguishes itself from sibling tools like create and get by focusing on status modification.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as indicating it should be used after creating a proof to change its status. No exclusions or prerequisites are mentioned.

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

lob_self_mailers_cancelCancel a scheduled self-mailerA
DestructiveIdempotent

Cancel a self-mailer before its send_date.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSelf-mailer ID (`sfm_…`).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true, which aligns with the 'Cancel' action. The description adds the condition about send_date, providing additional behavioral context beyond annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It is concise and clear.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description adequately explains the action and condition. It could mention cancellation effects, but given the simplicity, it is reasonably complete.

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?

The schema covers the parameter 'id' with description 'Self-mailer ID (sfm_…).' The description does not add extra parameter information, so baseline score of 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?

The description clearly states the action 'Cancel' and the resource 'self-mailer', with a condition 'before its send_date'. This distinguishes it from sibling tools like 'lob_self_mailers_create' or 'lob_self_mailers_get'.

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 description mentions the condition 'before its send_date', which implicitly guides when to use the tool. It does not explicitly state not to use it after send_date or provide alternatives, but the condition is sufficient.

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

lob_self_mailers_createCreate a self-mailer (BILLABLE)A
DestructiveIdempotent

Commit a self-mailer send. Billable in live mode. Requires a confirmation_token from lob_self_mailers_preview that matches the current payload (live mode only). Sizes: 6x18_bifold (default), 11x9_bifold.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
insideYesInside-of-self-mailer content source.
outsideYesOutside-of-self-mailer content source.
sizeNoSelf-mailer size. Defaults to 6x18_bifold.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.
confirmation_tokenNoToken from lob_self_mailers_preview. Required in live mode (LOB_LIVE_MODE=true).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover mutability and idempotency. Description adds billing behavior (live mode only) and token requirement. Does not contradict annotations.

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

Conciseness5/5

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

Three sentences, front-loads critical info (commit, billable, token). No wasted words.

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

Completeness4/5

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

For a complex tool with many params and no output schema, description covers core purpose, billing, and token requirement. Schema descriptions fill remaining gaps.

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 covers 100% of parameters with descriptions. Description adds minimal extra, e.g., size defaults. Baseline 3 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 specific action: 'Commit a self-mailer send.' Distinct from preview, cancel, get, list. Includes billing context and size options.

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?

Clearly indicates prerequisite: requires confirmation_token from preview in live mode. Implicitly tells when to use (after preview) and when not (no token). No explicit alternatives but sibling preview exists.

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

lob_self_mailers_getRetrieve a self-mailerA
Read-onlyIdempotent

Retrieve a single self-mailer by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSelf-mailer ID (`sfm_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint=false, idempotentHint=true. The description adds no further behavioral insight beyond these, which is acceptable given the simple nature of the tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. Every word earns its place, providing the essential information succinctly.

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

Completeness4/5

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

For a simple retrieval tool with one parameter, the description is adequate. However, since there is no output schema, the description could have mentioned what is returned, but the name and common expectations suffice.

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?

The input schema covers the sole parameter with a description. The tool description does not add additional meaning beyond what the schema provides. Schema coverage is 100%, so baseline of 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?

The description clearly states the action ('Retrieve'), the resource ('a single self-mailer'), and the identifier method ('by ID'). It distinguishes this tool from sibling operations like list or cancel.

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

Usage Guidelines3/5

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

The description implies usage (when you have an ID and need the record), but it does not explicitly state when to use this tool versus alternatives or provide any context about prerequisites or conditions.

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

lob_self_mailers_listList self-mailersA
Read-onlyIdempotent

List self-mailers on your Lob account. For 'how many?' counts, pass include: ['total_count'] with limit: 1 — never paginate to count. Filter by date_created (e.g. { gt: '<iso>' } for 'last N days'), size, mail_type, scheduled, or metadata. Default sort is most-recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
sizeNo
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
scheduledNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent, so the description adds value by specifying default sorting (most-recent first) and the counting shortcut. No contradictions.

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

Conciseness5/5

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

Two sentences: the first states the purpose, the second provides key usage tips (counting and filtering). No wasted words, front-loaded with the main action.

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?

For a listing tool with 9 parameters and no output schema, the description covers all essential aspects: purpose, counting optimization, filtering, and sorting. An agent can confidently select and invoke it.

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

Parameters4/5

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

Schema coverage is high (78%), but the description adds practical context for the include parameter (counting), date_created filter format with an example, and mentions filtering by size, mail_type, scheduled, and metadata beyond the schema's basic descriptions.

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?

The description clearly states 'List self-mailers on your Lob account.' with a specific verb ('list') and resource ('self-mailers'), effectively distinguishing it from sibling tools like create, cancel, get, and preview.

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?

Provides explicit guidance on how to use for counting ('pass include: ['total_count'] with limit: 1 — never paginate to count') and mentions filtering options. Does not explicitly state when not to use, but the context is clear.

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

lob_self_mailers_previewPreview a self-mailerA
Idempotent

Render a Lob proof PDF for a self-mailer without charging or sending. Returns a confirmation_token to pass to lob_self_mailers_create. Required in live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoInternal description (max 255 chars).
toYesRecipient address. Either a saved address ID (`adr_…`) or an inline address.
fromYesSender (return) address. Either a saved address ID (`adr_…`) or an inline address.
send_dateNoISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future.
mail_typeNoMail class. Defaults to usps_first_class for most pieces.
merge_variablesNoKey/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content.
metadataNoUp to 20 string key/value pairs to attach to the resource.
billing_group_idNoBilling group ID (`bg_…`) to attribute the charge to.
use_typeNoRequired for some mail classes. 'marketing' for promotional, 'operational' for transactional.
insideYesInside-of-self-mailer content source.
outsideYesOutside-of-self-mailer content source.
sizeNoSelf-mailer size. Defaults to 6x18_bifold.
idempotency_keyNoIdempotency key (max 256 chars). If omitted, the server auto-generates a value derived from the confirmation_token when present, otherwise a fresh UUIDv4. Lob deduplicates identical keys for 24 hours.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.1/5.0
Behavior4/5

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

Description adds context beyond annotations by confirming the operation is non-destructive ('without charging or sending') and is idempotent. No contradiction with annotations.

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

Conciseness5/5

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

Two succinct sentences that convey the core function and the workflow context. No wasted words.

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

Completeness3/5

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

For a tool with no output schema and 14 parameters, the description is brief but covers the essential purpose and token return. However, it lacks details on the output format (e.g., PDF URL) and potential side effects.

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?

With 100% schema coverage, the description does not need to add parameter details. It briefly mentions the confirmation_token but does not elaborate on parameters beyond the schema.

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?

Clearly states the tool renders a proof PDF for a self-mailer without charging or sending, distinguishing it from the actual creation tool 'lob_self_mailers_create' by mentioning the return of a confirmation_token for that purpose.

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?

Explicitly states that preview is required in live mode and implies usage before creating, but does not provide explicit when-not-to-use or compare to siblings like 'lob_letters_preview'.

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

lob_templates_createCreate a templateA
Idempotent

Create a reusable HTML template that can be referenced by ID (tmpl_…) when creating mail pieces. Supports Handlebars-style {{variables}} for runtime substitution.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNo
htmlYesHTML content of the template (UTF-8).
engineNoTemplate engine. Defaults to 'handlebars'.
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate idempotency and non-destructiveness. The description adds behavioral context: templates are reusable, get a tmpl_ ID, and support Handlebars variables. This goes beyond annotations but does not detail authentication or rate limits; still adequate for a creation tool.

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

Conciseness5/5

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

Two sentences with zero filler. Front-loaded with the action ('Create a reusable HTML template') and immediately provides key details. Every sentence earns its place.

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

Completeness4/5

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

The description covers the essential usage: creation, ID pattern, variables, and engine. It does not explicitly mention the 'extra' parameter (open world) or return values, but the annotations and schema fill those gaps. For a creation tool without output schema, this is sufficient.

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

Parameters4/5

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

Schema coverage is high (80%), but the description adds meaningful context: it explains the purpose of the template (reusable, referenced by ID) and the variable substitution mechanism, which enriches understanding of the html and engine parameters. The description does not need to repeat schema details.

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?

The description clearly states the action (create), the resource (reusable HTML template), and the context (referenced by ID for mail pieces, supports variables). It effectively distinguishes from sibling tools like lob_templates_search and lob_templates_update.

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 description implies when to use this tool (for creating top-level templates) by mentioning 'reusable HTML template' and referencing the ID pattern. However, it does not explicitly contrast with lob_template_versions_create, which could be confusing. Overall, clarity is good but lacks explicit exclusions.

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

lob_templates_deleteDelete a templateA
DestructiveIdempotent

Delete a template. Mail pieces already created from it are unaffected; future references will fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (`tmpl_…`).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark destructiveHint true, but description adds critical behavioral detail: existing mail pieces remain intact while future references fail. No contradictions with annotations.

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

Conciseness5/5

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

Two efficient sentences: first states action, second adds essential nuance. No wasted words.

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?

For a simple delete tool with one parameter and no output schema, the description fully covers the necessary context, especially with annotations providing destructiveness and idempotency hints.

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 covers the only parameter 'id' with pattern and description. The description adds no extra parameter semantics beyond the schema, and schema coverage is 100%, so 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?

Clearly states it deletes a template (verb+resource) and distinguishes from other template tools by noting that existing mail pieces are unaffected, which sets it apart from sibling tools like lob_templates_create or lob_templates_update.

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?

Explicitly states when to use (to delete a template) and implies not to use if you want to keep the template for future mail piece creation, but does not explicitly mention alternatives like templating version deletion.

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

lob_templates_getRetrieve a templateA
Read-onlyIdempotent

Retrieve a single template (including its published version) by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (`tmpl_…`).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, etc. The description adds context about including the published version, which is useful behavioral detail beyond annotations.

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

Conciseness5/5

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

Description is a single, front-loaded sentence with no unnecessary words. Every part adds value.

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

Completeness4/5

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

The tool is simple (retrieve by ID) and the description covers the essential behavior. No output schema exists, but the description hints at output contents. Adequate for this context.

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 description coverage is 100% for the single parameter 'id'. The description does not add extra parameter meaning beyond the schema.

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?

The description clearly states the action ('Retrieve'), the resource ('a single template'), and adds a specific detail about including the published version. This distinguishes it from siblings like list or search.

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

Usage Guidelines3/5

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

The description implies use when you need a specific template by ID, but does not explicitly state when to use alternatives or when not to use this tool.

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

lob_templates_listList templatesA
Read-onlyIdempotent

List templates on your Lob account. By default returns slim records (no HTML body) — Lob template HTML can be many MB per entry and quickly overwhelms LLM context. Pass include_html: true to get the full HTML, or use lob_templates_get(id) for a single template. For 'how many templates?' counts, pass include: ['total_count'] with limit: 1. To find a template by name or metadata, use lob_templates_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
include_htmlNoInclude the full HTML body in each list entry. Defaults to false: HTML can be tens of MB and blows the LLM context. Use `lob_templates_get(id)` to read the full template once you know which one you want.

TDQS

A5/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint, destructiveHint false, idempotentHint true. The description adds crucial context about HTML size bloat (multiply MB, overwhelms LLM context), efficient counting, and pagination using cursor parameters, without contradicting annotations.

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

Conciseness5/5

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

The description is two sentences plus a bold tip, no wasted words. It front-loads the main action and uses effective formatting (bold for emphasis). Every sentence earns its place.

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?

Given 7 parameters with nested objects and no output schema, the description covers all key aspects: default behavior, performance concerns, efficient counting, pagination, and cross-referencing sibling tools for specific needs.

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

Parameters5/5

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

Despite 100% schema description coverage, the description adds significant value: explains why include_html defaults false (context overload), how to use include parameter for total_count efficiently, and ties date_created with include for date-bounded counts. This goes beyond the schema.

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?

The description clearly states 'List templates on your Lob account,' specifying the verb 'list' and resource 'templates.' It also distinguishes from sibling tools like lob_templates_get and lob_templates_search by mentioning alternatives for specific use cases.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: default returns slim records, use include_html:true for full HTML, or use lob_templates_get for single template. It also advises using include:['total_count'] with limit:1 for counts and directs to lob_templates_search for finding by name/metadata.

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

lob_templates_updateUpdate a templateA
Idempotent

Update a template's metadata or published version. To publish a new version, set published_version to a version ID (vrsn_…).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (`tmpl_…`).
descriptionNo
published_versionNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate the tool is non-destructive (`destructiveHint: false`) and idempotent (`idempotentHint: true`). The description adds context about what can be updated (metadata or published version), but does not disclose any additional behavioral traits or side effects beyond the annotations. The description adds marginal value over 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.

Conciseness5/5

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

The description is very concise: two sentences with no wasted words. The main action is front-loaded, and the second sentence provides specific guidance for the key parameter. Every sentence earns its place.

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

Completeness4/5

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

Given the tool has 5 parameters and no output schema, the description explains the critical parameter (`published_version`) and leaves the rest to the schema. The annotations cover safety. The description is mostly complete but could mention that `extra` allows additional API parameters (though the schema does). Overall, sufficient for an agent to use 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 description coverage is 60% (3 of 5 parameters have descriptions). The description adds meaning by explaining that setting `published_version` to a version ID publishes a new version, which goes beyond the schema. However, it does not clarify the `description` parameter or the `extra` parameter usage, leaving gaps. The description partially compensates for the schema coverage.

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?

The description clearly states the tool's purpose: updating a template's metadata or published version. It uses specific verbs ('Update') and resources ('template'), and distinguishes the action from sibling tools like `lob_templates_create` or `lob_templates_delete`. The mention of `published_version` and version ID format adds precision.

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 description provides clear guidance on when to use: to update metadata or published version, and specifically how to publish a new version. However, it does not explicitly state when not to use the tool or suggest alternatives (e.g., using `lob_template_versions_update` for version-specific updates). The guidance is good but lacks exclusions.

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

lob_template_versions_createCreate a template versionA
Idempotent

Add a new version of a template's HTML. Creating a new version does NOT automatically publish it — use lob_templates_update to set published_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (`tmpl_…`).
descriptionNo
htmlYesHTML content for this version.
engineNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate the tool is idempotent and non-destructive. The description adds key behavioral context: creating does not auto-publish, and publishing requires a separate call. This goes beyond what annotations provide.

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?

Two sentences, front-loaded with the core action. Could be slightly more structured (e.g., separate usage note), but overall efficient and clear.

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

Completeness3/5

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

Given no output schema and 5 parameters with nested objects, the description is minimal. It covers the key behavioral aspect (publishing) but omits what the tool returns or how to handle parameters like `extra`. Leaves some gaps for the agent.

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

Parameters2/5

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

Schema coverage is 60%, but the description adds no information about parameters. It does not explain the role of `description`, `engine`, or `extra`, nor does it clarify any parameter constraints beyond the schema. The description should compensate for the moderate coverage but fails to do so.

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?

Description clearly states the verb 'Add' and resource 'a new version of a template's HTML'. It also distinguishes from the sibling tool `lob_templates_update` by noting that creation does not automatically publish.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (to create a version) and when not (for publishing, use `lob_templates_update`). Provides a direct alternative, making the usage context clear.

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

lob_template_versions_deleteDelete a template versionA
DestructiveIdempotent

Delete a template version. Cannot delete the currently published version.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (`tmpl_…`).
version_idYesTemplate version ID (`vrsn_…`).

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already mark destructiveHint and idempotentHint. The description adds a critical behavioral constraint (cannot delete published version), which goes beyond the annotations. No contradiction with annotations.

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?

The description is very short (one sentence, 8 words) and front-loads the action. It is concise, though it could optionally include more context without becoming verbose.

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

Completeness2/5

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

Lacking: no output schema, no mention of success response (e.g., 204 No Content), prerequisites (e.g., template must exist), or potential side effects. The single constraint is useful but incomplete for a deletion operation.

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?

The input schema already provides pattern and description for both parameters (template_id and version_id) with 100% coverage. The description does not add any additional meaning or examples beyond what the schema specifies.

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?

The description clearly states the action ('Delete') and the resource ('a template version'), and adds a specific constraint ('Cannot delete the currently published version') that distinguishes this tool from other deletion tools like lob_templates_delete, which operate on templates rather than versions.

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

Usage Guidelines3/5

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

The description provides a negative usage guideline (not to delete the published version) but does not explicitly state when to use this tool or offer alternatives like lob_templates_delete for full template deletion or lob_template_versions_update for modifications.

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

lob_template_versions_getRetrieve a template versionA
Read-onlyIdempotent

Retrieve a specific version of a template.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (`tmpl_…`).
version_idYesTemplate version ID (`vrsn_…`).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint; the description adds no additional behavioral context beyond restating the operation.

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

Conciseness5/5

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

One concise sentence with no redundant information.

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

Completeness4/5

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

For a simple read operation with full schema and annotations, the description is adequate. Could mention relation to sibling tools.

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%, with patterns explained. The description adds no extra meaning to parameters.

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?

The description explicitly states the action (Retrieve), resource (a specific version of a template), and clearly distinguishes from siblings like list versions.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., list vs get) is provided.

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

lob_template_versions_listList template versionsA
Read-onlyIdempotent

List all versions of a template. Slim by default (no HTML); pass include_html: true to get the full HTML body of each version, or use lob_template_versions_get(template_id, version_id). For 'how many versions?' counts, pass include: ['total_count'] with limit: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (`tmpl_…`).
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.
include_htmlNoInclude the full HTML body in each list entry. Defaults to false: HTML can be tens of MB and blows the LLM context. Use `lob_templates_get(id)` to read the full template once you know which one you want.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, description adds important behavioral details: slim by default, HTML omitted to prevent large context, and counting pattern.

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with purpose. Every sentence adds distinct value.

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?

Given 100% schema coverage and no output schema, the description fully covers the tool's behavior, including edge cases (counting, HTML retrieval) and common use patterns.

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

Parameters5/5

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

Schema coverage is 100%, but description adds significant value beyond schema: explains 'include_html' default behavior and 'include' parameter usage for counting, which are not obvious from schema descriptions alone.

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?

Clear verb+resource: 'List all versions of a template.' Distinguishes from sibling 'lob_template_versions_get' by detailing when to use each.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool vs alternatives, including a direct reference to 'lob_template_versions_get' and usage for counts with 'include: ['total_count']' and 'limit:1'.

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

lob_template_versions_updateUpdate a template versionA
Idempotent

Update the description of a template version. HTML cannot be modified after creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (`tmpl_…`).
version_idYesTemplate version ID (`vrsn_…`).
descriptionNo
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds important behavioral context beyond annotations by noting that HTML cannot be modified after creation. Annotations already indicate idempotence and non-destructiveness, and the description does not contradict them.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no unnecessary information. It front-loads the purpose and follows with a key constraint.

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

Completeness4/5

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

Given the tool's simplicity (update a description), the description is sufficient. It does not mention return values, but the input schema and lack of output schema are adequate for an update operation.

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

Parameters4/5

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

The description clarifies that the 'description' parameter is the field being updated, which is not detailed in the schema. It also explains the 'extra' parameter as a catch-all for additional API parameters, complementing the schema coverage of 75%.

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?

The description clearly states the tool updates the description of a template version, distinguishing it from related tools like create, delete, get, and list. It also adds a critical constraint that HTML cannot be modified after creation.

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

Usage Guidelines3/5

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

The description implies usage for updating descriptions only, and mentions the HTML constraint, but does not explicitly guide when to use this tool versus alternatives like creating a new version for HTML changes.

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

lob_us_autocompletions_createAutocomplete a US addressA
Read-onlyIdempotent

Suggest completed US addresses from a partial input — useful for typeahead UX. Returns up to 10 suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
address_prefixYesPartial primary address line to autocomplete.
cityNo
stateNoTwo-letter US state code.
zip_codeNo
geo_ip_sortNoSort suggestions by proximity to the requesting IP.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. Description adds the return limit of 10 suggestions. This adds marginal value beyond annotations but does not contradict them.

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with the primary action. Every sentence adds value: the first explains what it does and use case, the second specifies output limit. Ideal conciseness.

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

Completeness3/5

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

With 6 parameters and no output schema, the description covers the main behavior and output count but lacks detail on how parameters like geo_ip_sort and extra affect results. Annotations supplement safety, but full operational context is missing.

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 description coverage is 67% (moderate), with 4 of 6 parameters described. The overall description does not add any additional meaning to parameters beyond what the schema provides. For the two parameters without schema descriptions (city, zip_code), the description also provides no guidance.

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?

Description clearly states it suggests completed US addresses from partial input for typeahead UX, and returns up to 10 suggestions. This distinguishes it from sibling tools like lob_us_verifications_create (verifies full addresses) and lob_addresses_list (lists existing addresses). The verb 'suggest' and resource 'US addresses' are specific.

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?

Explicitly mentions 'useful for typeahead UX' indicating when to use. However, it does not explicitly state when not to use or provide alternative tools. Given sibling tools are implicitly different, this is clear but not exhaustive.

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

lob_us_verifications_createVerify a US addressA
Read-onlyIdempotent

Verify, correct, and standardize a single US address. Returns deliverability status, USPS-formatted components, geolocation (lat/lng), and county info.

ParametersJSON Schema
NameRequiredDescriptionDefault
primary_lineYesPrimary street address line.
secondary_lineNoApartment/suite/unit line.
urbanizationNoPuerto Rico urbanization, if applicable.
cityNo
stateNoTwo-letter US state code.
zip_codeNo5- or 9-digit ZIP.
addressNoFull single-line address, used instead of separated fields.
recipientNoRecipient name.
caseNoCasing to apply to returned components. Defaults to 'upper'.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate read-only, non-destructive, and idempotent behavior. The description adds specific return value details (deliverability status, USPS-formatted components, geolocation, county info), which enhances transparency beyond annotations. No contradictions.

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

Conciseness5/5

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

The description is a single sentence that is concise and informative. It front-loads the key action and output, with no unnecessary words. Every piece of information earns its place.

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

Completeness4/5

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

Given the 10 parameters and high schema coverage, the description adequately covers the purpose and outputs. It does not discuss error cases or prerequisites, but for a verification tool with read-only semantics and idempotency, the description is sufficiently complete for an agent to understand the tool's functionality.

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 description coverage is 90%, so the schema already explains most parameters. The description does not add new semantics beyond what is in the schema. It reinforces that the tool handles a single US address, but that is already implied by the tool name. Baseline score of 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?

The description clearly states the action ('Verify, correct, and standardize'), the resource ('a single US address'), and the outputs (deliverability status, USPS components, geolocation, county info). It differentiates from sibling tools like 'lob_bulk_us_verifications_create' by specifying 'single', and from 'lob_us_verifications_get' by being a creation/verification action.

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 description implies use for single-address verification, contrasting with bulk operations available in siblings. However, it lacks explicit guidance on when to use this tool vs others like 'lob_us_verifications_get' or 'lob_intl_verifications_create'. The context is clear but not exhaustive.

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

lob_us_verifications_getRetrieve a US verificationA
Read-onlyIdempotent

Retrieve a previously-created US verification by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUS verification ID (`us_ver_…`).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering safety. The description adds no behavioral context beyond 'Retrieve', so no extra value beyond annotations.

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

Conciseness5/5

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

Single sentence of 9 words is extremely concise, front-loaded with verb and resource, and free of any extraneous content.

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

Completeness4/5

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

For a simple retrieval tool with one required parameter and no output schema, the description is adequate. It could optionally mention return values, but the verb 'Retrieve' implicitly conveys the response.

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% with a clear parameter description for 'id'. The tool description does not add any additional semantics beyond what the schema already provides.

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?

The description uses a specific verb ('Retrieve') and resource ('US verification') with an identifier, clearly distinguishing it from create/bulk tools among siblings.

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

Usage Guidelines3/5

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

The description states the tool retrieves by ID but provides no explicit guidance on when or when not to use it versus alternatives like creation tools.

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

lob_webhooks_createCreate a webhook subscriptionA
Idempotent

Subscribe an HTTPS endpoint to receive Lob event notifications (e.g. 'postcard.mailed', 'letter.in_transit', 'check.delivered'). The endpoint must respond with 2xx within 5 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesHTTPS URL to receive event POSTs.
event_typesYesEvent types to subscribe to, e.g. ['postcard.mailed', 'letter.delivered']. Use ['*'] for all.
descriptionNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4/5.0
Behavior4/5

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

The description adds a behavioral constraint: the endpoint must respond with 2xx within 5 seconds. Annotations include idempotentHint=true and openWorldHint=true, but the description provides additional context beyond these annotations. No contradiction.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, no wasted words. Efficient and clear.

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

Completeness4/5

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

The description is self-contained for a create operation, but lacks information about the return value (no output schema). However, the schema and annotations provide additional context. Minor gap, but overall adequate.

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 description coverage is 80%, so the schema covers most parameters. The description does not add new meaning beyond what the schema provides (it mentions endpoint and event types but not in detail). The baseline is 3 due to high coverage.

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?

The description clearly states the verb 'Subscribe' and the resource 'HTTPS endpoint to receive Lob event notifications', with specific examples of event types. It distinguishes from sibling tools like list, delete, update.

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

Usage Guidelines3/5

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

The description implies usage by describing the subscription process but does not explicitly state when to use this tool versus alternatives like update or delete. It includes a requirement (2xx response within 5 seconds) but no guidance on when not to use it.

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

lob_webhooks_deleteDelete a webhookB
DestructiveIdempotent

Delete a webhook subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook ID (`ep_…`).

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description adds no behavioral details beyond stating 'Delete'. It does not mention consequences like irreversibility or impact on related resources.

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

Conciseness5/5

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

A single, direct sentence with no redundancy. Every word is necessary, and the structure is optimally concise.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema) and annotations providing safety info, the description is largely complete. However, it could mention that deletion is permanent or require confirmation.

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?

The input schema has 100% coverage with a clear description for the single 'id' parameter. The description adds no additional meaning beyond the schema, so baseline score of 3 applies.

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?

The description 'Delete a webhook subscription' clearly states the action and resource. The name and title reinforce the purpose, and it distinguishes from sibling tools like create, get, list, and update.

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

Usage Guidelines2/5

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

No guidance provided on when to use this tool versus alternatives (e.g., update or list). The description does not mention prerequisites or situations where deletion is appropriate.

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

lob_webhooks_getRetrieve a webhookA
Read-onlyIdempotent

Retrieve a single webhook subscription by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook ID (`ep_…`).

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds no new behavioral context beyond what annotations provide, so it does not earn a higher score.

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

Conciseness5/5

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

The description is a single, concise sentence with no superfluous information. It is front-loaded and clearly communicates the tool's action.

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?

For a simple retrieval tool with one parameter and thorough annotations, the description is complete. No output schema is needed since the purpose is straightforward.

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%; the schema already details the 'id' parameter with pattern and description. The description adds no additional meaning beyond the schema, so baseline score of 3 applies.

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?

The description clearly states the tool retrieves a single webhook subscription by ID, with a specific verb and resource. It distinguishes from siblings like lob_webhooks_list (list all) and lob_webhooks_update (update).

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

Usage Guidelines3/5

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

The description does not provide explicit when-to-use or when-not-to-use guidance. While the purpose is clear, there is no mention of alternatives or context for retrieval vs. list or other operations.

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

lob_webhooks_listList webhooksA
Read-onlyIdempotent

List webhook subscriptions on your account. Note: Lob's /webhooks does NOT support include: ['total_count'] — for a count, just inspect data.length (webhook lists are small).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (default 10, max 100).
beforeNoCursor for the previous page.
afterNoCursor for the next page.
includeNoResponse add-ons. Pass ['total_count'] alongside any filters and limit:1 to answer 'how many?' questions in a single call — far cheaper than paginating to count. Not accepted on nested order endpoints (buckslip/card orders) or /webhooks.
date_createdNoISO8601 date filter object with gt/gte/lt/lte keys, e.g. { gt: '2026-04-23T00:00:00Z' } for 'last 7 days'. Combine with include:['total_count'] and limit:1 for date-bounded counts.
metadataNoFilter by metadata key/value pairs.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, non-destructive, and idempotent. The description adds that webhook lists are small and that the 'total_count' parameter is not supported, disclosing non-obvious API limitations beyond 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.

Conciseness5/5

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

Two concise sentences: the first states the purpose, the second provides a critical caveat. No unnecessary words, and the key information is front-loaded.

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

Completeness4/5

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

The description, combined with annotations and schema, gives sufficient context for a simple list tool. It lacks explicit mention of the return format (e.g., a list of webhook objects), but the agent can infer from the tool's purpose and parameters.

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?

Input schema has 100% coverage with detailed descriptions for all 6 parameters. The description's note about 'total_count' is already present in the schema's explanation of the 'include' parameter, so it adds no new parameter-level information. Baseline 3 applies.

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?

The description clearly states 'List webhook subscriptions on your account,' using a specific verb and resource. This distinguishes it from sibling tools like lob_webhooks_get or lob_webhooks_create, which have different purposes.

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 description explicitly warns that 'include: ["total_count"]' is not supported and advises using 'data.length' instead. This gives clear when-to-use guidance for a common parameter, though it doesn't compare directly to siblings like list vs. get.

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

lob_webhooks_updateUpdate a webhookA
Idempotent

Update a webhook's URL, event subscriptions, or description. Note: the disabled flag on the response is Lob-managed (e.g. Lob auto-disables webhooks whose delivery URL consistently fails) and is not settable by callers.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook ID (`ep_…`).
urlNo
event_typesNo
descriptionNo
metadataNoUp to 20 string key/value pairs of arbitrary metadata to attach to the resource.
extraNoAdditional Lob API parameters not enumerated above. Merged into the request body verbatim. See https://docs.lob.com for the full parameter list per resource.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate it is not read-only or destructive. The description adds crucial context about the disabled flag being Lob-managed and not settable by callers, which is valuable beyond 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.

Conciseness5/5

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

Two sentences with no redundancy. The first sentence states the function, and the second adds an important behavioral note. Every sentence is essential.

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

Completeness4/5

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

Given the tool complexity (6 parameters, no output schema), the description covers the key updateable fields and a critical behavioral note. It omits details about idempotency (hinted in annotations) and the extra parameter, but these are acceptable given the schema and reference link.

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

Parameters4/5

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

Schema coverage is 50%. The description clarifies the purpose of three parameters (url, event_types, description) that lack schema descriptions, compensating for the gap. Other parameters have adequate schema descriptions.

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?

The description clearly states the action ('Update') and the resource ('webhook'), listing the specific attributes that can be updated (URL, event subscriptions, description). This distinguishes it from sibling tools like create, delete, get, and list.

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

Usage Guidelines3/5

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

The description implies usage for updating existing webhooks but lacks explicit guidance on when to use this tool versus alternatives (e.g., when to create instead). No exclusions or prerequisites are stated.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource and action, with clear naming and descriptions that prevent confusion even among similar resources like address verifications (US vs international, single vs bulk) or mail piece types (postcard, letter, self-mailer).

Naming Consistency5/5

All tools follow the consistent pattern `lob_<resource>_<action>` with plural resources and common verbs (create, delete, get, list, update, verify, preview, cancel, search). No mixing of conventions or ambiguous naming.

Tool Count3/5

With 78 tools, the server is very large, exceeding typical well-scoped ranges. However, the count is justified by the comprehensive coverage of Lob's full API, which includes many resource types and operations. It is borderline but acceptable for a complete integration.

Completeness4/5

The tool surface covers all major resources (addresses, bank accounts, mail pieces, templates, webhooks) with appropriate CRUD and lifecycle operations. Minor gaps exist (e.g., no update for mail pieces, no QR code creation), but these align with Lob's API capabilities.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to send physical letters and postcards to over 200 countries using Solana cryptocurrency for payment. It provides tools for generating mail quotes, managing wallet balances, and automating physical correspondence directly through the Model Context Protocol.
    4
    75
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to search, read, and send emails with attachment support through the Gmail API. It also provides tools for comprehensive label management and uses secure OAuth2 authentication for mailbox access.
    205
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A secure Model Context Protocol server providing HTTP endpoints for AI agent tool execution, including file system operations, shell commands, and LLM-based code generation.
    1

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/optimize-overseas/lob-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server