Cosmos Pay MCP Server
OfficialEnables creating and managing Cosmos Pay stablecoin payment requests on Solana, including Solana Pay links, QR codes, hosted checkout, payment status/history, balances, and validating transaction hashes.
Enables creating and managing Cosmos Pay stablecoin payment requests on Stellar, including SEP-7 payment links, QR codes, hosted checkout, payment status/history, balances, Stellar asset listing, and validating transaction hashes.
Click on "Deploy 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., "@Cosmos Pay MCP ServerCreate a payment link for 25 USDC on Stellar to my store's address"
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.
Cosmos Pay MCP server
An MCP server for the Cosmos Pay Payments API. It lets an AI agent (Claude Code, Claude Desktop, Cursor, VS Code, Windsurf and any other MCP client) create stablecoin payment links and check payments on Stellar, Solana and Monad with your API key.
Cosmos Pay is non-custodial: a payment link is a request the customer pays from their own wallet, and the money settles on-chain straight to your address. Nothing in this server signs or moves funds.
Cosmos Pay (cosmospay.lat) is a different project from the Cosmos Network (ATOM).
Tools
Tool | What it does | Kind |
| Create a payment request: a link (SEP-7 on Stellar, Solana Pay on Solana, EIP-681 on Monad), its QR code and a hosted checkout page | creates, moves no money |
| One payment: status, amount, asset, chain, link, checkout URL and, once paid, the transaction hash | read |
| A payment's status changes | read |
| Payments, newest first, filtered by status, chain or date, paged | read |
| Check a transaction hash against a payment and settle it if it pays it | idempotent |
| Delete an unpaid payment so its link can no longer be paid | destructive |
| Totals, settled volume, webhook health and a 30-day series | read |
| Settled and pending amounts per asset | read |
| Stellar asset codes and issuers to charge in (USDC, EURC...) | read |
Each tool carries MCP annotations (readOnlyHint, destructiveHint), so your client can ask before anything that writes.
Related MCP server: Yolfi MCP Server
Setup
Create a secret API key in the Cosmos Pay dashboard (API keys). Start with a
dv_key: it works on test networks with no real money. Aprod_key works on mainnet.Add the server to your MCP client with the key in its environment.
Claude Code
claude mcp add cosmos-pay --env COSMOS_PAY_API_KEY=dv_your_key -- npx -y @cosmosapp/pay_mcpClaude Desktop, Cursor, Windsurf (claude_desktop_config.json, .cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"cosmos-pay": {
"command": "npx",
"args": ["-y", "@cosmosapp/pay_mcp"],
"env": { "COSMOS_PAY_API_KEY": "dv_your_key" }
}
}
}VS Code (.vscode/mcp.json)
{
"inputs": [{ "type": "promptString", "id": "cosmos-pay-key", "description": "Cosmos Pay API key", "password": true }],
"servers": {
"cosmos-pay": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cosmosapp/pay_mcp"],
"env": { "COSMOS_PAY_API_KEY": "${input:cosmos-pay-key}" }
}
}
}Then ask your agent things like "Create a payment link for 25 USDC on Stellar to my store's address" or "Which payments from this week are still pending?"
Configuration
Variable | |
| Required. A secret key from the dashboard: |
|
|
| Another Payments API root (default |
| Another hosted checkout origin (default |
Security
The API key is read from the environment only. It is never a tool argument, never logged and never part of a result.
The key decides the network: every payment the tools return names it (
testnetorpublic), and the server tells the agent which one it is on.A key's scopes limit what the server can do: create a key with only the permissions you want the agent to have, or run it read-only.
Payments settle to the address in the request. Check the
destinationan agent proposes before you share a link.
Links
Docs: https://dev.cosmospay.lat/docs/ (index for LLMs: https://dev.cosmospay.lat/docs/llms.txt)
Payments API reference: https://dev.cosmospay.lat/docs/api/
JavaScript/TypeScript SDK:
@cosmosapp/pay_sdkAgent skill for coding agents: CosmosPay-Skill
Development
npm ci
npm run typecheck && npm test && npm run build
COSMOS_PAY_API_KEY=dv_your_key npm run inspect # MCP Inspector against the built serverApache-2.0.
Available Tools
9 toolscreate_payment_linkCreate a payment linkA
Create a payment request that a customer pays from their own wallet: a payment link (SEP-7 on Stellar, Solana Pay on Solana, EIP-681 on Monad), its QR code and a hosted checkout page. It moves no money: the payment settles on-chain straight to destination once the customer pays. The network is the API key’s: this server is on test networks (dv_ key: no real funds). Omit amount to let the payer choose it (not on Monad, which needs one). Omit asset_code to charge in the chain’s coin (XLM, SOL, MON). Send the customer checkoutUrl (or paymentUri for a wallet), then use get_payment to see when it is paid.
| Name | Required | Description | Default |
|---|---|---|---|
| memo | No | Numeric MEMO_ID: the idempotency key on every chain and the on-chain match on Stellar. Generated when omitted; reusing one is refused. | |
| chain | No | The chain the payment settles on. Default: stellar. | |
| amount | No | Amount the destination receives, in the asset’s own units, as a decimal string ("25", "10.50"). Omit for an open amount. | |
| message | No | Shown to the payer in their wallet (Stellar and Solana), e.g. an order number. | |
| asset_code | No | Asset to charge in, e.g. "USDC". Omit for the chain’s coin. | |
| include_qr | No | Also return the QR code as an image. Default: false. | |
| destination | Yes | The account that receives the payment, on the chosen chain: Stellar G..., Solana base58 address, Monad 0x... address. | |
| asset_issuer | No | Who issues the asset: the Stellar issuer account, the Solana SPL mint or the Monad ERC-20 contract. Needed for a token unless the API has a preset for it. | |
| checkout_theme | No | Design of the hosted checkout page. Default: classic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it discloses that no money moves server-side and settlement is on-chain to `destination`, that the network is determined by the API key and dv_ keys are test networks with no real funds, and that reusing a memo is refused. These are operational facts the annotations (readOnlyHint=false, openWorldHint=true) cannot convey. The memo-based idempotency note sits alongside idempotentHint=false but is a caller-supplied key rather than a contradiction of server-side 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?
Front-loads the core identity in the first clause and then packs conditional rules efficiently; nearly every sentence carries decision-relevant information. It is dense for a single paragraph, and the chain-standard parenthetical could be trimmed, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the return fields an agent must act on (`checkoutUrl`, `paymentUri`, optional QR) and by describing the full lifecycle through to settlement. For a 9-parameter mutation on an open-world payment rail, that is complete enough 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%, so the baseline is 3, but the description adds cross-parameter meaning the schema does not: the Monad exception to omitting `amount`, and the native-coin default when `asset_code` is omitted. It stops short of explaining `memo`, `checkout_theme` or `include_qr` behavior, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a payment request... a payment link') and immediately disambiguates by naming the per-chain standards it produces (SEP-7, Solana Pay, EIP-681) plus the QR code and checkout page artifacts. An agent can tell this apart from the read-side siblings get_payment/list_payments without opening the schema.
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 conditional guidance: omit `amount` to let the payer choose (except Monad), omit `asset_code` to charge the native coin, then send `checkoutUrl`/`paymentUri` and poll with get_payment. It names the follow-up sibling tool and the condition that selects it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_paymentDelete a paymentADestructive
Delete a payment that is not paid, so its link can no longer be paid. A paid (SUCCEEDED) payment cannot be deleted. This cannot be undone: confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The payment id, as create_payment_link or list_payments returned it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the description's added value is the precondition (only unpaid payments), the downstream effect on the payment link, and the explicit confirm-with-user instruction for an irreversible action. It does not mention permission requirements or what error surfaces if the payment is already paid, which keeps it at 4 rather than 5.
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 short sentences, front-loaded with the effect, then the precondition, then the irreversible-action warning. Nothing is redundant.
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 one-parameter destructive tool with no output schema, the description covers purpose, precondition, consequence and safety guidance. Only the failure mode on an invalid or already-paid id is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single required parameter with 100% schema description coverage, including the pattern and provenance ('as create_payment_link or list_payments returned it'). The description adds nothing about the id, but the schema already does the work, so baseline 3 is correct.
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?
Specific verb+resource (delete a payment) plus the exact effect (its link can no longer be paid). The precondition clause cleanly separates it from read-only siblings like get_payment and from create_payment_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?
States a clear exclusion condition — a paid (SUCCEEDED) payment cannot be deleted — and instructs confirmation before use. It doesn't name an alternative tool for handling paid payments, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balancesGet settled balancesARead-only
Settled and pending amounts per asset for the API key’s organization (what its payments brought in, not a wallet balance).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds valuable semantic context: settled vs pending amounts are per asset and reflect payments brought in rather than a stored wallet balance. It says nothing about freshness, aggregation window, or auth requirements, which keeps it at a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource and scope, and the parenthetical disambiguation earns its place by preventing the wallet-balance misreading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering safety, the description is sufficient to call this correctly. It would be stronger if it hinted at the return shape (asset plus settled and pending amounts) or the aggregation window.
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?
Zero parameters, so the baseline is 4. The description correctly implies no inputs are 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?
States a specific resource (settled and pending balances per asset) and scopes it to the API key's organization, with an explicit negative clarification that it is not a wallet balance. It does not explicitly differentiate from siblings like get_summary, so not a 5.
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?
There is no statement of when to use this versus get_summary or list_payments. The parenthetical explains what the data means but gives no routing guidance or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paymentGet a paymentARead-only
Read one payment: its status (PENDING, SUBMITTED, SUCCEEDED, FAILED, CANCELLED, EXPIRED), amount, asset, chain, destination, payment link, hosted checkout URL and, once paid, the transaction hash.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The payment id, as create_payment_link or list_payments returned it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already cover the safety profile. The description adds useful behavioral context by listing the status values and the fields returned, including the transaction hash once paid, though it does not mention not-found 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 front-loaded sentence that begins with the core action and then lists the relevant return fields. It contains no redundant or 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?
For a simple read-by-id tool with no output schema, the description does the important work of explaining what is returned, including status values and payment details. It is nearly complete, though it could mention not-found behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the id parameter is fully documented in the schema. The description adds no parameter-level detail beyond what the schema already 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 states a specific verb and resource: 'Read one payment.' The word 'one' distinguishes it from list_payments and get_payment_history, and the enumerated fields make the scope concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Read one payment' and the required id parameter, but the description does not explicitly say when to use this tool instead of list_payments, get_payment_history, or validate_payment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_historyGet a payment historyARead-only
The status changes of one payment, oldest first, with when each happened.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The payment id, as create_payment_link or list_payments returned it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, open-world operation. The description adds useful behavioral context by specifying chronological ordering ('oldest first') and that each event includes its timestamp. It does not mention pagination, result limits, or authorization requirements, so it adds moderate but not rich behavioral detail.
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 efficient sentence with zero waste. The key information, status changes of one payment, oldest first, with timestamps, 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?
For a simple one-parameter read-only history tool with annotations covering safety and a fully documented id schema, the description is nearly complete. It explains what is returned and the ordering, though it could mention whether all history is returned or whether pagination applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single id parameter is fully documented in the schema, including its format and where it comes from. The description adds no parameter-specific meaning beyond that, 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 states a specific resource and scope: the status-change history of one payment, ordered oldest first with timestamps. This clearly distinguishes it from get_payment, which likely returns current payment details, and from list_payments, which returns multiple payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose: an agent can infer this is the tool for viewing status transitions of a single payment. However, the description does not explicitly state when to use it versus get_payment or list_payments, nor does it mention exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryGet the account summaryBRead-only
Overview of the API key’s organization: payment totals, settled volume, webhook health and a 30-day series.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds the important scoping trait that data is limited to the API key's organization plus the time horizon of the series (30 days). It does not say whether figures are live or cached, what units/currencies they use, or how webhook health is expressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the scope ('API key's organization') followed by the content inventory. Every element 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?
With no output schema, the description is the only source of return-value information, and it only names categories rather than structure, keys, or units. It is enough to decide to call it, but thin for interpreting results.
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 takes no parameters, so there is nothing for the description to document beyond the fixed scope; stating that the summary is scoped to the API key's organization is a useful implicit account of why no inputs exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear resource and enumerates its contents (payment totals, settled volume, webhook health, 30-day series), which distinguishes it from record-level siblings like get_payment and get_balances. It lacks an explicit verb but 'Overview of the API key's organization' effectively conveys the aggregate read.
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 statement of when to use this versus list_payments or get_balances, and no prerequisites or exclusions. The word 'Overview' only weakly implies it is a starting-point/dashboard call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsList paymentsARead-only
List the payments of the API key’s organization, newest first, optionally filtered by status, chain or creation date. Paged: total says how many match.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | How many to skip, for the next page. | |
| take | No | How many to return (1 to 100, default 20). | |
| chain | No | Only payments on this chain. | |
| status | No | Only payments in this status. | |
| created_from | No | Only payments created at or after this instant (ISO 8601). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds useful behavior beyond those annotations: results are scoped to the organization, ordered newest first, optionally filtered, and paged with a total count. It does not discuss permissions or rate limits, but the notable behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core listing scope and ordering front-loaded, followed by filtering and paging details. Every sentence adds useful information without 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 read-only list tool with full parameter schema coverage and annotations, the description provides enough to call it correctly: scope, ordering, filters, and paging behavior. It could be slightly more complete by naming when to choose it over get_payment_history, but the core operational context is present.
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 all five parameters are already documented in the schema. The description adds a high-level summary of filtering by status, chain, or creation date and mentions paging, but does not add syntax or format details 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?
States a specific verb and resource: listing payments scoped to the API key's organization, with ordering and filters. It is clear what the tool does, though it does not explicitly differentiate itself from siblings like get_payment_history.
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?
Implies usage through mention of optional filters and paging, but gives no explicit guidance on when to use this versus get_payment, get_payment_history, or get_summary. The agent can infer it is for browsing payments, but alternatives are not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stellar_assetsList Stellar assetsARead-only
The Stellar asset catalog: codes and issuers to charge in (for example USDC and EURC by Circle). Use an entry’s code and issuer as create_payment_link’s asset_code and asset_issuer.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Which Stellar network. Default: the API key’s (testnet). | |
| verified_only | No | Only issuer-verified assets. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-data profile is covered. The description adds that entries carry code and issuer, but says nothing about freshness, whether the catalog is live-fetched, result size, or ordering — the kind of context that would matter for a reference-data 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?
Two short sentences, zero filler, with the resource definition front-loaded and the downstream usage instruction second. Every clause 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 two-optional-parameter read tool with no output schema, the description conveys what an entry looks like (code + issuer) and how to use it, which is most of what an agent needs. Minor gaps remain around result volume and whether the list is filtered by network by default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents the network default and the verified_only default. The description adds no meaning beyond that — it never mentions network scoping or the verified filter. Baseline 3 applies when the schema carries the parameter burden.
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 identifies the resource precisely as the Stellar asset catalog and states what each entry contains (codes and issuers), with concrete examples (USDC, EURC by Circle). The listing verb is only implied by 'catalog', but the resource is unmistakable and clearly distinct from payment-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent how to consume the result: feed an entry's code and issuer into create_payment_link's asset_code and asset_issuer. That is a strong, actionable usage link to a named sibling. It stops short of stating when not to use it or how to choose between networks, but no real alternative tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_paymentValidate a paymentAIdempotent
Check a transaction against a payment and settle it if it pays it. Use it when the payer sent the payment but its status has not changed: pass the transaction hash (or Solana signature) the payer has.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The payment id, as create_payment_link or list_payments returned it. | |
| tx_hash | Yes | The transaction to check, in its chain’s form: a Stellar hash, a Solana signature or a Monad 0x hash. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is not read-only, is idempotent, is open-world, and is not destructive. The description adds the important conditional mutation detail that it settles the payment only if the transaction pays it, which is meaningful context beyond the annotations, though it does not describe error behavior or authorization needs.
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 and then the usage condition. There is no wasted framing, and the key settlement behavior is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does and when to use it, but for a mutation tool with no output schema it does not explain what happens when the transaction does not pay the payment, nor what result or error the caller should expect. That leaves a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required parameters are already well documented in the schema. The description mentions the transaction hash/signature but does not add meaning for the id parameter, so the baseline 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 gives a specific verb and resource: check a transaction against a payment and settle it if it pays it. It is clearly a settlement/verification action, though it does not explicitly contrast itself with nearby read-only siblings such as get_payment or get_payment_history.
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?
It states a clear triggering condition: use it when the payer sent the payment but its status has not changed. It also tells the caller what to pass, but does not name when not to use it or which sibling to use for status checks instead.
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.
9 tool updates
v0.1.0- First observed
create_payment_link - First observed
delete_payment - First observed
get_balances - First observed
get_payment - First observed
get_payment_history - First observed
get_summary - First observed
list_payments - First observed
list_stellar_assets - First observed
validate_payment
TDQS
Scored across 9 tools
Each tool targets a distinct action (retrieve, list, create, validate, delete) on payments or org data. Minor overlap between get_summary and get_balances (both org-level overviews), and get_payment vs get_payment_history could occasionally be confused, but descriptions clarify the boundary.
All tools follow a consistent snake_case verb_noun pattern: get_payment, list_payments, create_payment_link, validate_payment, delete_payment, get_summary, etc. No mixed conventions or vague verbs.
Nine tools is well-scoped for a payments API, covering the full lifecycle without redundancy. Each tool earns its place with a clear, non-trivial function.
Create/read/list/validate/delete coverage is solid, plus summary, balances, and asset catalog. However, webhook management (referenced in get_summary's webhook health) and refunds lack dedicated tools, leaving minor gaps.
Maintenance
Related MCP Connectors
Crypto pay links and API for people and AI agents. BTC, Lightning, USDC, USDT, EURC, SOL, ETH.
Stripe payments for AI agents. Create links, verify, manage customers.
USDC wallets, payment links and x402 payments on Solana for AI agents.
Keyless non-custodial crypto payments for AI agents: payment links and tip jars, no API key.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin crypto checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications through hosted payment APIs.-
- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based entitlement logic to applications. It also provides tools for workspace registration, settlement and webhook configuration, paylink creation, and crypto payment status checks.-
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications. It provides tools for registering workspaces, configuring settlement wallets and webhooks, creating paylinks, and verifying crypto payment status.MIT

Yolfi MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications through an API-first payment workflow.MIT