lob-mcp
The lob-mcp server is a Model Context Protocol (MCP) interface to the Lob.com API, enabling AI assistants to verify addresses and send physical mail programmatically.
Physical Mail Creation (Billable)
Postcards: Send in 4×6, 6×9, or 6×11 sizes
Letters: Send with options for color, double-sided printing, certified mail, return envelopes, and inserts
Self-Mailers: Send bifold self-mailers in 6×18 or 11×9 sizes
Checks: Send physical checks drawing funds from a linked bank account
Buckslip & Card Orders: Order printed buckslip and card inventory
Address Services
Verify single or bulk US/international addresses (up to 1,000 at once)
Autocomplete partial US addresses
Validate a person/business name against a US address
Save, retrieve, list, and delete addresses in an address book
Templates & Content Management
Create, list, search, update, and delete reusable HTML templates (with Handlebars variable support)
Manage template versions
Campaigns & Creatives
Create and manage bulk mail campaigns and associated creatives (artwork for postcards, letters, self-mailers)
Bank Accounts
Register, verify, list, retrieve, and delete bank accounts for check writing
Webhooks
Subscribe, update, list, retrieve, and delete webhook endpoints for Lob event notifications
Analytics & Proofs
List QR code scan analytics, filterable by date, resource, or campaign
Create, retrieve, and approve/reject resource proof PDFs
Cancel scheduled mail pieces before send
Design Specifications
Retrieve print-ready specs (dimensions, bleed, safe area, no-print zones) for all mail piece types
Safety & Compliance
Preview/commit token gating before any billable send
Test mode by default (no real mail or charges without explicit opt-in)
Configurable piece-count cap per server run
Mandatory idempotency keys on all billable POSTs
Dual-key (test/live) authentication
PII redaction in error output
Optional elicitation prompts for high-value or large bulk orders
Provides access to USPS tracking events through Lob's API integration, enabling retrieval of mail delivery status and tracking information for physical mail sent via Lob.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lob-mcpverify this address: 123 Main St, San Francisco, CA 94105"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 initWalks 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>_previewreturns a Lob-rendered proof PDF (postcards/letters/self-mailers) or a textual summary (checks/inventory orders) plus aconfirmation_token. The matchinglob_<resource>_createrequires that token in live mode and rejects payload mutations.Dual-key model with split read/commit modes —
LOB_TEST_API_KEY(always required) backs previews and is the fallback for everything.LOB_LIVE_API_KEY(optional) drives commits whenLOB_LIVE_MODE=trueAND 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=trueoverrides 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
amountover a USD threshold or bulk inventory orders over a piece threshold.Complete tool annotation matrix — every tool sets
readOnlyHint,destructiveHint,idempotentHint, andopenWorldHintso hosts can render appropriate confirmation prompts.PII redaction in error output.
Generic
extraparameter 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
Node.js ≥ 18
A Lob test API key — get one free at https://dashboard.lob.com/settings/api-keys
(Optional) A Lob live API key, only if you want to send real mail
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 snippetsInstall globally
npm install -g lob-mcp
lob-mcpInstall from source
git clone https://github.com/optimize-overseas/lob-mcp.git
cd lob-mcp
npm install
npm run build
node build/index.jsConfiguration
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 |
| Yes | Lob |
| No | Lob |
Migration from 0.x:
LOB_API_KEYhas been replaced. Atest_…key inLOB_API_KEYis silently accepted as the test key (soft fallback). Alive_…key inLOB_API_KEYis rejected with a migration error — setLOB_TEST_API_KEYandLOB_LIVE_API_KEYexplicitly.
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 |
| Always the test key — proofs are a test-account artifact. Never refused. |
commit | the 6 billable |
|
read | lists, gets, searches, and pure lookups (address verification / autocompletion / identity validation) | live whenever |
mutation | deletes, cancels, updates, and non-billable creates (templates, campaigns, creatives, webhooks, addresses, bank accounts, inventory) | FAIL-CLOSED: refused before any network call unless |
Variable | Default | Controls | Description |
|
| Commit + mutation gate | Set to |
|
| Read mode (opt-out) | When |
Typical configurations:
Setup | Test key | Live key |
| 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 | ✅ | ✅ |
| Reads + commits on live; mutations permitted (live key). |
Force test reads | ✅ | ✅ | any | + |
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/_verifyare mutations), and buckslip/card inventory orders need the asset to exist first (lob_buckslips_create/lob_cards_createare 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 |
|
| When |
|
| How long a preview's |
| (unset) | Exact ceiling on the total number of mail pieces this server process may create. Counter resets when the server restarts. |
| (unset) | If set, fires an MCP elicitation form when a check |
| (unset) | If set, fires elicitation when a buckslip or card inventory order's quantity exceeds this threshold. |
Lob HTTP
Variable | Default | Description |
| (account default) | Pin a specific Lob API version via the |
|
| Override the Lob API base URL. |
|
| Per-request HTTP timeout for outbound Lob calls. A timeout surfaces as a |
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-mcpUse with the MCP Inspector
npm run inspectorThen 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:
Default test commits. Without
LOB_LIVE_MODE=true, every billable*_createruns 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, butLOB_READS_USE_TEST=trueforces them back to test.Preview/commit split. Every billable tool has a matching
*_previewthat calls Lob via the test key against/resource_proofs(postcards/letters/self-mailers) or returns a textual summary (checks/inventory orders). The preview returns aconfirmation_token. Calling*_createin live mode requires that token AND rejects any payload mutation between preview and commit.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 islob-mcp-${token}so retrying the same commit de-duplicates at Lob (24-hour window).Exact piece cap.
LOB_MAX_PIECES_PER_RUNis checked at commit time. Exceeding it raisesLOB_PIECE_CAP_EXCEEDEDbefore any Lob call.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.Tool annotations. Every tool sets
readOnlyHint,destructiveHint,idempotentHint, andopenWorldHintso hosts render appropriate confirmation prompts.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:
MCP resources (recommended)
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 spec —
lob://specs/{mail_type}/{variant}.jsonreturns structured data: dimensions (in inches), bleed, safe area, no-print zones with anchor + offset semantics, surface descriptions, and file-format requirements.PDF template —
lob://specs/{mail_type}/{variant}.pdfreturns 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
|
| PDF? |
|
| ✓ |
|
| ✓ |
|
| ✓ |
|
| ✓ |
|
| ✓ |
|
| (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 buildRe-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 |
|
|
Letters |
|
|
Self-mailers |
|
|
Checks |
|
|
Buckslip orders |
|
|
Card orders |
|
|
Address book
lob_addresses_create·lob_addresses_list·lob_addresses_get·lob_addresses_delete
Address verification
lob_us_verifications_create·lob_us_verifications_getlob_us_autocompletions_createlob_intl_verifications_createlob_bulk_us_verifications_create·lob_bulk_intl_verifications_createlob_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_previewreturns a textual summary instead of a PDF. The token still binds the payload — committing a differentamount,to, or bank account is rejected withLOB_TOKEN_PAYLOAD_MISMATCH.
Templates and template versions
lob_templates_create·lob_templates_list·lob_templates_get·lob_templates_update·lob_templates_deletelob_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_deletelob_creatives_create·lob_creatives_get·lob_creatives_update·lob_creatives_delete
Creative content quirk. Lob's
/v1/creativesendpoint accepts only Lob template IDs (tmpl_…) for thefront,back,inside,outside, andfilecontent fields — not HTML strings or remote URLs. To use a URL or HTML as creative content, first calllob_templates_createto upload it as a template, then pass the resultingtmpl_…here.
Buckslips, cards, and print orders
lob_buckslips_create·lob_buckslips_list·lob_buckslips_getlob_buckslip_orders_preview·lob_buckslip_orders_create(BILLABLE) ·lob_buckslip_orders_listlob_cards_create·lob_cards_list·lob_cards_getlob_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-dataand 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_listlob_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 groupThe 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
TokenStoreinterface 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 toolslob_addresses_createSave address to address bookAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Recipient name (max 40 chars). | |
| company | No | Company name (max 40 chars). | |
| address_line1 | Yes | Primary street address line. | |
| address_line2 | No | Apartment/suite/unit line. | |
| address_city | No | ||
| address_state | No | Two-letter US state code, or full state/province/region name for international. | |
| address_zip | No | ZIP/postal code. | |
| address_country | No | Two-letter ISO country code. Omit or use 'US' for domestic. | |
| phone | No | ||
| No | |||
| description | No | Internal description of the address. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 addressADestructiveIdempotent
Delete a saved address from the address book. Does not affect mail pieces already created with it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Lob address ID to delete. |
TDQS
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.
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.
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.
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.
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.
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 addressARead-onlyIdempotent
Retrieve a single saved address by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Lob address ID (`adr_…`). |
TDQS
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.
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.
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.
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.
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.
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 entriesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 accountAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| routing_number | Yes | 9-digit US routing number. | |
| account_number | Yes | Account number. | |
| account_type | Yes | ||
| signatory | Yes | Name of authorized signer printed on checks. | |
| description | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 accountADestructiveIdempotent
Remove a bank account. Pending checks drawn against it will continue to clear.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank account ID (`bank_…`). |
TDQS
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.
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.
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.
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.
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.
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 accountARead-onlyIdempotent
Retrieve a single bank account by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank account ID (`bank_…`). |
TDQS
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.
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.
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.
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.
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.
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 accountsARead-onlyIdempotent
List bank accounts on your Lob account. For 'how many bank accounts?' counts, pass include: ['total_count'] with limit: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 accountAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bank account ID (`bank_…`). | |
| amounts | Yes | Two micro-deposit amounts in cents, e.g. [11, 35]. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| buckslip_id | Yes | Buckslip ID (`bck_…`). | |
| quantity_ordered | Yes | Number of buckslips to order. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_buckslip_orders_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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 ordersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| buckslip_id | Yes | Buckslip ID (`bck_…`). | |
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 orderAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| buckslip_id | Yes | Buckslip ID (`bck_…`). | |
| quantity_ordered | Yes | Number of buckslips to order. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 buckslipAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| front | Yes | Front content source — PDF URL (required). | |
| back | No | Back content source — PDF URL. | |
| description | No | ||
| size | No | Buckslip size, e.g. '8.75x3.75'. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 buckslipARead-onlyIdempotent
Retrieve a single buckslip by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Buckslip ID (`bck_…`). |
TDQS
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.
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.
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.
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.
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.
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 buckslipsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 addressesARead-onlyIdempotent
Verify up to 1,000 non-US addresses in a single request.
| Name | Required | Description | Default |
|---|---|---|---|
| addresses | Yes | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 addressesARead-onlyIdempotent
Verify up to 1,000 US addresses in a single request. Returns one verification result per input, in the same order.
| Name | Required | Description | Default |
|---|---|---|---|
| addresses | Yes | ||
| case | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 campaignAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the campaign. | |
| description | No | ||
| schedule_type | No | Whether the campaign should send immediately or on a schedule. | |
| send_date | No | ISO 8601 timestamp for scheduled campaigns. | |
| target_delivery_date | No | ||
| cancel_window_campaign_minutes | No | Minutes before send during which the campaign can still be cancelled. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 campaignADestructiveIdempotent
Delete a campaign. Only allowed before send.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (`cmp_…`). |
TDQS
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.
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.
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.
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.
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.
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 campaignARead-onlyIdempotent
Retrieve a single campaign by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (`cmp_…`). |
TDQS
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.
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.
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.
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.
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.
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 campaignsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 campaignAIdempotent
Update a campaign's metadata or schedule before it has been sent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (`cmp_…`). | |
| name | No | ||
| description | No | ||
| send_date | No | ||
| target_delivery_date | No | ||
| cancel_window_campaign_minutes | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Card ID (`card_…`). | |
| quantity | Yes | Number of cards to order. (Note: buckslip orders use `quantity_ordered`; Lob's API differs per resource.) | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_card_orders_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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 ordersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Card ID (`card_…`). | |
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 orderAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Card ID (`card_…`). | |
| quantity | Yes | Number of cards to order. (Note: buckslip orders use `quantity_ordered`; Lob's API differs per resource.) | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 cardBIdempotent
Upload a card — a small printed insert (e.g. business card, plastic gift card) that can be inserted with a letter.
| Name | Required | Description | Default |
|---|---|---|---|
| front | Yes | Front content source. | |
| back | No | Back content source. | |
| description | No | ||
| size | No | Card size per Lob docs. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 cardARead-onlyIdempotent
Retrieve a single card by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Card ID (`card_…`). |
TDQS
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.
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.
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.
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.
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.
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 cardsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 checkADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Check ID (`chk_…`). |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| bank_account | Yes | Verified Lob bank account ID. | |
| amount | Yes | Check amount in USD (e.g. 125.50). | |
| check_number | No | Optional check number; auto-assigned if omitted. | |
| memo | No | Memo line on the check (max 40 chars). | |
| message | No | Plain-text message printed on the bottom of the check page (max 400 chars). Mutually exclusive with `check_bottom`. | |
| check_bottom | No | Custom 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`. | |
| logo | No | Logo printed on the check face (upper-left, grayscale; PNG or JPG). | |
| attachment | No | Secondary document included in the envelope after the check page. Up to 6 pages. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_checks_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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 checkBRead-onlyIdempotent
Retrieve a single check by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Check ID (`chk_…`). |
TDQS
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.
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.
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.
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.
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.
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 checksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| scheduled | No | ||
| send_date | No | ISO8601 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
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.
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.
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.
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.
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.
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 checkAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| bank_account | Yes | Verified Lob bank account ID. | |
| amount | Yes | Check amount in USD (e.g. 125.50). | |
| check_number | No | Optional check number; auto-assigned if omitted. | |
| memo | No | Memo line on the check (max 40 chars). | |
| message | No | Plain-text message printed on the bottom of the check page (max 400 chars). Mutually exclusive with `check_bottom`. | |
| check_bottom | No | Custom 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`. | |
| logo | No | Logo printed on the check face (upper-left, grayscale; PNG or JPG). | |
| attachment | No | Secondary document included in the envelope after the check page. Up to 6 pages. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 creativeAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | Parent campaign ID. | |
| resource_type | Yes | ||
| front | No | Postcard creative front: a Lob template ID (`tmpl_…`). Required for postcard creatives. | |
| back | No | Postcard creative back: a Lob template ID (`tmpl_…`). Required for postcard creatives. | |
| inside | No | Self-mailer creative inside: a Lob template ID. | |
| outside | No | Self-mailer creative outside: a Lob template ID. | |
| file | No | Letter creative file: a Lob template ID. Required for letter creatives. | |
| details | No | Resource-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. | |
| description | No | ||
| from | No | Sender address — saved address ID (`adr_…`) or inline. Required for letter creatives. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 creativeBDestructiveIdempotent
Delete a creative.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Creative ID (`crv_…`). |
TDQS
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.
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.
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.
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.
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.
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 creativeARead-onlyIdempotent
Retrieve a single creative by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Creative ID (`crv_…`). |
TDQS
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.
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.
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.
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.
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.
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 creativeAIdempotent
Update a creative's description or metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Creative ID (`crv_…`). | |
| description | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 specARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| mail_type | Yes | Mail-piece category. | |
| variant | Yes | Variant 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
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.
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.
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.
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.
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.
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 addressARead-onlyIdempotent
Validate a person/business name against a US address. Returns whether the recipient is associated with the address.
| Name | Required | Description | Default |
|---|---|---|---|
| recipient | Yes | Name to validate. | |
| primary_line | Yes | ||
| secondary_line | No | ||
| city | No | ||
| state | No | ||
| zip_code | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 addressARead-onlyIdempotent
Verify a single non-US address. Returns deliverability status and standardized components for the destination country.
| Name | Required | Description | Default |
|---|---|---|---|
| primary_line | Yes | Primary street address line. | |
| secondary_line | No | ||
| city | No | ||
| state | No | State, province, or region. | |
| postal_code | No | ||
| country | Yes | Two-letter ISO country code. | |
| address | No | Full single-line address (alternative to fields above). | |
| recipient | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 letterADestructiveIdempotent
Cancel a letter before its send_date. Production-locked letters cannot be cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Letter ID (`ltr_…`). |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
Commit a letter send. Billable in live mode. Requires a confirmation_token from lob_letters_preview that matches the current payload (live mode only).
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| file | Yes | Letter body content source (HTML, URL, template ID, or base64 PDF). | |
| color | No | Print in color (true) or black-and-white (false). Affects pricing. | |
| double_sided | No | Print on both sides. Defaults to true for letters. | |
| address_placement | No | Where the recipient address window appears on a letter. | |
| return_envelope | No | Include a return envelope. Boolean true for default, or a return envelope ID. | |
| perforated_page | No | Page number to perforate (used with return_envelope). | |
| custom_envelope | No | Custom envelope reference for letters/checks. | |
| extra_service | No | USPS extra service add-on. Affects pricing and delivery time. | |
| cards | No | Card IDs (`card_…`) to insert. Up to 4. | |
| buckslips | No | Buckslip references to insert. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_letters_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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 letterARead-onlyIdempotent
Retrieve a single letter by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Letter ID (`ltr_…`). |
TDQS
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.
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.
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.
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.
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.
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 lettersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| color | No | ||
| scheduled | No | ||
| send_date | No | ISO8601 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
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.
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.
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.
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.
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.
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 letterAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| file | Yes | Letter body content source (HTML, URL, template ID, or base64 PDF). | |
| color | No | Print in color (true) or black-and-white (false). Affects pricing. | |
| double_sided | No | Print on both sides. Defaults to true for letters. | |
| address_placement | No | Where the recipient address window appears on a letter. | |
| return_envelope | No | Include a return envelope. Boolean true for default, or a return envelope ID. | |
| perforated_page | No | Page number to perforate (used with return_envelope). | |
| custom_envelope | No | Custom envelope reference for letters/checks. | |
| extra_service | No | USPS extra service add-on. Affects pricing and delivery time. | |
| cards | No | Card IDs (`card_…`) to insert. Up to 4. | |
| buckslips | No | Buckslip references to insert. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 postcardADestructiveIdempotent
Cancel a postcard before its send_date. Only works while the postcard is still in a cancellable state — production-locked pieces cannot be cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Postcard ID (`psc_…`). |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| front | Yes | Front-of-postcard content source. | |
| back | Yes | Back-of-postcard content source. | |
| size | No | Postcard size. Defaults to 4x6. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_postcards_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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 postcardARead-onlyIdempotent
Retrieve a single postcard by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Postcard ID (`psc_…`). |
TDQS
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.
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.
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.
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.
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.
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 postcardsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| size | No | ||
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| scheduled | No | Filter to scheduled-but-not-sent postcards. | |
| send_date | No | ISO8601 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
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.
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.
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.
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.
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.
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 postcardAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| front | Yes | Front-of-postcard content source. | |
| back | Yes | Back-of-postcard content source. | |
| size | No | Postcard size. Defaults to 4x6. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 analyticsARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| resource_id | No | Filter to scans tied to a specific mail-piece ID. | |
| campaign_id | No | ||
| date_scanned | No | ISO8601 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
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.
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.
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.
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.
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.
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 proofAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| resource_type | Yes | Type of resource being proofed. | |
| resource_parameters | Yes | Parameters 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_id | No | Optional template ID to associate with the proof. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 proofARead-onlyIdempotent
Retrieve a resource proof by ID, including a URL to download the proof PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Resource proof ID. |
TDQS
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.
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.
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.
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.
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.
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 proofBIdempotent
Approve or reject a resource proof.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Resource proof ID. | |
| status | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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-mailerADestructiveIdempotent
Cancel a self-mailer before its send_date.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Self-mailer ID (`sfm_…`). |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| inside | Yes | Inside-of-self-mailer content source. | |
| outside | Yes | Outside-of-self-mailer content source. | |
| size | No | Self-mailer size. Defaults to 6x18_bifold. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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_token | No | Token from lob_self_mailers_preview. Required in live mode (LOB_LIVE_MODE=true). |
TDQS
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.
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.
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.
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.
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.
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-mailerARead-onlyIdempotent
Retrieve a single self-mailer by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Self-mailer ID (`sfm_…`). |
TDQS
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.
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.
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.
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.
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.
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-mailersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| size | No | ||
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| scheduled | No |
TDQS
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.
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.
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.
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.
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.
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-mailerAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Internal description (max 255 chars). | |
| to | Yes | Recipient address. Either a saved address ID (`adr_…`) or an inline address. | |
| from | Yes | Sender (return) address. Either a saved address ID (`adr_…`) or an inline address. | |
| send_date | No | ISO 8601 timestamp (e.g. '2026-05-01T00:00:00Z') to schedule the send. Must be at most 180 days in the future. | |
| mail_type | No | Mail class. Defaults to usps_first_class for most pieces. | |
| merge_variables | No | Key/value pairs substituted into Handlebars-style {{variables}} in your HTML/template content. | |
| metadata | No | Up to 20 string key/value pairs to attach to the resource. | |
| billing_group_id | No | Billing group ID (`bg_…`) to attribute the charge to. | |
| use_type | No | Required for some mail classes. 'marketing' for promotional, 'operational' for transactional. | |
| inside | Yes | Inside-of-self-mailer content source. | |
| outside | Yes | Outside-of-self-mailer content source. | |
| size | No | Self-mailer size. Defaults to 6x18_bifold. | |
| idempotency_key | No | Idempotency 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. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 templateAIdempotent
Create a reusable HTML template that can be referenced by ID (tmpl_…) when creating mail pieces. Supports Handlebars-style {{variables}} for runtime substitution.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | ||
| html | Yes | HTML content of the template (UTF-8). | |
| engine | No | Template engine. Defaults to 'handlebars'. | |
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 templateADestructiveIdempotent
Delete a template. Mail pieces already created from it are unaffected; future references will fail.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (`tmpl_…`). |
TDQS
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.
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.
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.
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.
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.
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 templateARead-onlyIdempotent
Retrieve a single template (including its published version) by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (`tmpl_…`). |
TDQS
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.
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.
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.
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.
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.
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 templatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| include_html | No | Include 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
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.
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.
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.
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.
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.
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_searchSearch templatesARead-onlyIdempotent
Find templates by description substring (case-insensitive) and/or by Lob metadata. Pages through /templates server-side and returns slim matches (no HTML — use lob_templates_get(id) for the full body). Useful when you know the template by name but not by tmpl_… id.
| Name | Required | Description | Default |
|---|---|---|---|
| description_contains | No | Substring to match against each template's `description` field. Case-insensitive. Filtered client-side after pages are fetched. | |
| metadata | No | Forwarded to Lob as a `metadata[k]=v` filter. Use this to narrow the page walk on the server side before client-side description matching. | |
| limit | No | Maximum matches to return (default 20, max 100). | |
| max_pages | No | Maximum number of Lob list pages to walk before stopping (default 5, page size 100). Caps total templates inspected at max_pages × 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds behavioral details on pagination (max_pages, limit), client-side vs server-side filtering, and return content (no HTML), 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: first sentence states function and behavior, second provides use case and alternative. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description explains returns (slim matches), pagination behavior, parameter usage, and points to alternative for full body. Complete for a search tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds context beyond schema: description_contains is case-insensitive and client-side filtered, metadata is forwarded as server filter, limit is max matches, max_pages caps inspected templates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds templates by description substring and/or Lob metadata, and distinguishes from siblings like lob_templates_list and lob_templates_get by detailing server-side paging and slim matches without HTML.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case ('useful when you know the template by name but not by tmpl_… id') and suggests an alternative (lob_templates_get for full body), though it doesn't explicitly state when not to use.
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 templateAIdempotent
Update a template's metadata or published version. To publish a new version, set published_version to a version ID (vrsn_…).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (`tmpl_…`). | |
| description | No | ||
| published_version | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 versionAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template ID (`tmpl_…`). | |
| description | No | ||
| html | Yes | HTML content for this version. | |
| engine | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 versionADestructiveIdempotent
Delete a template version. Cannot delete the currently published version.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template ID (`tmpl_…`). | |
| version_id | Yes | Template version ID (`vrsn_…`). |
TDQS
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.
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.
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.
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.
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.
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 versionARead-onlyIdempotent
Retrieve a specific version of a template.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template ID (`tmpl_…`). | |
| version_id | Yes | Template version ID (`vrsn_…`). |
TDQS
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.
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.
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.
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.
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.
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 versionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template ID (`tmpl_…`). | |
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. | |
| include_html | No | Include 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
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.
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.
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.
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.
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.
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 versionAIdempotent
Update the description of a template version. HTML cannot be modified after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template ID (`tmpl_…`). | |
| version_id | Yes | Template version ID (`vrsn_…`). | |
| description | No | ||
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 addressARead-onlyIdempotent
Suggest completed US addresses from a partial input — useful for typeahead UX. Returns up to 10 suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| address_prefix | Yes | Partial primary address line to autocomplete. | |
| city | No | ||
| state | No | Two-letter US state code. | |
| zip_code | No | ||
| geo_ip_sort | No | Sort suggestions by proximity to the requesting IP. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 addressARead-onlyIdempotent
Verify, correct, and standardize a single US address. Returns deliverability status, USPS-formatted components, geolocation (lat/lng), and county info.
| Name | Required | Description | Default |
|---|---|---|---|
| primary_line | Yes | Primary street address line. | |
| secondary_line | No | Apartment/suite/unit line. | |
| urbanization | No | Puerto Rico urbanization, if applicable. | |
| city | No | ||
| state | No | Two-letter US state code. | |
| zip_code | No | 5- or 9-digit ZIP. | |
| address | No | Full single-line address, used instead of separated fields. | |
| recipient | No | Recipient name. | |
| case | No | Casing to apply to returned components. Defaults to 'upper'. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 verificationARead-onlyIdempotent
Retrieve a previously-created US verification by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | US verification ID (`us_ver_…`). |
TDQS
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.
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.
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.
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.
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.
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 subscriptionAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS URL to receive event POSTs. | |
| event_types | Yes | Event types to subscribe to, e.g. ['postcard.mailed', 'letter.delivered']. Use ['*'] for all. | |
| description | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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 webhookBDestructiveIdempotent
Delete a webhook subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (`ep_…`). |
TDQS
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.
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.
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.
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.
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.
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 webhookARead-onlyIdempotent
Retrieve a single webhook subscription by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (`ep_…`). |
TDQS
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.
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.
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.
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.
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.
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 webhooksARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (default 10, max 100). | |
| before | No | Cursor for the previous page. | |
| after | No | Cursor for the next page. | |
| include | No | Response 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_created | No | ISO8601 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. | |
| metadata | No | Filter by metadata key/value pairs. |
TDQS
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.
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.
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.
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.
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.
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 webhookAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (`ep_…`). | |
| url | No | ||
| event_types | No | ||
| description | No | ||
| metadata | No | Up to 20 string key/value pairs of arbitrary metadata to attach to the resource. | |
| extra | No | Additional 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
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.
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.
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.
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.
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.
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
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).
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.
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.
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
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
Verify US & international addresses and send physical mail (postcards, letters, checks) via Lob.
Physical mail API for AI agents. Send letters, certified mail. Sandbox + live keys via MCP.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.4751MIT
- AlicenseNot gradedqualityDmaintenanceA 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.205MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server providing tools for DB queries, API calls, file I/O, and text transformations, enabling AI agents like Claude to perform real-world actions.10MIT
- FlicenseNot gradedqualityCmaintenanceA 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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