Skip to main content
Glama

MCPayはAIエージェントとMCPサーバーの間に位置する。エージェントは、1つのサーバーに紐づく短命の支出トークン、固定のアクションリスト、正確な価格、予算、有効期限、ノンス範囲を受け取る。ゲートウェイはそのポリシーを検証し、ノンスをアトミックに取得して、アップストリームのツールを呼び出し、正常に配信された2xxの利用を永続的なアウトボックスに記録する。

ツールごとのサブスクリプションは不要。エージェント内にクリエイターのAPIキーは不要。浮動小数点の金額も不要。

ベータ版のステータス: このリポジトリは、クローズドで実際の金銭を扱わないベータ版を運営している。ウォレットのチャージはテスト用の台帳クレジットであり、Stripe入金、クリエイターへの支払い、KYC/AML、紛争処理、税務ワークフローはまだ含まれていない。

  1. エージェントが、予約済みのウォレット残高に裏付けられた支出セッションを作成する。

  2. MCPayが、正確なサーバー、アクション価格、予算、有効期限、ノンス範囲に署名する。

  3. ゲートウェイがトークンを検証し、ディスパッチ前にPostgreSQLでノンスを取得する。

  4. 配信された2xxレスポンスがローカルのbboltアウトボックスに入り、非同期で決済される。

このリポジトリには、Go API、ゲートウェイ、決済ワーカー、PostgreSQLマイグレーション、クリエイターダッシュボード、JavaScriptおよびPython SDK、ブラウザテスト、Docker Composeベータスタックが含まれている。実際の入金と支払いは意図的に無効化されている。

プロダクトツアー

コントロールプレーンには、予約済みのエージェント予算、クリエイター収益、有料呼び出し量、ローカル認可レイテンシ、最近の決済アクティビティが表示される。

スクリーンショットは固定のドキュメント用データセットを使用している。数値は本番メトリクスではない。

Related MCP server: MCP Gateway

MCPayが存在する理由

10個の有料ツールを呼び出すエージェントに、10個のサブスクリプション、10個の請求SDK、10個の長命シークレットは必要ない。クリエイターは、web_searchに5セントを請求する前に、予約ロジック、リプレイ保護、価格チェック、レシート保存、決済ワーカーを書く必要はないはずだ。

MCPayは、実行前に支出契約を明示する:

ポリシー

各支出セッションに組み込まれるもの

資金の送り先

1つのserver_idと環境

エージェントが呼び出せるもの

アクション名の許可リスト

各呼び出しのコスト

不変のaction -> price_minorスナップショット

最大エクスポージャー

予約済み予算と呼び出しごとの最大価格

リプレイ境界

分散アトミック取得を伴うノンス開始/終了範囲

有効期限

署名付き有効期限タイムスタンプとオンライン失効チェック

取得がアクティブなセッションと一致しない場合、ゲートウェイはアップストリームがリクエストを見る前に停止する。

比較

MCPay

APIキー+カスタム請求

中央請求プロキシ

ツールごとのサブスクリプション

エージェントが制限付き支出許可を得られる

はい

自分で作る

場合による

いいえ

正確な価格がセッションに署名される

はい

自分で作る

プロバイダー固有

いいえ

クロスゲートウェイのリプレイ保護

PostgreSQLアトミック取得

通常は欠落

プロバイダーによる

該当なし

ツールハンドラーが決済コードを所有する

いいえ

はい

部分的

はい

配信済み2xx利用がゲートウェイ再起動後も残る

bboltアウトボックス

自分で作る

プロバイダー所有

プロバイダー所有

セルフホスト型コントロールプレーン

はい

はい

通常はいいえ

いいえ

クリエイター間で1つのウォレット

設計されている

共通契約なし

プラットフォーム固有

いいえ

ソースを監査できる

はい

自分のコードのみ

通常はいいえ

通常はいいえ

チェックアウトは簡単な部分だ。MCPayは、制限付き認可、ホスト間の重複抑制、不変価格、失効順序、受理済み利用の永続的配信、リトライ安全な決済を処理する。

リクエストパス

sequenceDiagram
    participant A as Agent
    participant C as MCPay API
    participant G as MCPay Gateway
    participant P as PostgreSQL
    participant T as MCP Tool
    participant W as Settlement Worker

    A->>C: Create spend session
    C->>P: Reserve budget and store price snapshot
    C-->>A: Ed25519-signed spend token
    A->>G: tools/call + token + nonce
    G->>G: Verify issuer, server, action, price, expiry
    G->>P: Atomic nonce claim
    P-->>G: Active and unique
    G->>P: Mark nonce dispatched
    G->>T: Execute tool
    T-->>G: Result
    G-->>A: Result
    G->>G: Persist delivered 2xx usage in bbolt outbox
    G->>C: Upload usage batch
    C->>P: Insert idempotent usage record
    W->>P: Settle creator credit

コントロールプレーン呼び出しはディスパッチ前に行われる。なぜなら、オフライン専用のリプレイ保護では2台のゲートウェイマシンを調整できず、失効したセッションを停止できないからだ。署名チェックは依然としてローカルで行われるため、不正な形式やスコープ外のトークンがデータベースの取得に到達することはない。

セキュリティモデル

MCPayは署名付きJWTを「暗号化」とは呼ばない。実際には暗号化されていない。支出トークンは読み取り可能なクレームを持ち、Ed25519署名を使用するため、ゲートウェイは署名キーを保持せずに改ざんを検出できる。

境界

MCPayが行うこと

支出トークン

Ed25519署名。APIが秘密キーを保持し、ゲートウェイは公開キーのみを受け取る

ブラウザ認証

HttpOnlySameSite=Strictクッキー。SecureはHTTPSリクエストで設定される

パスワード保存

bcryptハッシュ。平文パスワードは決して保存しない

招待コードとセッショントークン

SHA-256ハッシュをPostgreSQLに保存

ゲートウェイ認証情報

HMAC-SHA-256署名、バージョン管理、1つのサーバーにスコープ

公開トランスポート

明示的なローカル開発モード以外ではHTTPS必須

内部Dockerトラフィック

CaddyとAPI間のプライベートCAとTLS

マネー状態

整数の最小単位、追記専用の台帳イベント、直列化可能なトランザクション、決定論的冪等キー

リプレイ制御

2フェーズのPostgreSQLノンス取得。短いディスパッチ前リースの後、再利用不可のディスパッチ済み状態

利用配信

配信済み2xx呼び出しは、少なくとも1回のアップロード、冪等な取り込み、冪等な決済を備えた境界付きbboltアウトボックスに入る

HTTP転送

リダイレクトをブロック、ホップバイホップヘッダーを削除、転送ヘッダーを除去、リクエストサイズと時間制限を適用

エージェントトークン注入

HTTPSと明示的なゲートウェイオリジン許可リスト。支出ヘッダーは任意のURLに追加されない

ここでの保存時暗号化の意味

MCPayは台帳行にアプリケーションレベルのフィールド暗号化を追加しない。PostgreSQL認証情報、署名キー、ゲートウェイシークレット、バックアップはシークレットマネージャーと暗号化ストレージに属する。マネージドPostgreSQLまたは暗号化されたホストボリュームが、データベースファイルを保存時に保護する必要がある。この区別は重要だ。「すべてが暗号化されている」と主張すると、実際の信頼境界が隠れてしまうからだ。

ベータ版デプロイでは、PostgreSQLとワーカーをプライベートネットワークに置き、公開TLSをCaddyで終端し、シークレットをランタイムでマウントし、マイグレーション前にバックアップを取り、deploy/.env.betaを決してコミットしないこと。

ローカルで実行する

要件: Compose v2を備えたDocker Engine、キー生成用のGo 1.25+、利用可能なメモリ4 GB。Node.js 24はダッシュボードビルドコンテナ内で実行される。

cp deploy/.env.beta.example deploy/.env.beta
go run ./cmd/mcpay-keygen

生成されたEd25519値をdeploy/.env.betaに貼り付け、すべてのreplace-*値を置き換えてから、スタックを起動する:

docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml config
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml build
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml up -d
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml ps

http://localhost:8080を開く。composeスタックは、PostgreSQL、マイグレーション、API、ワーカー、ダッシュボード、Caddy、内部TLSを起動する。テストチャージは仮想クレジットのまま。

実行中のスタックを確認する:

MCPAY_BETA_URL=http://localhost:8080 ./scripts/verify-central-beta.sh

PowerShell:

./scripts/verify-central-beta.ps1 -BaseUrl http://localhost:8080

デプロイノート、バックアップ、DNS、Vercel/Supabaseオプションは、docs/central-beta-runbook.mddocs/beta-deployment.mdにある。

MCPサーバーを接続する

Creator Studioでサーバーとアクションを作成し、サーバースコープのゲートウェイ認証情報を発行してから、MCPプロセスの隣でリポジトリからゲートウェイを実行する:

go run ./cmd/mcpay-gateway \
  --target https://your-mcp-server.example \
  --mcp-path /mcp \
  --server-id srv_example \
  --environment beta \
  --token-issuer mcpay.beta \
  --public-key "$MCPAY_PUBLIC_KEY" \
  --control-plane-api https://api.example/v1/gateway/servers/srv_example \
  --nonce-claim-api https://api.example/v1/gateway/nonces/claim \
  --usage-api https://api.example/v1/usage-records \
  --usage-api-token "$MCPAY_GATEWAY_API_TOKEN" \
  --state-file ./mcpay-gateway.db

有料リクエストは2つのヘッダーを運ぶ:

Authorization: Bearer <spend-token>
X-MCPay-Nonce: <nonce-within-the-signed-range>

ゲートウェイは、リクエストをアップストリームに転送する前に両方のヘッダーを削除する。

エージェントを接続する

MCPayAgentClientは短命セッションを作成し、許可リストに登録されたHTTPSゲートウェイオリジンにのみ支払いヘッダーを注入する:

import {
  FileAgentSessionCreationStore,
  MCPayAgentClient,
} from "@mcpay/sdk-js";

const paid = new MCPayAgentClient({
  apiBaseUrl: "https://pay.example.com/api/mcpay",
  accessToken: process.env.MCPAY_ACCESS_TOKEN!,
  walletId: process.env.MCPAY_WALLET_ID!,
  serverId: process.env.MCPAY_SERVER_ID!,
  reservedBudget: 50,
  gatewayOrigins: ["https://tools.example.com"],
  sessionCreationStore: new FileAgentSessionCreationStore(
    "./mcpay-agent-sessions.json",
  ),
});

const response = await paid.fetch("https://tools.example.com/mcp", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "tools/call",
    params: {
      name: "web_search",
      arguments: { query: "payment rails for MCP" },
    },
  }),
});

初期化とツール検出は、支出ヘッダーなしで通過する。セッション作成は冪等キーを使用するため、レスポンスが失われても予算が2回予約されることはない。

直接SDKラッパー

JavaScript および Python ラッパーは、開発用およびプライベート統合用に存在します。本番モードは揮発性の使用を拒否します。永続ゲートウェイは、プロセス再起動をまたいで nonce と使用状況の状態を保持するため、推奨されるデプロイパスであり続けます。

import { MCPayClient } from "@mcpay/sdk-js";

const mcpay = new MCPayClient({
  publicKey: process.env.MCPAY_PUBLIC_KEY!,
  issuer: process.env.MCPAY_TOKEN_ISSUER!,
  serverId: process.env.MCPAY_SERVER_ID!,
  environment: "development",
  allowVolatileUsage: true,
});

export const paidSearch = mcpay.tool({
  name: "web_search",
  priceMinor: 5,
  handler: async (query: string) => search(query),
});
import os

from mcpay import MCPayClient

mcpay = MCPayClient(
    public_key=os.environ["MCPAY_PUBLIC_KEY"],
    issuer=os.environ["MCPAY_TOKEN_ISSUER"],
    server_id=os.environ["MCPAY_SERVER_ID"],
    environment="development",
    allow_volatile_usage=True,
)

@mcpay.tool(name="web_search", price_minor=5)
async def search(query: str):
    return await run_search(query)

検証

メインブランチは、Go、PostgreSQL 統合、マイグレーション、両 SDK、ブラウザテスト、パッケージビルド、依存関係監査、および Docker Compose 構成をチェックします。

go test ./...
go test -race ./...
go vet ./...
go build ./cmd/...
npm ci
npm audit --audit-level=high
npm run build
npm run test
python -m pip install build
python -m build packages/sdk-python
python -m unittest discover -s packages/sdk-python/tests

PostgreSQL テストでは、MCPAY_TEST_DATABASE_URL を破棄可能なマイグレーション済みデータベースに向けてください。テストはアプリケーションテーブルを切り詰めます。本番データベースは絶対に使用しないでください。

ループバック認可ベンチマークを実行するには:

go run ./cmd/mcpay-benchmark --samples 1000 --warmup 100

お使いのマシンで、raw、ローカル SDK、ゲートウェイの p50/p95/p99 を報告します。このベンチマークは、セッションセットアップ、中央台帳書き込み、非同期使用状況アップロードを除外しているため、本番 SLA ではありません。

現在提供されているもの

ベータ版で利用可能

実際の資金投入前にまだ必要なもの

招待制アカウントと仮想 USD ウォレット

Stripe または銀行振込の統合

不変の価格スナップショットを備えたサーバー/アクションカタログ

クリエイターへの支払いと支払い調整

署名付き支出セッションとオンライン失効

KYC/AML、制裁、紛争、税務処理

ゲートウェイホスト間での分散 nonce クレーム

kid ロールアウト手順による署名鍵のローテーション

正常に配信された 2xx 使用状況のための永続アウトボックスと再試行安全な決済

本番監視、ページング、バックアップ訓練、インシデントランブック

クリエイター領収書、分析、テスト用トップアップ

各ローンチ管轄区域における法務レビュー

MCPay は、テストクレジットによる管理されたベータ版の準備ができています。顧客資金を保持する準備はまだできていません。

リポジトリマップ

パス

目的

apps/api

HTTP コントロールプレーンハンドラーと認証

apps/dashboard

クリエイターおよびエージェント予算ダッシュボード

cmd/mcpay-api

永続 Go API プロセス

cmd/mcpay-gateway

有料 MCP および HTTP リバースプロキシ

cmd/mcpay-worker

決済、再試行、調整、有効期限ループ

internal/controlplane

PostgreSQL マネーおよび使用状況トランザクション

internal/gateway

認可プロキシと bbolt 状態

internal/sessions

支出クレームと Ed25519 トークンコード

packages/sdk-js

エージェントクライアントと JavaScript 有料ツールラッパー

packages/sdk-python

Python 非同期有料ツールラッパー

migrations

順序付けられた PostgreSQL スキーマ変更

ライセンス

MCPay は Business Source License 1.1 を使用しています。BSL は OSI 承認のオープンソースライセンスではありませんが、誰もがソースにアクセスでき、コピー、変更、再配布、および非本番使用を許可します。

MCPay Additional Use Grant は、ユーザーまたは組織の過去 12 か月間の総売上高が $100,000 USD 以下の場合、社内本番使用を許可します。第三者向けのホスティング、マネージド、組み込み、またはホワイトラベルの MCPay サービスは許可されません。その許可の範囲外での本番使用には商用ライセンスが必要です。商用条件をリクエストするには、公式リポジトリで issue を開いてください。

2030 年 8 月 13 日に、このバージョンは Apache License 2.0 に変更されます。BSL はまた、バージョンの最初の公開 BSL 配布から 4 周年の時点で、その日付がより早く到来する場合、オープンソースの Change License を適用します。

拘束力のある条件については LICENSE をお読みください。ダッシュボードは apps/dashboard/LICENSE の下で MIT ライセンスにより別途配布され、上流の作者と MCPay の変更に対する帰属表示が含まれます。実際の資金投入または資金調達デューデリジェンスの前に、弁護士に BSL パラメータをレビューしてもらってください。

セキュリティ研究は歓迎します。ソースへのアクセスによりレビューが可能になりますが、脆弱性の不存在を証明するものではなく、BSL はセキュリティ保証なしでソフトウェアを提供します。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

1Releases (12mo)
Commit activity

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

  • MCP Gateway: wrap any MCP server with cold-start retries, uptime SLA, and per-execution MPP billing.

  • Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.

  • nexusOAuth

    Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows

  • Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.

View all MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    A powerful gateway for the Model Context Protocol (MCP) that unifies AI toolchains by federating multiple MCP servers, wrapping REST APIs as MCP tools, and supporting multiple transport methods with an admin dashboard.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready unified entry point for AI agents that implements the Model Context Protocol (MCP). It provides a secure gateway with rate limiting, authentication, and observability for managing and proxying requests to multiple downstream APIs.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Security, cost, and health governance proxy for MCP infrastructure. Enforces YAML-configurable security policies (blocklists, rate limits, token budgets), tracks real token costs via tiktoken, monitors server health with live JSON-RPC probes. Features OAuth 2.1/OIDC with RBAC, web dashboard, payload normalization, semantic shell AST analysis, mTLS, and a formal STRIDE threat model.
    4
    193
    3
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Bridges stdio Model Context Protocol (MCP) servers to MCP Streamable HTTP behind a single gateway, enabling multi-tenant, multi-user deployment with per-tenant environment variables via HTTP headers.

View all related MCP servers

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/yiaany/MCPay'

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