Skip to content

Feature request: recognise pay-per-call x402 results from MCP tools (pending payment response) #8218

Description

@dhyabi2

Is your feature request related to a problem? Please describe.

Sim wires external MCP servers into canvas workflows and executes their tools. In execute-tool.ts (apps/sim/lib/internal/mcp/execute-tool.ts), a successful tool call returns { success: true, data: { success: true, output: result.output } } — the MCP server's tool output is passed straight through to the workflow.

A pay-per-call x402 MCP server is a normal MCP server that answers a tool call with a pending-payment result instead of data: it returns HTTP 200 with result content of the form {"status":"payment_required", "payment_challenge": {"price_xno": 0.0001, ...}}. When a Sim workflow calls such a tool through mcp-tool-selector, result.output is that JSON blob, and the canvas shows raw JSON instead of a confirm-and-pay step. This has been verified against a live pay-per-call merchant MCP (Vend API Merchant at extract.paypercall.dev/mcp): initialize returns 200 with correct tools, but tools/call returns 200 whose result content is a payment_required envelope.

This is the one missing client-side behaviour for zero-signup pay-per-call tools to be usable from a Sim workflow — they already work at the MCP protocol level.

Describe the solution you'd like

In the MCP tool-call path, detect a payment_required / x402 payment_challenge result structurally (not as raw JSON passthrough) and:

  1. surface a per-call confirmable payment step — price, pay_to, scheme — so the operator can pay and retry from the canvas/UI, and/or
  2. support an optional per-credential "payer" config so admin-added pay-per-call tools settle automatically under approval control.

Security invariant: no money moves unless the challenge parses AND the operator (or a configured, approved payer) approves.

Describe alternatives you've considered

  • Keep raw JSON passthrough for paid tools. Works, but a workflow that dumps payment_challenge JSON to the user is not usable for pay-per-call tools.
  • Build a separate x402 proxy outside Sim. Adds ops overhead and defeats the purpose of a visual MCP workflow.
  • Use a custom extraction tool that pre-encodes the payment. Very platform-specific and doesn't leverage the growing x402 catalogue.

Additional context

A working reference:

  • Vend API Merchant MCP manifest: https://extract.paypercall.dev/.well-known/mcp
  • x402 settlement manifest: https://extract.paypercall.dev/.well-known/x402
  • 9 MCP tools (web extract, link check, geoip, web search, youtube transcript, etc.), single calls ~0.0001 XNO, no signup, no API keys, per-call settlement in Nano (XNO) via nano:mainnet.
  • A bare probe returns 402 with the full challenge: curl -i https://extract.paypercall.dev/api/v1/extract?url=https://example.com

This is a first — Sim had zero x402 / pay-per-call coverage before this issue (GitHub search confirmed).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions