@deonpay/mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@deonpay/mcp-serverHow much did I sell yesterday on DeonPay?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@deonpay/mcp-server
Talk to your DeonPay merchant account from Claude Desktop, Cursor, Continue and any other MCP-compatible AI host.
What is this?
The Model Context Protocol (MCP) is an open standard that lets large language models call structured tools on your behalf. This package is the official MCP server for DeonPay — Mexico's modern payments platform — wrapping the DeonPay Public API v1 as a set of typed tools your AI assistant can use to read transactions, create payment links, inspect subscriptions, look up customers and pull business metrics, all without leaving the chat.
It runs locally on your machine, talks to DeonPay over HTTPS using a token you generate from the dashboard, and exposes 20 well-described tools the LLM can pick from.
Related MCP server: PayBridgeNP MCP Server
Quick start
1. Generate an MCP token in the DeonPay dashboard
Open https://deonpay.mx/dashboard/settings/mcp-connections, pick the permissions the assistant should have (start with read-only) and copy the token. The token is shown only once — keep it safe.
2. Add the server to your MCP host
For Claude Desktop, edit your config file:
OS | Path |
macOS |
|
Windows |
|
Linux |
|
Add the deonpay entry to the mcpServers block:
{
"mcpServers": {
"deonpay": {
"command": "npx",
"args": ["-y", "@deonpay/mcp-server"],
"env": {
"DEONPAY_API_TOKEN": "dp_paste_your_token_here"
}
}
}
}3. Restart Claude Desktop
Quit and re-open Claude Desktop. You should see "deonpay" listed under the tools icon in any new conversation.
That's it. Try asking: "How much did I sell yesterday on DeonPay?"
Configuration
All configuration is via environment variables.
Variable | Required | Default | Description |
| yes | — | Your DeonPay API token ( |
| no |
| Override for self-hosted or staging deployments. |
| no |
| Request timeout in milliseconds. |
| no |
| Set to |
Full Claude Desktop example
{
"mcpServers": {
"deonpay": {
"command": "npx",
"args": ["-y", "@deonpay/mcp-server"],
"env": {
"DEONPAY_API_TOKEN": "dp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"DEONPAY_BASE_URL": "https://deonpay.mx",
"DEONPAY_DEBUG": "0"
}
}
}
}Available tools
All 20 tools are prefixed with deonpay_ so your assistant can find them quickly when you mention DeonPay in a prompt.
Read
Tool | Wraps | Purpose |
|
| Headline KPIs: revenue, conversion, MRR, churn, revenue mix. |
|
| Filter and paginate transactions. |
|
| Full transaction with NetPay timeline. |
|
| List payment links. |
|
| Single link by UUID or short_code. |
|
| All payments for a link. |
|
| Catalog listing. |
|
| Product by UUID or SKU. |
|
| Subscription PLANS (templates). |
|
| Plan with stats and recent charges. |
|
| Per-customer subscription rows. |
|
| Subscriber detail with last 20 charges. |
|
| Customer list with revenue stats. |
|
| Customer profile by email. |
Write (safe)
Tool | Wraps | Purpose |
|
| Create a payment link. |
|
| Update an existing link (merge customization). |
|
| Stripe-style ephemeral checkout. |
|
| Add a product to the catalog. |
|
| Update product price, stock, status. |
|
| Create a recurring plan template. |
Not exposed in v0.1 (by design)
These DeonPay endpoints are intentionally NOT wrapped yet because the failure mode is destructive or irreversible:
Refunds (
POST /v1/transactions/{id})Subscription cancellations (
POST /v1/customer-subscriptions/{id}/cancel)Link / product deletes (
DELETE /v1/links/{id},DELETE /v1/products/{id})Checkout session cancellation (
PATCH /v1/checkout/sessions/{id})Subscription plan updates (
PATCH /v1/subscriptions/{id})
These will land in a future release behind an explicit DEONPAY_ENABLE_DESTRUCTIVE=1 flag.
Example prompts
Try these in Claude Desktop after installing the server:
"Show me my payment links from this week."
"How much did I sell yesterday in MXN?"
"What is my MRR right now?"
"Find the customer who has spent the most in the last 90 days."
"List all subscribers on past_due status and tell me what their plans look like."
"Create a payment link for $500 MXN called 'Consulta nutricional'."
"Add a product called 'Gym Class' at $250 MXN to my catalog."
"Create a monthly subscription plan named 'Premium' for $299 MXN with 7 trial days."
"Why did transaction 550e8400-e29b-41d4-a716-446655440000 fail? Show me the NetPay timeline."
"Pause the link with short_code abc123xy until further notice."
The assistant will pick the right tool, fill in the parameters and report back.
Amounts and currency
DeonPay handles all amounts in centavos (1 MXN = 100). When you write "create a link for $500", the assistant translates it to amount: 50000. When the API returns total_revenue: 1845000, that's $18,450.00 MXN. The tool descriptions remind the LLM of this on every call.
Troubleshooting
"DEONPAY_API_TOKEN is required"
The server could not find the token in its environment. Check that the env block in claude_desktop_config.json is at the same level as command/args, and that you fully restarted Claude Desktop after editing the file.
"[unauthorized 401] DeonPay rejected the API token"
The token is invalid, revoked, or its environment doesn't match the data you're querying. Re-issue from Settings -> MCP Connections and replace the value in your config.
"[forbidden 403] DeonPay denied access"
The token is valid but it doesn't carry the permission required for that tool. Edit the token in the dashboard and grant the missing permission (the error message names it).
"No tool named deonpay_..."
The host hasn't loaded the server. Confirm the mcpServers block is valid JSON, restart the host, and look at the host's logs (Claude Desktop -> Help -> Show Logs) for startup errors.
"Could not reach DeonPay at https://..."
Network or DNS issue. Verify DEONPAY_BASE_URL is reachable from your machine (curl -I $DEONPAY_BASE_URL).
Verbose logging
Set DEONPAY_DEBUG=1 in the env block. Every HTTP request and response is then printed to the host's log file (stderr).
Security
The token is stored in plain text inside
claude_desktop_config.json. Treat that file like an SSH key — back it up encrypted, never commit it to git.Tokens have granular permissions. For an LLM that should only read data, create a token with
*.readpermissions only — that mechanically prevents the assistant from creating links or charging cards.Tokens are environment-scoped (sandbox vs production). For experimentation, generate a sandbox token first and switch later.
The server only sends requests to the host you configure in
DEONPAY_BASE_URL. There is no telemetry and no third-party network call.
Development
git clone https://github.com/hectortemich/deonpay-mcp-server.git
cd deonpay-mcp-server
npm install
npm run build # tsup -> dist/{index.js,index.cjs,index.d.ts}
npm run typecheck # tsc --noEmit
npm run lint # eslint + @typescript-eslint
DEONPAY_API_TOKEN=dp_... node dist/index.js # run locally over stdioThe codebase is organized so each tool category lives in src/tools/<category>.ts with a register* function. Adding a new tool is a one-file change plus a registration call in src/tools/index.ts.
Contributing
PRs welcome. Please:
Open an issue first for new tools so we can align on naming and scope.
Match the existing tool description style — rich, English, with explicit notes on units (centavos), path encoding, and side effects.
Run
npm run lint && npm run typecheck && npm run buildbefore submitting.
License
MIT - see LICENSE.
Available Tools
20 toolsdeonpay_create_checkout_sessionCreate a checkout sessionA
Create an ephemeral checkout session (Stripe-style). Use this when integrating an e-commerce flow: the user wants a one-time payment URL tied to a specific cart and a success_url to land on after payment. The response contains url (where to redirect the customer) and session_id (used to look up the session later). Amounts are in CENTAVOS. Mode defaults to 'redirect' — use 'embedded' or 'modal' only if the calling app already supports those flows. The session expires by default in 30 minutes (override with expires_in, range 5..1440).
| Name | Required | Description | Default |
|---|---|---|---|
| line_items | Yes | At least one line item. Each item is either a catalog reference {product_id, quantity} or inline {name, quantity, unit_amount}. unit_amount is in centavos. | |
| success_url | Yes | Where the customer is redirected after a successful payment. Supports {session_id} as a placeholder, e.g. https://my-shop.com/order/done?session_id={session_id}. | |
| cancel_url | No | Where the customer is redirected if they abandon checkout. | |
| mode | No | Display mode. Defaults to 'redirect'. | |
| expires_in | No | Minutes until the session expires (default 30, max 1440). | |
| allow_msi | No | ||
| msi_options | No | ||
| customer_email | No | ||
| customer_name | No | ||
| customer_phone | No | ||
| client_reference_id | No | Your internal order/cart id for reconciliation. | |
| metadata | No | ||
| customization | No | Visual overrides for the hosted page. Only the keys you set are merged into the merchant defaults. | |
| custom_fields | No | ||
| locale | No | Checkout UI language. | |
| display_currency | No | ||
| exchange_rate | No | ||
| allow_save_card | No | Whether the customer can save their card for future use. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the response contains `url` and `session_id`, mentions expiry (30 min default, override with expires_in), and notes amounts are in centavos. With no annotations, it carries the full burden but omits details like side effects, required permissions, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 sentences) and well-structured, front-loading the key purpose and usage. Every sentence provides distinct value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (18 parameters, no output schema), the description covers the core purpose, response, and key constraints. However, it lacks details on numerous optional parameters and does not fully distinguish the tool from siblings like create_link or create_subscription.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds limited value beyond the schema: it mentions centavos for amounts, mode default, and expiry range. With 18 parameters and ~50% schema description coverage, many optional fields (customer details, metadata, customization, etc.) are left unexplained.
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 creates an ephemeral checkout session for one-time payments (Stripe-style) and specifies the e-commerce use case, distinguishing it from siblings like subscription or link creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (e-commerce flow) and mode selection guidance ('redirect' default, 'embedded'/'modal' only if supported). However, it lacks explicit exclusions or comparisons to sibling tools like deonpay_create_link or deonpay_create_subscription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_create_linkCreate a payment linkA
Create a new payment link. Use this when the user says 'create a link for $X for product Y' or 'genera un link de pago para...'. Amounts are in centavos: $500 MXN = 50000. You can pass either a fixed amount OR line_items (the API sums quantity * unit_amount automatically). Type defaults to 'single' (one-shot). Optional fields cover MSI (months without interest), max_uses, expires_at, custom_fields and visual customization. The response includes the public payment URL the user can share.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Link name (visible to the customer, max 255 chars). | |
| amount | No | Fixed amount in CENTAVOS (1 MXN = 100). Required UNLESS line_items are provided or the link uses min_amount/max_amount (open amount). | |
| type | No | 'single' (default), 'recurring' or 'unlimited'. | |
| description | No | ||
| max_uses | No | Maximum number of successful payments. | |
| expires_at | No | ISO date when the link stops accepting payments. | |
| allow_msi | No | Enable MSI (meses sin intereses). | |
| msi_options | No | Allowed MSI plans, e.g. [3, 6, 12]. | |
| min_amount | No | Minimum amount for open-amount links (centavos). | |
| max_amount | No | Maximum amount for open-amount links (centavos). | |
| merchant_reference | No | Internal reference for the merchant. | |
| metadata | No | Free-form key/value metadata (max 50 keys). | |
| customization | No | Visual overrides for the hosted page. Only the keys you set are merged into the merchant defaults. | |
| custom_fields | No | ||
| line_items | No | Catalog or inline items. When provided, the total amount is computed server-side. | |
| display_currency | No | Foreign-currency display. Requires exchange_rate. | |
| exchange_rate | No | MXN per unit of display_currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: amounts in centavos, type defaulting to 'single', optional MSI, expiry, customization, and the response containing the shareable URL. It does not mention side effects, auth requirements, or error scenarios, but the provided information is sufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently packs essential information: purpose, usage hints, centavos note, amount modes, type default, optional fields, and response content. It is front-loaded with the purpose and maintains clarity without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 parameters, nested objects), the description covers key operational context: centavos, amount modes, type default, and the response URL. While it could include examples or warn about missing required fields, it provides enough completeness for an agent to use 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 description adds value beyond the schema by explaining the dual amount modes (fixed vs line_items) and the centavos requirement. It also highlights the type default and optional features. The schema already describes most parameters (88% coverage), so the description provides useful high-level context 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 begins with a clear statement 'Create a new payment link' and provides specific example intents (e.g., 'create a link for $X for product Y'). It distinguishes itself from sibling tools like deonpay_create_checkout_session and deonpay_create_subscription by focusing on payment links rather than checkout sessions or subscriptions.
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 user intents and explains the critical centavos requirement. It also clarifies the two ways to specify the amount (fixed amount or line_items). However, it does not explicitly state when to prefer this tool over alternatives like create_checkout_session or update_link.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_create_productCreate a productA
Create a new product in the catalog. Use this when the user says 'add a product called X for $Y' or wants to register inventory items they'll later attach to payment links / checkout sessions. unit_amount is in CENTAVOS and must be at least 1000 ($10.00 MXN minimum on creation). SKU must be unique within the merchant. To track stock, set stock_tracking=true AND provide stock_quantity (>= 0).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Product name. | |
| unit_amount | Yes | Unit price in CENTAVOS (minimum 1000 = $10.00 MXN on creation). | |
| description | No | ||
| currency | No | ISO currency code (default 'MXN'). | |
| image_url | No | ||
| sku | No | Unique SKU within the merchant catalog. | |
| is_active | No | Whether the product is sellable (default true). | |
| stock_tracking | No | Enable inventory tracking. | |
| stock_quantity | No | Initial stock count (required when stock_tracking is true). | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses key behavioral traits: unit_amount is in centavos with a minimum, SKU must be unique, and stock_tracking requires stock_quantity. These constraints are important for correct usage. It does not cover error handling or response format, but the core behaviors are well communicated.
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 sentences), front-loads the main purpose, then provides usage context, and ends with key parameter constraints. Every sentence adds value, no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters and no output schema, the description covers the primary purpose, usage context, and important constraints. It lacks details on authentication, error behavior, or return value, but it is sufficient for an agent to select and invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has a high description coverage (70%) with detailed comments on unit_amount (centavos, minimum) and stock_quantity (required when stock_tracking is true). The description repeats these constraints without adding new semantic information, so the added value is minimal.
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 product in the catalog' with a specific verb and resource. It also provides example user phrases like 'add a product called X for $Y', which makes the purpose unmistakable. The tool name and context distinguish it from sibling create tools (e.g., for checkout sessions or links).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when the user says...' or 'wants to register inventory items', providing clear guidance on when to invoke. It does not explicitly mention when not to use, but the specificity of the usage scenarios sufficiently differentiates from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_create_subscriptionCreate a subscription planA
Create a new subscription PLAN (template). Use this when the user wants to set up a recurring charge: 'create a $299 monthly plan called Premium'. Required: name, amount (centavos, min 100 = $1 MXN), interval_type. Important: in production the merchant must have an On-Demand NetPay key configured for the active environment, otherwise this returns ondemand_key_missing. trial_days > 0 enables a free trial period (charges a $10 MXN card-validation tx on the first day to verify the card). Optional flags allow_customer_cancel/pause/advance_payments control the customer self-service portal.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Plan name shown to subscribers. | |
| amount | Yes | Amount per cycle in CENTAVOS (min 100 = $1 MXN). | |
| interval_type | Yes | Billing cadence. | |
| description | No | ||
| currency | No | ISO 3-letter code, default MXN. | |
| interval_count | No | Multiplier of interval_type, e.g. interval_type='monthly' + interval_count=3 -> every 3 months. | |
| max_charges | No | Hard cap on total charges per subscriber. Null/omitted = unlimited. | |
| trial_days | No | Free trial length in days. 0 = no trial. | |
| product_id | No | Optional product to associate (must be active and not stock-tracked). | |
| contract_terms | No | Terms shown at checkout. | |
| allow_customer_cancel | No | Default true. | |
| allow_customer_pause | No | Default false. | |
| allow_advance_payments | No | Default false. | |
| max_advance_payments | No | ||
| portal_enabled | No | Default true. | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the required fields, amount format (centavos, min 100), trial behavior (charges $10 MXN on first day), error condition (ondemand_key_missing), and the effect of optional flags on customer self-service. While it doesn't mention idempotency or rate limits, the coverage is solid for a create tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph. It front-loads the purpose and example, then lists required fields, followed by a critical production note, trial behavior, and optional flags. Every sentence earns its place; there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description could hint at the return value (likely the created plan object), but it doesn't. However, it covers prerequisites, an error condition, and key parameter behaviors. For a tool with 16 parameters, the description provides sufficient context to use the tool correctly, though a note on what is returned would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (81%), so the baseline is 3. The description adds value by explaining the centavos unit for amount (not just 'integer'), the min amount in MXN, the special trial_days behavior (card-validation charge), and the collective effect of optional flags. This goes beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new subscription PLAN (template)'), and includes an example use case ('create a $299 monthly plan called Premium'). It distinguishes itself from sibling tools like deonpay_create_checkout_session by focusing on recurring charge template creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage context ('when the user wants to set up a recurring charge') and important prerequisites (merchant must have On-Demand NetPay key). It also explains the behavior of trial_days and optional flags. However, it doesn't specify when not to use the tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_customerGet customer details by emailA
Fetch a customer's full profile by email. Returns basic info, saved_cards (safe metadata only — never the vault token), active_subscriptions (status active/trialing/past_due/paused), and the last 20 transactions (excluding $10 MXN card-validation charges). Use this when the user asks 'show me everything about cliente@x.com' or 'what cards does this customer have on file'. The email is URL-encoded automatically — pass the plain email.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Customer email (plain — encoding is handled internally). | ||
| environment | No | Override the environment to query. The DeonPay API only honors this if it matches the environment baked into the API token; otherwise it is silently ignored. Useful when the same dashboard exposes both envs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description compensates by detailing what is returned (safe metadata for cards, active subscription statuses, last 20 transactions excluding certain charges) and the silent behavior of the environment parameter. It could mention authentication requirements, 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?
Four sentences with a clear front-loaded purpose. Each sentence adds essential information without redundancy. Efficient and well-structured.
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 the description thoroughly explains the return fields (basic info, saved_cards, subscriptions, last 20 transactions). It covers the tool's key behavior and constraints. Could mention transaction ordering or pagination, but sufficient for the parameter set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by noting automatic URL encoding for email and the environment parameter's behavior (silently ignored on mismatch). This enriches understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a customer's full profile by email, listing specific data returned (saved_cards, subscriptions, transactions). It distinguishes itself from siblings like deonpay_list_customers or deonpay_get_customer_subscription by focusing on a complete profile retrieval via email.
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 usage examples ('show me everything about cliente@x.com' or 'what cards does this customer have on file'), and explains that email is URL-encoded automatically, reducing user effort. This gives clear guidance on when to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_customer_subscriptionGet customer subscription detailsA
Fetch a single customer subscription by UUID. Includes the plan denormalized, the last 20 recurring charges (each with status success/failed/skipped/completed, charge_type auto/manual/renewal_link, attempt_number, error_message and timestamps), and cancellation flags. Use this when investigating a specific subscriber's history or a failed charge ('why did Juan's subscription go past_due?').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer subscription UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key output elements: denormalized plan, last 20 recurring charges with status, charge_type, attempt_number, error_message, and timestamps, plus cancellation flags. It does not detail error behavior or rate limits, but the provided information is sufficient for the tool's read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, then adding valuable details and a usage example. Every sentence earns its place 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?
Given the tool's simplicity (1 param, no output schema, no annotations), the description provides a solid overview of the response content. It could mention what happens on missing UUID, but overall it covers the essential context for an agent to use it 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?
The schema covers the single parameter 'id' with full description (UUID). The description adds context by mentioning 'by UUID' but does not elaborate beyond what the schema already provides, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single customer subscription by UUID, specifying what is included (plan, last 20 charges, cancellation flags). It distinguishes from siblings like 'deonpay_get_subscription' by emphasizing 'customer subscription' and denormalized plan details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case: investigating a subscriber's history or a failed charge, with an example question ('why did Juan's subscription go past_due?'). It guides the agent on when to use this tool, though it does not explicitly exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_linkGet payment link detailsA
Fetch a single payment link by its UUID or short_code. Returns the full link payload including line_items (enriched with product data when product_id is present), customization, custom_fields, expiration, usage limits and aggregated stats. Use this when the user references a link by name/short_code from a previous list, or when they paste a https://deonpay.mx/pay/ URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Either the link UUID or its short_code (e.g. 'abc123xy'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. Describes returned fields (line_items, customization, etc.) and enrichment with product data. Lacks error or auth details, but adequate for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff: first states purpose, second gives usage guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple fetch with one parameter and no output schema, the description covers purpose, usage, and return details comprehensively. Sibling list provides differentiation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter. Description adds value by specifying the parameter can be UUID or short_code and includes an example, enhancing 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?
Clearly states the verb 'Fetch', the resource 'payment link', and identifiers 'UUID or short_code'. Distinguishes from siblings like list_links by focusing on a single link.
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?
Gives explicit when-to-use scenarios: referencing by name/short_code from a list or pasting a URL. Does not explicitly mention alternatives but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_merchant_metricsGet merchant metricsA
Fetch a curated set of business metrics for the merchant. Use this as the FIRST tool for high-level questions: 'how much have I sold this month', 'what is my MRR', 'how is my conversion rate trending', 'how many active subscribers do I have'. Returns: revenue (gross/net/refunded in centavos), transactions (total/successful/failed/conversion_rate as %/average_ticket in centavos), subscriptions snapshot (active_subscribers, trialing_subscribers, past_due, mrr in centavos, churn_rate as %), and revenue_mix (recurring vs one_time, in centavos). IMPORTANT: subscriptions.active/trialing/past_due AND mrr are SNAPSHOTS — they ignore period. mrr is always a 30-day run-rate. revenue, transactions, churn_rate and revenue_mix DO honor period.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time window. Default '30d'. 'all' goes back to epoch. | |
| environment | No | Override the environment to query. The DeonPay API only honors this if it matches the environment baked into the API token; otherwise it is silently ignored. Useful when the same dashboard exposes both envs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly explains the return fields, including important nuances: subscriptions fields ignore `period`, mrr is always a 30-day run-rate, while revenue/transactions/churn_rate honor `period`. This goes beyond simple field listing.
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: a clear purpose statement, concrete examples, then a detailed list of return fields with annotations. Every sentence adds value, and it's not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description enumerates all return categories with subfields and units. It covers edge cases like snapshot behavior. For a metrics tool, this is sufficiently 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?
Input schema has 100% description coverage, so baseline is 3. The description adds extra context about `period` affecting some fields and not others, which is valuable. For `environment`, it adds no further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches a curated set of business metrics for the merchant, with specific examples like 'how much have I sold this month'. This distinguishes it from sibling tools which focus on creating or retrieving individual entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this as the FIRST tool for high-level questions', providing clear when-to-use guidance. It does not explicitly mention when not to use or alternatives, but the context implies it's for overviews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_productGet product detailsA
Fetch a single product by UUID OR by SKU (if you pass a non-UUID string the API resolves it as a SKU). Returns name, description, unit_amount in centavos, currency, image_url, sku, is_active, stock_tracking, stock_quantity and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product UUID or SKU. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses the resolution logic (UUID vs SKU) and lists all return fields. This provides good behavioral context beyond the 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?
Two concise sentences with no wasted words. The most critical information (purpose and parameter behavior) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description enumerates all returned fields. For a simple get-by-id tool with one parameter, the description covers all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'id' parameter. The description adds extra semantic value by explaining the UUID/SKU resolution and listing the returned fields, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches a single product by UUID or SKU, which is a specific verb and resource. Distinguishes from sibling tools like list_products that return multiple products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives. While the purpose is clear, it does not mention that for non-identifier-based queries one should use list_products.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_subscriptionGet subscription plan detailsA
Fetch a single subscription plan by UUID, including aggregated stats (active_subscribers, total_subscribers) and the most recent 10 recurring charges across all subscribers. Use this when the user wants a quick health view of a specific plan ('how is the Premium plan doing this month'). For per-subscriber detail use deonpay_list_customer_subscriptions filtered by subscription_id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Subscription plan UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses key behavioral details: returns aggregated stats and limits to 10 recent recurring charges. Lacks mention of error behavior or required permissions, but adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loaded with the main action and key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description fully covers what the tool returns (stats and recent charges) and provides usage context via sibling reference. For a simple fetch with one parameter, 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% with clear description for 'id' parameter. Description repeats 'by UUID' but adds no new semantic value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action ('Fetch') and resource ('single subscription plan by UUID'), and specifies included data (aggregated stats and recent 10 charges). Differentiates from sibling tools like deonpay_get_customer_subscription and deonpay_list_subscriptions.
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 the user wants a quick health view of a specific plan') and provides a clear alternative for per-subscriber detail (deonpay_list_customer_subscriptions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_get_transactionGet transaction detailsA
Fetch the full detail of a single transaction by UUID. Returns everything in the list view PLUS the NetPay timeline (each step in the charge / 3DS flow with duration_ms and error info), netpay charge_id / transaction_token, full metadata, refund details (when applicable), and IP/user-agent of the payer. Use this when debugging a failure, building a refund decision, or when the user asks 'what happened with transaction X'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full transparency burden. It details what extra fields are returned beyond the list view (NetPay timeline, charge_id, metadata, refund details, IP/user-agent). However, it does not mention error handling or potential side effects, which are minimal for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, followed by a concise list of additional return data and usage scenarios. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, no output schema, and no annotations, the description provides sufficient context about what the tool returns and when to use it. Minor gaps: no mention of error responses or pagination, but not critical for this focused read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter 'id' with UUID format and 100% schema description coverage ('Transaction UUID'). The description reinforces its purpose but adds no new semantic detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch the full detail of a single transaction by UUID' with a specific verb and resource. It distinguishes from list views by listing additional fields, making its purpose unambiguous and differentiating it from sibling tools like deonpay_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?
Explicit usage scenarios provided: 'Use this when debugging a failure, building a refund decision, or when the user asks what happened with transaction X.' This gives clear guidance on when to invoke, implicitly excluding use cases better served by list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_customersList customersA
List the merchant's customers (people who have completed at least one non-validation transaction). Use this for questions like 'who are my top customers', 'how many recurring buyers do I have', 'find customers with email containing X'. Sort by 'recent' (last transaction, default), 'revenue' (most spent), or 'transactions' (most active). Each row includes email, name, phone, first_seen_at, last_seen_at, total_transactions, total_spent in centavos, active_subscriptions and saved_cards_count.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| search | No | Free-text search across email, name, phone. | |
| sort | No | Sort order. Default 'recent'. | |
| environment | No | Override the environment to query. The DeonPay API only honors this if it matches the environment baked into the API token; otherwise it is silently ignored. Useful when the same dashboard exposes both envs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral disclosure burden. It explains that customers are defined as having at least one non-validation transaction, details sort options with meanings, lists returned fields, and describes the environment parameter's silent override behavior. This covers safety, scope, and return format comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but achieves clarity without wasted words. It front-loads the core purpose and then details parameters. While a bulleted list could improve scannability, the current structure is acceptable and not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists all returned fields (email, name, phone, first_seen_at, etc.), covers pagination (page, limit), sorting, search, and environment override. For a list endpoint, this provides complete context without missing crucial details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining the search parameter covers email/name/phone, defining sort option semantics ('recent' = last transaction, 'revenue' = most spent, 'transactions' = most active), and clarifying environment override behavior. This enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists customers who have completed at least one non-validation transaction, distinguishing it from sibling tools like deonpay_get_customer (single customer) or deonpay_list_customer_subscriptions. The verb 'list' and resource 'customers' are clear, with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides example questions that the tool can answer (e.g., 'who are my top customers', 'find customers with email containing X'), giving clear guidance on when to use it. However, it lacks explicit guidance on when not to use it or alternatives, though sibling names hint at other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_customer_subscriptionsList customer subscriptionsA
List individual customer subscriptions (the per-customer rows, NOT the plans). Use this to answer 'who is currently subscribed to plan X', 'how many trialing subscribers do I have', or 'find subscribers on past_due'. Filter by subscription_id (the plan), customer_email (exact, case-insensitive), and status (active/paused/cancelled/past_due/completed/trialing). Each item includes the plan denormalized as a subscription sub-object, charges_count, total_charged in centavos, current_period_start/end, next_charge_at, and cancel_at_period_end.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| subscription_id | No | Filter by plan UUID. | |
| customer_email | No | Exact email match (case-insensitive). | |
| status | No | ||
| environment | No | Override the environment to query. The DeonPay API only honors this if it matches the environment baked into the API token; otherwise it is silently ignored. Useful when the same dashboard exposes both envs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It discloses the list operation (read-only implied), filter behavior for each parameter, and the environment override quirk (silently ignored if mismatch). Missing explicit read-only statement but still informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single lean paragraph, front-loaded with purpose and use cases, then detailed filter options and return fields. No fluff, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description covers key return fields (plan, charges, period dates, etc.). Pagination parameters are in schema but not described in detail; otherwise complete for listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 83% schema coverage baseline, description adds significant meaning: explains subscription_id as plan filter, customer_email case-insensitivity, status enum values, environment override behavior, and return fields (plan sub-object, charges, etc.). Goes beyond schema definitions.
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 per-customer subscriptions (not plans), provides specific use cases like 'who is currently subscribed to plan X', and distinguishes from sibling tools that list plans or single subscriptions.
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 the tool (answering questions about subscribers, trialing, etc.) and differentiates from plans. Lacks explicit 'when not to use' or alternatives but provides sufficient context for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_linksList payment linksA
List payment links for the authenticated merchant. Use this when the user asks 'show me my payment links', 'what links did I create last week', or wants to find a link by name. Supports filtering by status (active/paused/expired/deleted), type (single/recurring/unlimited), free-text search across name/short_code/reference, and a date range. Returns a paginated list — each item includes id, short_code, name, amount in centavos, status, type, url, and aggregated stats (total_payments, successful_payments, total_revenue). Note: amounts are always in centavos (1 MXN = 100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| status | No | Filter by link status. | |
| type | No | Filter by link type. | |
| search | No | Free-text search across link name, short_code, or merchant_reference. | |
| date_from | No | Only links created on/after this date. | |
| date_to | No | Only links created on/before this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses return structure (fields like id, short_code, amount in centavos, status, type, url, stats) and notes that amounts are in centavos. It implies a read-only operation but does not explicitly state it. The description adds value beyond the 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 compact (four sentences) with the main action upfront ('List payment links for the authenticated merchant'), followed by usage examples and filter details. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description compensates for the missing output schema by listing return fields and noting the centavos unit. It covers pagination implicitly via 'paginated list' but does not mention sorting order or response metadata. Sufficient for a typical 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 100%, so the schema already documents all 7 parameters with clear descriptions. The tool description does not add new parameter-level meaning; it merely summarizes filter options (status, type, search, date range) which are already in the schema. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists payment links for the authenticated merchant, provides example user requests, and distinguishes from siblings like deonpay_get_link (single retrieval) and deonpay_create_link (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases ('show me my payment links', 'what links did I create last week') and lists supported filters, effectively guiding when to use the tool. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_link_transactionsList transactions for a payment linkA
List all transactions associated with a specific payment link. Use this when the user asks 'who paid for this link', 'how much did link X collect', or wants to inspect failed attempts on a single link. Returns paginated transactions with customer info, card brand/last_four, amount in centavos and status. The link can be referenced by UUID or short_code.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Link UUID or short_code. | |
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses that the tool returns paginated transactions with customer info, card brand/last_four, amount in centavos, status, and that the link can be referenced by UUID or short_code. It implies read-only behavior and does not contradict any 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 four sentences long, all relevant and front-loaded with the core purpose. It is efficient but could be slightly more streamlined without losing clarity.
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 covers the key return fields (customer info, card, amount, status) and pagination behavior. It is complete enough for an agent to understand what to expect, though it does not detail the exact schema of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds that the 'id' parameter can be a UUID or short_code (matching schema) and mentions paginated results, but does not add significant meaning beyond the schema descriptions for page and limit. 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 all transactions associated with a specific payment link' and provides concrete example queries like 'who paid for this link' and 'how much did link X collect'. It distinguishes itself from siblings such as deonpay_list_transactions (general list) and deonpay_get_transaction (single transaction).
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 tells when to use this tool ('when the user asks who paid for this link...') and implicitly excludes use cases for listing all transactions or getting a single transaction. However, it does not explicitly mention when not to use it or list alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_productsList productsA
List products in the merchant catalog. Use this when the user asks 'what products do I have', 'find product X', or wants to inspect inventory. Supports search across name/sku/description, filtering by is_active, and basic sorting (sort_by + sort_order). Each item includes id, name, unit_amount in centavos, currency, sku, is_active, stock_tracking and stock_quantity.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| search | No | Free-text search across name, sku and description. | |
| is_active | No | Filter by active state. | |
| sort_by | No | Field to sort by (default created_at). | |
| sort_order | No | Default desc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes search, filtering, sorting, and return fields. However, lacks mention of pagination behavior (page/limit) and any side effects or auth requirements. For a list endpoint, pagination metadata (total count, next page) is important but omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, usage guidance, capabilities. Every sentence adds value, no fluff. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description includes return fields (id, name, unit_amount in centavos, etc.), which is good. However, missing pagination structure (array vs object, metadata) and error handling. Still sufficiently complete for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description summarizes parameters (search, is_active, sort) but adds no new meaning beyond the schema. No parameter-specific additional context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists products in the merchant catalog, using specific verb 'list' and resource 'products'. Provides example user queries and distinguishes from sibling tools like deonpay_get_product (single) and deonpay_create_product.
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?
Gives concrete examples of when to use ('user asks what products do I have') but does not explicitly state when not to use or name alternative tools. Implicit differentiation from single-product retrieval is clear but could be more direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_subscriptionsList subscription plansA
List subscription PLANS (the recurring templates, not individual subscribers). Use this when the user asks 'what subscription plans do I have', 'show me my recurring products', or 'find the Premium plan'. Each item includes id, name, amount in centavos, currency, interval_type (daily/weekly/biweekly/monthly/yearly), interval_count, trial_days, status (active/paused/archived) plus aggregated stats: active_subscribers and total_revenue. Use deonpay_list_customer_subscriptions to drill into actual subscribers of a plan.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| status | No | ||
| search | No | Case-insensitive partial match on plan name. | |
| environment | No | Override the environment to query. The DeonPay API only honors this if it matches the environment baked into the API token; otherwise it is silently ignored. Useful when the same dashboard exposes both envs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the fields returned and notes that the environment parameter is silently ignored if mismatched. However, it does not mention read-only nature, authorization needs, or pagination behavior beyond 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?
Two sentences plus a compact field list. Concise, front-loaded, and 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?
No output schema, but description explains return fields. Parameter coverage is high, sibling tool is mentioned. Lacks only minor details like rate limits or pagination specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so baseline is 3. The description adds value by explaining 'centavos' for amount, but otherwise provides little beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists subscription PLANS (recurring templates), not individual subscribers, and distinguishes from the sibling tool deonpay_list_customer_subscriptions. It also provides example queries.
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 example queries are given, and the description directs users to deonpay_list_customer_subscriptions for drilling into actual subscribers of a plan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_list_transactionsList transactionsA
List transactions for the merchant with rich filtering. Use this for queries like 'how many sales today', 'show failed transactions this week', 'find payments from cliente@x.com', or 'transactions over $1000 MXN with Visa cards'. Filters include status, source_type (link/checkout), customer_email (partial match), merchant_reference (exact), card_brand (visa/mastercard/amex), date_from/to (ISO), and amount_min/max (centavos). Returns paginated results with customer, card, amount, payment_link summary and timestamps. Amounts in centavos.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Defaults to 1. | |
| limit | No | Page size. Maximum 100, default 20. | |
| status | No | ||
| source_type | No | Origin of the transaction. | |
| payment_link_id | No | ||
| checkout_session_id | No | ||
| customer_email | No | Partial match on customer email. | |
| merchant_reference | No | Exact merchant_reference filter. | |
| card_brand | No | ||
| date_from | No | ISO 8601 date or datetime string, e.g. 2026-05-15 or 2026-05-15T10:00:00Z. | |
| date_to | No | ISO 8601 date or datetime string, e.g. 2026-05-15 or 2026-05-15T10:00:00Z. | |
| amount_min | No | Minimum amount in centavos. | |
| amount_max | No | Maximum amount in centavos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions return content (paginated results with fields) and amounts in centavos, but lacks information on idempotency, authorization needs, rate limits, or any side effects. The read-only nature is implied but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the purpose and examples, then details filters and output. It could be slightly more concise, but every sentence contributes information. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 optional parameters and no output schema, the description covers most aspects: it lists all filter types, explains return fields, and notes pagination. Missing details include pagination iteration (e.g., next page hints) and exact response structure, but overall it's fairly 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 69%, and the description adds significant value: it explains filter behavior (partial match for email, exact for merchant_reference, enum values for status/source_type/card_brand), date format (ISO 8601), and amount unit (centavos). This compensates for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('List transactions') and includes example queries that clarify scope. It differentiates itself from siblings like deonpay_get_transaction (single) and deonpay_list_link_transactions (link-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage contexts via example queries and lists many filter options. However, it does not state when not to use this tool (e.g., for single transaction retrieval) or mention alternatives, though the sibling context implicitly fills that gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_update_linkUpdate a payment linkA
Update an existing payment link by UUID or short_code. Only send the fields you want to change — others are preserved. Common uses: pause a link (status='paused'), change its amount, extend the expiration, or rename it. The customization object is MERGED with the existing one (it does not replace it), so you can update a single visual key without losing the rest. Type cannot typically be changed once payments exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Link UUID or short_code. | |
| name | No | ||
| description | No | ||
| amount | No | New amount in centavos. | |
| status | No | ||
| max_uses | No | ||
| expires_at | No | ISO 8601 date or datetime string, e.g. 2026-05-15 or 2026-05-15T10:00:00Z. | |
| allow_msi | No | ||
| msi_options | No | ||
| min_amount | No | ||
| max_amount | No | ||
| merchant_reference | No | ||
| metadata | No | ||
| customization | No | Visual overrides for the hosted page. Only the keys you set are merged into the merchant defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: partial update, merge behavior for customization, and type change limitation. It does not cover idempotency, side effects, or auth, but provides useful context beyond a generic 'update'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a few concise sentences that each add value: identification, partial update, common uses, customization merge, and type limitation. No redundancy or 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 14 parameters, low schema coverage, no output schema, and no annotations, the description should cover more. It explains update semantics and merge behavior but omits response format, error handling, and parameter formatting details. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (29%), and description adds meaning by explaining partial update and customization merge. It gives an example for 'status' and describes 'customization' merging. However, many parameters remain undocumented, partially compensating but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies 'Update an existing payment link' with the verb and resource, and lists common uses like pausing, changing amount, extending expiration, or renaming. It distinguishes from sibling tools such as create_link and get_link.
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?
Guidance includes 'Only send the fields you want to change — others are preserved' and explains customization merging. It notes that type cannot typically be changed after payments exist. However, it lacks explicit 'when not to use' or comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deonpay_update_productUpdate a productA
Update an existing product (resolved by UUID or SKU). Only fields you send are changed. Use this for price adjustments, renaming, toggling is_active, updating stock_quantity, or swapping the image_url. Note: under the hood the API uses HTTP PATCH (not PUT).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product UUID or SKU. | |
| name | No | ||
| description | No | ||
| unit_amount | No | New unit price in centavos. | |
| currency | No | ||
| image_url | No | ||
| sku | No | ||
| is_active | No | ||
| stock_tracking | No | ||
| stock_quantity | No | ||
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses partial update behavior ('Only fields you send are changed') and HTTP method (PATCH). However, lacks details on idempotency, rate limits, authorization needs, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant words. Purpose and key behavior are front-loaded. 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?
With 11 parameters, no output schema, and no annotations, the description is too brief. Missing return format, error handling, pagination hints, and nuance about nested metadata field. Incomplete for complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18% (2 of 11 parameters described). Description compensates by clarifying the identifier resolution and partial update semantics, but does not explain parameters like metadata, stock_tracking, or currency beyond what schema lacks.
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 verb and resource: 'Update an existing product (resolved by UUID or SKU).' Differentiates from sibling tools like deonpay_create_product and deonpay_get_product by specifying update behavior and identifier 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 cases: 'price adjustments, renaming, toggling is_active, updating stock_quantity, or swapping the image_url.' Lacks explicit when-not-to-use or alternatives, but context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource and action (e.g., create, get, list, update) for specific entities like products, links, subscriptions, customers, and transactions. Even similar-sounding tools (e.g., get_subscription vs get_customer_subscription) are clearly differentiated by scope (plan vs individual subscriber).
All tools follow a consistent `deonpay_<verb>_<resource>` pattern in snake_case (e.g., deonpay_create_product, deonpay_list_transactions). There are no deviations, making the convention predictable and easy to navigate.
20 tools cover the key operations for a payment processing domain (CRUD for products, links, subscriptions, customers, transactions, plus metrics and checkout). The count is well-scoped—neither excessive nor insufficient—for the apparent purpose.
The tool surface covers core workflows (create/read/update/list for products and links, list/read for customers and transactions, subscription management). Minor gaps exist: lack of update_subscription (plans) and cancel customer subscription. Otherwise, the set is thorough.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Agentic commerce + trust MCP: discover, verify, and transact across droplinked's merchant network.
Stripe payments for AI agents. Create links, verify, manage customers.
Merchant-of-record MCP: AI agents sell software & digital goods, global tax handled, BYO key.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI agents to manage merchant payment processing through the BTCPay Server Greenfield REST API. It supports tools for creating invoices, managing stores, tracking payments, and performing Lightning Network operations.21MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with PayBridgeNP payment gateway accounts through natural language. Provides read-only access to payments, refunds, analytics, and account data, with write capabilities planned for future versions.2151MIT
- AlicenseAqualityCmaintenanceEnables AI agents to manage crypto payments, stores, products, and orders through the Model Context Protocol.20223MIT
- AlicenseAqualityCmaintenanceEnables AI agents to operate Xental merchant accounts via natural language, provisioning virtual accounts, monitoring transactions, and executing payouts.13MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hectortemich/deonpay-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server