<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.38 (Ruby 3.2.11) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3339 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
<!ENTITY RFC5246 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY RFC6455 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6455.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC8446 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC8785 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-payment-transport-mcp-00" category="info" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="Payment JSON-RPC &amp; MCP Transport">Payment Authentication Scheme: JSON-RPC &amp; MCP Transport</title>

    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization>Tempo Labs</organization>
      <address>
        <email>jake@tempo.xyz</email>
      </address>
    </author>
    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization>Tempo Labs</organization>
      <address>
        <email>brendan@tempo.xyz</email>
      </address>
    </author>

    <date year="2026" month="May" day="18"/>

    
    
    

    <abstract>


<?line 46?>

<t>This document defines how the Payment HTTP Authentication Scheme
operates over JSON-RPC 2.0 transports. It specifies the mapping
of payment challenges to JSON-RPC error responses using
implementation-defined error codes, credential transmission via
metadata fields, receipt delivery in successful responses, and
error handling conventions. This specification applies to any
transport carrying JSON-RPC 2.0 messages, including WebSocket,
HTTP, stdio, and protocol frameworks such as the Model Context
Protocol (MCP).</t>



    </abstract>



  </front>

  <middle>


<?line 58?>

<section anchor="introduction"><name>Introduction</name>

<t>JSON-RPC 2.0 <xref target="JSON-RPC"/> is a stateless, lightweight remote
procedure call protocol using JSON <xref target="RFC8259"/>. Many modern
protocols layer JSON-RPC over various transports including HTTP,
WebSocket <xref target="RFC6455"/>, and stdio. Protocol frameworks such as the
Model Context Protocol (MCP) <xref target="MCP"/> also use JSON-RPC 2.0 as
their message format. This document defines how the Payment HTTP
Authentication Scheme <xref target="I-D.httpauth-payment"/> operates within
JSON-RPC 2.0 messages, independent of the underlying transport.</t>

<t>This specification defines:</t>

<t><list style="symbols">
  <t>Error codes for payment signaling</t>
  <t>Challenge structure in JSON-RPC error responses</t>
  <t>Credential transmission via <spanx style="verb">_meta</spanx> metadata fields</t>
  <t>Receipt delivery via <spanx style="verb">_meta</spanx> metadata fields</t>
  <t>Error handling conventions</t>
  <t>Notification behavior</t>
  <t>Capability advertisement</t>
</list></t>

<section anchor="applicability"><name>Applicability</name>

<t>This specification applies to any system that exchanges JSON-RPC
2.0 messages, including but not limited to:</t>

<t><list style="symbols">
  <t><strong>WebSocket</strong>: JSON-RPC over persistent <spanx style="verb">wss://</spanx> connections
for real-time APIs, streaming services, and subscriptions.</t>
  <t><strong>HTTP</strong>: JSON-RPC 2.0 over standard HTTP request-response
exchanges.</t>
  <t><strong>stdio</strong>: JSON-RPC 2.0 over standard input/output streams
for local process communication.</t>
</list></t>

<t>This specification also defines MCP-specific conventions for
the Model Context Protocol <xref target="MCP"/>, which uses JSON-RPC 2.0
for tool invocations (<spanx style="verb">tools/call</spanx>), resource access
(<spanx style="verb">resources/read</spanx>), and prompt retrieval (<spanx style="verb">prompts/get</spanx>).</t>

<t>Transport-specific security requirements (e.g., TLS for
WebSocket, process isolation for stdio) are addressed in
<xref target="transport-security"/>.</t>

</section>
<section anchor="design-goals"><name>Design Goals</name>

<t><list style="numbers" type="1">
  <t><strong>Native JSON</strong>: Use JSON objects directly rather than base64url
encoding, leveraging JSON-RPC's native capabilities.</t>
  <t><strong>Transport Independent</strong>: Define payment semantics at the
JSON-RPC layer, applicable to any transport carrying JSON-RPC
messages.</t>
  <t><strong>Minimal Overhead</strong>: Add payment data only when needed via
the <spanx style="verb">_meta</spanx> extension mechanism.</t>
  <t><strong>Multiple Options</strong>: Support servers offering multiple payment
methods in a single challenge.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>This document uses terminology from <xref target="I-D.httpauth-payment"/>:</t>

<dl>
  <dt>Challenge</dt>
  <dd>
    <t>Payment requirements communicated by the server.</t>
  </dd>
  <dt>Credential</dt>
  <dd>
    <t>Payment authorization data sent by the client.</t>
  </dd>
  <dt>Receipt</dt>
  <dd>
    <t>Server acknowledgment of successful payment.</t>
  </dd>
</dl>

</section>
<section anchor="protocol-overview"><name>Protocol Overview</name>

<t>The payment flow follows three phases within JSON-RPC message
exchanges:</t>

<figure><artwork><![CDATA[
Client                                                 Server
   │                                                      │
   │  (1) JSON-RPC Request                                │
   │      {method: "...", params: {...}}                   │
   ├─────────────────────────────────────────────────────>│
   │                                                      │
   │  (2) JSON-RPC Error                                  │
   │      {code: -32042, data: {challenges: [...]}}       │
   │<─────────────────────────────────────────────────────┤
   │                                                      │
   │  (3) Client fulfills challenge                       │
   │                                                      │
   │  (4) JSON-RPC Request                                │
   │      {method: "...",                                 │
   │       _meta: {credential: {...}}}                    │
   ├─────────────────────────────────────────────────────>│
   │                                                      │
   │  (5) JSON-RPC Result                                 │
   │      {result: {...}, _meta: {receipt: {...}}}         │
   │<─────────────────────────────────────────────────────┤
]]></artwork></figure>

</section>
<section anchor="capability-advertisement"><name>Capability Advertisement</name>

<t>Servers and clients <bcp14>SHOULD</bcp14> advertise supported payment methods
and intents before payment flows begin. The capability object
<bcp14>SHOULD</bcp14> contain:</t>

<t><strong><spanx style="verb">methods</spanx></strong> (<bcp14>REQUIRED</bcp14>): Object mapping payment method
  identifiers (as registered in the IANA HTTP Payment Methods
  registry) to their configuration. Each method object <bcp14>MUST</bcp14>
  contain an <spanx style="verb">intents</spanx> array listing the supported payment
  intent types (as registered in the IANA HTTP Payment Intents
  registry) for that method.</t>

<t>Example capability object:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "methods": {
    "tempo": { "intents": ["charge"] },
    "stripe": { "intents": ["charge"] }
  }
}
]]></sourcecode></figure>

<t>The mechanism for advertising capabilities depends on the
transport:</t>

<t><list style="symbols">
  <t><strong>WebSocket</strong>: Servers <bcp14>MAY</bcp14> send a <spanx style="verb">payment.capabilities</spanx>
JSON-RPC notification after connection establishment.</t>
  <t><strong>MCP</strong>: See <xref target="mcp-capability-advertisement"/>.</t>
</list></t>

<t>Clients <bcp14>MAY</bcp14> use capability information to determine
compatibility before invoking paid methods. Clients <bcp14>MUST NOT</bcp14>
rely solely on capability advertisement to determine payment
support; malicious servers could claim capabilities they don't
properly implement. Clients <bcp14>SHOULD</bcp14> validate challenge structure
before fulfilling payment.</t>

<section anchor="mcp-capability-advertisement"><name>MCP Capability Advertisement</name>

<t>For MCP specifically, servers <bcp14>SHOULD</bcp14> advertise payment support
in the <spanx style="verb">InitializeResult</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "protocolVersion": "2025-11-25",
  "capabilities": {
    "tools": {},
    "resources": {},
    "experimental": {
      "payment": {
        "methods": {
          "tempo": { "intents": ["charge"] },
          "stripe": { "intents": ["charge"] }
        }
      }
    }
  },
  "serverInfo": {
    "name": "example-server",
    "version": "1.0.0"
  }
}
]]></sourcecode></figure>

<t>Clients <bcp14>SHOULD</bcp14> advertise in the <spanx style="verb">InitializeRequest</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "protocolVersion": "2025-11-25",
  "capabilities": {
    "experimental": {
      "payment": {
        "methods": {
          "tempo": { "intents": ["charge"] }
        }
      }
    }
  },
  "clientInfo": {
    "name": "example-client",
    "version": "1.0.0"
  }
}
]]></sourcecode></figure>

<t>Servers <bcp14>MAY</bcp14> use client capabilities to filter which payment
options to offer in challenges.</t>

</section>
</section>
<section anchor="payment-challenge"><name>Payment Challenge</name>

<section anchor="signaling-payment-required"><name>Signaling Payment Required</name>

<t>When a JSON-RPC method requires payment, the server <bcp14>MUST</bcp14> respond
with a JSON-RPC error using code <spanx style="verb">-32042</spanx> (Payment Required).
This code is within the JSON-RPC implementation-defined server
error range (-32000 to -32099) per <xref target="JSON-RPC"/>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [
        {
          "id": "qB3wErTyU7iOpAsD9fGhJk",
          "realm": "api.example.com",
          "method": "tempo",
          "intent": "charge",
          "request": {
            "amount": "1000",
            "currency": "usd",
            "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
          },
          "expires": "2025-01-15T12:05:00Z",
          "description": "API call fee"
        }
      ],
      "problem": {
        "type": "https://paymentauth.org/problems/payment-required",
        "title": "Payment Required",
        "status": 402,
        "detail": "Payment required for access."
      }
    }
  }
}
]]></sourcecode></figure>

<t>The <spanx style="verb">error.data.httpStatus</spanx> field <bcp14>SHOULD</bcp14> be included with value
<spanx style="verb">402</spanx> to indicate the corresponding HTTP status code for
transports that bridge to HTTP (e.g., MCP Streamable HTTP).</t>

</section>
<section anchor="challenge-structure"><name>Challenge Structure</name>

<t>The <spanx style="verb">error.data</spanx> object <bcp14>MUST</bcp14> contain:</t>

<t><strong><spanx style="verb">challenges</spanx></strong> (<bcp14>REQUIRED</bcp14>): Array of one or more challenge objects.</t>

<t><strong><spanx style="verb">problem</spanx></strong> (<bcp14>OPTIONAL</bcp14>): An RFC 9457 Problem Details object providing
  additional error context. When present, contains <spanx style="verb">type</spanx>, <spanx style="verb">title</spanx>,
  <spanx style="verb">status</spanx>, <spanx style="verb">detail</spanx>, and optionally <spanx style="verb">challengeId</spanx>.</t>

<t>Each challenge object <bcp14>MUST</bcp14> contain:</t>

<t><strong><spanx style="verb">id</spanx></strong> (<bcp14>REQUIRED</bcp14>): Unique challenge identifier. Servers <bcp14>MUST</bcp14>
  cryptographically bind this value to at minimum the following
  parameters: <spanx style="verb">realm</spanx>, <spanx style="verb">method</spanx>, <spanx style="verb">intent</spanx>, <spanx style="verb">request</spanx> (canonical hash),
  and <spanx style="verb">expires</spanx>. Clients <bcp14>MUST</bcp14> include this value unchanged in the
  credential.</t>

<t><strong><spanx style="verb">realm</spanx></strong> (<bcp14>REQUIRED</bcp14>): Protection space identifier defining the scope
  of the payment requirement.</t>

<t><strong><spanx style="verb">method</spanx></strong> (<bcp14>REQUIRED</bcp14>): Payment method identifier as registered in
  the IANA HTTP Payment Methods registry.</t>

<t><strong><spanx style="verb">intent</spanx></strong> (<bcp14>REQUIRED</bcp14>): Payment intent type as registered in the
  IANA HTTP Payment Intents registry.</t>

<t><strong><spanx style="verb">request</spanx></strong> (<bcp14>REQUIRED</bcp14>): Method-specific payment request data
  as a native JSON object. Servers <bcp14>MUST NOT</bcp14> base64url-encode the
  request when using JSON-RPC transport. For challenge binding
  and challenge ID verification, both parties <bcp14>MUST</bcp14> canonicalize
  <spanx style="verb">request</spanx> using JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/>
  and hash the canonicalized bytes. The schema is defined by the
  payment method specification.</t>

<t>Each challenge object <bcp14>MAY</bcp14> contain:</t>

<t><strong><spanx style="verb">expires</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Timestamp in <xref target="RFC3339"/> format after which
  the challenge is no longer valid. Clients <bcp14>SHOULD NOT</bcp14> attempt to
  fulfill challenges past their expiry. If absent, servers define the
  validity period.</t>

<t><strong><spanx style="verb">description</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Human-readable description of what the
  payment is for.</t>

</section>
<section anchor="multiple-payment-options"><name>Multiple Payment Options</name>

<t>When multiple challenges are present, they represent <strong>alternative</strong>
payment options. Clients <bcp14>MUST</bcp14> select exactly one challenge to fulfill.
Servers <bcp14>MUST NOT</bcp14> require multiple simultaneous payments via this
mechanism.</t>

<t>Servers <bcp14>MAY</bcp14> offer multiple payment options by including multiple
challenge objects in the <spanx style="verb">challenges</spanx> array:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [
        {
          "id": "pT7yHnKmQ2wErXsZ5vCbNl",
          "realm": "api.example.com",
          "method": "tempo",
          "intent": "charge",
          "request": {
            "amount": "1000",
            "currency": "usd"
          }
        },
        {
          "id": "mF8uJkLpO3qRtYsA6wDcVb",
          "realm": "api.example.com",
          "method": "stripe",
          "intent": "charge",
          "request": {
            "amount": "1000",
            "currency": "usd"
          }
        }
      ]
    }
  }
}
]]></sourcecode></figure>

<t>Clients <bcp14>SHOULD</bcp14> select one challenge based on their capabilities and
user preferences. Clients <bcp14>MUST</bcp14> send only one credential corresponding
to a single selected challenge.</t>

</section>
</section>
<section anchor="payment-credential"><name>Payment Credential</name>

<section anchor="metadata-placement"><name>Metadata Placement</name>

<t>This specification defines two placement strategies for the
<spanx style="verb">_meta</spanx> field, depending on the protocol:</t>

<t><strong>Root-level <spanx style="verb">_meta</spanx></strong> (Generic JSON-RPC): The <spanx style="verb">_meta</spanx> field
  is placed at the root of the JSON-RPC message object. This
  approach works with any JSON-RPC method regardless of whether
  <spanx style="verb">params</spanx> is an object or an array:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "eth_getBlockByNumber",
  "params": ["latest", false],
  "_meta": {
    "org.paymentauth/credential": { ... }
  }
}
]]></sourcecode></figure>

<t><strong>Nested <spanx style="verb">_meta</spanx></strong> (MCP): The <spanx style="verb">_meta</spanx> field is placed inside
  <spanx style="verb">params</spanx> (for requests) or <spanx style="verb">result</spanx> (for responses), per MCP
  conventions where <spanx style="verb">params</spanx> is always an object:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "expensive-api",
    "_meta": {
      "org.paymentauth/credential": { ... }
    }
  }
}
]]></sourcecode></figure>

<t>Servers <bcp14>MUST</bcp14> check both locations for <spanx style="verb">_meta</spanx> and <bcp14>MUST NOT</bcp14>
require clients to use a specific placement. Servers <bcp14>MUST</bcp14>
ignore <spanx style="verb">org.paymentauth/credential</spanx> on methods that do not
require payment.</t>

</section>
<section anchor="transmitting-payment-data"><name>Transmitting Payment Data</name>

<t>Clients send payment credentials using the <spanx style="verb">_meta</spanx> field with
key <spanx style="verb">org.paymentauth/credential</spanx>. The key uses reverse-DNS
naming to avoid collisions with other extensions:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "eth_getBlockByNumber",
  "params": ["latest", false],
  "_meta": {
    "org.paymentauth/credential": {
      "challenge": {
        "id": "qB3wErTyU7iOpAsD9fGhJk",
        "realm": "api.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {
          "amount": "1000",
          "currency": "usd",
          "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
        },
        "expires": "2025-01-15T12:05:00Z"
      },
      "payload": {
        "signature": "0x1b2c3d4e5f..."
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="credential-structure"><name>Credential Structure</name>

<t>The <spanx style="verb">org.paymentauth/credential</spanx> object <bcp14>MUST</bcp14> contain:</t>

<t><strong><spanx style="verb">challenge</spanx></strong> (<bcp14>REQUIRED</bcp14>): The complete challenge object from the
  server's <spanx style="verb">-32042</spanx> error response. Clients <bcp14>MUST</bcp14> echo the challenge
  unchanged.</t>

<t><strong><spanx style="verb">payload</spanx></strong> (<bcp14>REQUIRED</bcp14>): Method-specific payment proof as a JSON
  object. The schema is defined by the payment method specification.</t>

<t>The credential object <bcp14>MAY</bcp14> contain:</t>

<t><strong><spanx style="verb">source</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Identifier of the payment source (e.g., a
  DID or address).</t>

</section>
</section>
<section anchor="payment-receipt"><name>Payment Receipt</name>

<section anchor="successful-payment-response"><name>Successful Payment Response</name>

<t>After successful payment verification and settlement, servers
<bcp14>MUST</bcp14> include a receipt using <spanx style="verb">_meta</spanx> with key
<spanx style="verb">org.paymentauth/receipt</spanx>. The <spanx style="verb">_meta</spanx> field placement follows
the same rules as <xref target="metadata-placement"/>: root-level for generic
JSON-RPC, nested in <spanx style="verb">result</spanx> for MCP.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "number": "0x1348c9",
    "hash": "0x7736fab79e05dc611604d22470dadad2..."
  },
  "_meta": {
    "org.paymentauth/receipt": {
      "status": "success",
      "method": "tempo",
      "timestamp": "2025-01-15T12:00:30Z",
      "reference": "tx_abc123...",
      "challengeId": "qB3wErTyU7iOpAsD9fGhJk"
    }
  }
}
]]></sourcecode></figure>

<t>Servers <bcp14>MUST</bcp14> return <spanx style="verb">org.paymentauth/receipt</spanx> on every successful
response to a paid request. Servers <bcp14>MUST NOT</bcp14> return receipts for
unpaid requests.</t>

</section>
<section anchor="receipt-structure"><name>Receipt Structure</name>

<t>The <spanx style="verb">org.paymentauth/receipt</spanx> object <bcp14>MUST</bcp14> contain:</t>

<t><strong><spanx style="verb">status</spanx></strong> (<bcp14>REQUIRED</bcp14>): Settlement status. <bcp14>MUST</bcp14> be <spanx style="verb">"success"</spanx> for
  successful payments.</t>

<t><strong><spanx style="verb">method</spanx></strong> (<bcp14>REQUIRED</bcp14>): Payment method that was used.</t>

<t><strong><spanx style="verb">timestamp</spanx></strong> (<bcp14>REQUIRED</bcp14>): <xref target="RFC3339"/> timestamp of settlement.</t>

<t><strong><spanx style="verb">challengeId</spanx></strong> (<bcp14>REQUIRED</bcp14>): The <spanx style="verb">id</spanx> from the fulfilled challenge.</t>

<t>The receipt object <bcp14>MAY</bcp14> contain:</t>

<t><strong><spanx style="verb">reference</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Method-specific settlement reference
  (e.g., transaction hash, invoice ID).</t>

</section>
</section>
<section anchor="mcp-covered-operations"><name>MCP Covered Operations</name>

<t>The following MCP operations support payment flows.</t>

<section anchor="tool-calls"><name>Tool Calls</name>

<t>Tool invocations via <spanx style="verb">tools/call</spanx> <bcp14>MAY</bcp14> require payment:</t>

<t><strong>Challenge:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "premium-analysis"
  }
}
]]></sourcecode></figure>

<t><strong>Response:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "tool-pay-123",
        "realm": "tools.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {"amount": "500", "currency": "usd"}
      }]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="resource-access"><name>Resource Access</name>

<t>Resource reads via <spanx style="verb">resources/read</spanx> <bcp14>MAY</bcp14> require payment:</t>

<t><strong>Challenge:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "data://premium/market-data"
  }
}
]]></sourcecode></figure>

<t><strong>Response:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "resource-pay-456",
        "realm": "data.example.com",
        "method": "stripe",
        "intent": "charge",
        "request": {"amount": "100", "currency": "usd"}
      }]
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="prompt-retrieval"><name>Prompt Retrieval</name>

<t>Prompt retrieval via <spanx style="verb">prompts/get</spanx> <bcp14>MAY</bcp14> require payment:</t>

<t><strong>Response:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "prompt-pay-789",
        "realm": "prompts.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {"amount": "50", "currency": "usd"}
      }]
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="error-handling"><name>Error Handling</name>

<section anchor="error-code-mapping"><name>Error Code Mapping</name>

<t>Servers <bcp14>MUST</bcp14> map payment errors to JSON-RPC error codes within the
server error range (-32000 to -32099) per <xref target="JSON-RPC"/>:</t>

<texttable>
      <ttcol align='left'>Condition</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Payment required</c>
      <c>-32042</c>
      <c>Payment challenge in <spanx style="verb">error.data</spanx></c>
      <c>Payment verification failed</c>
      <c>-32043</c>
      <c>Fresh challenge + failure reason</c>
      <c>Malformed credential</c>
      <c>-32602</c>
      <c>Invalid params (bad JSON structure)</c>
      <c>Internal payment error</c>
      <c>-32603</c>
      <c>Payment processor failure</c>
</texttable>

<t>Note: <spanx style="verb">-32700</spanx> (Parse error) applies only when the entire JSON-RPC
message is unparseable, not for malformed <spanx style="verb">_meta</spanx> subfields. Use
<spanx style="verb">-32602</spanx> for credential structure errors.</t>

</section>
<section anchor="payment-verification-failure"><name>Payment Verification Failure</name>

<t>When payment verification fails, servers <bcp14>MUST</bcp14> return code <spanx style="verb">-32043</spanx>
with a fresh challenge and failure details:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "error": {
    "code": -32043,
    "message": "Payment Verification Failed",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "retry-challenge-abc",
        "realm": "api.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {"amount": "1000", "currency": "usd"}
      }],
      "failure": {
        "reason": "signature-invalid",
        "detail": "Signature verification failed"
      }
    }
  }
}
]]></sourcecode></figure>

<t>On verification failure, servers <bcp14>MAY</bcp14> return the same challenge if it
remains valid, or issue a fresh challenge. Clients <bcp14>SHOULD</bcp14> treat any
<spanx style="verb">-32043</spanx> response as requiring a new payment attempt.</t>

<t>The <spanx style="verb">failure</spanx> object <bcp14>MAY</bcp14> contain:</t>

<t><strong><spanx style="verb">reason</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Machine-readable failure code.</t>

<t><strong><spanx style="verb">detail</spanx></strong> (<bcp14>OPTIONAL</bcp14>): Human-readable failure description.</t>

</section>
<section anchor="protocol-errors"><name>Protocol Errors</name>

<t>Technical errors use standard JSON-RPC error codes:</t>

<t><strong>Invalid Params (-32602):</strong></t>

<t>Used for malformed credentials or missing required fields:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": {
      "detail": "Missing required field: challenge.id"
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="notifications"><name>Notifications</name>

<t>JSON-RPC notifications are requests without an <spanx style="verb">id</spanx> field that
expect no response. Since payment challenges require a response,
notifications cannot support payment flows.</t>

<section anchor="server-behavior"><name>Server Behavior</name>

<t>Servers <bcp14>MUST NOT</bcp14> process payment-gated operations invoked as
notifications. Servers <bcp14>SHOULD</bcp14> silently drop such notifications
per JSON-RPC 2.0 semantics.</t>

<t>Servers <bcp14>MAY</bcp14> log dropped payment-required notifications for
debugging purposes.</t>

<t>Servers <bcp14>MAY</bcp14> send JSON-RPC notifications to deliver data after
a client has fulfilled a prior payment challenge (e.g.,
streaming subscription updates over WebSocket).</t>

</section>
<section anchor="client-guidance"><name>Client Guidance</name>

<t>Clients <bcp14>SHOULD NOT</bcp14> invoke payment-gated operations as
notifications. Operations that may require payment <bcp14>SHOULD</bcp14> always
include a request <spanx style="verb">id</spanx> to receive payment challenges and results.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="challenge-binding"><name>Challenge Binding</name>

<t>Servers <bcp14>MUST</bcp14> cryptographically bind challenge IDs to their parameters
(at minimum: <spanx style="verb">realm</spanx>, <spanx style="verb">method</spanx>, <spanx style="verb">intent</spanx>, <spanx style="verb">request</spanx> hash, <spanx style="verb">expires</spanx>).
The <spanx style="verb">request</spanx> hash <bcp14>MUST</bcp14> be computed over the JCS-canonicalized
representation of <spanx style="verb">request</spanx> per <xref target="RFC8785"/>.
This prevents clients from reusing a challenge ID with modified
payment terms.</t>

<t>Servers <bcp14>SHOULD</bcp14> also bind challenges to the specific operation being
requested (e.g., tool name, resource URI) to prevent a challenge
issued for one operation being used for another.</t>

</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Servers <bcp14>MUST</bcp14> reject credentials for:</t>

<t><list style="symbols">
  <t>Unknown challenge IDs</t>
  <t>Expired challenges (past <spanx style="verb">expires</spanx> timestamp)</t>
  <t>Previously-used challenge IDs</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> maintain a record of used challenge IDs for at least
the challenge validity period. For high-throughput scenarios, servers
<bcp14>MAY</bcp14> use stateless challenge tokens (e.g., MAC over canonical
parameters) and maintain only a post-use replay set.</t>

<t>When two concurrent requests race using the same challenge, servers
<bcp14>MUST</bcp14> ensure only one succeeds via atomic check-and-mark operations.</t>

</section>
<section anchor="transport-security"><name>Transport Security</name>

<t>When using network transports (HTTP, WebSocket), all
communication <bcp14>MUST</bcp14> occur over TLS 1.2 <xref target="RFC5246"/> or later
(TLS 1.3 <xref target="RFC8446"/> <bcp14>RECOMMENDED</bcp14>).</t>

<t>For stdio transport, security depends on the process isolation
provided by the operating system.</t>

<t>For persistent transports (e.g., WebSocket), servers <bcp14>SHOULD</bcp14>
additionally rate limit connection establishment and close
connections that exceed challenge request thresholds.</t>

</section>
<section anchor="credential-confidentiality"><name>Credential Confidentiality</name>

<t>Payment credentials <bcp14>MAY</bcp14> contain sensitive data (signatures, tokens).
Clients <bcp14>MUST NOT</bcp14> log or persist credentials beyond immediate use.
Servers <bcp14>MUST NOT</bcp14> log full credential payloads. This includes crash
dumps, distributed tracing, and analytics telemetry.</t>

</section>
<section anchor="metadata-stripping"><name>Metadata Stripping</name>

<t>On-path attackers or malicious intermediaries could strip
<spanx style="verb">org.paymentauth/credential</spanx> from requests (causing repeated
payment challenges) or <spanx style="verb">org.paymentauth/receipt</spanx> from responses
(affecting auditability). For network transports, TLS provides
integrity. For stdio transport, rely on process isolation.</t>

</section>
<section anchor="confused-deputy"><name>Confused Deputy</name>

<t>Clients may be tricked into paying for unintended operations if
method names or realms are misleading. Client implementations
<bcp14>SHOULD</bcp14>:</t>

<t><list style="symbols">
  <t>Display <spanx style="verb">realm</spanx>, <spanx style="verb">amount</spanx>, <spanx style="verb">currency</spanx>, and <spanx style="verb">recipient</spanx> to users
before fulfilling payment challenges</t>
  <t>Allow users to configure payment policies per realm</t>
  <t>Validate that challenge parameters match the requested operation</t>
</list></t>

</section>
<section anchor="denial-of-service"><name>Denial of Service</name>

<t>Attackers may trigger many payment challenges to exhaust server
resources or payment processor rate limits. Servers <bcp14>SHOULD</bcp14>:</t>

<t><list style="symbols">
  <t>Rate limit challenge issuance per client</t>
  <t>Use stateless challenge encoding where possible</t>
  <t>Implement exponential backoff for repeated failures</t>
</list></t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions. Payment methods and intents are
registered per <xref target="I-D.httpauth-payment"/>.</t>

<t>Servers <bcp14>MUST</bcp14> use the following JSON-RPC error codes:</t>

<texttable>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>-32042</c>
      <c>Payment Required</c>
      <c>Server requires payment to proceed</c>
      <c>-32043</c>
      <c>Payment Verification Failed</c>
      <c>Payment credential invalid</c>
</texttable>

<t>These codes are within the JSON-RPC server error range (-32000 to
-32099). Implementations <bcp14>MUST</bcp14> use these exact codes for interoperability.</t>

</section>


  </middle>

  <back>



    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;
&RFC3339;
&RFC5246;
&RFC6455;
&RFC8174;
&RFC8259;
&RFC8446;
&RFC8785;
<reference anchor="I-D.httpauth-payment" target="https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/">
  <front>
    <title>The 'Payment' HTTP Authentication Scheme</title>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization></organization>
    </author>
    <date year="2026" month="January"/>
  </front>
</reference>
<reference anchor="MCP" target="https://modelcontextprotocol.io/specification/2025-11-25">
  <front>
    <title>Model Context Protocol Specification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="JSON-RPC" target="https://www.jsonrpc.org/specification">
  <front>
    <title>JSON-RPC 2.0 Specification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>




<?line 874?>

<section anchor="example-ethereum-json-rpc-over-websocket"><name>Example: Ethereum JSON-RPC over WebSocket</name>

<t>An <spanx style="verb">eth_getBlockByNumber</spanx> call over WebSocket with payment
required for RPC access:</t>

<t><strong>Connection:</strong></t>

<figure><sourcecode type="http"><![CDATA[
GET / HTTP/1.1
Host: rpc.example.com
Upgrade: websocket
Connection: Upgrade
]]></sourcecode></figure>

<t><strong>Step 1: Initial Request</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockByNumber",
  "params": ["latest", false]
}
]]></sourcecode></figure>

<t><strong>Step 2: Payment Challenge</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "ch_ws_789",
        "realm": "rpc.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {
          "amount": "1",
          "currency": "usd",
          "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
        },
        "expires": "2025-01-15T12:05:00Z",
        "description": "Ethereum RPC call"
      }]
    }
  }
}
]]></sourcecode></figure>

<t><strong>Step 3: Request with Credential</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "eth_getBlockByNumber",
  "params": ["latest", false],
  "_meta": {
    "org.paymentauth/credential": {
      "challenge": {
        "id": "ch_ws_789",
        "realm": "rpc.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {
          "amount": "1",
          "currency": "usd",
          "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
        },
        "expires": "2025-01-15T12:05:00Z"
      },
      "source": "0x1234567890abcdef...",
      "payload": {
        "signature": "0xabc123..."
      }
    }
  }
}
]]></sourcecode></figure>

<t><strong>Step 4: Success with Receipt</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "number": "0x1348c9",
    "hash": "0x7736fab79e05dc611604d22470dadad2...",
    "parentHash": "0x61cdb2a09ab99abf791d474f20c2ea...",
    "timestamp": "0x56ffeff8",
    "gasLimit": "0x47e7c4",
    "gasUsed": "0x38658",
    "miner": "0xf8b483dba2c3b7176a3da549ad41a48b...",
    "transactions": []
  },
  "_meta": {
    "org.paymentauth/receipt": {
      "status": "success",
      "method": "tempo",
      "timestamp": "2025-01-15T12:00:15Z",
      "reference": "0xtx789...",
      "challengeId": "ch_ws_789"
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="example-mcp-tool-call"><name>Example: MCP Tool Call</name>

<t>A complete MCP tool call with payment, using nested <spanx style="verb">_meta</spanx>
per MCP conventions:</t>

<t><strong>Step 1: Initial Request</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "web-search",
    "arguments": {"query": "MCP protocol"}
  }
}
]]></sourcecode></figure>

<t><strong>Step 2: Payment Challenge</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32042,
    "message": "Payment Required",
    "data": {
      "httpStatus": 402,
      "challenges": [{
        "id": "ch_abc123",
        "realm": "search.example.com",
        "method": "tempo",
        "intent": "charge",
        "request": {
          "amount": "10",
          "currency": "usd",
          "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
        },
        "expires": "2025-01-15T12:05:00Z",
        "description": "Web search query"
      }]
    }
  }
}
]]></sourcecode></figure>

<t><strong>Step 3: Request with Payment</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "web-search",
    "arguments": {"query": "MCP protocol"},
    "_meta": {
      "org.paymentauth/credential": {
        "challenge": {
          "id": "ch_abc123",
          "realm": "search.example.com",
          "method": "tempo",
          "intent": "charge",
          "request": {
            "amount": "10",
            "currency": "usd",
            "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00"
          },
          "expires": "2025-01-15T12:05:00Z"
        },
        "source": "0x1234567890abcdef...",
        "payload": {
          "signature": "0xabc123..."
        }
      }
    }
  }
}
]]></sourcecode></figure>

<t><strong>Step 4: Success with Receipt</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{
      "type": "text",
      "text": "Search results for 'MCP protocol'..."
    }],
    "_meta": {
      "org.paymentauth/receipt": {
        "status": "success",
        "method": "tempo",
        "timestamp": "2025-01-15T12:00:15Z",
        "reference": "0xtx789...",
        "challengeId": "ch_abc123"
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="references-to-mcp-specification"><name>References to MCP Specification</name>

<t><list style="symbols">
  <t>MCP Base Protocol: <eref target="https://modelcontextprotocol.io/specification/2025-11-25/basic">https://modelcontextprotocol.io/specification/2025-11-25/basic</eref></t>
  <t>MCP Transports: <eref target="https://modelcontextprotocol.io/specification/2025-11-25/basic/transports">https://modelcontextprotocol.io/specification/2025-11-25/basic/transports</eref></t>
  <t>MCP Tools: <eref target="https://modelcontextprotocol.io/specification/2025-11-25/server/tools">https://modelcontextprotocol.io/specification/2025-11-25/server/tools</eref></t>
  <t>MCP Resources: <eref target="https://modelcontextprotocol.io/specification/2025-11-25/server/resources">https://modelcontextprotocol.io/specification/2025-11-25/server/resources</eref></t>
  <t>MCP <spanx style="verb">_meta</spanx> Field: <eref target="https://modelcontextprotocol.io/specification/2025-11-25/basic">https://modelcontextprotocol.io/specification/2025-11-25/basic</eref></t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
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
fDaW/xe6/7SDVXIAAA==

-->

</rfc>

