paymongo-mcp
This server is a PayMongo MCP integration that lets an AI assistant accept and manage Philippine online payments (GCash, GrabPay, cards, etc.) through 24 tools.
Payments: create and retrieve payment intents, create and retrieve GCash/GrabPay sources, charge sources to create payments, and list payments with cursor pagination.
Refunds: create refunds (full or partial) and retrieve/list refunds.
Checkout & Links: create hosted checkout sessions, create/get Payment Links, and archive or unarchive links.
Webhooks: register, list, get, update webhooks, enable/disable them, and locally verify PayMongo webhook signatures with replay protection.
Payment Methods & Customers: create and retrieve payment methods (e.g. cards), and create, get, and list customers.
Safety & configuration: read-only tools always work; money-moving tools are blocked when using a live key unless
PAYMONGO_ALLOW_LIVE=trueis set, and amounts are specified in centavos.
Allows creating GCash/GrabPay sources, processing payments, refunds, and managing checkout sessions through the PayMongo payment gateway for the Philippines.
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., "@paymongo-mcpCreate a payment intent for 100 PHP"
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.
PayMongo MCP — accept online payments in the Philippines from an AI assistant
If you were looking for a way to take GCash, GrabPay or card payments from Claude or another AI assistant, send a customer a payment link, refund an order or wire up webhooks without writing gateway code, this is it. 24 tools cover payment intents, sources, payments, refunds, checkout sessions, payment links, webhooks, payment methods and customers over the PayMongo API via Basic Auth.
Tools (24)
Payments
Tool | Description |
| Create a payment intent |
| Get a payment intent by ID |
| Create a GCash/GrabPay source |
| Get a source by ID |
| Charge a source to create a payment |
| List payments (cursor pagination) |
Refunds
Tool | Description |
| Refund a payment |
| Get a refund by ID |
| List refunds (cursor pagination) |
Checkout & Links
Tool | Description |
| Create a hosted checkout session |
| Get a checkout session by ID |
| Create a no-code Payment Link |
| Get a link by ID or reference number |
| Archive / unarchive a link |
Webhooks
Tool | Description |
| Register a webhook endpoint |
| List webhooks |
| Get a webhook by ID |
| Update URL/events, enable/disable |
| Verify the |
Payment Methods & Customers
Tool | Description |
| Create a payment method (e.g. a card) |
| Get a payment method by ID |
| Create a customer |
| Get a customer by ID |
| List customers (cursor pagination) |
Related MCP server: vnpay-mcp
Quick Start
{
"mcpServers": {
"paymongo": {
"command": "npx",
"args": ["-y", "@theyahia/paymongo-mcp"],
"env": {
"PAYMONGO_SECRET_KEY": "<YOUR_PAYMONGO_SECRET_KEY>"
}
}
}
}Environment Variables
Variable | Required | Description |
| Yes | Secret API key from the PayMongo dashboard ( |
| No | Must be |
The server reads the secret key lazily — it can start and list its tools without a key set, so a missing key surfaces as a tool-call error rather than a startup crash.
Amounts
All amounts are integers in centavos (the smallest currency unit):
10000 = ₱100.00. PayMongo's minimum is typically 2000 (₱20.00) and varies by
method.
Safety: test vs live keys
PayMongo keys are either test (sk_test_…) or live (sk_live_…). To
prevent an AI agent from accidentally moving real money, the money-moving tools
(create_payment, create_refund, create_payment_intent, create_source,
create_checkout, create_link, create_payment_method) are refused when a
live key is configured unless you opt in with:
PAYMONGO_ALLOW_LIVE=trueRead-only tools (get_*, list_*) always work. Tools are also tagged with MCP
annotations (readOnlyHint / destructiveHint) so clients can auto-approve
reads and warn on destructive actions.
Webhooks
Create a webhook to receive async payment events (e.g. source.chargeable,
payment.paid):
create_webhook { "url": "https://your.app/paymongo/hook", "events": ["payment.paid", "source.chargeable"] }The response includes a per-webhook signing secret (whsk_…). Store it. When
PayMongo POSTs an event, verify the Paymongo-Signature header before
trusting the body — pass the raw request body, the header value, and the signing
secret to verify_webhook_signature:
verify_webhook_signature {
"payload": "<raw request body, exactly as received>",
"signature_header": "t=...,te=...,li=...",
"webhook_signing_secret": "whsk_...",
"mode": "test"
}It computes HMAC-SHA256(timestamp + "." + body) and compares it (timing-safe)
against the te (test) or li (live) segment. This tool runs entirely locally
and needs no API key. Pass tolerance_seconds to also reject stale timestamps
(replay protection).
Demo Prompts
"Create a payment intent for 100 PHP"
"Create a GCash source for 50 PHP with success/fail redirect URLs"
"Create a payment link for 250 PHP for 'Consulting fee'"
"List recent payments"
"Refund 25 PHP from payment pay_123"
"Register a webhook at https://example.com/hook for payment.paid"
Development
npm ci
npm run typecheck # tsc --noEmit
npm run build # tsc -> dist/
npm test # vitest
npm run dev # run from source with tsxLicense
MIT
Available Tools
24 toolsarchive_linkArchive / Unarchive Payment LinkBIdempotent
Archive or unarchive a Payment Link.
| Name | Required | Description | Default |
|---|---|---|---|
| link_id | Yes | Link ID (link_...). | |
| archived | No | true to archive the link, false to unarchive it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (openWorldHint and idempotentHint) indicate side effects and idempotency, but the description adds no extra behavioral context. It merely restates the title without disclosing consequences such as the link becoming hidden or the operation's reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly and clearly conveys the tool's function. It is appropriately brief, with no wasted words, and the key action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally adequate for a simple two-parameter toggle. The schema and annotations cover parameter details and idempotency, but the description lacks information about return values, error conditions, or the operational impact of archiving (e.g., whether the link disappears from lists), leaving some gaps in 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 input schema already provides complete descriptions for both parameters (100% coverage), so the description does not need to add parameter details. The phrase 'archive or unarchive' aligns with the archived boolean, but adds no meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action with a specific verb ('archive or unarchive') and a clear resource ('Payment Link'), making the tool's purpose immediately obvious. It also distinguishes itself from sibling tools like get_link and create_link, as no other sibling handles archiving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use or when-not-to-use guidance, nor does it mention alternatives or prerequisites. Usage is only implied by the tool's name and the archived parameter, but the description itself offers no explicit context for choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_checkoutCreate Checkout SessionADestructive
Create a hosted checkout session (returns a checkout URL).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in centavos as an integer (e.g. 10000 = ₱100.00). | |
| currency | No | ISO currency code. | PHP |
| cancel_url | Yes | URL to redirect to on cancel. | |
| description | No | Checkout / line-item description. | |
| success_url | Yes | URL to redirect to on success. | |
| payment_method_types | No | Payment method types. Common PayMongo values: card, gcash, grab_pay, paymaya, billease, dob, qrph. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true and openWorldHint=true, but the description only adds 'returns a checkout URL.' It does not explain side effects, what the destructive hint means, or any operational caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, and contains zero filler. It conveys purpose and primary return value efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for basic invocation given full schema coverage, but lacks usage guidance and behavioral context for a side-effecting tool with no output schema. The destructiveHint annotation remains unaddressed.
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 all parameters are already documented. The description adds no parameter-specific detail, which is acceptable given 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?
Description uses specific verb 'Create' with resource 'hosted checkout session' and notes the return value ('returns a checkout URL'). This clearly distinguishes the tool from sibling creation tools like create_payment_intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool vs alternatives such as create_payment_intent or create_source. There are no exclusions or explicit context clues beyond the word 'hosted'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_customerCreate CustomerA
Create a customer record (stores PII for reuse across payments).
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Customer email address. | ||
| phone | Yes | Customer phone number (e.g. +639...). | |
| last_name | Yes | Customer last name. | |
| first_name | Yes | Customer first name. | |
| default_device | No | Default device channel for the customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds specific behavioral context beyond the openWorldHint annotation by explicitly stating it stores PII and exists for reuse across payments. This clarifies the persistence side effect, though it could mention data retention, security, or idempotency, but with the annotation covering general side effects, the added detail is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and purpose. It contains no filler or 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?
The description and schema together cover the tool's inputs and basic purpose, but with no output schema, the description does not mention what the tool returns (e.g., customer ID or object). It also lacks guidance on edge cases or prerequisites, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description adds no additional parameter-specific meaning, aligning with the baseline of 3.
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 a specific action (create) and resource (customer record), and adds purpose ('stores PII for reuse across payments'). This distinguishes it from sibling tools like create_payment or create_payment_method, which create other 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 implies when to use this tool through 'stores PII for reuse across payments,' suggesting it's for storing customer data for future transactions. However, it does not explicitly state when not to use it or mention alternatives, such as create_payment_method for non-PII payment details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_linkCreate Payment LinkADestructive
Create a PayMongo Payment Link (no-code shareable checkout). Returns a checkout_url and reference_number.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in centavos as an integer (e.g. 10000 = ₱100.00). | |
| remarks | No | Internal note (NOT shown to the payer). | |
| currency | No | ISO currency code. | PHP |
| description | Yes | Description shown to the payer on the link's checkout page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include openWorldHint: true and destructiveHint: true, but the description adds no clarification about what these side effects actually are (e.g., whether the link expires, if it is irreversibly created, or what destructive means in this context). The description only mentions return values, not the behavioral implications of creating a link. Since annotations are broad and unhelpful, the description carries more burden than it fulfills.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that are front-loaded with the core purpose and key return values. No filler or repetition of schema details. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward creation tool with 4 parameters fully documented in the schema, the description is sufficient: it states what it does, the return values, and the no-code context. However, it does not address the unusual destructiveHint annotation or any side effects, which would be useful but not critical for invoking the tool. Overall, it is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all four parameters already having clear descriptions (e.g., amount in centavos, remarks as internal note). The description adds no additional parameter-level information, so the baseline of 3 applies because the schema does the heavy lifting.
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 PayMongo Payment Link' with a specific verb and resource, and adds the differentiator 'no-code shareable checkout' to distinguish it from similar sibling tools like create_checkout. It also mentions expected return values (checkout_url and reference_number), 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 phrase 'no-code shareable checkout' implies when to use this tool (when you want a hosted payment page without building UI), but there is no explicit guidance on when not to use it or how it differs from siblings like create_checkout or create_payment_intent. No exclusions or alternatives are named, so it remains at an implied-usage level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_paymentCreate PaymentADestructive
Charge a chargeable source to create a payment (moves money).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in centavos as an integer (e.g. 5000 = ₱50.00). | |
| currency | No | ISO currency code. | PHP |
| source_id | Yes | Source ID to charge (src_...). | |
| description | No | Payment description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint and openWorldHint. The description adds 'moves money', which explicitly discloses the financial consequence and clarifies the nature of the destructive action. However, it does not disclose additional behaviors such as idempotency, failure modes, or return value structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that delivers the core action and consequence without any filler. All words contribute meaning, making it ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal, but combined with the detailed schema (100% coverage) and annotations (destructive, open world), it provides enough for an agent to understand the basic operation. However, it lacks guidance on use cases and alternatives, and does not describe the return value or potential side effects beyond 'moves money', which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions 'chargeable source' which aligns with the source_id parameter, but it does not provide any additional parameter semantics beyond what the schema already documents (e.g., amount in centavos, currency default).
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 'charge' and identifies the resource as 'a chargeable source', clearly indicating this tool performs a direct charge to create a payment. This distinguishes it from sibling tools like create_payment_intent, which creates an intent rather than an immediate charge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions. The phrase 'to create a payment' implies it is for immediate payment creation, but there is no explicit guidance for choosing this over create_payment_intent or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_payment_intentCreate Payment IntentADestructive
Create a PayMongo payment intent — the object that tracks a payment through its lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in centavos as an integer (e.g. 10000 = ₱100.00). PayMongo minimum is usually 2000 (₱20.00) and varies by method. | |
| currency | No | ISO currency code (PayMongo is PHP-centric). | PHP |
| description | No | Payment description | |
| payment_method_allowed | No | Allowed payment methods. Common PayMongo values: card, gcash, grab_pay, paymaya, billease, dob, qrph. PayMongo may add more over time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the tool as having external side effects (openWorldHint, destructiveHint). The description adds that the intent tracks the payment lifecycle, but does not disclose details like the two-step confirm flow or that the returned intent must be used later.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. It immediately states the action and object, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a basic understanding but incomplete for a payment tool with no output schema. It could mention that the returned intent must be confirmed or how it differs from a checkout session, leaving the agent to infer the next steps.
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 descriptions cover 100% of parameters with rich details (e.g., amount in centavos, minimum, allowed methods), so the tool description adds no additional parameter 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?
The description clearly identifies the action ('Create'), the resource ('a PayMongo payment intent'), and its purpose ('tracks a payment through its lifecycle'), distinguishing it from sibling tools like create_checkout or create_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (creating a payment intent) but gives no explicit guidance on when to choose this over alternatives such as create_checkout or create_payment, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_payment_methodCreate Payment MethodA
Create a payment method (e.g. a card) to attach to a payment intent. Handle card data with care.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Payment method type, e.g. 'card' or 'paymaya'. | card |
| billing | No | Optional billing info (name, email, phone). | |
| details | No | Type-specific details. For 'card': card_number, exp_month, exp_year, cvc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful warning to 'handle card data with care', indicative of sensitive data handling. However, it does not disclose side effects beyond creation (e.g., whether it validates, charges, or stores the card). The openWorldHint annotation is not explained, so the description provides only modest behavioral 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?
The description is two concise sentences, front-loading the core purpose and including only a brief necessary caution. No wasted words or redundant schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, nested objects, and no output schema, the description is minimal but adequate for basic invocation. It explains the role in the payment workflow ('attach to a payment intent') and warns about sensitive data, but lacks information on return values, error behavior, or how the payment method is ultimately attached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all parameters (100% coverage), so the description does not need to repeat them. The description mentions 'card' as an example, which aligns with the schema's 'details' field, but adds no additional parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a payment method') and provides an example ('e.g. a card') with a purpose ('to attach to a payment intent'). This distinguishes it from general creation tools, though it does not explicitly contrast with sibling tools like create_source, leaving some 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 phrase 'to attach to a payment intent' gives clear context for when this tool should be used, implying the intended workflow. However, it does not explicitly mention alternatives or when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_refundCreate RefundADestructive
Refund a payment, fully or partially (moves money back to the customer).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Refund amount in centavos as an integer. | |
| reason | Yes | Refund reason. | |
| payment_id | Yes | Payment ID to refund (pay_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true. The description adds the behavioral detail that money moves back to the customer, including full or partial refunds. However, it does not disclose other traits like idempotency or reversibility, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose and key attribute (partial/full) without unnecessary words. It is concise 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?
For a simple refund creation tool, the description captures the core behavior but omits edge-case constraints such as payment state requirements or maximum refund limits. The annotations and schema provide safety and parameter details, making the description minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema, achieving 100% schema coverage. The tool description itself adds no parameter-specific details, so it relies on the schema, which 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 uses the specific verb 'Refund' with the resource 'a payment', and clarifies the scope with 'fully or partially'. This clearly distinguishes it from sibling read tools like get_refund and list_refunds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for refunding payments but does not explicitly state when to use it versus alternatives or exclude cases. The parenthetical provides context about the effect but lacks explicit guidance on when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sourceCreate SourceADestructive
Create a GCash/GrabPay payment source (returns a redirect checkout URL).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Source type (e-wallet). | |
| amount | Yes | Amount in centavos as an integer (e.g. 5000 = ₱50.00). | |
| currency | No | ISO currency code. | PHP |
| redirect_failed | Yes | URL to redirect to on failure. | |
| redirect_success | Yes | URL to redirect to on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating destructive behavior (destructiveHint=true) and external world interaction (openWorldHint=true), the description adds the key behavioral detail that the tool 'returns a redirect checkout URL', which is especially valuable because there is no output schema. It also clarifies the specific e-wallet types. This goes beyond the annotations and helps the agent anticipate the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. It states the core action first and adds the return behavior in parentheses. No wasted words 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?
For a tool with 5 parameters and no output schema, the description covers the essential context: purpose, specific payment types, and the return value (redirect checkout URL). The schema already documents parameters fully, so the description is sufficient for basic selection and invocation. It could mention prerequisites or side effects, but the annotation hints and return description cover most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for all parameters, including amount units and type enum values. The description adds minimal extra parameter meaning—only naming the e-wallet types (GCash/GrabPay) already present in the schema. It does not exceed the baseline set by the rich 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 specific verb and resource: 'Create a GCash/GrabPay payment source'. It also differentiates from sibling tools like create_payment_intent or create_checkout by naming the specific payment source type and the return value (a redirect checkout URL). This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: you need a GCash/GrabPay payment source with a redirect checkout URL. However, it does not explicitly state when to use this tool over alternatives such as create_payment_intent or create_checkout, nor does it provide exclusion criteria. This is implied usage rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookCreate WebhookA
Register a webhook endpoint for event delivery. The response includes the per-webhook signing secret (store it to verify signatures).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS endpoint that will receive webhook events. | |
| events | Yes | Webhook event types to listen for. Common PayMongo events: source.chargeable, payment.paid, payment.failed, payment.refunded, link.payment.paid, checkout_session.payment.paid. See PayMongo docs for the full list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait beyond the annotation: the response includes a per-webhook signing secret that should be stored for signature verification. This adds practical context that the schema and the vague openWorldHint annotation do not cover. It does not contradict any annotations, and the annotation (openWorldHint) is weak, so the description carries more weight here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence states the core purpose, and the second provides a critical operational detail. No filler or redundant content. It is well-front-loaded and 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 low complexity (2 params, no nested objects, no output schema), the description covers the essential return-value information (signing secret) and the purpose. It does not explain post-creation behavior (e.g., whether the webhook is active immediately) or prerequisites, but these are not critical given the simple scope and presence of sibling tools for other operations. Overall, it is complete enough for an 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?
Schema coverage is 100%, with both parameters (url and events) having detailed descriptions. The tool description adds no parameter-specific information, but the baseline is 3 because the schema already provides the necessary semantics. No additional value is provided beyond the schema, but none is 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 specific action ('Register a webhook endpoint') and its purpose ('for event delivery'). This distinguishes it from sibling tools like list_webhooks, get_webhook, and update_webhook, which perform different operations on webhook resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the verb 'register' and the resource type, but no explicit guidance is given about when to use this tool versus alternatives. It doesn't mention exclusions or prerequisites, and doesn't reference the sibling tools. For a straightforward create operation in a well-understood context, implied usage is acceptable but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checkoutGet Checkout SessionBRead-onlyIdempotent
Retrieve a checkout session by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_session_id | Yes | Checkout session ID (cs_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what the annotations already provide. It simply restates the purpose and the lookup method, which is already evident from the schema. There is no mention of error handling, response details, rate limits, or other behavioral traits.
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, clear sentence with no filler or redundant phrasing. It is appropriately front-loaded and every word contributes to conveying the tool's 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?
For a simple get-by-ID tool with one well-documented parameter and strong annotations, the description is sufficient. The operation is straightforward, and although it lacks usage context, the simplicity of the tool reduces the need for additional detail.
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 schema already documents the sole parameter with a clear format hint ('cs_...'). The description's 'by its ID' adds no further semantic value, 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 uses the specific verb 'Retrieve' and clearly identifies the resource as a 'checkout session' with lookup by ID. This distinguishes it from sibling tools like get_payment_intent or get_source, 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 provides no guidance on when to use this tool versus alternatives such as get_payment_intent or list_payments. It lacks any contextual cues about when this is the appropriate choice or what conditions warrant its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerGet CustomerARead-onlyIdempotent
Retrieve a customer by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Customer ID (cus_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering the safety profile. The description adds no behavioral details beyond the literal action, such as return format, error behavior, or any side effects. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the primary action, and contains zero filler or redundant text. It is optimally concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), and annotations provide strong safety context. The description is sufficient for basic usage, though it omits details like response contents or error handling, which would make it more 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 customer_id documented as 'Customer ID (cus_...).' The description's 'by its ID' adds no new meaning beyond what the schema already provides, 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 uses a specific verb 'Retrieve' with a clear resource 'customer' and method 'by its ID'. This clearly distinguishes it from sibling tools like list_customers (plural, listing) and create_customer (creating).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a customer ID, but provides no explicit guidance on when to use this tool versus alternatives like list_customers or get_checkout. No exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linkGet Payment LinkARead-onlyIdempotent
Retrieve a Payment Link by link_id, or look it up by reference_number.
| Name | Required | Description | Default |
|---|---|---|---|
| link_id | No | Link ID (link_...). | |
| reference_number | No | Human-friendly reference number printed on the link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral nuance that either link_id or reference_number can be used for lookup, which is not in the annotations. Since readOnlyHint and idempotentHint already disclose the safety profile, the description's contribution is modest. It does not mention behavior when both or neither parameters are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose and lookup methods without any redundant text. Every phrase 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?
For a simple read-only tool with strong annotations and no output schema, the description is fairly complete. It covers the two identifiers and the action. The only gap is lack of guidance on how to handle the optional parameters together, which is a minor omission given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds that they are alternative lookup keys, but does not clarify exclusivity or order of precedence when both are supplied. This does not meaningfully exceed the baseline set by 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's purpose: 'Retrieve a Payment Link' with two distinct lookup methods (link_id or reference_number). This specific verb+resource combination distinguishes it from sibling tools like get_checkout or get_payment_intent, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool: when you have a link_id or a reference_number. It provides clear context for the intended use case. However, it does not explicitly name alternative tools for other scenarios, so it stops short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_intentGet Payment IntentARead-onlyIdempotent
Retrieve a PayMongo payment intent by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent_id | Yes | Payment intent ID (pi_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds no further behavioral context, such as error cases, return format, or the meaning of openWorldHint. It merely restates the action without additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It efficiently conveys the tool's purpose without unnecessary detail.
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 getter with one parameter and strong annotations, the description is sufficient. It lacks an explicit description of the return value, but that is conventionally the resource itself, so the overall context is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description is clear. The description's 'by its ID' adds no further meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'), identifies the resource ('PayMongo payment intent'), and defines the scope ('by its ID'). This clearly differentiates it from sibling tools like create_payment_intent or get_checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage—you need to provide a payment intent ID to fetch it—but it does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_methodGet Payment MethodARead-onlyIdempotent
Retrieve a payment method by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_method_id | Yes | Payment method ID (pm_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety and idempotency are known. The description adds no additional behavioral context beyond what annotations provide, which is acceptable but not extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word earns its place, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with strong annotations and a clear schema, the description is largely sufficient. It could mention the return format or error behavior, but given the tool's simplicity and the annotations, it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already described as 'Payment method ID (pm_...)' in the schema. The description only echoes 'by its ID', adding no new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Retrieve) and the resource (payment method) with a specific lookup criterion (by its ID). It is distinct from sibling tools like get_source or get_payment_intent since it targets payment methods specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool when you need a payment method by its ID. It doesn't explicitly mention alternatives or exclusions, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_refundGet RefundARead-onlyIdempotent
Retrieve a refund by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| refund_id | Yes | Refund ID (ref_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds no further behavioral context (e.g., return format, error handling, or whether a missing ID yields an error), but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler or redundancy. It is well-structured and front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read operation with rich annotations, the description covers the essential purpose and invocation. It does not specify the return value or behavior when the refund is not found, but the tool's simplicity and annotation coverage make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter 'refund_id' described as 'Refund ID (ref_...).' The description only repeats 'by its ID' and adds no semantic nuance beyond what the schema already provides, so the 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 'Retrieve a refund by its ID' uses a specific verb ('retrieve') and a clear resource ('refund') with an identifier, distinguishing it from sibling get_* tools. It states the exact operation and scope, 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?
Usage is implied: the tool is for fetching a single refund when an ID is known. However, there is no explicit guidance on when to use this versus list_refunds or create_refund, nor any mention of alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sourceGet SourceBRead-onlyIdempotent
Retrieve a payment source by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | Source ID (src_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations. Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description simply restates 'retrieve' without disclosing return format, error behavior, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, direct, and free of extraneous content. It is appropriately concise for a simple one-parameter read tool.
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 (1 param, no output schema) and strong annotations, the description is mostly sufficient. However, it lacks details about the response format or not-found behavior, which would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the source_id parameter described as 'Source ID (src_...)' . The description's 'by its ID' adds no new semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Retrieve' with the resource 'payment source' and specifies 'by its ID', clearly distinguishing from sibling get tools that target other resource types. It is specific and not tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus other retrieval tools. It does not mention alternatives, prerequisites, or exclusions, so the agent has no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_webhookGet WebhookARead-onlyIdempotent
Retrieve a webhook by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | Webhook ID (hook_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering the key behavioral guarantees. The description adds no extra context about return format, error behavior, or side effects. It does not contradict the annotations, but it also doesn't enhance transparency 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?
A single, front-loaded sentence that states the action and resource directly. There is zero wasted content, making it highly concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID operation with a fully documented schema and strong annotations, the description is complete. No output schema is needed since 'retrieve' implies returning the resource. The tool is simple enough that no further context is required.
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 webhook_id, including an example format ('hook_...'). The description adds no additional parameter guidance. Baseline 3 is appropriate since the schema fully documents 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?
The description clearly states the action ('Retrieve') and resource ('a webhook'), scoped by ID. This unambiguously distinguishes it from list_webhooks and other getters like get_checkout or get_payment_intent by the resource type, even though no explicit comparison is made.
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 usage context is implied: the agent should use this when it has a specific webhook ID. However, there is no explicit guidance on when not to use it or mention of alternatives like list_webhooks. The description is minimal and doesn't provide exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList CustomersARead-onlyIdempotent
List customers with cursor pagination (before/after by customer ID).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor: return resources after this customer ID. | |
| limit | No | Max customers to return (1–100, default 10). | |
| before | No | Cursor: return resources before this customer ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the cursor pagination behavior (before/after by customer ID), which is useful but does not go beyond that to cover response format or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, immediately states the action, and includes necessary pagination context without any 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?
For a simple list tool with three optional parameters fully described in the schema and strong annotations, the description is complete enough. It does not detail the return shape, but the tool's function is straightforward and the openWorldHint suggests a list 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 descriptions cover 100% of the parameters with clear cursor semantics. The description reinforces 'before/after by customer ID' but adds no new information beyond what the schema already states.
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 'List' and resource 'customers', and adds the pagination method, clearly distinguishing it from get_customer (single retrieval) and create_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?
The pagination note implies batch retrieval, but there is no explicit guidance on when to use this over get_customer for single lookups or list_payments for other resources. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsList PaymentsARead-onlyIdempotent
List payments with cursor pagination (before/after by payment ID).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor: return resources after this payment ID. | |
| limit | No | Max payments to return (1–100, default 10). | |
| before | No | Cursor: return resources before this payment ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints, so the bar is lower. The description adds the behavioral detail of cursor pagination (before/after by payment ID), which is useful, but does not disclose other traits like default ordering or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the tool's purpose and the key pagination mechanism. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only list tool with complete schema coverage and strong annotations. The description adequately covers pagination, and although there is no output schema, the return type (list of payments) is implied by the name. It is sufficiently complete 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?
Schema coverage is 100% and the parameter descriptions already explain that after/before are cursors. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists payments, with a specific verb and resource. It also specifies cursor pagination by payment ID, which distinguishes it from other payment-related tools that retrieve single items or create resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for paginated listing of payments but does not explicitly state when to use it instead of alternatives like get_payment_intent or create_payment. There is no mention of exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_refundsList RefundsARead-onlyIdempotent
List refunds with cursor pagination (before/after by refund ID).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Cursor: return resources after this refund ID. | |
| limit | No | Max refunds to return (1–100, default 10). | |
| before | No | Cursor: return resources before this refund ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the safety profile is covered. The description adds behavioral context by specifying cursor pagination (before/after by refund ID), which tells the agent how listing is scoped. It does not describe return format, but the absence of an output schema and the read-only nature make this acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the verb and resource and adds essential pagination detail. Every word is informative; there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with three optional, well-documented parameters, the description provides sufficient context: it names the resource, the pagination mechanism, and the cursor keys. Annotations cover safety and idempotency, so no further behavioral disclosure is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all three optional parameters (after, before, limit), so the description does not need to compensate. The description's mention of 'before/after by refund ID' aligns with the schema's parameter meanings but adds no new information beyond it.
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 'List' and the resource 'refunds', and specifies cursor pagination by refund ID. This distinguishes it from sibling tools like get_refund (single retrieval) and create_refund (creation), and from list_payments (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it note any exclusions or prerequisites. The usage context is implied by the name and description, but no alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksList WebhooksARead-onlyIdempotent
List all registered webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'all registered,' but this is largely redundant with openWorldHint and the verb 'list.' It does not disclose additional behaviors such as pagination, ordering, or response format. 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 a single sentence with no wasted words. It is front-loaded and appropriately sized for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is very simple with no parameters and rich annotations, but there is no output schema. The description does not mention what is returned (e.g., an array of webhook objects) or whether pagination applies. It is adequate but could be more complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so there is nothing for the description to add. The schema is fully covered and the baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all registered webhooks,' specifying the action (list) and resource (webhooks). It distinguishes from sibling tools like get_webhook (singular) and create/update/verify 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?
The description gives no guidance on when to use this tool versus alternatives like get_webhook for a single webhook or list_payments for other resources. No context for selection is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookUpdate WebhookA
Update a webhook's URL/events and/or enable/disable it. Provide any combination of url, events, enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | New endpoint URL. | |
| events | No | Replacement event list. | |
| enabled | No | Enable (true) or disable (false) the webhook. | |
| webhook_id | Yes | Webhook ID (hook_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation openWorldHint signals a real-world mutation, and the description aligns by saying 'update' and 'enable/disable'. It adds useful behavioral context with 'Provide any combination of url, events, enabled', which clarifies partial update semantics – an agent knows unspecified fields remain unchanged. This goes beyond the annotation, though it doesn't disclose validation or error 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 a single concise sentence that front-loads the action, states the resource, and lists the modifiable fields. Every word contributes, with no wasted space or repetition of the title/name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (4 params, all documented, no output schema), the description is adequately complete. It covers what the tool does and partial update flexibility. It doesn't mention return values or error cases, but these are not critical for a straightforward update operation, and the schema and annotations already provide enough 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%, so a baseline of 3 applies. The description mentions url, events, and enabled, but does not add meaning beyond the schema's own descriptions. 'Any combination' is a slight addition, but the schema already indicates optionality. No extra syntax or constraints are provided.
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 verb 'update', the resource 'webhook', and the specific modifiable fields ('URL/events and/or enable/disable'). This clearly distinguishes it from sibling tools like create_webhook, get_webhook, and verify_webhook_signature.
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?
When to use this tool is implied by its name and purpose (updating an existing webhook), but it does not explicitly state alternatives or exclusions. It doesn't say 'use this instead of create_webhook for existing webhooks.' This is acceptable but not explicit, so it falls short of a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_webhook_signatureVerify Webhook SignatureARead-only
Locally verify a PayMongo webhook's 'Paymongo-Signature' header (HMAC-SHA256 over timestamp.body). No network call — uses the per-webhook signing secret you pass in.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which signature to verify: test (te) or live (li). | test |
| payload | Yes | The raw webhook request body, exactly as received (no re-serialization). | |
| signature_header | Yes | Value of the 'Paymongo-Signature' header (format: t=...,te=...,li=...). | |
| tolerance_seconds | No | If set, reject signatures whose timestamp is older than this many seconds (replay protection). | |
| webhook_signing_secret | Yes | The per-webhook signing secret (whsk_...) returned when the webhook was created. NOT your API secret key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: 'No network call' clarifies that verification is purely local, and 'uses the per-webhook signing secret you pass in' specifies the authentication mechanism. This goes beyond the annotation by detailing the operational behavior without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no fluff. It front-loads the main purpose and immediately adds the critical constraint ('No network call') and the secret context. Every word contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters and no output schema, but the description covers the essential behavior: verification method, local execution, and secret usage. It doesn't explicitly state the return value (e.g., boolean) or error handling, which would be ideal, but the simple nature of the tool and strong schema/annotation support make this a minor gap.
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 all parameters (100% coverage), so the baseline is 3. The description adds meaning beyond the schema by explaining the HMAC-SHA256 computation over 'timestamp.body', which helps understand how the signature_header and payload parameters relate. It also clarifies that the webhook_signing_secret is used locally, reinforcing the schema's note that it is NOT the API secret key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: locally verifying a PayMongo webhook's 'Paymongo-Signature' header using HMAC-SHA256. It is specific with a verb ('verify'), a resource ('PayMongo webhook signature'), and distinctive details (local, no network call). This clearly distinguishes it from sibling tools that create or manage 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?
The description provides clear context: when to use it (to verify a webhook signature) and key constraints (local, no network call, uses the per-webhook signing secret). While it doesn't explicitly name alternatives or exclusions, the context is sufficient given that no sibling tool performs signature verification.
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. Dates show when Glama detected each change.
24 tool updates
v1.1.0- First observed
archive_link - First observed
create_checkout - First observed
create_customer - First observed
create_link - First observed
create_payment - First observed
create_payment_intent - First observed
create_payment_method - First observed
create_refund - First observed
create_source - First observed
create_webhook - First observed
get_checkout - First observed
get_customer - First observed
get_link - First observed
get_payment_intent - First observed
get_payment_method - First observed
get_refund - First observed
get_source - First observed
get_webhook - First observed
list_customers - First observed
list_payments - First observed
list_refunds - First observed
list_webhooks - First observed
update_webhook - First observed
verify_webhook_signature
TDQS
Tools are mostly distinct, each targeting a specific resource and action. However, create_checkout, create_link, and create_source all initiate payment collection and could be confused by an agent; their descriptions partially mitigate this.
All tool names follow a consistent verb_noun snake_case pattern (get_, create_, list_, update_, archive_, verify_). There are no mixed naming conventions or vague verbs.
24 tools is on the heavier side but appropriate for a payment API covering multiple resources (payments, refunds, checkouts, links, webhooks, customers). Each tool serves a clear purpose within its resource.
Core payment flows are covered, including payment intents, sources, payments, refunds, and webhooks. However, there are notable gaps: no get_payment, no update/delete for customers, and payment intents lack attach/confirm operations, requiring workarounds.
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
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
MCP server for Lemon Squeezy — stores, products, orders, subscriptions, license keys.
Billing proxy for MCP servers. Adds Stripe and x402 crypto payments without writing billing code.
MCP server for EasyPost — rate shipments, buy & refund labels, track packages, verify addresses.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for Xendit payment APIs. Invoices, disbursements, balance checks, and bank transfers across Southeast Asia.6594MIT
- AlicenseBqualityDmaintenanceMCP server for VNPay payment gateway (Vietnam). Supports payment URL generation, transaction queries, refunds, tokenized payments, and IPN verification with HMAC-SHA512 signing.810MIT
- AlicenseAqualityDmaintenanceMCP server for MAIB e-commerce payments (Moldova). Supports payments, refunds, recurring billing, one-click payments, and transaction status via OAuth 2.0.813MIT
- AlicenseBqualityFmaintenanceMCP server for Payme payment system (Uzbekistan). Supports transactions, statements, payment links, and balance queries via JSON-RPC 2.0.817MIT
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/theYahia/paymongo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server