mercury-invoicing-mcp
Mercury Invoicing MCP provides AI assistants with full programmatic access to Mercury business banking and invoicing APIs, covering read/write banking, accounts receivable, webhooks, and built-in safety guards.
Banking — Accounts & Cards
List/retrieve bank accounts, credit/debit cards, and organization info
List transaction categories
Banking — Transactions
List, get, and update transactions (note/category)
Send money via ACH, wire, or check
Request money transfers (pending approval)
Create internal transfers between Mercury accounts
Banking — Recipients
List, add, and update payment recipients
Banking — Statements
List monthly statements with downloadable PDF URLs
Treasury
Get treasury account info, list treasury transactions and statements
IO Credit
List IO Credit accounts and transactions
Invoicing / Accounts Receivable (Mercury Plus required)
List, get, create, update, and cancel invoices (one-shot or recurring, with line items, due dates, payment options)
List invoice attachments
Customers / AR (Mercury Plus required)
List, get, create, update, and delete AR customers
Webhooks
Full CRUD: list, get, create, update, and delete webhook endpoints
Built-in Safeguards
Dual-window rate limiting (daily + monthly) per write bucket, persisted across restarts
Dry-run mode for testing without making real API calls
Opt-in audit logging with sensitive field redaction
Sandbox mode auto-detection for testing without real money
Fine-grained API token scoping with common recipes (read-only, bookkeeping, invoicing, etc.)
Code coverage reporting integration indicated by the project's use of Codecov for test coverage metrics.
Containerization support mentioned in the context of OpenClaw deployment instructions for running the MCP server.
GitHub integration for project hosting, CI/CD workflows, and repository management as indicated by badges and project links.
Sponsorship platform integration for supporting the project's development through Ko-fi donations.
Node.js runtime environment required for running the MCP server, as indicated by Node.js version badges and npm installation.
Package manager integration for installing and distributing the MCP server via npm registry.
Sponsorship platform integration for supporting the project's development through Patreon subscriptions.
Badge generation service integration used for displaying project status and metrics in the README.
Messaging platform mentioned as an untrusted channel where AI agents with Mercury access could be deployed.
Security analysis platform integration for monitoring npm package security as indicated by Socket Security badge.
Messaging platform mentioned as an untrusted channel where AI agents with Mercury access could be deployed.
Testing framework integration used for the project's test suite as indicated by Vitest badge.
Messaging platform mentioned as an untrusted channel where AI agents with Mercury access could be deployed.
🏦 mercury-invoicing-mcp
Mercury Banking MCP server with full Invoicing API support — first MCP to expose Mercury's accounts receivable endpoints.
A Model Context Protocol (MCP) server giving AI assistants (Claude, Cursor, Continue, etc.) full programmatic access to your Mercury business banking account, including the Invoicing API (one-shot + recurring) which is missing from every other Mercury MCP.
✨ Why this MCP?
Capability | Official Mercury MCP | dragonkhoi/mercury-mcp | mercury-invoicing-mcp |
Banking read (accounts, transactions, statements) | ✅ | ✅ | ✅ |
Banking write (send_money, recipients) | ❌ | ✅ | ✅ |
Internal transfers between your own Mercury accounts | ❌ | ❌ | ✅ |
Invoicing API (create, update, cancel, attachments) | ❌ | ❌ | ✅ |
Customers AR + recurring invoices | ❌ | ❌ | ✅ |
Webhooks full CRUD (incl. | ❌ | ❌ | ✅ |
Built-in safeguards (rate limit, dry-run, redacted audit log) | ❌ | ❌ | ✅ |
Stable token (no frequent re-auth, IP-allowlistable) | ❌ | ✅ | ✅ |
Open source (MIT) | ❌ | ✅ | ✅ |
Node.js floor | N/A (hosted) | ❌ from Node 14 EOL (2023) | ✅ Maintenance LTS ( |
Total tools exposed | ~10 | ~11 | 37 |
For pure read-only consultation, prefer the official Mercury MCP. Use this one when you need to automate invoicing, write to Mercury, or expose Mercury to LLM agents safely.
Related MCP server: faxdrop-mcp
📦 Installation
npm install -g mercury-invoicing-mcpOr use directly with npx:
npx mercury-invoicing-mcp⚙️ Configuration
The server reads MERCURY_API_KEY from the environment. Get your API key at Mercury Settings → API Tokens.
🔑 Right-sizing the token
Mercury exposes fine-grained per-resource scopes at token creation — not a single read/write toggle. Pick exactly what your use case needs and Mercury enforces the rest server-side: a tool called without the right scope returns 403, which the MCP surfaces as a clean isError: true response (with a Mercury Plus hint when relevant).
When you create the token, you choose:
Which accounts the token can see (one, several, or all).
Read or Write per resource family: Accounts, Transactions, Recipients, Send Money, Cards, Statements, Treasury, Invoicing (AR), Webhooks.
Common scope recipes for this MCP:
Use case | Scopes to grant |
Read-only consultation (dashboards, chat-channel bots) | Read on |
Bookkeeping (categorise transactions) | Read everywhere + Write on |
Invoicing automation | Read on |
Recipients management | + Write on |
Internal transfers between your own accounts | + Write on |
Outbound send-money requests | + Write on |
Webhooks-only ops | Write on |
⚠️ Important: outbound payments depend on YOUR Mercury approval policy
Whether an outbound payment created via this MCP executes immediately or waits for human approval is not controlled by the MCP — it is enforced by your Mercury workspace's approval policy (Settings → Approvals on app.mercury.com). The MCP can only ever create the API call; what Mercury does with it is up to your workspace configuration.
The three money tools behave differently:
mercury_request_send_money— always creates a pending approval request in Mercury, regardless of workspace policy. Designed for the "submit, then wait for an approver" workflow.mercury_send_money— submits a payment. It executes immediately or gets queued for approval, depending on your workspace's approval rules (amount thresholds, account-specific rules, required approvers). On a workspace configured with a $0 approval threshold, every outbound payment waits for human sign-off in the Mercury web/mobile app. On a more permissive workspace, smaller payments may settle without re-prompting.mercury_create_internal_transfer— moves money between two accounts you already own inside the same Mercury organisation. No external recipient, no approval workflow.
→ Set a strict approval policy in Mercury (e.g. require approval for any outbound payment, regardless of amount) if you intend to expose write tools to an agent. The MCP's per-call rate limits and dry-run mode are useful belt-and-braces, but the authoritative gate is Mercury's approval policy. If a prompt-injected agent calls send_money, the safety of that call depends entirely on what Mercury would have done if the same payload arrived from any other API caller.
🧪 Sandbox mode
To test against Mercury's sandbox environment (no real money, pre-populated dummy data), just use a sandbox token:
MERCURY_API_KEY=secret-token:mercury_sandbox_xxxxxxxxxxxxxxxxThe MCP auto-detects sandbox tokens (those starting with mercury_sandbox_) and points to https://api-sandbox.mercury.com/api/v1 automatically.
To override the base URL explicitly (e.g. for a self-hosted proxy):
MERCURY_API_BASE_URL=https://your-proxy.example.com/api/v1🤖 Claude Desktop / Claude Code
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (or ~/.claude.json for Claude Code):
{
"mcpServers": {
"mercury-invoicing": {
"command": "npx",
"args": ["-y", "mercury-invoicing-mcp"],
"env": {
"MERCURY_API_KEY": "secret-token:mercury_production_xxxxxxxxxxxxxxxx"
}
}
}
}🖱️ Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"mercury-invoicing": {
"command": "npx",
"args": ["-y", "mercury-invoicing-mcp"],
"env": {
"MERCURY_API_KEY": "secret-token:..."
}
}
}
}🦀 OpenClaw
OpenClaw is an open-source self-hosted agent platform that supports MCP via @modelcontextprotocol/sdk. Add to ~/.openclaw/openclaw.json:
{
"mcpServers": {
"mercury-invoicing": {
"command": "npx",
"args": ["-y", "mercury-invoicing-mcp"],
"env": {
"MERCURY_API_KEY": "secret-token:..."
}
}
}
}Restart the gateway (docker restart openclaw-openclaw-gateway-1 or your equivalent). All tools become available to all your OpenClaw agents.
Tip: For agents exposed to untrusted channels (WhatsApp, Telegram, Slack, incoming email…), grant the token only the scopes the channel actually needs. Outbound payments still require explicit human approval in the Mercury app — but minimising scopes avoids noise (spurious pending requests) and reduces what an attacker could exfiltrate via reads. See Right-sizing the token for recipe per use case.
🛠️ Tools (37 total)
🏦 Banking — Accounts
mercury_list_accounts,mercury_get_accountmercury_list_cardsmercury_get_organizationmercury_list_categories
💳 Banking — IO Credit
mercury_list_credit_accounts— wrapsGET /credit, documented under Credit › List all credit accounts in the Mercury API reference. Returns IO Credit card accounts, whichmercury_list_accountsfilters out server-side.mercury_list_credit_transactions— wrapsGET /account/{id}/transactions(SINGULAR path), the path used for IO Credit transactions including pending card authorisations. Note: distinct from the plural/accounts/{id}/transactionsused for deposit accounts.
💸 Banking — Transactions
mercury_list_transactions,mercury_get_transactionmercury_update_transaction(note, category)mercury_send_money,mercury_request_send_moneymercury_create_internal_transfer(between your own Mercury accounts)
👥 Banking — Recipients
mercury_list_recipients,mercury_add_recipient,mercury_update_recipient
📊 Banking — Statements
mercury_list_statements
🏛️ Treasury
mercury_get_treasurymercury_list_treasury_transactionsmercury_list_treasury_statements
🧾 Invoicing (Accounts Receivable)
⚠️ Mercury Plus plan required. The Invoicing & Customers (AR) APIs are only available on Mercury's Plus plan (or higher). Calls to these tools return
403 Forbiddenon Free or Standard plans. The other tools (banking, treasury, webhooks) work on every plan.
mercury_list_invoices,mercury_get_invoicemercury_create_invoice,mercury_update_invoicemercury_cancel_invoicemercury_list_invoice_attachmentsmercury_get_invoice_pdf— returns the download URL of the invoice's PDF via Mercury's documentedgetinvoicepdfendpoint ({baseUrl}/ar/invoices/{id}/pdf, authenticated, sandbox/proxy-safe). Distinct frommercury_list_invoice_attachments, which only lists manually-uploaded files.
👤 Customers (AR) — also requires Mercury Plus
mercury_list_customers,mercury_get_customermercury_create_customer,mercury_update_customer,mercury_delete_customer
🔗 Webhooks
mercury_list_webhooks,mercury_get_webhookmercury_create_webhook,mercury_update_webhook,mercury_delete_webhook
Endpoints not yet wrapped — Mercury exposes ~22 additional endpoints that this MCP does not yet cover. They will land in upcoming releases. Tracked: statement PDF download (
getstatementpdf— the invoice PDF is already covered bymercury_get_invoice_pdf), attachments (uploadtransactionattachment,uploadrecipientattachment,getattachment,listrecipientsattachments), webhook signature verification (verifywebhook), webhook events (getevent,getevents), send-money approvals (listsendmoneyapprovalrequests,getsendmoneyapprovalrequest), users (getuser,getusers), Mercury Raise SAFE (getsaferequest(s),getsaferequestdocument), and OAuth flow (obtainaccesstoken,startoauth2flow).Mercury does not expose
list_send_money_requests, COA Templates or Journal Entries via the public API at all — those features are dashboard-only.There is no
send_invoiceendpoint anywhere (API or dashboard). An invoice email is only sent when the invoice is created withsendEmailOption: "SendNow". To send a copy later, get the invoice PDF URL viamercury_get_invoice_pdf, download it, and email it manually.Tools available depend on your Mercury API token scope. The server registers all 37 tools but Mercury will reject unauthorized operations at the API level.
🗺️ Roadmap
See ROADMAP.md.
🔒 Security
Never share your API key. Use environment variables, never CLI args.
Use read-only or scoped tokens when you don't need write access.
Be aware of prompt injection risks when exposing write tools to LLMs that read untrusted content. See Anthropic's MCP security guidance.
🛡️ Built-in safeguards
This MCP includes three middleware layers that activate automatically on write tools (read tools are unaffected):
1️⃣ Rate limiting (dual-window)
Each write tool is mapped to a bucket. Every bucket enforces two rolling windows simultaneously — a daily cap (24 h) and a monthly cap (30-day rolling). A call is rejected as soon as either window is at its cap, so a runaway agent cannot drain accounts even if it stays under the daily limit by pacing itself over weeks.
Bucket | Tools | Daily | Monthly (30d) |
| send_money, request_send_money | 7 | 150 |
| create_internal_transfer | 2 | 40 |
| create_invoice, update_invoice | 10 | 200 |
| cancel_invoice | 3 | 30 |
| create_customer, update_customer, delete_customer | 3 | 60 |
| add_recipient | 3 | 45 |
| update_recipient | 2 | 15 |
| update_transaction (bookkeeping, tagging, receipts) | 50 | 500 |
| create_webhook | 2 | 15 |
| update_webhook | 2 | 15 |
| delete_webhook | 2 | 15 |
Override per bucket (both windows must be supplied):
MERCURY_MCP_RATE_LIMIT_payments=15/day,300/month # larger supplier batch
MERCURY_MCP_RATE_LIMIT_invoices_write=20/day,400/month # large monthly billing run
MERCURY_MCP_RATE_LIMIT_DISABLE=true # disable all rate limiting (not recommended)When exceeded, the tool returns an isError: true response with a structured JSON payload. The source and error_type prefix make it unambiguous that this is a local MCP safeguard — the call was never sent to Mercury. A genuine Mercury 429 surfaces separately as "Mercury API error 429: ...".
{
"source": "mcp_safeguard",
"error_type": "mcp_rate_limit_daily_exceeded",
"message": "MCP Rate Limit Exceeded — Daily (local safeguard, not a Mercury API error)",
"hint": "Daily Limit Exceeded: mercury_send_money (bucket: payments) capped at 7 per 24h. Retry in ~180 min. Override with MERCURY_MCP_RATE_LIMIT_payments=D/day,M/month if this is a legitimate batch.",
"retry_after": "2026-04-22T00:00:00.000Z"
}error_type is either mcp_rate_limit_daily_exceeded or mcp_rate_limit_monthly_exceeded — the agent learns to back off at the right granularity without confusing the MCP's local cap with a server-side Mercury limit.
The rate-limit window survives process restarts. State is persisted to ~/.mercury-mcp/ratelimit.json (mode 0o600); override the location with MERCURY_MCP_STATE_DIR=/abs/path if you need to share state between hosts or pin it to a specific volume. Without persistence, an MCP host that respawns the server per session would silently bypass the limit.
2️⃣ Dry-run mode
Inspect what an agent would do without actually calling Mercury. Useful for debugging suspected behaviour or staging:
MERCURY_MCP_DRY_RUN=trueWrite tools then return a structured payload describing the intended action without hitting the Mercury API.
3️⃣ Audit log (opt-in)
Enable structured JSON logging of every write call:
MERCURY_MCP_AUDIT_LOG=/var/log/mercury-mcp-audit.logEach line is {ts, tool, result, args} (one JSON object per line). Result is ok, dry-run, or error. The path must be absolute; sensitive fields in args (accountNumber, routingNumber, apiKey, authorization, password, token, secret, ssn) are automatically redacted. The file is created with mode 0600 (owner read/write only).
🔧 Development
git clone https://github.com/klodr/mercury-invoicing-mcp.git
cd mercury-invoicing-mcp
npm install
npm run build
npm test💡 Inspiration
@stripe/mcp — architecture patterns
dragonkhoi/mercury-mcp — initial banking tool implementations
Official Mercury MCP — read-only reference
🌐 Ecosystem
Other MCP servers in the klodr family:
📧 klodr/gmail-mcp — Gmail
📠 klodr/faxdrop-mcp — Send real faxes via FaxDrop
🏦 klodr/mercury-invoicing-mcp — Mercury banking + invoicing (you are here)
📄 License
MIT — see LICENSE.
🤝 Contributing
Issues and PRs welcome. See CONTRIBUTING.md for the test/build/coverage checklist and release process.
Available Tools
36 toolsmercury_add_recipientAIdempotent
Add a new payment recipient (a counterparty you can later send money to via ACH/wire/check).
USE WHEN: onboarding a new vendor, contractor, or other payee before sending money. The returned id is what mercury_send_money and mercury_request_send_money expect as recipientId.
DO NOT USE: for AR customers (use mercury_create_customer — recipients receive money, customers pay invoices). Mercury enforces strict KYC/banking validation on bank fields — invalid routing numbers or account numbers are rejected at create time.
SIDE EFFECTS: writes a new recipient to Mercury. Persistent. Idempotent via idempotencyKey — the MCP auto-generates one if not provided, so repeated calls with the same generated key would not duplicate; pass an explicit idempotencyKey to make this stable across retries you control.
RETURNS: { id, name, status, defaultPaymentMethod, ... } — keep id for the send-money tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Recipient legal name | |
| emails | Yes | List of email addresses | |
| paymentMethod | Yes | Payment method to send to this recipient | |
| idempotencyKey | No | Unique key to prevent duplicates | |
| defaultPaymentMethod | No | Default payment method | |
| electronicRoutingInfo | No | Bank account info for ACH/wire |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=false), description discloses write persistence, strict KYC validation, and idempotencyKey auto-generation behavior. 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?
Description is well-structured with clear sections (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS), front-loaded with core purpose, and every sentence adds unique 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?
Despite no output schema, description details return format and key fields. Covers idempotency, validation, and integration with send-money tools. Complete given tool complexity and sibling 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 has 100% description coverage for all 6 parameters, so baseline is 3. Description adds extra value by linking id parameter to sibling tools and explaining idempotency behavior, justifying a score of 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 the verb 'Add' and resource 'payment recipient', and explains the purpose: 'a counterparty you can later send money to via ACH/wire/check'. It also distinguishes from sibling tool mercury_create_customer by specifying recipients receive money, customers pay invoices.
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?
Explicit USE WHEN scenarios (onboarding vendor, contractor) and DO NOT USE for AR customers, with direct alternative named. Also explains the returned id's role in mercury_send_money and mercury_request_send_money, providing full context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_cancel_invoiceADestructive
Cancel an outstanding invoice. Mercury sends a cancellation notice to the customer if the invoice was already emailed.
USE WHEN: voiding an invoice that was issued in error, that the customer disputes, or that needs to be re-issued under a corrected line-item set. ALWAYS confirm with the user before calling — the customer-facing notification is automatic.
DO NOT USE: on an invoice already paid (Mercury rejects cancellation). To refund a paid invoice, refund out-of-band via the bank, then optionally update the internal note.
SIDE EFFECTS: marks the invoice as cancelled on Mercury. The customer-facing payment URL stops accepting payments. If the invoice was emailed, Mercury notifies the customer of the cancellation by email — confirm with the user before calling. The action is logged in Mercury's audit trail. Cancellation is final from the API perspective.
RETURNS: { id, status: "cancelled", ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Invoice ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects: marks invoice cancelled, stops payment URL, emails customer if previously emailed, logs audit trail, and finality. Complements annotations (destructiveHint=true, openWorldHint=true) with actionable details. 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?
Description is well-organized: action, side effects, usage constraints, and return format. Every sentence adds value without redundancy. 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?
Covers all necessary context: purpose, prerequisites (invoice must be outstanding), side effects, and expected return. No output schema is needed as description provides sample response. Complete for an experienced user.
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?
Single parameter 'invoiceId' with minimal description in schema, but schema coverage is 100%. Description adds no additional semantics beyond stating it's an Invoice ID. Baseline score (3) is appropriate as schema fully describes the parameter.
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 cancels an outstanding invoice, with specific use cases (voiding errors, disputes, re-issuance). Distinct from sibling tools like create or update, and 'DO NOT USE' clause clarifies boundaries.
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?
Explicit 'USE WHEN' and 'DO NOT USE' sections provide clear guidance on appropriate and inappropriate scenarios. Emphasizes user confirmation due to automatic customer notification, which is critical for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_create_customerA
Create a new Accounts Receivable customer (a billable entity you will later invoice).
USE WHEN: onboarding a new customer before issuing them an invoice. The returned id is what mercury_create_invoice expects as customerId.
DO NOT USE: for payment recipients (use mercury_add_recipient — different surface, used for outbound bank transfers, not invoicing).
SIDE EFFECTS: writes a new customer to your Mercury workspace. Persistent. NOT idempotent at the API level — calling twice with the same payload creates two customers; check mercury_list_customers for existing entries before creating to avoid duplicates.
RETURNS: { id, name, email, address, ... } — keep id for the invoicing tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Customer name | |
| Yes | Customer email | ||
| address | No | Customer billing address (Mercury requires `name` in the address) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects (writes new customer, persistent, not idempotent). Annotations only show destructiveHint: false and openWorldHint: true; description adds critical idempotency detail and persistence context. 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?
Well-structured with clear sections: purpose, usage guidelines, side effects, returns. Front-loaded with core action. Every sentence is informative 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?
Despite no output schema, description details return fields and their importance. Addresses idempotency, linking to list tool, and relationship to invoice tool. Covers all contextual needs for a creation tool with nested 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?
Schema coverage is 100%, so baseline 3. Description adds value by linking returned id to mercury_create_invoice's customerId and clarifying address name requirement. Not a full 5 because schema already documents all 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?
Description clearly states 'Create a new Accounts Receivable customer (a billable entity you will later invoice)'. Uses specific verb and resource, and distinguishes from sibling tool 'mercury_add_recipient' which handles payment recipients.
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 provides 'USE WHEN' (onboarding before invoice) and 'DO NOT USE' (payment recipients, with alternative named). Also suggests checking mercury_list_customers to avoid duplicates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_create_internal_transferAIdempotent
Move money between two of your own Mercury accounts (e.g. Checking → Savings). Funds stay inside your organisation.
USE WHEN: rebalancing cash between your own Mercury accounts — sweeping idle deposits to Treasury, funding a sub-account before issuing cards, etc. Both accounts must belong to your workspace.
DO NOT USE: to send money to an external counterparty (use mercury_send_money). To request approval-gated movement, use mercury_request_send_money (different surface, external only).
SIDE EFFECTS: moves real money between two accounts you own. Settles immediately, no approval workflow because no external recipient is involved. Persistent ledger entries on both sides. Idempotent via idempotencyKey — auto-generated if omitted, but pass an explicit one to make retries safe.
RETURNS: { id, amount, status, ... } — the booked transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note attached to the transfer | |
| amount | Yes | Amount in USD (>= 0.01) | |
| idempotencyKey | No | Unique key to prevent duplicate transfers. Auto-generated if omitted; pass an explicit one to make retries safe. | |
| sourceAccountId | Yes | Source Mercury account ID | |
| destinationAccountId | Yes | Destination Mercury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (non-destructive, idempotent), description adds immediate settlement, no approval workflow, permanent ledger changes, and idempotency 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?
Well-structured with clear headings (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS). Every sentence adds value, 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?
Covers purpose, usage, side effects, and return shape. Lacks explicit error handling but sufficient for a well-annotated read/write 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 coverage is 100%, so baseline is 3. Description does not add parameter details beyond schema, but is not required to.
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 moves money between two Mercury accounts owned by the same organization, distinguishes from external transfers and approval-gated requests.
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 provides USE WHEN and DO NOT USE scenarios, names alternative tools (mercury_send_money, mercury_request_send_money), and notes workspace requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_create_invoiceA
Create a new invoice (one-shot or to be sent recurrently). Requires AR write scope.
USE WHEN: billing a customer that already exists in Mercury (customerId from mercury_create_customer or mercury_list_customers). Set sendEmailOption: "SendNow" to email the invoice immediately to the customer's contact email.
DO NOT USE: when the customer does not exist yet (call mercury_create_customer first). To attach a file to the invoice, use the Mercury web app at creation time — the API attachment-upload endpoint is not exposed by this MCP currently.
SIDE EFFECTS: writes a new invoice to Mercury. Persistent. With sendEmailOption: "SendNow" (the default), Mercury also sends a real email with a payment link to the customer — confirm the customer's email and the line items before calling. Mercury Plus tier required for the AR write scope.
RETURNS: { id, status, amount, paymentUrl, ... } — paymentUrl is the Mercury-hosted page where the customer pays.
| Name | Required | Description | Default |
|---|---|---|---|
| dueDate | Yes | Due date (YYYY-MM-DD) | |
| ccEmails | No | CC emails for notifications | |
| poNumber | No | Purchase order number | |
| lineItems | Yes | Invoice line items | |
| payerMemo | No | Memo shown to payer | |
| customerId | Yes | Customer ID (created via mercury_create_customer) | |
| invoiceDate | Yes | Invoice date (YYYY-MM-DD) | |
| internalNote | No | Note visible only to your org | |
| invoiceNumber | No | Customer-facing invoice number (≤255 chars; Mercury rejects 300+ characters on the edit endpoint) | |
| achDebitEnabled | No | Allow ACH debit payments. Default: true | |
| sendEmailOption | No | Whether to email the invoice immediately. Default: SendNow | |
| creditCardEnabled | No | Allow credit card payments. Default: true | |
| destinationAccountId | Yes | Mercury account ID where invoice payments will be deposited | |
| servicePeriodEndDate | No | Service period end (YYYY-MM-DD) | |
| useRealAccountNumber | No | Show real (vs virtual) account number on the invoice. Default: false | |
| servicePeriodStartDate | No | Service period start (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects: writes a persistent invoice, sends a real email with payment link when sendEmailOption is default, and requires Mercury Plus tier. Annotations only have openWorldHint and destructiveHint; the description adds much-needed behavioral context (persistence, email sending, tier requirement) 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 well-organized into purpose, USE WHEN, DO NOT USE, SIDE EFFECTS, and RETURNS sections. It is front-loaded with the core purpose, each sentence earns its place, and the length is appropriate given the tool's 16 parameters.
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 (16 params, no output schema), the description covers prerequisites, side effects, return structure, and edge cases (attachment limitation). It also warns about email sending and tier requirement, making it complete for an AI agent to invoke 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?
Input schema has 100% description coverage, so baseline is 3. The description adds extra meaning for key parameters: explains customerId source, highlights lineItems.name 200-char limit and workaround, and clarifies sendEmailOption default. This goes beyond schema descriptions for critical parameters, justifying 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 'Create a new invoice (one-shot or to be sent recurrently)' with a specific verb and resource. It distinguishes from sibling tools like mercury_cancel_invoice and mercury_create_customer by providing explicit 'USE WHEN' and 'DO NOT USE' conditions.
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 'USE WHEN' and 'DO NOT USE' sections, including when to call mercury_create_customer first. It also advises on setting sendEmailOption to 'SendNow' for immediate email, giving clear context for when to use the tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_create_webhookA
Register a new webhook endpoint. Mercury will POST events as JSON to the provided URL.
USE WHEN: subscribing an external system to Mercury events (transaction.posted, invoice.paid, etc.) so you can react in near real-time without polling.
DO NOT USE: with non-HTTPS URLs, loopback / RFC 1918 / link-local / cloud-metadata IPs — the MCP enforces a defense-in-depth gate on top of Mercury's own validation to block accidental SSRF or exfiltration via prompt injection.
SIDE EFFECTS: writes a new webhook subscription to Mercury. Persistent. Once registered, Mercury immediately starts delivering matching events to your URL — make sure the endpoint is ready to receive (and ideally verify Mercury's signature). NOT idempotent at the API level — calling twice creates two subscriptions firing duplicate events.
RETURNS: { id, url, status, events, ... } — keep id for mercury_update_webhook / mercury_delete_webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Publicly reachable HTTPS URL that will receive webhook events (POST). Must not be a loopback, private, or link-local address. | |
| events | Yes | Event types to subscribe to. Common values: - transaction.created / transaction.updated - transaction.posted / transaction.pending / transaction.failed - invoice.created / invoice.sent / invoice.paid / invoice.overdue / invoice.cancelled - customer.created / customer.updated - recipient.created / recipient.updated Check https://docs.mercury.com/reference/webhooks for the full list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes side effects (persistent writes, non-idempotent) beyond annotations. Does not contradict `destructiveHint=false` (create is additive) and provides context for `openWorldHint=true`.
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?
Structured with clear sections, front-loads action, and every sentence adds value. 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?
Despite no output schema, description provides return structure (`{ id, url, ... }`) and references sibling tools. Covers all critical aspects for agent 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%; description adds constraints for `url` (public HTTPS, block dangerous IPs) and examples for `events`, supplementing 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 identifies the action ('Register a new webhook endpoint') and the resource (webhook). It specifies that Mercury will POST events, differentiating it from other Mercury 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?
Explicit 'USE WHEN' section defines appropriate scenarios, while 'DO NOT USE' warns against invalid URLs and SSRF risks. Includes guidance on idempotency and preparation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_delete_customerADestructive
Permanently delete an Accounts Receivable customer. DESTRUCTIVE.
USE WHEN: removing a customer that was created by mistake, or that the user explicitly wants to purge. ALWAYS confirm with the user before calling — there is no undo.
DO NOT USE: when the customer has invoices in paid / outstanding status — Mercury rejects deletion in those cases and returns a 409. Cancel outstanding invoices first via mercury_cancel_invoice.
SIDE EFFECTS: permanent deletion on Mercury's side. The customer disappears from the AR list. Past invoices' customerId may dangle (Mercury does not cascade-delete invoices). NOT recoverable from API. ALWAYS confirm with the user.
RETURNS: confirmation payload from Mercury ({ deleted: true, ... } or similar).
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | Customer ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description details permanent deletion, loss from AR list, potential dangling customerId on past invoices, and non-recoverability. Annotations already mark destructiveHint and openWorldHint, but description adds concrete repercussions.
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?
Well-structured with labeled sections (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS) and bold key terms. Every sentence is informative and no 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 single-parameter destructive tool with no output schema, the description covers usage, limitations, side effects, and return value. No gaps remain for an agent to safely invoke the 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?
Only one parameter (customerId) is fully described in the schema with format and pattern. The description does not add additional semantics beyond what schema provides. With 100% schema coverage, 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 explicitly states 'Permanently delete an Accounts Receivable customer' with a specific verb and resource. It distinguishes from sibling tools like mercury_create_customer and mercury_update_customer by its destructive nature.
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 WHEN to use (removing mistaken or purge-worthy customers) and WHEN NOT to use (if invoices have paid/outstanding status). Also gives an alternative: cancel invoices via mercury_cancel_invoice. Explicitly requires user confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_delete_webhookADestructive
Delete a webhook endpoint. DESTRUCTIVE — Mercury stops delivering events to that URL.
USE WHEN: decommissioning a webhook (URL no longer reachable, integration retired, accidental duplicate). ALWAYS confirm with the user — there is no undo, and any downstream system that depended on the events stops being notified.
DO NOT USE: to temporarily silence a webhook (use mercury_update_webhook with status: "paused" instead — reversible).
SIDE EFFECTS: permanent deletion on Mercury's side. Future events that would have fired this webhook are silently dropped — no replay. Past delivery history is also lost from the Mercury dashboard.
RETURNS: confirmation payload ({ deleted: true, ... } or similar).
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | The webhook endpoint ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint: true, so the description reinforces this with concrete side effects: permanent deletion, lost delivery history, no replay. This adds valuable context beyond the annotation, though the annotation already signals the core destructive trait.
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 well-structured with bold headings and bullet points, front-loading the key purpose and destruction warning. While comprehensive, it is not overly verbose and each section adds value, though slightly longer than minimal.
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, the description appropriately mentions the return payload. It covers purpose, usage side effects, and behavioral expectations comprehensively for a destructive tool with one parameter.
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 already fully describes the single parameter (webhookId) with format and description, so the description doesn't add additional semantic value. It mentions the need for user confirmation but that's a usage guideline, not parameter-specific detail.
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 webhook endpoint' and highlights its destructive nature. It distinguishes itself from sibling tools like mercury_update_webhook by emphasizing permanent deletion vs. pausing.
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 (decommissioning webhooks) and when not to (temporary silence), with a clear alternative: use mercury_update_webhook with status 'paused' instead. This provides direct guidance for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_accountARead-only
Retrieve details for a specific Mercury deposit account by ID.
USE WHEN: fetching the full detail of a single account whose ID is already known (typically from mercury_list_accounts). Faster than re-listing when you already have the ID.
DO NOT USE: to enumerate accounts (use mercury_list_accounts). For IO Credit accounts (use the mercury_list_credit_accounts endpoint).
RETURNS: { id, name, kind, status, availableBalance, currentBalance, accountNumber, routingNumber, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | The Mercury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description lists return fields and implies read-only, consistent with annotations. Adds expected output structure 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?
Concise, front-loaded with purpose, then usage, then return shape. 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 read tool with one parameter and no output schema, the description covers purpose, usage, and return shape completely.
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 with 100% schema coverage; description adds no extra meaning 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?
Clearly states the tool retrieves details for a specific Mercury deposit account by ID, and distinguishes from listing 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?
Explicitly tells when to use (when ID known) and when not to use (for enumeration, IO Credit accounts), guiding correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_customerARead-only
Retrieve a specific Accounts Receivable customer by ID.
USE WHEN: fetching the full detail of one customer whose ID is already known. Faster than relisting + filtering when you have the ID.
DO NOT USE: to enumerate customers (use mercury_list_customers). For payment recipients use mercury_list_recipients (different surface).
RETURNS: { id, name, email, address, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | Customer ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint; the description adds that it returns full customer detail and gives the return shape. 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?
Highly concise with three clear sections: intro, usage guidance, return shape. No unnecessary words; front-loaded with key info.
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, the description adequately covers purpose, usage, and return format. Ellipsis indicates more fields, which is acceptable without 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?
Schema covers parameter fully with description; description adds context that the ID is already known and that the tool is for lookup, reinforcing the parameter's role.
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 action (Retrieve) and resource (a specific Accounts Receivable customer by ID). Differentiates from sibling tools like mercury_list_customers and mercury_list_recipients.
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 specifies when to use (when ID is known, faster than listing) and when not to use (enumerating customers or fetching payment recipients). Provides alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_invoiceARead-only
Retrieve a specific invoice by ID, including line items, status, and the payment URL.
USE WHEN: fetching the full detail of one invoice (line items, current status, balance due, payment URL) whose ID is already known.
DO NOT USE: to enumerate invoices (use mercury_list_invoices). For attachments use mercury_list_invoice_attachments.
RETURNS: { id, status, amount, customerId, lineItems, paymentUrl, dueDate, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The invoice ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and the description adds specific return fields (line items, status, payment URL). No contradictions; the description enriches the 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 concise with three clear sections: main purpose, usage guidance, and return format. Every sentence adds value; 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?
Despite no output schema, the description lists key return fields, covering what the agent needs. Tool is simple with one parameter; description fully addresses usage and expectations.
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 description for invoiceId. The tool description does not add further parameter semantics 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 'Retrieve a specific invoice by ID, including line items, status, and the payment URL.' It specifies the verb (retrieve), resource (invoice by ID), and included data, distinguishing from siblings like mercury_list_invoices.
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 includes explicit 'USE WHEN' and 'DO NOT USE' sections, directing to use for fetching one invoice with known ID and avoiding for enumeration or attachments, referencing alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_organizationARead-only
Retrieve information about your Mercury organization (legal name, EIN, registered address, etc.).
USE WHEN: fetching the workspace's legal identity for invoice generation, tax documents, or to confirm which organization the API token is bound to.
DO NOT USE: for per-account info (use mercury_get_account). The Mercury API exposes only one organization per token, so there is no list variant.
RETURNS: { id, legalName, ein, address, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds behavioral context: returns specific fields, and that the API exposes only one organization per token. 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?
Extremely concise with only three short sections. Uses clear headings and bullet-point-like formatting (RETURNS). Every sentence is necessary 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?
Given the tool has no input parameters and no output schema, the description provides a complete overview: what it does, when to use, and the return shape. No gaps for a simple read 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?
No parameters in the schema (0 params, 100% coverage). Baseline is 4. Description does not add parameter details because none exist; it correctly states no params needed.
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 information') and the resource ('Mercury organization'), listing specific fields (legal name, EIN, registered address). It distinguishes from sibling tool mercury_get_account, which is for per-account info.
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 provides USE WHEN and DO NOT USE sections, guiding the agent to use this tool for workspace legal identity and to avoid for per-account info. Mentions no list variant due to API limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_transactionARead-only
Retrieve a specific transaction by ID for a Mercury deposit account.
USE WHEN: fetching the full detail of one transaction whose ID is already known (typically from mercury_list_transactions). Faster than relisting + filtering.
DO NOT USE: to enumerate transactions (use mercury_list_transactions). For IO Credit transactions, use mercury_list_credit_transactions and filter by id client-side.
RETURNS: { id, amount, status, postedAt, counterpartyName, memo, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | The Mercury account ID | |
| transactionId | Yes | The transaction ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with readOnlyHint and openWorldHint annotations, adds context on performance (faster than relisting) and return structure. 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?
Description is compact with clear sections (purpose, usage, returns). Every sentence adds value; no fluff.
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, description lists expected return fields. For a simple single-resource fetch, this is 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?
Schema covers 100% of parameters with descriptions. Description does not add extra meaning beyond schema; merely implies usage of accountId and transactionId.
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 'Retrieve a specific transaction by ID for a Mercury deposit account.' Distinguishes from sibling tools like mercury_list_transactions and mercury_list_credit_transactions.
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 USE WHEN and DO NOT USE conditions, including specific alternative tools for enumeration and IO Credit transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_treasuryARead-only
Retrieve Mercury Treasury account information (balance, current yield, eligibility, etc.).
USE WHEN: checking treasury cash balance or yield for cash-management decisions, or to confirm the workspace has Treasury enabled.
DO NOT USE: for deposit accounts (use mercury_get_account). For Treasury transactions or statements, use the dedicated list tools.
RETURNS: { id, currentBalance, yield, eligibility, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds the return structure and mentions eligibility, which is helpful but does not contradict annotations. It could expand on openWorld implications, but overall 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?
The description is concise (4 lines), front-loaded, and every sentence adds value. 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?
With no parameters, a simple return format provided, and annotations covering safety, the description is largely complete. Slight improvement would be noting that workspace-level info is returned, 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?
Input schema has 0 parameters with 100% coverage, so description has no param details needed. Baseline 4 applies as per guidelines for zero-parameter tools.
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 Mercury Treasury account information' and lists specific fields (balance, current yield, eligibility). It distinguishes from sibling tool `mercury_get_account` which is for deposit accounts.
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 provides USE WHEN (checking treasury cash balance or yield, confirming Treasury enabled) and DO NOT USE (for deposit accounts, treasury transactions/statements) with named alternatives (`mercury_get_account`, list tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_get_webhookARead-only
Retrieve a specific webhook endpoint by ID.
USE WHEN: fetching the full detail of one webhook (URL, current status, subscribed events) whose ID is already known.
DO NOT USE: to enumerate webhooks (use mercury_list_webhooks).
RETURNS: { id, url, status, events, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | The webhook endpoint ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true; description adds return format details (id, url, status, events) which is consistent and helpful. 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 brief sentences, front-loaded with purpose, no waste. 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?
For a simple get-by-ID tool, description covers purpose, usage, return structure, and distinctions from siblings. Annotations provide readOnlyHint and openWorldHint. 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?
Schema coverage is 100% with parameter description 'The webhook endpoint ID'. Description does not add further parameter semantics beyond 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?
Clearly states 'Retrieve a specific webhook endpoint by ID', specifying the verb and resource. Distinct from siblings like mercury_list_webhooks which enumerate, and other CRUD operations.
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 (fetch detail of one webhook with known ID) and when not to (use mercury_list_webhooks for enumeration), providing clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_accountsARead-only
List all deposit bank accounts in your Mercury workspace (checking, savings, treasury).
USE WHEN: enumerating Mercury bank accounts before drilling into transactions, balances, or statements. Typically the first call when you have an account ID in hand or need one.
DO NOT USE: for IO Credit card accounts (use mercury_list_credit_accounts — /credit is a separate endpoint). For a single account whose ID is already known, prefer mercury_get_account to skip the list payload.
RETURNS: { accounts: [{ id, name, kind, status, availableBalance, currentBalance, accountNumber, routingNumber, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations readOnlyHint:true and openWorldHint:true indicate safe read operation and broad scope. Description adds context: returns account details with fields id, name, kind, status, balances, accountNumber, routingNumber, etc., and implies it lists all accounts (no parameters). 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?
Concise, with clear section headers (USE WHEN, DO NOT USE, RETURNS). Every sentence adds value—no redundant or fluff 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?
No output schema, but description fully specifies the return shape with example fields. With zero parameters, all necessary context is covered: purpose, usage, and output 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?
Input schema has zero parameters (100% coverage), so description need not explain parameters. Baseline is 4 per guidelines; description adds no extra param info but reinforces that the tool lists all accounts without filters, which is helpful.
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?
Explicitly states it lists deposit bank accounts (checking, savings, treasury) in Mercury workspace, uses specific verb 'list' and resource, and distinguishes from sibling tools by naming credit accounts and single-account endpoint.
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 'USE WHEN' for enumerating before drilling into transactions/balances, and 'DO NOT USE' for IO Credit card accounts (pointing to mercury_list_credit_accounts) or when account ID is known (prefer mercury_get_account). Clear guidance with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_cardsARead-only
List physical and virtual cards attached to a Mercury account.
USE WHEN: enumerating cards (debit, virtual debit, IO Credit) issued against an account — for spend audits, freezing review, or cardholder lookups.
DO NOT USE: to list IO Credit transactions (use mercury_list_credit_transactions). Card creation, freezing, and PIN ops are not exposed by this MCP — the Mercury API does not currently support them.
RETURNS: { cards: [{ id, last4, type, status, holderName, expiry, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | The Mercury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, confirming no side effects. The description adds value by specifying the return format (cards array with fields like id, last4, type) and noting current API limitations (no card creation/freezing), which goes 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 concise (4 sentences), well-structured with clear sections (USE WHEN, DO NOT USE, RETURNS), and contains 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?
Given the low complexity (single parameter, no output schema), the description covers the purpose, usage guidelines, return format, and limitations completely. No additional information is needed for an agent to correctly select and invoke the 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?
The input schema has 100% coverage for the single parameter accountId, which is clearly documented. The description does not add further semantic meaning beyond the schema, but the schema itself is sufficient.
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 it lists physical and virtual cards attached to a Mercury account, with a specific verb and resource. It distinguishes from sibling tools like mercury_list_credit_transactions by exclusion, ensuring 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?
Clear 'USE WHEN' and 'DO NOT USE' sections provide explicit context for when to use this tool (e.g., spend audits, freezing review) and when not to (e.g., listing credit transactions, which points to an alternative sibling). Also notes API limitations for card creation and freezing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_categoriesARead-only
List transaction categories available in your Mercury workspace (e.g. Office Supplies, Meals, Travel).
USE WHEN: discovering valid categoryId values before calling mercury_update_transaction to recategorise a transaction. Also useful for category-based reporting in downstream tooling.
DO NOT USE: to list transactions in a category (use mercury_list_transactions and filter client-side). Category creation/edit is not exposed by this MCP — the Mercury API does not currently support it.
RETURNS: { categories: [{ id, name, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open world; description adds return format and that category creation is not supported, providing additional context.
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?
Concise, well-structured with clear sections (USE WHEN, DO NOT USE, RETURNS), 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?
Fully explains purpose, usage, return format, and limitations; no missing context despite 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?
No parameters in schema; description does not need to add parameter details. Baseline 4 for zero-param tool.
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 lists transaction categories, provides examples, and distinguishes from sibling tool mercury_list_transactions.
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 tells when to use (discovering valid categoryId for update_transaction) and when not to use (listing transactions, category creation), with alternative tool mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_credit_accountsARead-only
List Mercury IO Credit card accounts (charge cards, distinct from deposit accounts).
USE WHEN: enumerating IO Credit accounts to find their balance, statement closing date, or to feed an ID into mercury_list_credit_transactions. Wraps GET /credit (documented under Credit › List all credit accounts in the Mercury API reference).
DO NOT USE: for deposit accounts (checking/savings/treasury) — use mercury_list_accounts, which hits a different endpoint (/accounts).
RETURNS: { accounts: [{ id, status, availableBalance, currentBalance, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint; description adds endpoint (/credit), return shape, and notes it is a read operation. 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?
Concise and well-structured with sections for USE WHEN, DO NOT USE, RETURNS. 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?
Covers purpose, usage, and return structure adequately. Lacks mention of pagination or limits, but for a zero-parameter list tool with openWorldHint, it is mostly 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?
No parameters, so baseline is 4. Description adds no parameter info, which is acceptable given the parameter count is zero.
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 lists Mercury IO Credit card accounts (charge cards), distinguishes from deposit accounts, and explicitly names the sibling tool for the other account 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?
Provides explicit USE WHEN (enumerating accounts for balance, statement closing, feeding ID to mercury_list_credit_transactions) and DO NOT USE (deposit accounts, directs to mercury_list_accounts).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_credit_transactionsARead-only
List transactions on a Mercury IO Credit card account, including pending (not-yet-settled) card authorisations.
USE WHEN: auditing IO Credit card spend, reconciling a statement, or building a card-level transaction view. Wraps GET /account/{id}/transactions — same path Mercury exposes for deposit-account transactions; both this tool and mercury_list_transactions hit it. Supports the same filters.
DO NOT USE: for deposit-account transactions (use mercury_list_transactions). For posted transactions only, filter by status: "sent".
RETURNS: { transactions: [{ id, amount, status, postedAt, counterpartyName, ... }] }. pending items are card authorisations that may still be reversed.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Filter posted on/before this date (YYYY-MM-DD) | |
| limit | No | Max results to return (1-500). Default: 500 | |
| start | No | Filter posted on/after this date (YYYY-MM-DD) | |
| offset | No | Pagination offset | |
| search | No | Search query (counterparty name, memo, etc.) | |
| status | No | Filter by transaction status. `pending` = card auth not yet settled. | |
| accountId | Yes | The Mercury IO Credit account ID (from mercury_list_credit_accounts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, aligning with the listing nature. The description adds behavioral context that pending items are card authorisations that may be reversed, which is beyond the annotations and schema.
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 concise with clear sections (purpose, use when, do not use, returns). It is front-loaded with the core purpose and uses minimal but informative sentences.
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 is a list operation with a rich schema and annotations, the description covers the use case, sibling differentiation, and return format. Even without an output schema, the sample return structure completes the picture.
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 parameters are well-documented. The description adds value by explaining the `status` filter meaning and providing a sample return structure, which aids understanding 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 that the tool lists transactions on a Mercury IO Credit card account, including pending authorisations. It explicitly distinguishes from the sibling tool `mercury_list_transactions` by specifying credit vs. deposit account transactions.
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 'USE WHEN' and 'DO NOT USE' guidance, specifying auditing, reconciliation, and building card-level views. It names the alternative tool `mercury_list_transactions` for deposit accounts and advises filtering by `status: 'sent'` for posted transactions only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_customersARead-only
List Accounts Receivable customers, with cursor-based pagination.
USE WHEN: enumerating AR customers before creating an invoice (need a customerId for mercury_create_invoice), or for a customer-level audit. Use startAfter / endBefore for paging beyond the limit.
DO NOT USE: for payment recipients (mercury_list_recipients is the bank-payment counterparty list, distinct from AR customers). For one customer whose ID is known, prefer mercury_get_customer.
RETURNS: { customers: [{ id, name, email, address, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-1000) | |
| order | No | ||
| endBefore | No | Pagination cursor (reverse) | |
| startAfter | No | Pagination cursor (forward) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds cursor-based pagination details ('Use startAfter / endBefore for paging beyond the limit') and return format, enhancing transparency 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 concise (5 sentences) with clear sections: purpose, USE WHEN, DO NOT USE, RETURNS. Front-loaded with purpose, 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?
Given the tool's simplicity (list with pagination), annotations, and schema, the description covers usage context, pagination, and return structure. Output schema is not provided, but description specifies return format. Complete for a list endpoint.
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 75%, with parameter descriptions for limit, startAfter, and endBefore. The description adds context on how to use pagination cursors ('Use startAfter / endBefore for paging'), but does not document the 'order' parameter, which is not described in schema either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List Accounts Receivable customers, with cursor-based pagination.' It provides a specific verb ('list'), resource ('AR customers'), and mentions pagination. It distinguishes from siblings like 'mercury_list_recipients' and 'mercury_get_customer'.
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 ('enumerating AR customers before creating an invoice...or for a customer-level audit'), when not to use ('DO NOT USE: for payment recipients'), and provides alternatives ('mercury_list_recipients', 'mercury_get_customer').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_invoice_attachmentsARead-only
List attachments associated with an invoice (PDF copies, supporting documents).
USE WHEN: discovering which files were attached to an invoice — for archival, audit, or to share with a customer. The download URL is short-lived; refetch shortly before download.
DO NOT USE: to upload an attachment — this MCP currently exposes only the read side. Mercury's API does support attachment upload (POST /ar/invoices/{id}/attachments); a write tool can be added if needed.
RETURNS: { attachments: [{ id, filename, downloadUrl, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Invoice ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds critical behavioral details: download URLs are short-lived requiring refetch before download, and it returns a specific structure. 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 concise (three sections: what, use when, do not use, returns) with no redundant sentences. 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 a single parameter, no output schema, and annotations providing safety hints, the description is complete. It includes return format and critical usage notes, leaving no ambiguity for agent 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?
The input schema has 100% coverage with a description for invoiceId. The description adds no extra semantic value beyond what the schema provides, but the parameter is simple and well-documented; 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 it lists attachments associated with an invoice, specifying types (PDF copies, supporting documents). The use case section further clarifies purpose, and it is distinct from sibling tools like mercury_get_invoice or mercury_create_invoice.
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 provides USE WHEN and DO NOT USE guidance, including alternatives (upload is not supported) and a note on short-lived download URLs. This helps the agent decide when to invoke and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_invoicesARead-only
List invoices in your Mercury workspace, with cursor-based pagination.
USE WHEN: enumerating invoices for an AR audit, finding the ID of an invoice to update/cancel, or building a dunning report. Use startAfter / endBefore to page beyond the limit.
DO NOT USE: for one invoice whose ID is known (prefer mercury_get_invoice). Mercury does not currently support filtering by status or customer at the API level — filter client-side after listing.
RETURNS: { invoices: [{ id, status, amount, customerId, dueDate, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (1-1000). Default: 1000 | |
| order | No | Sort order. Default: asc | |
| endBefore | No | Pagination: return invoices before this ID | |
| startAfter | No | Pagination: return invoices after this ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true) already indicate safety; description adds pagination behavior (cursor-based) and return structure, but no additional behavioral traits beyond that.
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?
Concise, front-loaded with purpose, and structured with usage guidelines and return info; 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?
Despite no output schema, the description provides a clear return structure and pagination details, making it complete for a list 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 coverage is 100%, so the description's extra notes on pagination and defaults add minimal value beyond what's already in 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 invoices in your Mercury workspace' with specific verb and resource, and distinguishes from siblings like mercury_get_invoice and mercury_list_invoice_attachments.
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 provides 'USE WHEN' scenarios and 'DO NOT USE' with an alternative (mercury_get_invoice), as well as mentions current API limitations on filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_recipientsARead-only
List all payment recipients (counterparties for outbound ACH/wire/check) in your Mercury workspace.
USE WHEN: enumerating recipients before sending money — need a recipientId to feed into mercury_send_money or mercury_request_send_money. Also useful for an audit of who can receive funds from this account.
DO NOT USE: for AR customers (use mercury_list_customers — different surface, different scope). Recipients are bank-payment counterparties; customers are who you invoice.
RETURNS: { recipients: [{ id, name, nickname, defaultPaymentMethod, electronicRoutingInfo, status, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds the return format structure but no additional behavioral traits. 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?
Concise: three clear sections (purpose, usage, returns). 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?
With 0 parameters and no output schema, the description covers purpose, usage guidelines, and return format thoroughly. No gaps for this tool's 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?
Input schema has 0 parameters, so schema coverage is 100%. Description adds context about what recipients are and their fields, which is helpful 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 it lists all payment recipients for outbound ACH/wire/check in the workspace, with a specific verb and resource, and differentiates from sibling tools like mercury_list_customers.
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 tells when to use (before sending money, to get recipientId for mercury_send_money) and when not to use (for AR customers, directing to mercury_list_customers), with clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_statementsARead-only
List monthly statements for a Mercury deposit account. Each statement has a downloadable PDF URL.
USE WHEN: fetching the URL of a past statement (e.g. for accounting export, audit, or sharing with a CPA). The PDF URL is short-lived — re-fetch it shortly before download.
DO NOT USE: for IO Credit account statements (Mercury exposes them only via the dashboard, not the API). For Treasury statements use mercury_list_treasury_statements.
RETURNS: { statements: [{ id, periodStart, periodEnd, downloadUrl, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Filter statements to this date (YYYY-MM-DD) | |
| start | No | Filter statements from this date (YYYY-MM-DD) | |
| accountId | Yes | The Mercury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, and the description adds important behavioral context: the PDF URL is short-lived and should be re-fetched shortly before download. 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 concise and well-structured with labeled sections (USE WHEN, DO NOT USE, RETURNS). Every sentence adds value without 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?
For a simple list tool with no output schema, the description covers purpose, usage, behavioral notes, and return format, making it complete for an AI 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?
The input schema has 100% coverage with clear descriptions for all parameters. The description does not add further parameter details, so a 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 lists monthly statements for Mercury deposit accounts, specifies the resource (deposit account) and verb (list), and differentiates from sibling tools by excluding IO Credit and Treasury statements.
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 includes explicit 'USE WHEN' and 'DO NOT USE' sections, providing concrete use cases (accounting export, audit, sharing with CPA) and an alternative tool for Treasury statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_transactionsARead-only
List transactions for a Mercury deposit account, with optional filters (date range, status, search).
USE WHEN: auditing deposit-account activity, reconciling a statement, or building a per-account ledger view. Filters server-side: status, start, end, search, limit, offset.
DO NOT USE: for IO Credit transactions (use mercury_list_credit_transactions, which targets the IO Credit account surface). For Treasury, use mercury_list_treasury_transactions.
RETURNS: { transactions: [{ id, amount, status, postedAt, counterpartyName, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Filter posted on/before this date (YYYY-MM-DD) | |
| limit | No | Max results to return (1-500). Default: 500 | |
| start | No | Filter posted on/after this date (YYYY-MM-DD) | |
| offset | No | Pagination offset | |
| search | No | Search query (counterparty name, memo, etc.) | |
| status | No | Filter by transaction status | |
| accountId | Yes | The Mercury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the operation returns a JSON object with specific fields (id, amount, status, etc.) and that filtering is server-side. This adds behavioral context beyond the readOnlyHint and openWorldHint annotations, confirming safe read behavior.
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 concise and well-structured with three clear sections: general purpose, usage guidance, and return format. Every sentence is informative and free of fluff.
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 an output schema, the description provides a clear representation of the return object. With 100% schema parameter coverage and strong annotations, the description completes the picture for an agent to use the tool effectively.
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?
Although the input schema has 100% coverage with descriptions for all parameters, the description adds value by grouping filter parameters (status, start, end, search, limit, offset) and indicating they are server-side. This enhances understanding beyond the schema 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?
The description clearly states the tool lists transactions for a Mercury deposit account with optional filters. It explicitly distinguishes from sibling tools like mercury_list_credit_transactions and mercury_list_treasury_transactions, making the purpose 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 includes 'USE WHEN' and 'DO NOT USE' sections, providing explicit guidance on appropriate use cases and naming alternatives. This directly helps the agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_treasury_statementsARead-only
List monthly statements for a Mercury Treasury account.
USE WHEN: fetching the URL of a past Treasury statement for tax/audit export. PDF URL is short-lived — fetch it shortly before download.
DO NOT USE: for deposit-account statements (use mercury_list_statements). IO Credit statements are not exposed via the API.
RETURNS: { statements: [{ id, periodStart, periodEnd, downloadUrl, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Treasury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint), the description discloses a critical behavioral trait: the PDF URL is short-lived and should be fetched shortly before download. This adds valuable context that annotations alone do not capture.
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 short paragraphs covering purpose, usage guidelines, and return structure. No filler or redundant information; 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 single parameter, no output schema, and annotations, the description fully addresses purpose, when to use, return shape (listing fields), and a temporal constraint. It also explicitly discriminates from sibling tools, making the description complete for the tool's 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?
The schema already covers the single parameter 'accountId' with a description ('Treasury account ID') and 100% coverage. The description does not add further parameter-level detail, so the 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 monthly statements for a Mercury Treasury account.' It uses a specific verb ('list') and resource ('monthly statements'), and ties to a specific entity ('Mercury Treasury account'). It effectively distinguishes from the sibling tool 'mercury_list_statements' by contrasting deposit vs. treasury accounts.
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 provides 'USE WHEN' (fetching URL for tax/audit export) and 'DO NOT USE' (deposit-account statements, IO Credit statements not exposed). It names the alternative tool 'mercury_list_statements' for deposit accounts, giving clear context for when to choose this tool over its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_treasury_transactionsARead-only
List transactions for a Mercury Treasury account (sweeps, dividend accruals, etc.).
USE WHEN: auditing Treasury cash flows, reconciling yield accruals, or building a Treasury-only ledger view.
DO NOT USE: for deposit-account transactions (use mercury_list_transactions). For IO Credit transactions, use mercury_list_credit_transactions.
RETURNS: { transactions: [{ id, amount, kind, postedAt, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Filter before this date (YYYY-MM-DD) | |
| limit | No | ||
| start | No | Filter after this date (YYYY-MM-DD) | |
| offset | No | ||
| accountId | Yes | Treasury account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description need not repeat these. It adds the return structure format, providing useful behavioral context without 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 concise with three short sections, front-loaded and to the point. 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?
For a list tool with no output schema, the description covers use cases, sibling differentiation, return structure, and required parameters. Missing details like limit/offset defaults are minor. Overall sufficient for confident 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 has 60% description coverage; the description does not add parameter explanations beyond the schema. The schema already describes accountId and date filters, but limit/offset lack descriptions. The description does not compensate for these gaps, 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 'List transactions for a Mercury Treasury account' and provides specific examples like sweeps and dividend accruals. It distinguishes from sibling tools by naming alternatives for deposit accounts (mercury_list_transactions) and IO Credit (mercury_list_credit_transactions).
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?
Explicit 'USE WHEN' and 'DO NOT USE' sections give clear context and direct the agent to alternative tools, ensuring correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_list_webhooksARead-only
List all webhook endpoints configured for your Mercury workspace.
USE WHEN: enumerating registered webhook endpoints — for audit, finding a webhook ID before update/delete, or to confirm a delivery target is registered.
DO NOT USE: to inspect webhook delivery history (Mercury exposes that only via the dashboard, not the API).
RETURNS: { webhooks: [{ id, url, status, events, ... }] }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. Description adds context about the return structure and clarifies that webhook delivery history is not accessible via API, going 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?
Three concise paragraphs with clear headings (USE WHEN, DO NOT USE, RETURNS). Every sentence is informative and necessary.
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 parameter-less tool with no output schema, the description fully covers purpose, usage, and return structure. No gaps remain.
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?
No parameters exist, so the description does not need to elaborate. It adds value by specifying the return format, which compensates for the lack of an output 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 all webhook endpoints' with a specific verb and resource. It distinguishes this tool from siblings like get, create, delete, and update webhooks.
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?
Includes explicit 'USE WHEN' and 'DO NOT USE' sections, providing concrete scenarios (audit, finding ID before update/delete, etc.) and excluding delivery history, which only the dashboard provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_request_send_moneyADestructiveIdempotent
Request to send money — Mercury creates a pending approval request that a human must approve before any funds move. ALWAYS creates an approval request, regardless of workspace policy.
USE WHEN: submitting an outbound payment that should always wait for human sign-off — for safety, audit, or because workspace policy demands it. Pairs naturally with the "submit, then wait for approver" workflow.
DO NOT USE: when you intend to transfer between your own accounts (use mercury_create_internal_transfer — no external recipient). For payments that may execute immediately under workspace policy, use mercury_send_money (different surface).
SIDE EFFECTS: creates a pending approval request on Mercury — no money has moved at this point. A human approver must sign off in the Mercury web/mobile app. Once approved, Mercury executes the underlying ACH / wire / check. Idempotent via idempotencyKey — auto-generated if not passed; pass an explicit one to make retries safe. Audit log entry on Mercury for the request itself.
RETURNS: { id, status: "pendingApproval", amount, ... } — track via mercury_get_transaction once executed.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| amount | Yes | Amount in USD | |
| accountId | Yes | Source Mercury account ID | |
| recipientId | Yes | Recipient ID | |
| externalMemo | No | ||
| paymentMethod | Yes | Payment method | |
| idempotencyKey | No | Unique key to prevent duplicate transfers. Auto-generated if omitted; pass an explicit one to make retries safe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool always creates a pending approval request regardless of workspace policy, that no money moves until human approval, and that it is idempotent via idempotencyKey. This adds significant context beyond annotations (destructiveHint, idempotentHint, openWorldHint) and aligns with them 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 well-structured with clear sections (overview, USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS). Each sentence is informative and concise, with no redundant or 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 the tool has 7 parameters and no output schema, the description provides complete context: it explains the approval workflow, idempotency mechanism, return shape, and references sibling tools. The description is sufficient for an agent to understand and invoke the tool 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?
The schema provides descriptions for 5 of 7 parameters (71% coverage). The description adds only a note about idempotencyKey auto-generation and retries, which is already covered in the schema. No additional parameter details are provided, so the description does not significantly enhance understanding 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 is for 'Request to send money' and emphasizes it creates a pending approval request. It distinguishes from sibling tools like mercury_send_money (immediate execution) and mercury_create_internal_transfer (internal transfers), making purpose 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 explicitly states when to use (submitting outbound payments that always wait for human sign-off) and when not to use (internal transfers or immediate payments), and names the alternative tools. This provides clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_send_moneyADestructiveIdempotent
Send money from a Mercury account to an external recipient via ACH, wire, or check. REAL FUNDS LEAVE YOUR ACCOUNT.
USE WHEN: paying a vendor / contractor / counterparty whose recipientId already exists. ALWAYS confirm amount, recipient name, and payment method with the user before calling — the action is high-impact and largely irreversible (wires especially).
DO NOT USE: to move money between your own Mercury accounts (use mercury_create_internal_transfer). To submit a payment that ALWAYS requires human approval regardless of workspace policy, use mercury_request_send_money instead.
SIDE EFFECTS: moves real money out of the account. Whether the payment executes immediately or queues for approval depends entirely on your Mercury workspace's approval policy (Settings → Approvals on app.mercury.com) — the MCP cannot enforce this; Mercury does. On a $0-threshold workspace every send waits for sign-off; on a permissive workspace small payments may settle without re-prompting. Wires are usually irreversible once executed. Idempotent via idempotencyKey — auto-generated if not passed; pass an explicit one to make retries safe. Audit log entry on Mercury.
RETURNS: { id, status, amount, ... }. status reflects either immediate execution or pending-approval state, depending on workspace policy.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Internal note | |
| amount | Yes | Amount in USD (e.g. 100.50) | |
| accountId | Yes | Source Mercury account ID | |
| recipientId | Yes | Recipient ID (must already exist) | |
| externalMemo | No | Memo visible to recipient | |
| paymentMethod | Yes | Payment method | |
| idempotencyKey | No | Unique key to prevent duplicate transfers. Auto-generated if omitted; pass an explicit one to make retries safe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses real money movement, irreversibility of wires, dependence on workspace approval policy, idempotency via idempotencyKey, and audit logging. Aligns with annotations (destructiveHint, idempotentHint) and adds significant context beyond 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?
Well-structured with bold headings and front-loaded purpose. While comprehensive, a few sentences could be tightened, but no extraneous information. Earns its length.
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 an output schema, the description adequately explains return values and status. Covers side effects, approval policies, and practical usage constraints. Fully sufficient for a high-impact financial transaction 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 coverage is 100% with detailed descriptions for all 7 parameters. The description adds minor context (e.g., idempotencyKey auto-generation) but does not significantly extend beyond the schema. 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 explicitly states 'Send money from a Mercury account to an external recipient via ACH, wire, or check', providing a specific verb and resource. It also distinguishes from siblings by naming alternatives for internal transfers and always-review payments.
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?
Clear guidance on when to use (paying an existing recipient) and when not to (internal transfers, always-review payments) with named alternatives. Explicitly advises confirming details with the user before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_update_customerA
Update an existing Accounts Receivable customer. Pass only the fields you want to change.
USE WHEN: amending a customer's contact details (name, email, billing address) after creation. Existing invoices are not retroactively modified.
DO NOT USE: to delete a customer (use mercury_delete_customer). To change the customer of an existing invoice, cancel + recreate the invoice.
SIDE EFFECTS: writes the new customer record to Mercury. Persistent. Only the fields you pass are changed — omitted fields keep their current value.
RETURNS: { id, name, email, address, ... } — the updated customer.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| No | |||
| address | No | Customer billing address (Mercury requires `name` in the address) | |
| customerId | Yes | Customer ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes side effects: writes new record, persistence, partial update (only passed fields changed). Adds context beyond annotations (destructiveHint=false, openWorldHint=true).
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?
Well-structured with clear sections (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS). Every sentence adds value, no fluff.
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 annotations and schema, description covers return shape, alternatives, side effects, and usage constraints. No output schema, but return format is hinted.
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?
Explains partial update behavior and lists examples (name, email, billing address); schema coverage 50% but description compensates with usage hints, though not every param is explicitly defined.
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 verb 'update' and resource 'customer', includes 'Accounts Receivable' specificity, and distinguishes from create/delete siblings via DO NOT USE section.
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 USE WHEN (amending contact details) and DO NOT USE (delete, change invoice customer) with clear alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_update_invoiceA
Update an existing invoice. Pass only the fields you want to change.
USE WHEN: amending an outstanding invoice (line items, due date, memo, PO number) before the customer pays. The MCP fetches the current invoice and merges your changes before submitting — Mercury's update endpoint requires the full payload despite the API docs implying PATCH.
DO NOT USE: to cancel an invoice (use mercury_cancel_invoice). To change the customer or the destination account, cancel + recreate. Once an invoice is paid, updates are likely rejected by Mercury — fetch first to confirm status.
SIDE EFFECTS: overwrites the invoice on Mercury's side. The customer-facing payment URL stays the same. If the invoice was already emailed, the customer is NOT re-notified of the change — communicate the change out-of-band if needed.
RETURNS: { id, status, amount, ... } — the updated invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| dueDate | No | Due date (YYYY-MM-DD) | |
| ccEmails | No | ||
| poNumber | No | ||
| invoiceId | Yes | Invoice ID | |
| lineItems | No | ||
| payerMemo | No | ||
| invoiceDate | No | Invoice date (YYYY-MM-DD) | |
| internalNote | No | ||
| invoiceNumber | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=false, openWorldHint=true), description explains that MCP fetches current invoice and merges changes, that the payment URL stays the same, and that emailed customers are not re-notified. Also notes potential rejection for paid invoices.
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?
Well-structured with clear sections (basic action, USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS) and concise language. Length is slightly long but justified by complexity; front-loaded with 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?
Covers purpose, usage guidelines, side effects, return value shape, and important behavioral details (e.g., MCP merge behavior). Missing some parameter specifics but schema provides descriptions; no output schema, so return structure is described adequately.
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 only 33% schema coverage, description adds significant value: explains partial update nature, details lineItems.name length limit (200 chars) and workaround, and notes that only fields to change are passed. However, not all optional parameters receive additional explanation.
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 'Update an existing invoice' and distinguishes from related tools by specifying that it is for amending outstanding invoices before payment, not for canceling or changing customer/account.
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?
Explicit 'USE WHEN' and 'DO NOT USE' sections provide clear context: use for amending unpaid invoices, avoid for cancelling (use mercury_cancel_invoice) or changing customer/account (cancel+recreate). Also advises fetching invoice first to check status if paid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_update_recipientA
Update an existing payment recipient (legal name, nickname, contact emails, default payment method).
USE WHEN: amending a recipient's contact info or default payment method after creation. Useful for re-routing future payments to a recipient via a different method (e.g. ACH → wire) without recreating it.
DO NOT USE: to change the bank account number / routing number — that requires a fresh recipient (security policy on Mercury's side). Use mercury_add_recipient for the new banking info.
SIDE EFFECTS: writes the recipient record on Mercury. Persistent. Only the fields you pass are changed. Mercury endpoint is POST /recipient/{id} (SINGULAR — not the plural /recipients/{id}).
RETURNS: { id, name, nickname, defaultPaymentMethod, ... } — the updated recipient.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Recipient legal name | |
| emails | No | List of email addresses | |
| nickname | No | Internal nickname | |
| recipientId | Yes | The recipient ID | |
| contactEmail | No | Primary contact email | |
| defaultPaymentMethod | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool writes persistently and only modifies passed fields. Mentions the exact endpoint path (singular vs plural) and specifies the return shape. Annotations are consistent; 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?
The description is well-structured with clear sections: main purpose, USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS. Every sentence is necessary and concise, with 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?
Covers the tool's purpose, allowed updates, exclusions, side effects, and return format. With no output schema, the return example is helpful. Lacks details on error handling or idempotency, but these are typical in API 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?
The description lists the updatable fields, matching the schema. It adds context that these are contact details and default payment method. Since schema coverage is 83%, the description supplements without redundancy.
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 'Update an existing payment recipient' and lists the updatable fields. It explicitly distinguishes from adding a new recipient, especially for changing bank account numbers, which prevents misuse.
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 'USE WHEN' and 'DO NOT USE' sections. It gives a concrete use case (re-routing payments via different method) and directs to the sibling tool 'mercury_add_recipient' for prohibited changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mercury_update_transactionA
Update a transaction's internal note or category (no money movement).
USE WHEN: tagging a transaction with a category for bookkeeping, or attaching an internal memo. Send null to clear a field, omit the key to keep the current value.
DO NOT USE: to change the amount, counterparty, or status — those are immutable post-execution. Mercury endpoint is PATCH /transaction/{id} (no accountId in the path).
SIDE EFFECTS: overwrites the note / category on Mercury's side. Persistent. Audit log on Mercury records the change. No effect on the booked transaction itself or on the counterparty.
RETURNS: { id, note, categoryId, ... } — the updated transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Internal note (send null to clear, omit to keep current) | |
| categoryId | No | Category ID (UUID, see mercury_list_categories). Send null to clear, omit to keep current. | |
| transactionId | Yes | The transaction ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotation (destructiveHint=false) by explaining the side effects: overwrites, persistent, audit log, no effect on booked transaction or counterparty. 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 concise, well-structured with clear sections (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS), and contains 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?
Despite no output schema, the description provides a return format and covers all aspects: purpose, usage, side effects, and parameter behavior. 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?
Schema coverage is 100%, but the description adds value by explaining the 'null' vs 'omit' behavior for note and categoryId, and references mercury_list_categories for categoryId. This is helpful 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 verb 'Update', the resource 'transaction', and the specific fields ('internal note or category'). It also clarifies 'no money movement', distinguishing it from sibling tools like mercury_send_money.
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 'USE WHEN' and 'DO NOT USE' scenarios, including what fields are immutable. Also mentions the API endpoint, giving clear context for when 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.
mercury_update_webhookA
Update an existing webhook endpoint (URL, status, or subscribed events).
USE WHEN: rotating a webhook's destination URL, changing the event subscription, or reactivating a webhook Mercury auto-disabled after consecutive delivery failures (set status: "active").
DO NOT USE: to inspect delivery history. Same SSRF / non-HTTPS URL guard as mercury_create_webhook applies to the new URL.
SIDE EFFECTS: overwrites the webhook record. Persistent. If status flips to active, Mercury resumes delivery on the next matching event. The new URL takes effect immediately for future events.
RETURNS: { id, url, status, events, ... } — the updated webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | New publicly reachable HTTPS URL (same rules as mercury_create_webhook). | |
| status | No | Webhook status | |
| webhookId | Yes | The webhook endpoint ID | |
| eventTypes | No | Event types to subscribe to. Common values: - transaction.created / transaction.updated - transaction.posted / transaction.pending / transaction.failed - invoice.created / invoice.sent / invoice.paid / invoice.overdue / invoice.cancelled - customer.created / customer.updated - recipient.created / recipient.updated Check https://docs.mercury.com/reference/webhooks for the full list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects: overwrites the webhook record, persistent changes, immediate effect of new URL, and resumption of delivery if status becomes active. This adds detail beyond the annotations (destructiveHint=false, openWorldHint=true), which only hint at safety and 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 concise, using structured labels (USE WHEN, DO NOT USE, SIDE EFFECTS, RETURNS) to organize information efficiently. No superfluous sentences; each section adds clear 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?
Despite no output schema, the description explicitly states the return format as '{ id, url, status, events, ... }'. It covers all relevant aspects for an agent to use the tool correctly: when to use, side effects, parameter semantics, and return values.
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?
All parameters have descriptions in the schema (100% coverage), and the description adds value by providing concrete examples for eventTypes, clarifying status effects (reactivation), and reiterating security rules for url. This goes beyond the schema's basic type/format info.
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 'Update an existing webhook endpoint (URL, status, or subscribed events)', using a clear verb+resource structure. It distinguishes itself from sibling tools like mercury_create_webhook and mercury_delete_webhook by focusing on updates.
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 includes 'USE WHEN' and 'DO NOT USE' sections, providing explicit guidance on appropriate contexts (e.g., rotating URL, reactivating after failures) and exclusions (e.g., inspecting delivery history). It also references sibling behavior for SSRF guard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
36 tool updates
v0.15.6- Added
mercury_add_recipient - Added
mercury_cancel_invoice - Added
mercury_create_customer - Added
mercury_create_internal_transfer - Added
mercury_create_invoice - Added
mercury_create_webhook - Added
mercury_delete_customer - Added
mercury_delete_webhook - Added
mercury_get_account - Added
mercury_get_customer - Added
mercury_get_invoice - Added
mercury_get_organization - Added
mercury_get_transaction - Added
mercury_get_treasury - Added
mercury_get_webhook - Added
mercury_list_accounts - Added
mercury_list_cards - Added
mercury_list_categories - Added
mercury_list_credit_accounts - Added
mercury_list_credit_transactions - Added
mercury_list_customers - Added
mercury_list_invoice_attachments - Added
mercury_list_invoices - Added
mercury_list_recipients - Added
mercury_list_statements - Added
mercury_list_transactions - Added
mercury_list_treasury_statements - Added
mercury_list_treasury_transactions - Added
mercury_list_webhooks - Added
mercury_request_send_money - Added
mercury_send_money - Added
mercury_update_customer - Added
mercury_update_invoice - Added
mercury_update_recipient - Added
mercury_update_transaction - Added
mercury_update_webhook
36 tool updates
v0.15.5- Removed
mercury_add_recipient - Removed
mercury_cancel_invoice - Removed
mercury_create_customer - Removed
mercury_create_internal_transfer - Removed
mercury_create_invoice - Removed
mercury_create_webhook - Removed
mercury_delete_customer - Removed
mercury_delete_webhook - Removed
mercury_get_account - Removed
mercury_get_customer - Removed
mercury_get_invoice - Removed
mercury_get_organization - Removed
mercury_get_transaction - Removed
mercury_get_treasury - Removed
mercury_get_webhook - Removed
mercury_list_accounts - Removed
mercury_list_cards - Removed
mercury_list_categories - Removed
mercury_list_credit_accounts - Removed
mercury_list_credit_transactions - Removed
mercury_list_customers - Removed
mercury_list_invoice_attachments - Removed
mercury_list_invoices - Removed
mercury_list_recipients - Removed
mercury_list_statements - Removed
mercury_list_transactions - Removed
mercury_list_treasury_statements - Removed
mercury_list_treasury_transactions - Removed
mercury_list_webhooks - Removed
mercury_request_send_money - Removed
mercury_send_money - Removed
mercury_update_customer - Removed
mercury_update_invoice - Removed
mercury_update_recipient - Removed
mercury_update_transaction - Removed
mercury_update_webhook
36 tool updates
v0.15.4- Added
mercury_add_recipient - Added
mercury_cancel_invoice - Added
mercury_create_customer - Added
mercury_create_internal_transfer - Added
mercury_create_invoice - Added
mercury_create_webhook - Added
mercury_delete_customer - Added
mercury_delete_webhook - Added
mercury_get_account - Added
mercury_get_customer - Added
mercury_get_invoice - Added
mercury_get_organization - Added
mercury_get_transaction - Added
mercury_get_treasury - Added
mercury_get_webhook - Added
mercury_list_accounts - Added
mercury_list_cards - Added
mercury_list_categories - Added
mercury_list_credit_accounts - Added
mercury_list_credit_transactions - Added
mercury_list_customers - Added
mercury_list_invoice_attachments - Added
mercury_list_invoices - Added
mercury_list_recipients - Added
mercury_list_statements - Added
mercury_list_transactions - Added
mercury_list_treasury_statements - Added
mercury_list_treasury_transactions - Added
mercury_list_webhooks - Added
mercury_request_send_money - Added
mercury_send_money - Added
mercury_update_customer - Added
mercury_update_invoice - Added
mercury_update_recipient - Added
mercury_update_transaction - Added
mercury_update_webhook
36 tool updates
v0.15.2- Removed
mercury_add_recipient - Removed
mercury_cancel_invoice - Removed
mercury_create_customer - Removed
mercury_create_internal_transfer - Removed
mercury_create_invoice - Removed
mercury_create_webhook - Removed
mercury_delete_customer - Removed
mercury_delete_webhook - Removed
mercury_get_account - Removed
mercury_get_customer - Removed
mercury_get_invoice - Removed
mercury_get_organization - Removed
mercury_get_transaction - Removed
mercury_get_treasury - Removed
mercury_get_webhook - Removed
mercury_list_accounts - Removed
mercury_list_cards - Removed
mercury_list_categories - Removed
mercury_list_credit_accounts - Removed
mercury_list_credit_transactions - Removed
mercury_list_customers - Removed
mercury_list_invoice_attachments - Removed
mercury_list_invoices - Removed
mercury_list_recipients - Removed
mercury_list_statements - Removed
mercury_list_transactions - Removed
mercury_list_treasury_statements - Removed
mercury_list_treasury_transactions - Removed
mercury_list_webhooks - Removed
mercury_request_send_money - Removed
mercury_send_money - Removed
mercury_update_customer - Removed
mercury_update_invoice - Removed
mercury_update_recipient - Removed
mercury_update_transaction - Removed
mercury_update_webhook
36 tool updates
v0.12.0- Changed
mercury_add_recipient1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_cancel_invoice1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_create_customer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_create_internal_transfer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_create_invoice1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_create_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_delete_customer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_delete_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_account1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_customer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_invoice1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_organization1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_transaction1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_treasury1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_get_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_accounts1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_cards1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_categories1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
mercury_list_credit_accounts - Added
mercury_list_credit_transactions - Changed
mercury_list_customers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_invoice_attachments1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_invoices1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_recipients1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_statements1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_transactions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_treasury_statements1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_treasury_transactions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_list_webhooks1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_request_send_money1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_send_money1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_update_customer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_update_invoice1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_update_recipient1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_update_transaction1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mercury_update_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
34 tool updates
v0.9.1- First observed
mercury_add_recipient - First observed
mercury_cancel_invoice - First observed
mercury_create_customer - First observed
mercury_create_internal_transfer - First observed
mercury_create_invoice - First observed
mercury_create_webhook - First observed
mercury_delete_customer - First observed
mercury_delete_webhook - First observed
mercury_get_account - First observed
mercury_get_customer - First observed
mercury_get_invoice - First observed
mercury_get_organization - First observed
mercury_get_transaction - First observed
mercury_get_treasury - First observed
mercury_get_webhook - First observed
mercury_list_accounts - First observed
mercury_list_cards - First observed
mercury_list_categories - First observed
mercury_list_customers - First observed
mercury_list_invoice_attachments - First observed
mercury_list_invoices - First observed
mercury_list_recipients - First observed
mercury_list_statements - First observed
mercury_list_transactions - First observed
mercury_list_treasury_statements - First observed
mercury_list_treasury_transactions - First observed
mercury_list_webhooks - First observed
mercury_request_send_money - First observed
mercury_send_money - First observed
mercury_update_customer - First observed
mercury_update_invoice - First observed
mercury_update_recipient - First observed
mercury_update_transaction - First observed
mercury_update_webhook
TDQS
Scored across 36 tools
Tools are mostly distinct by resource type (accounts, transactions, recipients, invoices, customers, webhooks), and descriptions explicitly cross-reference alternatives (e.g., deposit vs. credit vs. treasury). Minor confusion possible between mercury_list_transactions and mercury_list_credit_transactions, but the descriptions clearly delineate the surfaces.
All tools follow a consistent mercury_<verb>_<noun> pattern with clear verbs (list, get, create, update, delete, cancel, send, add). The naming convention is uniform across all 36 tools, making the set highly predictable.
36 tools is on the heavy side, but the server covers multiple distinct Mercury surfaces (deposit accounts, credit, treasury, payments, AR invoicing, webhooks). Each tool maps to a real API endpoint, so the count is justified, though it approaches the upper bound of what an agent can easily navigate.
The tool set covers core CRUD/lifecycle for accounts, transactions, recipients, invoices, customers, and webhooks. Notable gaps: no card creation/freezing, no invoice attachment upload, no credit-account statement access, and no webhook delivery history — but these are explicitly documented as API limitations, and the core workflows (send money, invoice, manage webhooks) are complete.
Maintenance
Related MCP Connectors
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
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
AlicenseBqualityFmaintenanceA Model Context Protocol server implementation providing standardized access to Xero's accounting and business features, enabling operations like contact management, invoice creation, and chart of accounts management through MCP.518,373 npm365MIT- AlicenseAqualityAmaintenanceEnables AI assistants to send real faxes through the FaxDrop API. Provides safeguards including rate limiting, dry-run mode, and audit logging for secure fax operations.39 npm5MIT
- AlicenseNot gradedqualityDmaintenanceSimple MCP server that interfaces with the Mercury API, allowing you to talk to your Mercury banking data from any MCP client like Cursor or Claude Desktop.4MIT
- AlicenseAqualityDmaintenanceA custom MCP server for the Mercury banking API that uses personal API tokens to avoid session expiry. It provides 15 tools for managing accounts, transactions, recipients, treasury, and more.15MIT