Skip to main content
Glama
agentbankmcp

agentbank-merchant-mcp

Official
by agentbankmcp

@curless/agentbank-merchant-mcp

Merchant-side MCP server for agentbank. Lets a merchant read their own orders and live Curless wallet balance (real funds settled into the merchant's Curless account) from an MCP client (Claude Desktop).

Authenticated by your Curless API key via env — no OAuth. (The OAuth route is the remote /mcp connector added by URL in claude.ai; this is the simple token-based path for Claude Desktop / stdio clients.) Kept separate from the buyer's @curless/agentbank-mcp so the two personas don't share a tool surface. Renders the same MCP Apps card as the remote /mcp connector, with a markdown table fallback for hosts without the card.

Tools

Orders:

  • list_orders — this merchant's orders (what agents have paid), newest first; filter by status / protocol / currency / date.

  • get_summary — order roll-up: count + gross by currency + breakdowns by protocol/status.

  • get_balance — the live Curless wallet balance per currency (available / frozen).

  • get_order — one order in full: line items + the card it was paid with.

Refunds:

  • list_refund_requests — buyers' refund requests on your orders (the queue; filter by status).

  • approve_refund — approve a request → forwarded to Curless (the order refunds once Curless confirms).

  • reject_refund — decline a request (optional note).

  • refund_order — refund one of your orders directly (no buyer request needed).

All eight render into the same MCP Apps card (orders list / detail / summary / wallet / refund queue) with a markdown fallback for hosts without the card.

Related MCP server: empresa-mcp-demo

Use (Claude Desktop claude_desktop_config.json)

{
  "mcpServers": {
    "agentbank-merchant": {
      "command": "/usr/local/bin/npx",
      "args": ["-y", "@curless/agentbank-merchant-mcp"],
      "env": {
        "AGENTBANK_MERCHANT_TOKEN": "<your-curless-api-key>",
        "AGENTBANK_MERCHANT_ID": "429488"
      }
    }
  }
}

env

what

AGENTBANK_MERCHANT_TOKEN

your Curless API key (issued by Curless at onboarding)

AGENTBANK_MERCHANT_ID

your Curless merchant id, e.g. 429488

The server talks to https://mcp.curless.ai by default — no need to configure it. (Local dev only: set AGENTBANK_API_URL=http://localhost:3000 to point at a local API.)

Available Tools

8 tools
approve_refundA
Destructive

Approve a refund request → forwarded to Curless; the order refunds once Curless confirms. Pass the refund request id (rfr_…).

ParametersJSON Schema
NameRequiredDescriptionDefault
refundRequestIdYesrfr_…

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true. Description adds important behavioral detail: the refund is forwarded to Curless and confirmed asynchronously. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. First sentence states purpose and outcome; second sentence gives parameter instruction. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description sufficiently covers the workflow (forwarding to Curless, confirmation-based refund). No missing essential information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with parameter description 'rfr_…'. Description repeats the format but adds no additional meaning. Baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (approve), resource (refund request), and outcome (forwarded to Curless; order refunds after confirmation). Distinguishes from sibling tools like reject_refund and refund_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: 'Pass the refund request id (rfr_…).' Does not explicitly state when not to use or mention alternatives, but context implies differentiation from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balanceB
Read-only

This merchant's live Curless wallet balance, per currency.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds limited value: it notes the balance is 'live' and 'per currency'. However, it does not explain how 'per currency' works given no schema parameters, nor does it disclose return format or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single short sentence that is front-loaded and contains no fluff. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with no output schema or parameters. Description covers resource and basic behavior but omits details like what constitutes balance (available/total/pending) or error conditions. Adequate but has gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has zero parameters, so baseline is 4. Description does not need to add parameter meaning, but the phrase 'per currency' is implied without parameters, which could confuse; still acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (merchant's live Curless wallet balance) and granularity (per currency), distinguishing it from sibling tools about orders and refunds. However, it lacks a verb like 'retrieves' or 'gets' but is still unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives or prerequisites. Sibling tools are named but no explicit context provided for when to choose get_balance over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_orderA
Read-only

One order's full detail — line items + the card it was paid with. Pass the order id from list_orders.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderIdYesthe order id, e.g. ord_…

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds useful context about response contents (line items, card), going beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description adequately explains what the tool returns and how to use it. Could mention additional fields but sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and describes the parameter clearly. The description adds a usage tip (getting ID from list_orders), providing extra value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (get), resource (order), and scope (full detail with line items and payment card). It distinguishes from sibling tools like list_orders and get_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: use to get full detail of a single order, and hints to pass the order ID from list_orders. No explicit when-not or alternatives, but adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summaryA
Read-only

This merchant's order roll-up: count + gross by currency + breakdowns by protocol/status. Same status/protocol/currency/date filters as list_orders.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO timestamp upper bound
fromNoISO timestamp lower bound
statusNo
currencyNo
protocolNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by specifying the aggregation behavior (roll-up), which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The purpose is front-loaded and immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the summary contents. However, it lacks details on return format or defaults, but is sufficient for a straightforward aggregation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%; only 'to' and 'from' have descriptions. The description says 'same filters as list_orders' but does not explain individual parameters like status, currency, or protocol, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides an order roll-up with count and gross by currency, plus breakdowns by protocol/status. This distinguishes it from siblings like get_order or list_orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says filters are the same as list_orders, providing context on when to use it. However, it does not specify when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ordersA
Read-only

List this merchant's orders (what agents have paid you), newest first. Filter by status / protocol / currency / date.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO timestamp upper bound
fromNoISO timestamp lower bound
limitNomax rows (default 50, cap 200)
offsetNorows to skip
statusNoorder status (refunded/disputed surface Curless actions)
currencyNoe.g. USDC, EUR, USD
protocolNoacp | x402 | a2a | ucp | …

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that results are newest first, and that refunded/disputed statuses 'surface Curless actions', providing behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences. Core purpose is front-loaded: 'List this merchant's orders...'. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers filtering and ordering, but lacks details on return format (fields in each order) and pagination nuances despite limit/offset being present. Adequate but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. Description groups filters (status/protocol/currency/date) but adds little 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the merchant's orders, sorted newest first, and lists available filters (status, protocol, currency, date). It distinguishes from siblings like get_order (single order) and list_refund_requests (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use (list orders) and hints at filtering context but does not explicitly state when not to use or provide alternatives. Sibling tool names are present but not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_refund_requestsA
Read-only

Buyers' refund requests on your orders. Default lists status=requested (the queue awaiting your decision); pass status to filter, or status=all for the full history.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that it defaults to status=requested and allows filtering, which is consistent and provides useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, then default behavior and filtering. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with 1 optional parameter and no output schema, the description covers the core purpose, default behavior, and filtering. Could mention that it returns a list, but that's implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 1 parameter (status) with enum values but no description coverage (0%). Description adds meaning by explaining default is 'requested' and what 'all' does, partially compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists buyers' refund requests on orders, explicitly mentions default behavior (status=requested) and filtering options, distinguishing it from sibling action tools like approve_refund or reject_refund.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on default usage (status=requested for awaiting decisions) and how to filter (pass status or status=all for full history). Could briefly mention when not to use, but overall clear context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refund_orderA
Destructive

Directly refund one of your orders (no buyer request needed). Pass the order id (ord_…); optional partial amount + reason. Omit amount for a FULL refund. If you DO pass a partial amount, it is in the ORDER’S minor units — read the order first (get_order / list_orders) to see its currency and total, because the units differ by currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoPartial refund in the ORDER'S minor units — the SAME units as the order's `amount` field shown by get_order/list_orders. The scale depends on the order's currency: 2 decimals for fiat (USD/EUR: 50000 = 500.00) but 6 decimals for stablecoins (USDC/USDT/RLUSD: 50000 = 0.05). So the same number means different money in different currencies — always check the order's currency first. Omit entirely for a full refund; must not exceed the order's remaining refundable amount.
reasonNooptional reason, shown in the audit trail
orderIdYesord_… (from list_orders / get_order)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavioral context beyond annotations: notes no buyer request required, warns about amount unit differences by currency, and states the refund must not exceed remaining refundable amount. These details complement the destructiveHint annotation without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single paragraph, front-loaded with primary action, no redundant words. Every sentence adds essential information (how to use, unit warning, when to omit amount). Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers usage and warnings. It does not specify the response format or potential errors, but the main behavioral aspects (destructive nature, unit handling) are well addressed. Slight gap on success/error handling, but not critical for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the amount parameter's unit dependency on currency with concrete examples (fiat vs stablecoin), reinforcing the need to check the order first. This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool directly refunds an order without a buyer request, specifying the verb 'refund' and resource 'order'. This distinguishes it from siblings like approve_refund and reject_refund, which handle buyer-initiated requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to omit amount for full refund, and to read the order first to check currency. Provides guidance on parameters (orderId required, amount optional with warning about units). Implicitly contrasts with refund request tools by stating 'no buyer request needed'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reject_refundA

Reject a refund request (optional note). Pass the refund request id (rfr_…).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
refundRequestIdYesrfr_…

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate mutation but not destructive. Description adds no extra behavioral context beyond stating 'reject', which is already clear from the name. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no unnecessary words, directly addresses the core action and parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose and main parameter, but lacks details on effects (e.g., customer notification, inventory impact) and no output schema. Adequate for simple action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage 50%; description adds hint about ID format ('rfr_…') and labels note as optional, but does not provide additional semantics for note or error conditions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Reject a refund request' and specifies the required ID format 'rfr_…'. Differentiates from sibling 'approve_refund' by action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for rejecting refund requests, but no explicit guidance on when to use versus alternatives like 'approve_refund' or 'refund_order'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a distinct purpose: balance, single order, refund requests, approving/rejecting refunds, direct refunds, listing orders, and summary. No overlap; even the two refund actions are clearly separated by whether a buyer request exists.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case: get_balance, get_order, list_refund_requests, approve_refund, reject_refund, refund_order, list_orders, get_summary. The verbs (get, list, approve, reject, refund) are predictably used.

Tool Count5/5

With 8 tools, the server strikes an ideal balance: comprehensive enough to cover the merchant payment workflow (balance, orders, refunds, summary) without unnecessary bloat or missing essentials.

Completeness4/5

Core operations are covered: viewing balance, listing and getting orders, handling refunds (both direct and via requests), and a summary. Minor gap: no explicit order cancellation or update, but refunds effectively void orders. Still, a cancel_order tool could be missing.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server that allows Claude Desktop to query Monad testnet for MON token balances of accounts.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Demonstration MCP server for Claude Team integration, enabling querying of sample business data (orders, clients, products) and real-time currency exchange rates through natural language.
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for ClawVault - an AI agent payment security layer that enables Claude to request payments, check limits, and manage transactions with configurable rules.
    74
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/agentbankmcp/agentbank-merchant-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server