Payram
Server Details
PayRam is a self-hosted crypto payment gateway. You deploy it on your own server — no signup, no KYC, no third-party custody. Accept USDT, USDC, Bitcoin, and ETH across Ethereum, Base, Polygon, and Tron.
- Status
- Healthy
- Uptime
- 99.1% over 67 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 44 tools
Descriptions are extremely detailed and explicitly cross-reference siblings (e.g. payout_recipient_flow vs payout_sdk_snippet, doctor vs ops_playbook vs runbook), which helps a lot. However there is heavy structural overlap: four generate_payment_* snippet tools, six language-specific snippet_*_payment_route tools that duplicate generate_payment_route_snippet, and multiple referral generators (route/sdk/status/validation). Deprecated tools (onboard_agent_setup, test_payram_connection) coexisting with their replacements add further selection ambiguity.
There is a dominant verb_noun pattern (explain_*, generate_*, get_*, list_*, scaffold_*, suggest_*) that is mostly readable. But several families break it: snippet_express_payment_route uses noun-first ordering, payram_doctor/payram_runbook/payram_troubleshoot use a namespace prefix, and prepare_/onboard_/test_ stand apart. Mixed conventions, still parseable but not uniform.
44 tools is well above the healthy 3-15 range and feels bloated for this scope. Much of the count comes from per-language payment snippet variants and per-resource (payment/payout/referral) generator permutations that could be parameterized or consolidated, plus two deprecated tools still shipped.
Coverage of the payment domain is genuinely broad: payments, payouts, referrals, webhooks, top-up ledger integration, setup, ops playbooks, runbooks, diagnostics, docs, and troubleshooting are all present. Minor gaps are around pruning deprecated/redundant entries rather than missing lifecycle operations.
Available Tools
44 toolsexplain_payment_flowPayment Flow GuideARead-onlyIdempotentInspect
Describe how payments move from customer initiation through settlement.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds the topic scope but no additional behavioral context such as depth, format, or limitations beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that front-loads the verb and the resource. Every word earns its place, and 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?
With no parameters, rich annotations covering safety, and an output schema, the description only needs to state the topic. It does so clearly, though it could more explicitly define the scope of the explanation (e.g., lifecycle stages) to fully distinguish from other explainer siblings.
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 zero parameters, so the baseline is 4 per the scoring rules. The description adds no parameter information, which is appropriate since there are no parameters to document.
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 clear verb ('Describe') and a specific resource ('how payments move from customer initiation through settlement'), making the topic obvious. It does not explicitly differentiate from sibling explainer tools such as explain_payram_basics or explain_referral_flow, so it falls short of 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 guidance on when to use this tool versus alternatives like explain_payram_basics or explain_referral_flow. The description implies a use case but provides no exclusions, prerequisites, or routing cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_payram_basicsPayram Basics OverviewBRead-onlyIdempotentInspect
Explain Payram's product pillars, architecture, payments, and payouts capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, covering the entire safety profile. The description adds no behavioral context beyond the title (no scope limits, no what-to-expect-next), so it contributes nothing the structured fields don't already say.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is partly what leaves the sibling-overlap problem unaddressed.
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 a rich output schema and full annotation coverage, the description needn't explain returns or safety, so those are not gaps. What is missing is the topic-boundary information an agent needs to pick this over explain_payram_concepts, explain_payment_flow, or explain_referrals_basics — the crowded explain family makes that omission material.
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 zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter meaning is missing.
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 verb ('Explain') and enumerates the covered scope (product pillars, architecture, payments, payouts capabilities), so the agent knows what the tool delivers. However, it never distinguishes itself from near-identical siblings such as explain_payram_concepts or explain_payment_flow, so routing between them is left to guesswork.
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 explicit when-to-use, when-not-to-use, or alternative named. 'Basics' faintly implies an entry point for newcomers, but this is inference, not guidance, and the crowded explain_* sibling family makes the omission costly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_payram_conceptsCore Payram ConceptsARead-onlyIdempotentInspect
Glossary-backed explanation of Payram terminology and constraints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds only 'glossary-backed', a modest hint about the source and nature of the content, but says nothing about coverage, freshness, or how concepts map to the returned payload.
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 short sentence that front-loads the core purpose with no filler. Appropriately sized for a no-argument lookup 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?
With zero parameters, an output schema present, and rich annotations, the description only needed to establish scope and it does so adequately. The remaining gap is the failure to differentiate this tool from the near-identical explain_payram_basics, which leaves selection ambiguous in a dense sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning to document — the baseline of 4 applies. The description neither misleads nor adds anything here.
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 purpose: a glossary-backed explanation of Payram terminology and constraints. The resource ('Payram terminology') is named, but nothing distinguishes it from sibling explain_payram_basics, explain_payram_security, or explain_payment_flow, all of which sound like explanations of the same domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this over the other explain_* siblings, nor any condition that selects it (e.g., 'use for term lookups, not for flows'). The agent must guess whether 'concepts' or 'basics' is the right entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_payram_securityIs PayRam safe? Security and trustARead-onlyIdempotentInspect
Answer "is PayRam safe / trustworthy / audited?": why an agent can use it without holding secrets, the independent smart contract audit (what it covers and what it does not), and how to verify the report.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered structurally. The description adds real behavioral context beyond that: it will not require the agent to hold secrets, it scopes the independent smart contract audit (what it covers and what it does not), and it explains how to verify the report — including an explicit statement of coverage 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?
A single front-loaded sentence leads with the exact query it answers, then enumerates the three substantive areas of content. No filler, no restatement of the title, and the parenthetical limits on audit coverage earn their 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 an output schema present, the description need not describe return values, and with zero params nothing is missing on the input side. It covers topic, content scope and verification path; only a note that this returns static documentation-style content rather than live checks is absent.
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 zero parameters, so there is no parameter semantics to explain; baseline for a parameterless tool is 4. The description correctly does not invent parameters or argument hints.
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 names a specific verb ('Answer') and a sharply defined topic — the safety/trust/audit question — which separates it cleanly from topic siblings like explain_payram_basics, explain_payment_flow and explain_referral_flow. It does not explicitly name any sibling to route against, which keeps it just short of 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?
It supplies the exact user phrasings that trigger this tool ('is PayRam safe / trustworthy / audited?'), which is strong routing context for an agent choosing among many explain_* tools. It does not state when NOT to use it or point to an alternative for adjacent questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_referral_flowReferral Flow GuideARead-onlyIdempotentInspect
Detail the referrer/referee lifecycle and required APIs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that it enumerates required APIs, but does not add further behavioral context such as auth needs, rate limits, or whether it performs live checks.
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?
It is a single, front-loaded sentence with no redundant or filler text. The verb and scope appear immediately, which is appropriate for a zero-parameter explainer.
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 zero-parameter, read-only explainer with rich annotations and an output schema, the description states enough content scope to invoke it correctly. The main omission is sibling routing, but return values and safety behavior are covered elsewhere.
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 zero parameters, so there are no parameter semantics to document. The baseline for zero parameters is 4; the description correctly does not invent parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb, 'Detail', and a specific resource, the 'referrer/referee lifecycle and required APIs'. It distinguishes itself from payment-flow and general-basics siblings, but does not explicitly differentiate from the closely named sibling explain_referrals_basics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what content is covered but gives no when-to-use, when-not-to-use, or alternative-tool guidance. An agent gets no help deciding between this and siblings like explain_referrals_basics or generate_referral_* snippets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_referrals_basicsReferral Basics OverviewARead-onlyIdempotentInspect
Summarize how Payram referral campaigns are configured and managed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and a closed-world scope, so the safety profile is fully covered without description help. The description adds no further behavior detail (no mention of depth, scope of coverage, or citation of sources), which is acceptable but unremarkable for a read-only explainer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, restatement of the title, or redundant phrasing. For a no-argument explainer, this is appropriately sized.
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 an output schema present and annotations covering safety, the description need not explain return values, and zero parameters means no input gaps. The remaining shortfall is routing: in a sibling set containing explain_payram_basics, explain_referral_flow, and get_referral_dashboard_guide, the description gives no signal about which referral explainer to pick when.
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 zero parameters, so the baseline of 4 applies; there is nothing for the description to clarify. No parameter-level guidance is needed or missing.
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 pairs a specific verb ("Summarize") with a specific resource ("Payram referral campaigns... configured and managed"), so the agent knows this returns an explanatory overview rather than data or code. It does not, however, distinguish itself from close siblings such as explain_referral_flow or get_referral_dashboard_guide, leaving overlap unresolved.
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 only implied: the "basics" framing and the explain_* family suggest a conceptual overview to read before diving into the referral flow or dashboard guide, but no when-to-use, when-not-to-use, or alternative is stated. Nothing is misleading, but the agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_env_templateGenerate Payram .env TemplateBRead-onlyIdempotentInspect
Creates a .env template for configuring a merchant backend to talk to a self-hosted Payram server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| variables | Yes | |
| envExample | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so safety and repeatability are covered. The description adds the 'self-hosted Payram server' targeting detail, but says nothing about the template's contents, whether placeholder values are included, or that no server-side state is touched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is appropriate for a simple generator. It is tight, though the brevity contributes to the usage-guidance gap rather than being pure efficiency.
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 an output schema present, return values need not be explained, and a zero-param tool has little to document. What remains missing is only minor context about where/how the template is delivered, which is low-stakes for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the schema or description to disambiguate; the baseline for a parameterless tool is 4. The description correctly does not invent inputs.
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 (Creates) and resource (.env template) and narrows the scope to configuring a merchant backend against a self-hosted Payram server. It is clear on its own, but it never distinguishes itself from the large generate_* family around it, so the agent must infer it is the config-template member of that set.
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 explicit when-to-use, when-not-to-use, or alternative named. The phrase 'self-hosted Payram server' implies the deployment context but does not tell the agent whether this belongs in initial setup versus an existing integration, nor how it relates to scaffold_payram_app or generate_setup_checklist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_mock_webhook_eventGenerate mock Payram webhook eventARead-onlyIdempotentInspect
Generates a snippet to send mock Payram webhook events to your local endpoint for testing.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Payment status to simulate in the mock webhook event | |
| language | Yes | Language/tool for the mock webhook request (curl for command-line testing) |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and a closed world, so the safety profile is covered. The description adds genuinely useful context beyond them: the output is a code snippet for a local endpoint rather than an actual webhook dispatch, which prevents the agent from assuming a network side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the purpose and the test-oriented framing appear immediately. Nothing in it 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?
An output schema exists, so return values need no explanation, and annotations cover safety, so the description is nearly complete for a two-parameter generator. The remaining gap is sibling differentiation within the generate_webhook_* family, which is the one thing an agent could still get wrong.
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 both parameters carry enums with descriptions (payment status to simulate, language/tool), so the schema does the heavy lifting. The description adds nothing about parameter meaning or how the language/status choices affect the generated snippet, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it 'generates a snippet to send mock Payram webhook events.' That is far clearer than a tautology and tells the agent it produces test code, not a live webhook. It does not, however, differentiate itself from the crowded generate_webhook_handler / generate_webhook_event_router siblings, which also concern 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 phrases 'mock' and 'for testing ... your local endpoint' imply the usage context (local/test-only simulation), which is real but implicit guidance. There is no explicit when-to-use statement and no mention of the alternative webhook-generation siblings, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payment_http_snippetGenerate HTTP payment snippetARead-onlyIdempotentInspect
Generates a raw HTTP sample for creating a Payram payment in the requested language.
| Name | Required | Description | Default |
|---|---|---|---|
| language | Yes | Programming language for the HTTP payment creation snippet |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description cannot contradict it. The description adds only the output form (a raw HTTP sample), which the existing output schema largely covers; it says nothing extra about scope, limitations, or how the snippet is produced.
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 the verb and artifact first and one qualifying clause. There is no filler and nothing that could be trimmed without losing 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?
With one fully documented enum parameter, a full annotation set, and an output schema that covers return values, the description supplies what an agent needs to invoke the tool correctly. It could still be improved by stating which sibling generators it replaces, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'language' parameter is constrained by an enum with its own description, so the schema does the heavy lifting. The phrase 'in the requested language' adds no format or syntax detail beyond what the schema already states, so the 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 names a specific verb (Generates) and a concrete artifact (a raw HTTP sample for creating a Payram payment), which is meaningfully distinct from the SDK/route/status snippet siblings because of the 'raw HTTP' qualifier. It stops short of naming any sibling explicitly, so an agent must infer the boundary itself.
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 explicit when-to-use or when-not-to-use statement, but 'raw HTTP sample' implicitly scopes the tool to integrations that talk to the API directly rather than via the generate_payment_sdk_snippet or generate_payment_route_snippet tools. The agent can infer the choice, but nothing is stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payment_route_snippetGenerate payment route snippetBRead-onlyIdempotentInspect
Generates a ready-to-use backend endpoint (e.g., /api/pay/create) that creates a Payram payment.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Web framework for the payment route handler (Express.js or Next.js) |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds that the output is a ready-to-use endpoint that creates a Payram payment, but does not disclose side effects, auth requirements, or rate limits; with annotations present, a 3 is appropriate.
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 a concrete example and no filler. It is appropriately sized for a simple one-parameter 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 schema fully documents the only parameter and the output schema means return values need not be explained. However, given the many similar sibling snippet generators, the description does not help an agent choose this tool over alternatives, leaving a meaningful selection 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 description coverage is 100% and the single required 'framework' parameter has an enum with its own description. The tool description does not mention the framework parameter, so baseline 3 is correct when 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?
States a specific verb ('Generates') and resource ('backend endpoint ... that creates a Payram payment') with a concrete example path. It is clearly a code-endpoint generator, but it does not explicitly distinguish itself from similar sibling tools like snippet_express_payment_route or generate_payment_http_snippet.
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 says only what the tool produces. It gives no when-to-use guidance, prerequisites, or comparison with alternative snippet generators, so an agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payment_sdk_snippetGenerate SDK payment snippetBRead-onlyIdempotentInspect
Generates backend code using the official Payram JS/TS SDK to create a payment.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Target framework for the SDK payment snippet. generic-http provides a framework-agnostic example. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that output is JS/TS SDK backend code, a useful detail, but does not disclose output format details or any constraints beyond the SDK type.
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 efficient sentence with the key qualifier (JS/TS SDK) front-loaded alongside the action. It is appropriately sized and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and annotations plus full param coverage handle safety and inputs. The only gap is routing guidance against the many sibling snippet generators.
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 framework parameter is fully documented with an enum and per-value meaning. The description adds no parameter-level detail, so the schema does all the work; 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?
States a specific verb and resource (generates backend code) and specifies the mechanism (official Payram JS/TS SDK) to create a payment. This partially distinguishes it from HTTP-based siblings like generate_payment_http_snippet, though it does not explicitly name which sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The SDK mention implies a scenario, but there is no statement about choosing this over generate_payment_http_snippet, generate_payment_route_snippet, or scaffold_payram_app, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payment_status_snippetGenerate payment status snippetCRead-onlyIdempotentInspect
Generates backend code to query the status of a Payram payment.
| Name | Required | Description | Default |
|---|---|---|---|
| style | Yes | Style of code snippet: sdk uses the Payram SDK, http uses raw HTTP requests |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered structurally. The description adds essentially nothing beyond the title ('Generates backend code') – no target language/framework, no indication of what the generated code assumes (SDK version, endpoint config), and no other 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?
A single front-loaded sentence with zero filler, which is structurally clean. It is arguably too terse for a tool sitting in a dense cluster of near-identical snippet generators, but nothing in it is wasted.
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?
An output schema exists, so return format needn't be explained, and annotations carry the safety profile. What is missing is disambiguation from the many sibling snippet generators, which is the main thing an agent needs here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and the schema documents it at 100% coverage, including the enum semantics ('sdk uses the Payram SDK, http uses raw HTTP requests'). The description adds no further parameter meaning, 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?
States a specific verb and resource ('Generates backend code to query the status of a Payram payment'), so the agent knows it produces a code snippet rather than performing a live status check. However, it gives no hint about how it differs from close siblings like generate_payment_http_snippet, generate_payment_sdk_snippet, or generate_payout_status_snippet, which is a real ambiguity given the style enum.
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 when-to-use, when-not-to-use, or alternative tools are named. The description does not resolve why an agent would pick this over the http/sdk payment snippet siblings, so selection relies entirely on the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payout_recipient_flow_snippetGenerate 3-step recipient payout flow snippetARead-onlyIdempotentInspect
Generates the recommended OTP-verified payout flow: create recipient → validate OTP → create payout against the saved recipient. Use this for repeat beneficiaries; use generate_payout_sdk_snippet for one-off direct payouts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful context about the generated content — that the flow is OTP-verified and follows a recipient-save-then-charge pattern. It stops short of noting anything about the output format or limits, but the bar is lower given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core purpose front-loaded before the alternative-tool routing. 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?
With an output schema present and rich annotations covering the safety profile, and zero parameters, the description need only convey purpose and routing — which it does fully. Nothing an agent needs to select or call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema provides nothing to document and the baseline is 4. There is no parameter syntax for the description to add or omit.
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 (Generates) and resource (OTP-verified payout flow snippet) and enumerates the three steps it produces: create recipient → validate OTP → create payout. It also names the sibling it differs from (generate_payout_sdk_snippet), so an agent can distinguish it without opening any 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?
Explicitly states the selection condition: 'Use this for repeat beneficiaries; use generate_payout_sdk_snippet for one-off direct payouts.' This gives both when-to-use and the named alternative, 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.
generate_payout_sdk_snippetGenerate payout SDK snippetBRead-onlyIdempotentInspect
Generates a backend code snippet for creating a payout using the Payram JS/TS SDK.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Target framework for the payout SDK snippet |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds that the output is backend code in JS/TS, which is slightly useful context, but says nothing about output length, file placement, or how the snippet relates to the framework parameter.
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 verb and artifact, with zero filler. Nothing needs to be trimmed.
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?
An output schema exists, so return values need not be described, and the single parameter is fully specified in the schema. What is missing is routing context against the many similarly named snippet generators and any clarification of the JS/TS vs. generic-http scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so the baseline is 3 and the description adds no syntax or format detail. There is also tension worth flagging: the description names the 'JS/TS SDK' while the framework enum permits only 'generic-http', which could lead an agent to expect broader language support than exists.
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 concrete verb (Generates), a specific artifact (a backend code snippet for creating a payout), and names the SDK (Payram JS/TS). That distinguishes it from most siblings, though it never explicitly contrasts itself with generate_payment_sdk_snippet or generate_payout_status_snippet, which are the closest neighbors.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as generate_payment_sdk_snippet (for payments rather than payouts) or generate_payout_recipient_flow_snippet. The agent must infer routing purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_payout_status_snippetGenerate payout status SDK snippetBRead-onlyIdempotentInspect
Generates backend code to query the status of a payout using the Payram SDK.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the fact that the output is generated backend code (explaining why it is a safe read), with no detail on language/framework variant or generation 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?
A single front-loaded sentence with no wasted words. Nothing to trim and the core action is stated up front.
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?
An output schema exists so return values need not be described, and annotations cover the safety profile. However, for a generator whose value depends on which SDK/language variant it emits, the description leaves that context unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the schema carries no burden and the baseline of 4 applies. No parameter semantics are needed or missing.
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 (generates) and resource (backend code to query payout status) plus the SDK used. The payout+status combination distinguishes it from generate_payment_status_snippet and generate_payout_sdk_snippet by implication, though it never names a differentiating sibling explicitly.
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 when-to-use guidance, no prerequisites, and no mention of alternatives, which matters given the 40+ closely related generate_*/snippet_* siblings. The agent must infer the correct context of use from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_referral_route_snippetGenerate referral route snippetBRead-onlyIdempotentInspect
Generates a backend route such as /api/referrals/create for logging referral events.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Web framework for the referral route handler (Express.js or Next.js) |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds only that the generated route is for 'logging referral events,' which is useful framing but no operational detail (e.g., what the snippet contains, whether it is a stub or runnable code).
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 verb and resource, with zero filler. It is appropriately sized for a single-parameter generator, though the example route is the only element that earns extra value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile; for a one-parameter tool this is close to complete. The remaining gap is the absence of any cue about when this route snippet is preferred over the referral SDK/status/validation snippet siblings.
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 'framework' parameter has a documented enum (express, nextjs), so the schema carries the full burden. The description mentions nothing about framework selection or how it changes the output, adding no meaning beyond the schema; 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?
States a specific verb and resource ('Generates a backend route') and gives a concrete example path ('/api/referrals/create for logging referral events'), which pins down the artifact. It does not, however, distinguish itself from the many sibling snippet generators (generate_referral_sdk_snippet, generate_referral_status_snippet, generate_referral_validation_snippet), so an agent must infer the boundary from the name alone.
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 when-to-use or when-not-to-use guidance is given, and no alternative tool is named. With over a dozen sibling 'generate_*_snippet' tools, the description offers no routing signal for picking this one over the SDK, status, or validation variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_referral_sdk_snippetGenerate referral SDK snippetCRead-onlyIdempotentInspect
Generates a backend route or service snippet to create a referral event using the Payram SDK.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Target framework for the referral SDK snippet |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, and the description is consistent with a pure code-generation operation. It adds essentially nothing beyond that profile, though there is no contradiction and no missing safety disclosure to compensate for.
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 short, front-loaded sentence with no filler; the purpose is leading. It is tight but arguably under-specified rather than excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. For a generator sitting among many near-duplicate snippet siblings, the description is minimally adequate but leaves the key routing question (route vs SDK vs status vs validation snippet) unanswered.
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 parameter (framework, enum: generic-http) is fully documented in the schema. The description adds no syntax, default, or enum context beyond what the schema already provides, so the 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?
States a clear verb (generates) and resource (backend route/service snippet to create a referral event via the Payram SDK), so the basic purpose is legible. However, 'route or service snippet' overlaps ambiguously with the sibling generate_referral_route_snippet, and the description never explains how this differs from that or from generate_referral_status_snippet/validation_snippet.
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 when-to-use guidance, no prerequisites, and no named alternative. With three closely related referral-snippet siblings, an agent has no textual basis for choosing this tool over generate_referral_route_snippet or generate_referral_validation_snippet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_referral_status_snippetGenerate referral status snippetBRead-onlyIdempotentInspect
Generates code to fetch referral progress, rewards, or status.
| Name | Required | Description | Default |
|---|---|---|---|
| style | Yes | Style of code snippet: sdk uses the Payram SDK, backend-only shows direct API calls |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, non-destructive, closed-world read, so the description need not restate safety. It adds only a slight hint about snippet content ('progress, rewards, or status') and says nothing about the generated code's shape, target language, or where it is meant to run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. Nothing in it is wasted, though it is arguably too terse given the crowded sibling set.
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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. What is missing is the routing information an agent needs among the cluster of referral and status snippet generators, leaving the definition only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'style' parameter is fully documented in the schema (sdk vs backend-only), so the baseline of 3 applies. The description never references the style parameter or its effect on output, adding no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb ('Generates code') and a specific resource ('referral progress, rewards, or status'), so the agent knows what comes out of the call. It does not, however, distinguish this from the many overlapping siblings such as generate_referral_sdk_snippet or generate_payment_status_snippet, even though the 'style' enum already overlaps with the SDK-snippet sibling.
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 when-to-use or when-not-to-use guidance and no alternative named. With siblings like generate_referral_route_snippet, generate_referral_sdk_snippet and generate_referral_validation_snippet in the list, the agent is left to guess which referral snippet fits its situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_referral_validation_snippetGenerate referral validation snippetARead-onlyIdempotentInspect
Generates a snippet to validate referral IDs, statuses, and eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is fully covered structurally. The description adds only the semantic subject matter of the snippet; it says nothing about output language/framework or shape, which for a code generator is meaningful context. Adequate but not rich.
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 tight sentence with no filler and the action front-loaded. It is well-sized, though it could have spent one more clause routing the agent toward or away from sibling snippet generators.
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?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. With no parameters and a defined output, the only real gap is sibling differentiation against the other referral snippet generators.
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 zero parameters, so the schema has nothing to document and there is no parameter semantics burden on the description. The baseline of 4 for a parameterless tool 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?
Clear verb+resource ('Generates a snippet') plus the domain of the snippet ('validate referral IDs, statuses, and eligibility'). It is distinguishable from explain_referral_flow and get_referral_dashboard_guide, though it does not explicitly contrast itself with the nearby generate_referral_route_snippet / sdk / status siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The stated purpose ('validate referral IDs, statuses, and eligibility') implies when an agent would want it, but there is no explicit when-to-use, prerequisite, or named alternative among the crowded generate_referral_* family. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_setup_checklistGenerate Payram Setup ChecklistARead-onlyIdempotentInspect
Returns a step-by-step checklist of everything a merchant must configure to start using Payram.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notes | No | |
| title | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and repeatability profile is fully covered structurally. The description adds the useful fact that the output is a configuration checklist rather than prose, but says nothing about whether it is static or dynamically derived from account state. With annotations carrying the safety burden, a 3 is appropriate.
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 verb, the deliverable, and the audience in one pass. There is no filler, no repetition of the title, and nothing an agent must read past.
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?
An output schema exists, so return-value structure need not be described, and the zero-parameter signature plus annotations mean there is little else required. The only shortfall is the missing differentiation from sibling setup tools, which the description must carry since no structured field can express it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning for the description to supply. The baseline of 4 applies, and nothing in the description misrepresents the (empty) input contract.
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 pairs a specific verb (Returns) with a specific artifact (a step-by-step checklist of everything a merchant must configure), so the purpose is unambiguous. It does not, however, distinguish itself from near-neighbors in the sibling list such as payram_setup_plan, onboard_agent_setup, or get_agent_setup_flow, all of which plausibly produce overlapping setup guidance.
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 explicit when-to-use guidance and no exclusions. Given that roughly six sibling tools concern setup/onboarding flows, the absence of any routing cue ('use this before scaffold_payram_app', 'for the interactive flow use onboard_agent_setup') leaves the agent to guess between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_topup_integration_snippetGenerate top-up wallet integrationARead-onlyIdempotentInspect
For EXISTING apps: emits the recommended top-up wallet integration — ledger schema + cumulative-credit webhook handler + atomic invoice-settle function. Credits crypto payments to a user's balance first, then debits invoices from it, so over/under/late/duplicate payments become balance states, not payment exceptions. Pair with the payram-topup-wallet-integration skill. (New store with no users? Use the checkout/plugin path instead.)
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Which piece to emit: 'schema' (ledger DDL), 'webhook' (cumulative-credit handler), 'settle' (atomic invoice debit), or 'all'. | all |
| framework | No | Server framework for the webhook handler + settle function. | express |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine architectural context beyond that: credits land on the balance before invoice debits, so over/under/late/duplicate payments become balance states rather than exceptions — useful for an agent predicting what the emitted code does.
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-loaded with the precondition and the deliverable, and the parenthetical alternative is placed at the end where it belongs. Dense but every clause carries information; only minor cost is the stacked artifact list.
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?
An output schema exists, so return values need no explanation. Preconditions, the sibling alternative, the companion skill, and the runtime semantics of the generated code are all present — nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry enum descriptions, so the baseline is 3. The description restates the three part artifacts ('schema', 'webhook', 'settle') in prose but adds no syntax or format detail beyond what the schema already documents, and never addresses 'framework'.
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 (emits/generates) and a concrete artifact set — ledger schema, cumulative-credit webhook handler, atomic invoice-settle function — for a named resource (top-up wallet integration). It also distinguishes itself from the sibling checkout/plugin path, so an agent can route correctly without opening schemas.
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 an explicit precondition ('For EXISTING apps') and an explicit when-not with the alternative named ('New store with no users? Use the checkout/plugin path instead'). It also names a companion skill to pair with, leaving no routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_webhook_event_routerGenerate Payram webhook event routerBRead-onlyIdempotentInspect
Generates a backend event router that dispatches Payram webhook events to domain handlers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and side-effect profile is fully covered by structured data. The description adds only a modest amount of behavioral context (the router dispatches events to domain handlers), without saying what artifact is produced, where it is written, or whether it overwrites existing files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficiently sized, though it is arguably too terse to carry the routing information an agent needs.
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 an output schema present, return values need not be explained, and the low complexity of a parameterless generator keeps the bar modest. Still, the description omits which framework/language the router targets and how it differs from generate_webhook_handler, leaving a real gap for tool selection.
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 zero parameters and the schema coverage is reported at 100%, so there is nothing for the description to clarify. A baseline of 4 is appropriate for a parameterless generation tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'generates a backend event router that dispatches Payram webhook events to domain handlers.' That is far more informative than the title alone. However, it never distinguishes itself from the sibling tool 'generate_webhook_handler', which an agent could easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, despite a crowded sibling set containing generate_webhook_handler, generate_mock_webhook_event, and the many snippet generators. No prerequisites, framework constraints, or exclusion conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_webhook_handlerGenerate Payram webhook HTTP handlerCRead-onlyIdempotentInspect
Generates backend code to handle Payram webhook HTTP requests.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Web framework for the webhook handler code |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety and reproducibility are covered structurally. The description adds nothing beyond the title — no note on what is produced, whether files are written, or framework-specific behavior. With annotations carrying the entire behavioral load, the description contributes no extra 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?
One short, front-loaded sentence with no filler. It is efficiently written, though it verges on under-specification rather than tight completeness.
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?
An output schema exists so return values need not be explained, and the single parameter is fully documented. Still, for a code-generation tool whose near-twin siblings include generate_webhook_event_router and the many snippet_* tools, the description omits the disambiguation an agent needs to route correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single framework parameter is an enum with its own description, so the schema does the heavy lifting. The description adds no framework-specific detail (e.g. what Express vs FastAPI output looks like), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (generates backend code for Payram webhook HTTP requests), and the sibling list confirms it is a code-generation tool distinct from docs/explain tools. It does not, however, distinguish itself from the close sibling generate_webhook_event_router, which an agent could easily confuse it with.
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 when-to-use guidance, no prerequisites, and no named alternative. The agent must infer that this is for producing a handler stub versus a router (generate_webhook_event_router) or a mock event (generate_mock_webhook_event) purely from the names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_setup_flowGet the headless agent guide (full reference)ARead-onlyIdempotentInspect
Returns the canonical PayRam headless-agent guide: agent CLI commands, env vars, merchant vs operator mode, wallet flows, adding chains, troubleshooting. Long (~11k tokens). For a short personalised plan use payram_setup_plan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| markdown | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context the annotations do not: the output is a long full reference (~11k tokens), which warns the agent about context cost before invoking. It does not describe structure or how to navigate the long payload, keeping it below a 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?
Two sentences, zero waste: the first front-loads what is returned and its coverage, the second handles routing to the alternative. The size warning is embedded efficiently rather than as a separate sentence.
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 an output schema present, 0 parameters, and annotations carrying the safety profile, the description only needs to say what the guide contains and how big it is – both are covered. Nothing an agent needs to decide whether to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies no input is needed and adds no misleading parameter hints, but there is no parameter content to enrich beyond that baseline.
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+resource ('Returns the canonical PayRam headless-agent guide') and enumerates the exact contents (CLI commands, env vars, merchant vs operator mode, wallet flows, adding chains, troubleshooting). This lets an agent distinguish it from the many explain_*/generate_* siblings and from payram_setup_plan without opening any 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?
Explicitly routes the agent to an alternative with a condition: 'For a short personalised plan use payram_setup_plan.' That is clear when-to-use-this-vs-that guidance, but it only addresses one sibling and does not contrast against onboard_agent_setup or the explain_* tools, so it stops short of full coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payram_doc_by_idGet Payram Doc By IDBRead-onlyIdempotentInspect
Returns the markdown for a Payram doc given its id, e.g. "features/payouts".
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| path | Yes | |
| markdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds that the payload is markdown, which is genuine extra context, but says nothing about behavior for an unknown id or the discovery path for valid ids.
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 verb, resource, and an inline example. No padding.
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?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. For a simple id-based getter the description is nearly sufficient; the remaining gap is id provenance and unknown-id 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 0% and the schema only types id as a non-empty string. The description partially compensates by showing a valid id shape ("features/payouts"), which implies a path-like slug, but does not state the accepted format or where ids come from.
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: returns the markdown for a Payram doc by id. The example id "features/payouts" makes the retrieval target concrete. It does not distinguish itself from the sibling list_payram_docs, which is the obvious complement.
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 when-to-use, when-not-to-use, or alternative is named. An agent cannot tell from the description whether to call this or list_payram_docs first to discover valid ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payram_linksPayram Important LinksARead-onlyIdempotentInspect
Surface official documentation, website, and community links.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the nature of the payload (links to docs, website, community), which is modest added value; with a real output schema there is little else it needs to disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word earns its place and nothing is buried.
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 zero-parameter lookup with an output schema and full annotation coverage, the description is essentially sufficient. It could be slightly stronger by noting the links are static/curated rather than fetched dynamically, but that is a minor omission.
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 zero parameters, so there is nothing for the description to disambiguate. The 4 baseline applies, with no evidence of any parameter semantics the description should have compensated for.
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 ('Surface') and a specific resource (official documentation, website, and community links). It is clearly distinguishable from explain_* conceptual siblings, list_payram_docs (enumerates docs), and get_payram_doc_by_id (retrieves one doc) because it returns external links rather than content.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as list_payram_docs or explain_payram_basics for an agent that wants documentation content rather than links. Usage has to be inferred entirely from the name and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referral_dashboard_guideReferral Dashboard GuideCRead-onlyIdempotentInspect
Explain how to embed and manage the referral dashboard experience.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior, but the description adds no further behavioral context such as the format, depth, or scope of the explanation. It does not explain what the guide covers or how it should be consumed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler, and the purpose is front-loaded. However, it is under-specified rather than overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema and rich annotations, the description still fails to clarify the scope of the guide or how it differs from related sibling tools, leaving significant ambiguity for an agent choosing between several explain_* tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The schema fully covers the (empty) parameter set, and the description appropriately does not discuss parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Explain how to embed and manage the referral dashboard experience' gives a vague verb+resource. It is not clear if it returns documentation, code, or a guide, and it does not differentiate from siblings like explain_referral_flow or explain_referrals_basics.
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 about when to use this tool versus alternatives. There is no mention of prerequisites or exclusions, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payram_docsList Payram DocsARead-onlyIdempotentInspect
Lists the available Payram doc ids. Optionally scope by a prefix such as "features".
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| docs | Yes | |
| count | Yes | |
| prefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is fully covered without prose. The description confirms the return is a set of doc ids and that prefix scoping is optional, which adds a little context, but says nothing about ordering, completeness, or how the prefix is matched.
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, front-loaded with the primary action and followed by the optional modifier. No filler, nothing repeated from the title.
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?
An output schema exists, so return values need not be described, and the tool has one optional parameter. For a simple discovery tool this is essentially complete; only the prefix matching behavior and result ordering remain unspecified, which is minor.
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 0% for the single 'prefix' parameter, so the description must compensate, and it does: it explains the parameter's purpose (scoping the listing) and gives a concrete example value ("features"). It stops short of stating match semantics (path-prefix, case sensitivity), keeping it from a 5.
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 ("Lists the available Payram doc ids") that is immediately distinguishable from the sibling get_payram_doc_by_id, which retrieves a single doc. It does not explicitly name that sibling, but the listing semantics are unmistakable.
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 optional prefix clause implies usage (narrow the listing, e.g. by "features"), which is genuinely useful. However, it never states when to use this discovery tool versus get_payram_doc_by_id, so the workflow relationship between the two is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboard_agent_setupOnboard: install PayRam as an agent (deprecated)ARead-onlyIdempotentInspect
Deprecated: use payram_setup_plan, which does this and lets you personalise it. Returns the default headless plan (testnet, USDC on Base).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| markdown | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered and the description is consistent with it. The description adds the deprecation status and the exact configuration returned, but says nothing about permissions, side effects, or how the plan is consumed. With annotations carrying the safety burden, this is adequate but not rich.
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 tight sentences with the deprecation notice front-loaded, followed immediately by the redirect and the return scope. No filler and nothing buried.
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?
An output schema exists, so return values need not be detailed, and the description still summarizes them. For a zero-param, deprecated tool the only essential information is the redirect, which is present; the minor gap is that it never states what callers should expect the plan to contain beyond two config values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter semantics for the description to clarify or compensate for. Schema coverage is reported at 100% with an empty properties object.
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 the tool is deprecated, identifies the replacement (payram_setup_plan), and specifies what it returns (the default headless plan with testnet/USDC-on-Base config). The literal action ('install PayRam as an agent') comes from the title rather than the description, but the return scope is clearly conveyed and the tool is differentiated from its sibling.
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 names the alternative explicitly and gives the reason to prefer it ('which does this and lets you personalise it'), effectively telling the agent when not to use this tool. This is exactly the routing guidance an agent needs for a deprecated entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payram_doctorDiagnose a PayRam serverARead-onlyIdempotentInspect
Read-only diagnosis of a PayRam server by its public URL — works from the hosted MCP without credentials: reachability, health, TLS certificate, installed vs latest version, worker states. Optionally validates an API key without creating anything. Returns ranked likely causes and exact fixes for the first failing stage. Run this first when anything PayRam-related fails.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Optional project API key to validate (never creates anything). Passing it puts the key in this conversation; prefer running payram_ops_playbook "connect" locally. | |
| baseUrl | No | Public address of the PayRam server, same origin as the dashboard: https://pay.example.com, or just pay.example.com or an IP (https is tried first, then http). No :8080, no path. Required on the hosted MCP. |
Output Schema
| Name | Required | Description |
|---|---|---|
| baseUrl | Yes | |
| healthy | Yes | |
| version | Yes | |
| findings | Yes | |
| nextCall | Yes | The single most useful tool call to make next |
| warnings | Yes | |
| nextSteps | Yes | |
| setupStage | Yes | Pass as payram_setup_plan stage once the server answers PayRam health; null when not reachable |
| failedStage | Yes | First failing stage, null when healthy |
| likelyCauses | Yes | Ranked causes for the first failing stage |
| latestVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description nevertheless adds real context: it works without credentials, the API-key check 'never creates anything', and it returns 'ranked likely causes and exact fixes for the first failing stage'. This goes meaningfully beyond the annotations, though it does not touch rate limits or auth requirements for the version/worker checks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences that each carry distinct information: purpose+scope, capability list, API-key handling, return value, and an entry-point directive. Front-loaded with the core purpose, though the most actionable usage instruction ('run this first') sits at the tail where it is slightly less prominent.
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?
An output schema exists, so return values need not be fully explained, yet the description still summarizes them (ranked causes and fixes). Both optional params are schema-documented, annotations carry the safety profile, and the hosted-vs-local credential distinction is covered. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents both baseUrl (origin format, https-then-http fallback, no :8080/path) and apiKey including the security caveat about the key landing in the conversation. The description only restates 'by its public URL' and 'validates an API key', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Read-only diagnosis of a PayRam server') plus an explicit enumeration of what it inspects: reachability, health, TLS certificate, installed vs latest version, worker states. The closing directive 'Run this first when anything PayRam-related fails' positions it against siblings like payram_troubleshoot and test_payram_connection, so an agent can select it without opening any 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 an explicit trigger ('Run this first when anything PayRam-related fails') and names the alternative path for the sensitive case — prefer payram_ops_playbook "connect" locally rather than passing an API key here. The hosted-MCP-without-credentials condition is stated up front, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payram_ops_playbookPayRam ops playbook (direct API recipes)ARead-onlyIdempotentInspect
Exact, copy-paste recipes for day-2 operations and troubleshooting that YOU run against the merchant's PayRam API with credentials that stay on your machine: which endpoint, which credential (public / dashboard JWT / project API key), a curl+jq command, how to read the answer, and what not to do. Start with "connect". Tasks: connect, health, version_check, workers, restart_worker, node_sync, site_url, payment_options, unswept_funds, payments_today, payment_lookup, stuck_payment, create_payment_link, payouts, webhooks, logs, daily_check. Omit task to list them.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Which recipe. Omit to get the index of tasks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | |
| recipe | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds genuinely non-obvious context: the recipes run against the merchant's API with credentials that stay local, the tool produces instructions rather than executing them ('that YOU run'), and it flags 'what not to do'. This resolves the potential confusion that recipes like restart_worker are mutating while the tool itself is read-only.
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 first sentence front-loads the value proposition well, but the trailing 17-item task list largely duplicates the schema enum, which the rules say earns no credit. The description is dense rather than bloated, but that redundant enumeration is wasted space.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description still supplies the key missing context an agent needs — credential handling, entry point ('connect'), and cautionary guidance — making it 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 description coverage is 100% and the enum is fully documented in the schema, so baseline is 3. The description adds a light ordering hint ('Start with connect') and frames the enum as a task flow, but otherwise repeats the same 17 task names already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific deliverable: exact copy-paste recipes for day-2 operations and troubleshooting, including which endpoint, credential, curl+jq command, and how to read the answer. The verb+resource is clear, but the description never distinguishes this from siblings like payram_runbook or payram_troubleshoot, which sound like they cover the same troubleshooting ground.
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 in-tool guidance ('Start with connect', 'Omit task to list them'), which is useful for sequencing tasks. However it offers no when-to-use-vs-alternative guidance against the numerous sibling explain_*, payram_runbook, payram_doctor, and payram_troubleshoot tools, leaving the agent to guess which of these overlapping resources to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payram_runbookPayRam runbooks (one-off admin tasks)ARead-onlyIdempotentInspect
Step-by-step procedures for changes to a running PayRam, each step marked agent vs human with hard stops: set_site_url, change_domain, ssl_setup, ssl_renewal_fix, firewall_ports, upgrade, backup, restore, add_chain, smart_bridge, mainnet_cutover, operator_setup, rotate_api_key, reset_test_install, shopify_connector, woocommerce_plugin, secure_analytics_mcp, install_failed, custom_port_or_proxy, external_database, forgot_root_password. Omit task to list them.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Which runbook. Omit to list all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | |
| runbook | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered. The description adds real context beyond that: procedures are 'step-by-step', each step is labeled 'agent vs human', and there are 'hard stops'—which tells the agent it must pause and hand off rather than auto-execute. That hand-off semantics is valuable and not derivable from 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 lead clause is well front-loaded and informative, but the bulk of the text is a 21-item enumeration that exactly duplicates the schema enum—repeated structured data that does not earn its place. The informative content is roughly two sentence-fragments padded to one very long line.
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?
An output schema exists, so return structure need not be explained, and the description covers the tool's nature, the step labeling, hard-stop behavior, and the list-vs-fetch pattern. The remaining gap is sibling disambiguation against payram_ops_playbook/payram_troubleshoot for one-off admin task requests.
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 parameter is a fully enumerated string, so the schema already carries the semantics. The description's re-listing of all 21 enum values and 'Omit task to list them' essentially duplicates the schema's own description, adding no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and format: 'step-by-step procedures for changes to a running PayRam', with the agent-vs-human step framing. It is clearly distinguishable from the explain_* and snippet_* families, but it never distinguishes itself from the very similar sibling payram_ops_playbook or payram_troubleshoot, which an agent will also consider for admin tasks.
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?
'Omit task to list them' tells the agent how to discover the available runbooks versus fetching one, which is genuine usage guidance. However, there is no statement of when this tool is preferred over payram_ops_playbook, payram_troubleshoot, or payram_doctor, all of which plausibly compete for the same request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payram_setup_planPlan a PayRam install (step by step)ARead-onlyIdempotentInspect
Start here to install PayRam on a VPS. Returns an ordered, personalised plan — prepare server → install → claim admin + set public URL → wallets (incl. Smart Bridge review) → API key + first payment link → hardening → store/app integration — with who runs each step (agent shell vs human/dashboard), exact commands, what success looks like, and hard stops that need the human (cold wallet, mainnet spend, root-only settings). Ask the user first whether you can run commands on their server (access "ssh") or only chat with them (access "human_runs_commands": they run each command and paste the output back). Pass stage to resume mid-way; payram_doctor tells you the stage of a running server.
| Name | Required | Description | Default |
|---|---|---|---|
| ssl | No | letsencrypt (needs domain), own_certificate, proxy (Cloudflare/your own reverse proxy terminates TLS), none. Default: letsencrypt with a domain, none without. | |
| path | No | agent = headless CLI after a one-time interactive install; human = installer + web dashboard | agent |
| role | No | merchant: Take payments for your own business (default). operator: Run PayRam as a platform for other merchants and earn a fee on their volume. Must be chosen before the first project; the role locks once role-specific data exists. | merchant |
| stage | No | Where you are now; the plan starts from the next step | fresh |
| access | No | ssh = you can run commands on the server yourself. human_runs_commands = you only chat: the human runs each command and pastes the output back. Ask the user which applies before planning. | ssh |
| domain | No | Public hostname for the gateway, e.g. pay.example.com. Omit if you only have an IP for now. | |
| wallet | No | First deposit wallet: usdc_base (smart-contract wallet on Base, needs a little gas), btc (xpub, no gas), or both | usdc_base |
| network | No | testnet = free test coins (recommended first); mainnet = real money | testnet |
| integration | No | What will take payments once the gateway is up | none |
Output Schema
| Name | Required | Description |
|---|---|---|
| inputs | Yes | |
| phases | Yes | |
| summary | Yes | |
| warnings | Yes | |
| nextTools | Yes | |
| humanDecisions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, non-destructive read, so the bar is met; the description goes well beyond by disclosing the plan's structure, the human/agent division of labor, and concrete 'hard stops' (cold wallet, mainnet spend, root-only settings) that require human intervention. That is meaningful operational context an agent cannot get from the annotations alone.
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 entry-point claim and the stage chain before the operational caveats. It is dense and largely waste-free, but the long em-dash-chained sentence packs multiple distinct concerns (plan contents, access modes, stage resumption, doctor cross-reference) into one breath, which slightly hurts scannability.
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 9-parameter, enum-heavy planning tool with an output schema, this covers everything an agent needs: when to invoke it, how to resolve the access ambiguity with the user, how to resume via stage, and what the plan will contain. With the output schema handling return values, nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 9 documented, mostly-enumerated parameters, so the schema carries the semantics. The description adds only marginal value, chiefly reinforcing 'stage' as a resume mechanism and stressing that 'access' must be confirmed with the user before planning. Baseline 3 is appropriate given 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?
States a specific verb and resource ('plan'/'install PayRam on a VPS') and enumerates the exact output shape (ordered stages, who runs each step, commands, success criteria, hard stops). It also differentiates itself from siblings by naming payram_doctor as the tool that detects a running server's stage.
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?
'Start here to install PayRam on a VPS' is an explicit entry-point cue, and it names payram_doctor as the alternative for detecting an existing server's stage. It also instructs the agent to ask the user about access mode before planning. It does not, however, distinguish itself from near siblings like generate_setup_checklist, onboard_agent_setup, or get_agent_setup_flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payram_troubleshootTroubleshoot a PayRam problemARead-onlyIdempotentInspect
Something is not working? Describe the problem in plain words and/or paste the error or log text. Returns the known PayRam problems it matches, what each usually means, how to confirm it and the fix, plus which tool to use next. Needs no credentials and no access to the server; what you paste is not stored. Call with nothing to list known problems. For a live check of a running server use payram_doctor.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Show one known problem by its id (from an earlier answer). | |
| area | No | Narrow the search to one area. | |
| output | No | Error text or log lines to match. Remove API keys, tokens, passwords and seed phrases first. | |
| symptom | No | The problem in plain words, e.g. "payment link opens localhost" or "502 after upgrade". |
Output Schema
| Name | Required | Description |
|---|---|---|
| index | No | |
| gather | No | |
| matches | Yes | |
| warning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, but the description adds meaningful context beyond them: no credentials required, no server access needed, and pasted input is not stored. That privacy/auth disclosure is genuinely useful for a tool that accepts raw log text, though it doesn't cover output format or matching thresholds.
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?
Opens with the triggering condition, then front-loads the return value, constraints, and the routing hint to the sibling. Every sentence carries distinct information with no padding.
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?
An output schema exists, yet the description still summarizes the return shape, and the exclusion against payram_doctor plus the zero-argument listing behavior removes the remaining ambiguity. Complete for a read-only diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters including the area enum. The description only loosely gestures at 'symptom' and 'output' usage and says nothing about id or area narrowing beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (troubleshoot a PayRam problem) and enumerates exactly what it returns: matched known problems, their meaning, how to confirm, the fix, and the next tool. It explicitly distinguishes itself from the sibling payram_doctor, so an agent can route without opening either 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 concrete usage ('describe the problem in plain words and/or paste the error or log text'), an edge case ('call with nothing to list known problems'), and an explicit exclusion with the alternative ('for a live check of a running server use payram_doctor'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_payram_testPayram Test Readiness ChecklistARead-onlyIdempotentInspect
Confirm hosting, credentials, and environment variables before generating demo apps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| title | Yes | |
| sections | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds scope (which three areas are inspected), but says nothing about failure handling, what happens when a check fails, or whether it blocks subsequent generation.
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 naming the action and then the inspected domains, with zero repetition of the title. It is tight and wastes nothing, though it is arguably under-elaborated for a tool with several overlapping siblings.
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 a rich annotation set and an output schema, the description does not need to explain return values, and it correctly covers the checklist domains. The only remaining gap is disambiguation from adjacent diagnostic and checklist tools, which the description leaves 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?
The tool takes zero parameters and schema description coverage is 100%, so the baseline is 4. There is no parameter surface the description could usefully expand.
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 verb 'Confirm' plus the enumerated resources (hosting, credentials, environment variables) tells the agent this is a pre-flight readiness check that inspects prerequisites, not a generator or explainer. It is clearly distinct from the many 'generate_*' and 'explain_*' siblings, though it never names those siblings or states what form the confirmation output takes.
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?
'before generating demo apps' gives a sequencing cue, which is real usage context. However, it does not name a when-not condition or an alternative such as test_payram_connection, payram_doctor, or generate_setup_checklist, all of which plausibly overlap, leaving the agent to infer which pre-flight tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaffold_payram_appScaffold Payram Payments & Payouts AppBRead-onlyIdempotentInspect
Generates a minimal full-stack app skeleton with Payram payments and payouts routes (and a simple UI) for a chosen language and framework.
| Name | Required | Description | Default |
|---|---|---|---|
| appName | No | Name for the generated application. If not provided, defaults to payram-{framework}-starter | |
| language | Yes | Programming language for the application (node for JavaScript/TypeScript) | |
| framework | Yes | Web framework to use for scaffolding the application | |
| includeWebhooks | No | Whether to include webhook handler code in the scaffolded application |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| appName | Yes | |
| language | Yes | |
| framework | Yes | |
| instructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint, so the safety profile is covered. The description adds useful scope context (minimal skeleton, includes both payments and payouts routes, includes a UI), but it never says what artifacts are produced or how the output is delivered/consumed.
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 well-formed sentence that leads with the action and layers in scope without filler. Nothing to trim.
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?
An output schema exists, so return-shape explanation is unnecessary, and the schema fully covers inputs. The description tells an agent enough to invoke it, though it omits any statement about constraints such as which language/framework combinations are valid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters documented including enums and the appName default, so the schema does the heavy lifting. The description only echoes 'for a chosen language and framework', adding no syntax or interaction detail 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 gives a concrete verb+resource: it generates a minimal full-stack app skeleton containing Payram payments and payouts routes plus a simple UI, parameterized by language and framework. It is clearly distinguishable from the snippet/explain siblings, but it never names an alternative to contrast against.
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 explicit when-to-use guidance, no prerequisites, and no mention of when a narrow sibling like generate_payment_route_snippet or suggest_file_structure would be preferable. Usage is only implied by the word 'skeleton'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_express_payment_routeExpress create-payment route snippetARead-onlyIdempotentInspect
Returns an Express router that posts to Payram's /api/v1/payment endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, and 'Returns' is consistent with that read-only profile, so no contradiction. The description adds what the artifact is (an Express router targeting a specific endpoint) but says nothing about auth, env configuration, or what the generated code assumes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the return type and the framework target. Nothing in it 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?
An output schema exists, so return-value details are covered elsewhere, and annotations carry the safety profile. For a zero-parameter snippet generator this is close to sufficient, though it omits any note about env setup or where the endpoint/credentials come from.
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 zero parameters, so the baseline of 4 applies. The description correctly implies no input is needed and cannot be expected to say more about parameters that do not 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 specific verb ('Returns') and resource ('an Express router that posts to Payram's /api/v1/payment endpoint'). The Express framework is clear, and combined with the name this differentiates it from framework siblings like snippet_fastapi_payment_route, though the description itself never names an alternative.
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 only implied: an agent infers you pick this when building an Express app that needs a create-payment route. There is no explicit when-to-use statement, no mention of the sibling framework snippets, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_fastapi_payment_routeFastAPI create-payment route snippetARead-onlyIdempotentInspect
Returns a FastAPI handler that calls Payram's create-payment HTTP API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds the useful fact that the generated handler targets Payram's create-payment HTTP API, but it does not say the tool merely emits source text (no execution, no network call at generation time).
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 twelve-word sentence that front-loads the return value and the framework. Nothing extraneous, nothing buried.
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 zero-parameter snippet generator with an output schema, the description is nearly sufficient — the return contract is covered by the output schema and the safety profile by annotations. The remaining gap is the lack of any routing cue distinguishing it from the generic route-snippet sibling.
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 zero parameters (schema coverage 100% trivially), so the baseline for an empty-param tool applies. There is nothing about parameters the description could or should add.
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 (returns) and resource (a FastAPI handler for Payram's create-payment HTTP API), which is clearly distinct from the Express/Go/Laravel/Spring variants by framework. It does not, however, explicitly differentiate itself from the generic generate_payment_route_snippet sibling, leaving some overlap to inference.
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 snippet versus generate_payment_route_snippet or the other framework-specific route snippets. No prerequisites, no exclusions, no routing guidance — an agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_go_payment_handlerGo (Gin) create-payment route snippetARead-onlyIdempotentInspect
Returns a Gin handler that proxies /api/pay/create to Payram's create-payment API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds the proxy target and route path, but says nothing about the generated handler's dependencies, config, or how it authenticates to Payram's API.
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 names verb, output artifact, route, and upstream API with no padding.
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 an output schema present and no parameters, the description does not need to explain return values. It is complete enough to invoke correctly, though it omits any mention of the sibling snippet variants an agent could confuse it with.
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 and there is nothing for the description to compensate for. Schema is trivially empty and fully described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('a Gin handler') plus the exact route (/api/pay/create) and target API. The 'Go (Gin)' framing implicitly distinguishes it from the Express/FastAPI/Spring siblings, though it never names them.
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 only implied: an agent infers it should pick this when scaffolding a Go/Gin payment route. There is no explicit when-to-use statement, no prerequisites, and no routing to alternatives like generate_payment_route_snippet or the other framework-specific snippet tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_laravel_payment_routeLaravel create-payment route snippetARead-onlyIdempotentInspect
Returns a Laravel controller that posts to Payram's /api/v1/payment endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds that the returned artifact is a controller targeting the /api/v1/payment endpoint, but discloses nothing about what the snippet contains or requires. With annotations doing the heavy lifting, this is an adequate but modest contribution.
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 names the artifact type and target endpoint with no filler. Nothing is wasted and the essential information leads.
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?
An output schema exists, so the description needn't enumerate return values. For a zero-parameter snippet generator this is nearly complete, though it omits any hint of what the generated controller includes or any usage note tying it to the Laravel framework choice.
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 zero parameters with 100% schema coverage, so the baseline of 4 applies. There is no parameter meaning for the description to add or omit.
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 (Returns) and resource (a Laravel controller posting to Payram's /api/v1/payment endpoint), which is more than a tautology. It clearly tells the agent this produces Laravel-framework code, but does not explicitly contrast itself with the sibling framework variants (express, fastapi, go, nextjs, spring).
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 when-to-use guidance, no conditions that select this tool over its siblings, and no mention of alternatives. The agent must infer from the tool name alone that this is the Laravel-specific choice among the framework snippet family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_nextjs_payment_routeNext.js create-payment route snippetARead-onlyIdempotentInspect
Returns a Next.js App Router API route that calls Payram's create-payment HTTP API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that the emitted route targets the App Router and calls the create-payment HTTP endpoint, but says nothing about App Router vs Pages Router requirements or whether it needs an API key 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?
A single front-loaded sentence with the verb, framework, and target API all in order and zero filler. Nothing to trim.
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 an output schema present, the return value needn't be described, and with no parameters there is little else the agent needs. The only shortfall is not flagging the App Router assumption more prominently, but the description does say 'App Router' so the core assumption is visible.
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 zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool applies. No misleading parameter language present.
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 (Returns) and resource (a Next.js App Router API route that calls Payram's create-payment HTTP API), and the framework qualifier distinguishes it from the sibling Express/FastAPI/Go/Laravel/Spring snippet tools. It does not explicitly differentiate from generate_payment_route_snippet, so it stops short of 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 when-to-use guidance, no statement that this is the Next.js-specific option among framework siblings, and no prerequisites or exclusions. The agent must infer selection purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snippet_spring_payment_controllerSpring Boot create-payment controller snippetARead-onlyIdempotentInspect
Returns a Spring Boot controller that calls Payram's /api/v1/payment endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| notes | No | |
| title | Yes | |
| snippet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety profile is covered. The description adds that the generated controller calls a specific endpoint, but does not describe what the snippet contains, dependencies, or limitations.
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, no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, zero parameters, and existence of an output schema, the description adequately states what is returned. The lack of usage guidelines is a minor gap but not critical for a snippet generator.
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?
Tool takes no parameters; baseline 4 applies. Description correctly does not discuss parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Returns' and resource 'Spring Boot controller', and specifies the generated code calls Payram's /api/v1/payment endpoint. Clearly distinguishes from sibling snippet tools by framework (Spring Boot) and artifact type (controller).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. Usage is implied by the Spring Boot context but no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_file_structureSuggest Payram File StructureBRead-onlyIdempotentInspect
Suggests a recommended backend folder/file structure for integrating Payram.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| notes | No | |
| title | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond that - it does not say whether the suggestion is opinionated, framework-aware, or how it relates to the sibling scaffolding tools, so it contributes almost no value on this dimension.
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 tight sentence with the action front-loaded and no filler. It is arguably too terse given the crowded sibling set, but as pure conciseness it is efficient and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and with zero parameters the input side is trivial. What is missing is disambiguation from the many generation/scaffolding siblings, which is the main thing an agent needs here - making this the minimum viable level rather than fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify about inputs. The schema is a closed empty object (additionalProperties=false), which is self-explanatory.
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 ('Suggests') and resource ('recommended backend folder/file structure for integrating Payram'), so an agent knows exactly what comes back. It does not, however, distinguish itself from closely related siblings such as scaffold_payram_app, payram_setup_plan, or generate_setup_checklist, which an agent could easily confuse it with.
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 when-to-use guidance, no statement of prerequisites, and no mention of alternatives like scaffold_payram_app (which presumably creates files rather than only suggesting a layout). The agent must infer the use case purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_payram_connectionTest PayRam connectivity (deprecated)ARead-onlyIdempotentInspect
Deprecated: use payram_doctor, which does this and more. Read-only check that a PayRam server is reachable and healthy and, if an API key is supplied, that the key is accepted. Never creates payments.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Optional project API key to validate (nothing is created). Passing it exposes the key in this conversation. | |
| baseUrl | No | PayRam URL, same origin as the dashboard (e.g. https://pay.example.com). Defaults to PAYRAM_BASE_URL in local mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| baseUrl | Yes | |
| keyChecked | Yes | |
| errorMessage | No | |
| payramVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive/openWorld. The description adds value beyond that: it discloses the apiKey validation behavior, the 'never creates payments' guarantee, and the deprecation supersession. It does not mention rate limits or output shape, but output schema exists so return values needn't be explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with deprecation and replacement, then behavior, then safety guarantee. Every sentence earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deprecated read-only connectivity test with output schema present and full schema coverage, the description is complete: it signals deprecation, redirects to the successor, describes the check scope, and states the non-mutating guarantee.
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 both parameters are well documented in-schema (apiKey exposure warning, baseUrl default). The description adds a summary of apiKey's purpose but no new syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Read-only check that a PayRam server is reachable and healthy') and its deprecation status, explicitly naming payram_doctor as the replacement. Distinct from sibling tools which generate snippets/docs. Docked one point because the deprecated status makes the tool's role somewhat muddied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the superseding tool ('use payram_doctor, which does this and more') and states exactly when the apiKey validation path applies. The 'Never creates payments' line clarifies the boundary. This is a textbook when-to-use vs alternative statement.
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.
1 tool update
- Added
explain_payram_security
7 tool updates
- Changed
generate_mock_webhook_event1 field changed- changed
Output schema / properties / meta / properties / language / enumPrevious value: -[ - "typescript", - "javascript", - "python", - "go", - "php", - "java" -]New value: +[ + "typescript", + "javascript", + "python", + "go", + "php", + "java", + "bash" +]
- Changed
generate_webhook_event_router1 field changed- changed
Output schema / properties / meta / properties / language / enumPrevious value: -[ - "typescript", - "javascript", - "python", - "go", - "php", - "java" -]New value: +[ + "typescript", + "javascript", + "python", + "go", + "php", + "java", + "bash" +]
- Changed
generate_webhook_handler1 field changed- changed
Output schema / properties / meta / properties / language / enumPrevious value: -[ - "typescript", - "javascript", - "python", - "go", - "php", - "java" -]New value: +[ + "typescript", + "javascript", + "python", + "go", + "php", + "java", + "bash" +]
- Changed
payram_doctor4 fields changed- changed
Input schema / properties / baseUrl / descriptionPrevious value: -"Public URL of the PayRam server, same origin as the dashboard (e.g. https://pay.example.com). No :8080. Required on the hosted MCP."New value: +"Public address of the PayRam server, same origin as the dashboard: https://pay.example.com, or just pay.example.com or an IP (https is tried first, then http). No :8080, no path. Required on the hosted MCP." - added
Output schema / properties / nextCallAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "arguments": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "tool": { + "type": "string" + } + }, + "required": [ + "tool", + "arguments" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The single most useful tool call to make next" +} - added
Output schema / properties / setupStageAdded value: +{ + "anyOf": [ + { + "const": "installed", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Pass as payram_setup_plan stage once the server answers PayRam health; null when not reachable" +} - changed
Output schema / requiredPrevious value: -[ - "baseUrl", - "healthy", - "failedStage", - "version", - "latestVersion", - "findings", - "warnings", - "likelyCauses", - "nextSteps" -]New value: +[ + "baseUrl", + "healthy", + "failedStage", + "version", + "latestVersion", + "findings", + "warnings", + "likelyCauses", + "nextSteps", + "setupStage", + "nextCall" +]
- Changed
payram_runbook3 fields changed- changed
Input schema / properties / task / enumPrevious value: -[ - "set_site_url", - "change_domain", - "ssl_setup", - "ssl_renewal_fix", - "firewall_ports", - "upgrade", - "backup", - "restore", - "add_chain", - "smart_bridge", - "mainnet_cutover", - "operator_setup", - "rotate_api_key", - "reset_test_install", - "shopify_connector", - "woocommerce_plugin", - "secure_analytics_mcp" -]New value: +[ + "set_site_url", + "change_domain", + "ssl_setup", + "ssl_renewal_fix", + "firewall_ports", + "upgrade", + "backup", + "restore", + "add_chain", + "smart_bridge", + "mainnet_cutover", + "operator_setup", + "rotate_api_key", + "reset_test_install", + "shopify_connector", + "woocommerce_plugin", + "secure_analytics_mcp", + "install_failed", + "custom_port_or_proxy", + "external_database", + "forgot_root_password" +] - changed
Output schema / properties / runbook / properties / steps / items / properties / who / enumPrevious value: -[ - "agent_shell", - "human", - "human_dashboard" -]New value: +[ + "agent_shell", + "agent_http", + "human", + "human_dashboard" +] - changed
Output schema / properties / runbook / properties / task / enumPrevious value: -[ - "set_site_url", - "change_domain", - "ssl_setup", - "ssl_renewal_fix", - "firewall_ports", - "upgrade", - "backup", - "restore", - "add_chain", - "smart_bridge", - "mainnet_cutover", - "operator_setup", - "rotate_api_key", - "reset_test_install", - "shopify_connector", - "woocommerce_plugin", - "secure_analytics_mcp" -]New value: +[ + "set_site_url", + "change_domain", + "ssl_setup", + "ssl_renewal_fix", + "firewall_ports", + "upgrade", + "backup", + "restore", + "add_chain", + "smart_bridge", + "mainnet_cutover", + "operator_setup", + "rotate_api_key", + "reset_test_install", + "shopify_connector", + "woocommerce_plugin", + "secure_analytics_mcp", + "install_failed", + "custom_port_or_proxy", + "external_database", + "forgot_root_password" +]
- Changed
payram_setup_plan3 fields changed- added
Input schema / properties / accessAdded value: +{ + "default": "ssh", + "description": "ssh = you can run commands on the server yourself. human_runs_commands = you only chat: the human runs each command and pastes the output back. Ask the user which applies before planning.", + "enum": [ + "ssh", + "human_runs_commands" + ], + "type": "string" +} - changed
Output schema / properties / phases / items / properties / steps / items / properties / executor / enumPrevious value: -[ - "agent_shell", - "agent_http", - "human", - "human_dashboard" -]New value: +[ + "agent_shell", + "agent_http", + "human_shell", + "human", + "human_dashboard" +] - added
Output schema / properties / phases / items / properties / steps / items / properties / ifItFailsAdded value: +{ + "description": "What to do when the step does not give the expected result", + "type": "string" +}
- Added
payram_troubleshoot
55 tool updates
- Removed
assess_payram_project - Removed
check_node_sync - Removed
check_payment_readiness - Removed
create_payment_link - Changed
explain_payment_flow2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
explain_payram_basics2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
explain_payram_concepts2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
explain_referral_flow2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
explain_referrals_basics2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_env_template2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_mock_webhook_event2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payment_http_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payment_route_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payment_sdk_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payment_status_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payout_recipient_flow_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payout_sdk_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_payout_status_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_referral_route_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_referral_sdk_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_referral_status_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_referral_validation_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_setup_checklist2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_topup_integration_snippet2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_webhook_event_router2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
generate_webhook_handler2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_agent_setup_flow2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
get_daily_volume - Removed
get_payment_summary - Changed
get_payram_doc_by_id2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_payram_links2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_referral_dashboard_guide2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
get_unswept_balances - Removed
list_currencies - Changed
list_payram_docs2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
list_platforms - Removed
list_recipients - Removed
lookup_payment - Changed
onboard_agent_setup2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
payram_doctor15 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / apiKey / descriptionPrevious value: -"Merchant API key (per-project). Defaults to PAYRAM_API_KEY. Obtain headlessly: ./setup_payram_agents.sh ensure-api-key"New value: +"Optional project API key to validate (never creates anything). Passing it puts the key in this conversation; prefer running payram_ops_playbook \"connect\" locally." - changed
Input schema / properties / baseUrl / descriptionPrevious value: -"PayRam server base URL. Defaults to PAYRAM_BASE_URL. The installer publishes on port 80 (http://localhost), not :8080."New value: +"Public URL of the PayRam server, same origin as the dashboard (e.g. https://pay.example.com). No :8080. Required on the hosted MCP." - removed
Input schema / properties / baseUrl / formatRemoved value: -"uri" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / baseUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / failedStage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Output schema / properties / failedStage / descriptionPrevious value: -"First failing stage: reachability | api-key | jwt | readiness; null when healthy"New value: +"First failing stage, null when healthy" - added
Output schema / properties / failedStage / typeAdded value: +[ + "string", + "null" +] - added
Output schema / properties / latestVersionAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / likelyCauses / items / properties / likelihood / descriptionPrevious value: -"Rough probability, e.g. \"80%\""New value: +"Rough probability, e.g. \"60%\"" - added
Output schema / properties / versionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / warningsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "healthy", - "failedStage", - "findings", - "likelyCauses", - "nextSteps" -]New value: +[ + "baseUrl", + "healthy", + "failedStage", + "version", + "latestVersion", + "findings", + "warnings", + "likelyCauses", + "nextSteps" +]
- Added
payram_ops_playbook - Added
payram_runbook - Added
payram_setup_plan - Changed
prepare_payram_test2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
restart_payram_worker - Changed
scaffold_payram_app2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
search_payments - Changed
snippet_express_payment_route2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
snippet_fastapi_payment_route2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
snippet_go_payment_handler2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
snippet_laravel_payment_route2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
snippet_nextjs_payment_route2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
snippet_spring_payment_controller2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
suggest_file_structure5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / $defsAdded value: +{ + "__schema0": { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "$ref": "#/$defs/__schema0" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "file", + "folder" + ], + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "type": "object" + } +} - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / definitionsRemoved value: -{ - "__schema0": { - "additionalProperties": false, - "properties": { - "children": { - "items": { - "$ref": "#/definitions/__schema0" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "file", - "folder" - ], - "type": "string" - } - }, - "required": [ - "path", - "type" - ], - "type": "object" - } -} - changed
Output schema / properties / root / $refPrevious value: -"#/definitions/__schema0"New value: +"#/$defs/__schema0"
- Changed
test_payram_connection9 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / apiKey / descriptionPrevious value: -"Your Payram API key from the dashboard. If not provided, uses PAYRAM_API_KEY from environment."New value: +"Optional project API key to validate (nothing is created). Passing it exposes the key in this conversation." - changed
Input schema / properties / baseUrl / descriptionPrevious value: -"The base URL of your Payram server (e.g., https://your-server.example). If not provided, uses PAYRAM_BASE_URL from environment."New value: +"PayRam URL, same origin as the dashboard (e.g. https://pay.example.com). Defaults to PAYRAM_BASE_URL in local mode." - removed
Input schema / properties / baseUrl / formatRemoved value: -"uri" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / keyCheckedAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / statusCodeRemoved value: -{ - "anyOf": [ - { - "maximum": 599, - "minimum": 100, - "type": "integer" - }, - { - "type": "null" - } - ] -} - changed
Output schema / requiredPrevious value: -[ - "ok", - "statusCode", - "baseUrl" -]New value: +[ + "ok", + "baseUrl", + "keyChecked" +]
3 tool updates
- Changed
check_node_sync2 fields changed- added
Output schema / properties / workersAvailableAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "workers", - "chains", - "issues", - "healthy" -]New value: +[ + "workers", + "chains", + "issues", + "healthy", + "workersAvailable" +]
- Added
generate_topup_integration_snippet - Changed
get_unswept_balances10 fields changed- changed
Output schema / properties / balances / items / additionalPropertiesPrevious value: -falseNew value: +{} - added
Output schema / properties / balances / items / properties / amountUSDAdded value: +{ + "type": "string" +} - added
Output schema / properties / balances / items / properties / coldWalletConfiguredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / balances / items / properties / hotWalletActiveAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / balances / items / properties / hotWalletAddressAdded value: +{ + "type": "string" +} - added
Output schema / properties / balances / items / properties / isSCWDeploymentPendingAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / balances / items / properties / lastSweepErrorAdded value: +{ + "additionalProperties": {}, + "properties": { + "actionHint": { + "type": "string" + }, + "address": { + "type": "string" + }, + "category": { + "type": "string" + }, + "occurredAt": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "statusCode": { + "type": "string" + }, + "txHash": { + "type": "string" + } + }, + "required": [ + "statusCode", + "category", + "reason", + "retryable", + "occurredAt", + "address" + ], + "type": "object" +} - added
Output schema / properties / balances / items / properties / nextProbableSweepAtAdded value: +{ + "type": "string" +} - added
Output schema / properties / balances / items / properties / sweepInProgressTxHashAdded value: +{ + "type": "string" +} - added
Output schema / properties / balances / items / properties / walletActiveAdded value: +{ + "type": "boolean" +}
2 tool updates
- Changed
check_node_sync8 fields changed- added
Output schema / properties / chains / items / properties / listenerRunningAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / chains / items / properties / listenerWorkerAdded value: +{ + "type": "string" +} - added
Output schema / properties / chains / items / properties / oldestBlockAgeSecondsAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / chains / items / properties / staleThresholdSecondsAdded value: +{ + "type": "number" +} - added
Output schema / properties / chains / items / properties / verdictAdded value: +{ + "enum": [ + "healthy", + "lagging", + "unreachable", + "listener-down" + ], + "type": "string" +} - changed
Output schema / properties / chains / items / requiredPrevious value: -[ - "blockchainCode", - "reachable", - "nodes" -]New value: +[ + "blockchainCode", + "verdict", + "staleThresholdSeconds", + "listenerWorker", + "listenerRunning", + "reachable", + "oldestBlockAgeSeconds", + "nodes" +] - added
Output schema / properties / issuesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "workers", - "chains", - "healthy" -]New value: +[ + "workers", + "chains", + "issues", + "healthy" +]
- Added
restart_payram_worker
3 tool updates
- Changed
create_payment_link2 fields changed- changed
Input schema / properties / customerEmail / descriptionPrevious value: -"Customer email (optional)"New value: +"Customer email (required — the backend validates it as a non-empty email)" - changed
Input schema / requiredPrevious value: -[ - "amountInUSD", - "customerID" -]New value: +[ + "amountInUSD", + "customerID", + "customerEmail" +]
- Changed
list_recipients4 fields changed- added
Output schema / properties / recipients / items / properties / email / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / recipients / items / properties / email / typeRemoved value: -"string" - added
Output schema / properties / recipients / items / properties / name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / recipients / items / properties / name / typeRemoved value: -"string"
- Changed
search_payments2 fields changed- changed
Input schema / properties / paymentStatus / descriptionPrevious value: -"Filter by payment status."New value: +"Filter by payment status (FILLED = completed)." - changed
Input schema / properties / paymentStatus / items / enumPrevious value: -[ - "open", - "closed", - "cancelled", - "partially_filled", - "over_filled" -]New value: +[ + "OPEN", + "FILLED", + "PARTIALLY_FILLED", + "OVER_FILLED", + "CANCELLED", + "CONFIRMING", + "DEPOSIT_RECEIVED", + "UNDEFINED" +]
1 tool update
- Added
payram_doctor
17 tool updates
- Changed
check_node_sync4 fields changed- changed
Output schema / properties / chains / items / properties / nodes / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / chains / items / properties / nodes / items / properties / blockAgeSeconds / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / chains / items / properties / nodes / items / properties / blockAgeSeconds / typeRemoved value: -[ - "number", - "null" -] - changed
Output schema / properties / workers / items / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
create_payment_link2 fields changed- added
Input schema / properties / customerEmail / patternAdded value: +"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
explain_payment_flow1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
explain_payram_basics1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
explain_payram_concepts1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
explain_referral_flow1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
explain_referrals_basics1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_daily_volume5 fields changed- removed
Output schema / properties / byCurrency / items / $refRemoved value: -"#/properties/byNetwork/items" - added
Output schema / properties / byCurrency / items / additionalPropertiesAdded value: +false - added
Output schema / properties / byCurrency / items / propertiesAdded value: +{ + "count": { + "type": "number" + }, + "name": { + "type": "string" + }, + "volumeUSD": { + "type": "number" + } +} - added
Output schema / properties / byCurrency / items / requiredAdded value: +[ + "name", + "count", + "volumeUSD" +] - added
Output schema / properties / byCurrency / items / typeAdded value: +"object"
- Changed
get_payram_doc_by_id1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_payram_links1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_referral_dashboard_guide1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_currencies1 field changed- changed
Output schema / properties / currencies / items / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
list_payram_docs1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_recipients1 field changed- changed
Output schema / properties / recipients / items / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
prepare_payram_test1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_payments2 fields changed- added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / payments / items / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
suggest_file_structure6 fields changed- added
Output schema / definitionsAdded value: +{ + "__schema0": { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "$ref": "#/definitions/__schema0" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "file", + "folder" + ], + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "type": "object" + } +} - added
Output schema / properties / root / $refAdded value: +"#/definitions/__schema0" - removed
Output schema / properties / root / additionalPropertiesRemoved value: -false - removed
Output schema / properties / root / propertiesRemoved value: -{ - "children": { - "items": { - "$ref": "#/properties/root" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "file", - "folder" - ], - "type": "string" - } -} - removed
Output schema / properties / root / requiredRemoved value: -[ - "path", - "type" -] - removed
Output schema / properties / root / typeRemoved value: -"object"
6 tool updates
- Added
check_node_sync - Added
check_payment_readiness - Added
create_payment_link - Added
generate_payout_recipient_flow_snippet - Added
list_currencies - Added
list_recipients
1 tool update
- Added
get_agent_setup_flow
5 tool updates
- Changed
get_daily_volume1 field changed- changed
Input schema / properties / externalPlatformId / descriptionPrevious value: -"External platform ID. Falls back to PAYRAM_EXTERNAL_PLATFORM_ID env var."New value: +"Optional. Auto-discovered from your account if omitted."
- Changed
get_payment_summary1 field changed- changed
Input schema / properties / externalPlatformId / descriptionPrevious value: -"External platform ID. Falls back to PAYRAM_EXTERNAL_PLATFORM_ID env var if not provided."New value: +"Optional. Auto-discovered from your account if omitted."
- Added
list_platforms - Changed
lookup_payment1 field changed- changed
Input schema / properties / externalPlatformId / descriptionPrevious value: -"External platform ID. Falls back to PAYRAM_EXTERNAL_PLATFORM_ID env var if not provided."New value: +"Optional. Auto-discovered from your account if omitted."
- Changed
search_payments1 field changed- changed
Input schema / properties / externalPlatformId / descriptionPrevious value: -"External platform ID. Falls back to PAYRAM_EXTERNAL_PLATFORM_ID env var."New value: +"Optional. Auto-discovered from your account if omitted."
5 tool updates
- Added
get_daily_volume - Added
get_payment_summary - Added
get_unswept_balances - Added
lookup_payment - Added
search_payments
36 tool updates
- First observed
assess_payram_project - First observed
explain_payment_flow - First observed
explain_payram_basics - First observed
explain_payram_concepts - First observed
explain_referral_flow - First observed
explain_referrals_basics - First observed
generate_env_template - First observed
generate_mock_webhook_event - First observed
generate_payment_http_snippet - First observed
generate_payment_route_snippet - First observed
generate_payment_sdk_snippet - First observed
generate_payment_status_snippet - First observed
generate_payout_sdk_snippet - First observed
generate_payout_status_snippet - First observed
generate_referral_route_snippet - First observed
generate_referral_sdk_snippet - First observed
generate_referral_status_snippet - First observed
generate_referral_validation_snippet - First observed
generate_setup_checklist - First observed
generate_webhook_event_router - First observed
generate_webhook_handler - First observed
get_payram_doc_by_id - First observed
get_payram_links - First observed
get_referral_dashboard_guide - First observed
list_payram_docs - First observed
onboard_agent_setup - First observed
prepare_payram_test - First observed
scaffold_payram_app - First observed
snippet_express_payment_route - First observed
snippet_fastapi_payment_route - First observed
snippet_go_payment_handler - First observed
snippet_laravel_payment_route - First observed
snippet_nextjs_payment_route - First observed
snippet_spring_payment_controller - First observed
suggest_file_structure - First observed
test_payram_connection
Related MCP Connectors
Crypto pay links and API for people and AI agents. BTC, Lightning, USDC, USDT, EURC, SOL, ETH.
Keyless non-custodial crypto payments for AI agents: payment links and tip jars, no API key.
Private stablecoin payments for people and AI agents on mainnet, hosted or local with limits.
Non-custodial crypto payments for AI assistants: balances, payments, and create payment links.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceNon-custodial multi-chain crypto payment gateway via CoinVoyage. 15 tools for creating PayOrders, managing webhooks, and cross-chain swaps. Supports BTC, SOL, ETH, Base, Arbitrum, Polygon, BSC, Sui, USDC/USDT.MIT
- AlicenseNot gradedqualityBmaintenanceAccept crypto payments from AI agents: create an invoice in one call and get a hosted checkout link (USDC/USDT on Celo, Base, Arbitrum, Polygon, BSC). No API key, instant self-custody settlement.MIT

PayRam MCP Serverofficial
FlicenseNot gradedqualityCmaintenanceEnables AI agents to deploy and operate a self-hosted, no-signup crypto payment gateway with multi-chain support, card-to-crypto checkout, and MCP tools for payment links and integration snippets.158-- AlicenseAqualityBmaintenanceNo-KYC crypto VPS hosting with an MCP server that lets AI agents provision VPS programmatically. Pay with USDC/USDT on Base and Ethereum, no accounts or verification required.21MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.