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

オープン
#8,218 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
38/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
typescript
領域
api, backend, payments

調査の方向性

Start by reading apps/sim/lib/internal/mcp/execute-tool.ts and tracing the mcp-tool-selector result path to see how result.output reaches the canvas. Identify where a payment_required envelope can be represented without raw passthrough. Done means a parsed challenge exposes price, pay_to, and scheme, requires operator or approved payer approval, and supports payment and retry.

索引モデルが issue の本文から書いたものです。

説明

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).

主要言語
TypeScript
スター
29.8k
フォーク
3.9k
平均マージ
1時間 44分
マージ済み PR(30日)
841

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

simstudioai/sim のほかの issue

simstudioai/sim の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。