<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lee-wimse-local-tool-call-proof-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Local Tool Call Proof">Per-Call Proof for Local Tool Invocation by AI Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-lee-wimse-local-tool-call-proof-00"/>
    <author initials="J." surname="Lee" fullname="Jaebin Lee">
      <organization>SSenStone Inc.</organization>
      <address>
        <postal>
          <country>Korea, Republic of</country>
        </postal>
        <email>jblee@ssenstone.com</email>
      </address>
    </author>
    <author initials="C." surname="Yoo" fullname="Chang-Hun Yoo">
      <organization>SSenStone Inc.</organization>
      <address>
        <postal>
          <country>Korea, Republic of</country>
        </postal>
        <email>chyoo@ssenstone.com</email>
      </address>
    </author>
    <author initials="M." surname="Kim" fullname="MinGyu Kim">
      <organization>SSenStone Inc.</organization>
      <address>
        <postal>
          <country>Korea, Republic of</country>
        </postal>
        <email>mgkim@ssenstone.com</email>
      </address>
    </author>
    <author initials="W." surname="Seo" fullname="WooYong Seo">
      <organization>SSenStone Inc.</organization>
      <address>
        <postal>
          <country>Korea, Republic of</country>
        </postal>
        <email>wyseo@ssenstone.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="07"/>
    <area>Security</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>AI agent</keyword>
    <keyword>workload identity</keyword>
    <keyword>tool invocation</keyword>
    <keyword>Model Context Protocol</keyword>
    <keyword>proof of authorization</keyword>
    <abstract>
      

<t>AI agents increasingly act through local tool servers that run on the same host and are reached over inter-process channels such as the stdio transport of the Model Context Protocol (MCP). These channels are outside the scope of HTTP-based authorization: the tool server cannot tell whether a given invocation passed any policy decision, and reusable credentials typically sit in the agent's process memory.</t>
      <t>This document defines a per-call proof for local tool invocation. A Call Authority that runs outside the agent process evaluates policy, issues a short-lived, single-use proof bound to the exact tool name and arguments through a canonical action digest, and verifies that proof on behalf of the tool server. The tool server rejects invocations whose proof is missing or does not verify. The proof format is opaque to the agent and the tool server; concrete formats are defined as evidence type profiles. An MCP stdio binding is provided.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments (WIMSE) Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
    </note>
  </front>
  <middle>
    

<section anchor="introduction">
      <name>Introduction</name>
      <t>The AI Identity Management System <xref target="I-D.ietf-wimse-aims"/> composes workload identity, short-lived credentials, transport and application layer authentication, and OAuth-based delegation into a model for authenticating and authorizing AI agents. Its focus is on interactions that cross network boundaries.</t>
      <t>A large share of agent actions, however, never cross a network boundary. An agent host commonly spawns local tool servers (filesystem access, shell execution, database and SaaS connectors) and talks to them over a local inter-process channel. In MCP <xref target="MCP"/>, this is the stdio transport, and the authorization specification states that implementations using it "<bcp14>SHOULD NOT</bcp14> follow this specification, and instead retrieve credentials from the environment" <xref target="MCP-AUTHZ"/>. The MCP local server guidance describes the agent client and a stdio server as sharing one trust domain <xref target="MCP-LOCAL"/>.</t>
      <t>That model is adequate for a single user on a personal device. It is not adequate when:</t>
      <ul spacing="normal">
        <li>
          <t>an agent host runs on shared infrastructure and acts on behalf of many users;</t>
        </li>
        <li>
          <t>local tool servers hold long-lived credentials and broad filesystem access; and</t>
        </li>
        <li>
          <t>the agent's decisions are driven by untrusted content such as issues, pull requests, documents and web pages.</t>
        </li>
      </ul>
      <t>In that setting the agent is the most exposed component, and the local tool server is the last point at which an invocation can be checked before it reaches a resource. Network enforcement points never see calls to local resources such as files and shell commands.</t>
      <t>This document specifies:</t>
      <ol spacing="normal" type="1"><li>
          <t>a canonical <strong>action digest</strong> that identifies exactly one tool invocation (<xref target="action-digest"/>);</t>
        </li>
        <li>
          <t>a <strong>Call Authority</strong> outside the agent process that issues and verifies per-call proofs (<xref target="call-authority"/>);</t>
        </li>
        <li>
          <t>an <strong>enforcement obligation</strong> on tool servers to reject invocations without a valid proof (<xref target="tool-server"/>);</t>
        </li>
        <li>
          <t>requirements for <strong>evidence type profiles</strong> (<xref target="profiles"/>); and</t>
        </li>
        <li>
          <t>a <strong>binding for the MCP stdio transport</strong> (<xref target="mcp-binding"/>).</t>
        </li>
      </ol>
      <t>The mechanism does not prevent prompt injection. It confines the effects of an injected or compromised agent to actions that policy permits, removes reusable secrets from the agent process, and makes every invocation attributable.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>
      

<dl>
        <dt>Agent:</dt>
        <dd>
          <t>A software component that decides, typically with the help of a language model, which tools to invoke and with which arguments. In MCP terms, the client embedded in an agent host.</t>
        </dd>
        <dt>Tool Server:</dt>
        <dd>
          <t>A local process that executes tool invocations requested by the Agent, for example an MCP server reached over stdio.</t>
        </dd>
        <dt>Call Authority:</dt>
        <dd>
          <t>A component that runs outside the Agent process, evaluates Policy, issues Call Proofs and verifies them. It holds all key material used for Call Proofs.</t>
        </dd>
        <dt>Policy:</dt>
        <dd>
          <t>A signed document loaded by the Call Authority that states which callers may invoke which tools with which argument constraints, and which actions require human approval. The policy language is out of scope.</t>
        </dd>
        <dt>Call Proof:</dt>
        <dd>
          <t>A short-lived, single-use value that commits to one Action Digest and attests that the Call Authority authorized that invocation.</t>
        </dd>
        <dt>Action Digest:</dt>
        <dd>
          <t>A canonical hash of an invocation's method, tool name and arguments (<xref target="action-digest"/>).</t>
        </dd>
        <dt>Evidence Type:</dt>
        <dd>
          <t>An identifier naming the format and semantics of a Call Proof, defined by an evidence type profile (<xref target="profiles"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="threat-model">
      <name>Threat Model and Deployment Assumptions</name>
      <section anchor="in-scope">
        <name>In Scope</name>
        <t>T1. Injected instructions. Content processed by the Agent causes it to request a tool invocation outside its intended role, for example reading a credential file and sending its contents through another tool.</t>
        <t>T2. Theft of reusable secrets. Code execution inside the Agent process (for example through a compromised dependency) is used to extract credentials that remain usable after the compromise ends.</t>
        <t>T3. Policy bypass and proof reuse. An invocation is sent without passing a policy check, or a proof obtained for one invocation is presented for another.</t>
        <t>T4. Policy tampering. The policy is modified so that a denied action becomes allowed.</t>
      </section>
      <section anchor="out-of-scope">
        <name>Out of Scope</name>
        <ul spacing="normal">
          <li>
            <t>A malicious or compromised Tool Server. A Tool Server that ignores verification cannot be constrained by this mechanism.</t>
          </li>
          <li>
            <t>Credentials that the Tool Server itself uses to reach remote resources. Those are covered by network-level controls and the mechanisms in <xref target="I-D.ietf-wimse-aims"/>.</t>
          </li>
          <li>
            <t>Compromise of the Call Authority or of the policy signing key.</t>
          </li>
          <li>
            <t>Prevention of prompt injection itself, and actions that the policy permits.</t>
          </li>
        </ul>
      </section>
      <section anchor="isolation">
        <name>Isolation Assumption</name>
        <t>Protection against T2 requires that the Agent run in a separate isolation boundary (a different operating system user, container or virtual machine) from the Tool Server and the Call Authority. If they share one boundary, code execution in the Agent can read the Tool Server's environment or start a Tool Server without verification. In that configuration this mechanism still addresses T1, T3 and T4, where the Agent's code is intact but its decisions are not.</t>
      </section>
    </section>
    <section anchor="architecture-overview">
      <name>Architecture Overview</name>
      <figure>
        <name>Per-call proof flow</name>
        <artwork type="ascii-art"><![CDATA[
 +---------+  (1) issue(method,name,args)   +----------------+
 |  Agent  | -----------------------------> | Call Authority |
 | (no     | <----------------------------- | policy, keys,  |
 | secrets)|  (2) Call Proof                | replay cache,  |
 +---------+                                | audit log      |
      |                                     +----------------+
      | (3) invocation + Call Proof                 ^   |
      v                                             |   |
 +-------------+  (4) verify(action_digest, proof)  |   |
 | Tool Server | -----------------------------------+   |
 | + enforce-  | <---------------------------------------+
 |   ment hook |  (5) valid / invalid(reason)
 +-------------+
      | (6) execute only if valid
      v
 local resources (files, shell, local services)
]]></artwork>
      </figure>
      <ol spacing="normal" type="1"><li>
          <t>The Agent asks the Call Authority to issue a proof for an intended invocation.</t>
        </li>
        <li>
          <t>The Call Authority identifies the calling process from the platform, evaluates Policy and, if allowed, returns a Call Proof. The proof never passes through the Call Authority again on the way to the Tool Server.</t>
        </li>
        <li>
          <t>The Agent sends the invocation to the Tool Server with the Call Proof attached.</t>
        </li>
        <li>
          <t>The Tool Server computes the Action Digest from the invocation as received and asks the Call Authority to verify the proof against it.</t>
        </li>
        <li>
          <t>The Call Authority checks binding, freshness and single use, records the decision, and answers.</t>
        </li>
        <li>
          <t>The Tool Server executes the invocation only if the answer is valid.</t>
        </li>
      </ol>
      <t>Verification is delegated to the Call Authority so that the Tool Server needs no key material and no knowledge of evidence formats. This allows symmetric and asymmetric evidence types to coexist and keeps replay tracking and audit in one place.</t>
    </section>
    <section anchor="action-digest">
      <name>Action Digest</name>
      <t>The Action Digest identifies exactly one invocation. It is computed as:</t>
      <artwork><![CDATA[
action_digest = BASE64URL( SHA-256( JCS( {
  "method":    <invocation method>,
  "name":      <tool name>,
  "arguments": <arguments object, or {} if absent>
} ) ) )
]]></artwork>
      <t>where:</t>
      <ul spacing="normal">
        <li>
          <t>JCS is the JSON Canonicalization Scheme <xref target="RFC8785"/>;</t>
        </li>
        <li>
          <t>SHA-256 is as defined in <xref target="RFC6234"/>;</t>
        </li>
        <li>
          <t>BASE64URL is base64url encoding without padding (<xref section="5" sectionFormat="of" target="RFC4648"/>).</t>
        </li>
      </ul>
      <t>The arguments <bcp14>MUST</bcp14> be taken exactly as transmitted, as a JSON <xref target="RFC8259"/> value. Implementations <bcp14>MUST NOT</bcp14> normalize argument values (for example by resolving file system paths) before computing the digest. Semantic normalization belongs to policy evaluation, not to the digest.</t>
      <t>The same construction is used by proposals in the MCP community for argument commitments (<xref target="MCP-SEP-2787"/>, <xref target="MCP-SEP-2672"/>); aligning on one definition allows evidence produced under those proposals to serve as Evidence Types under this document.</t>
    </section>
    <section anchor="call-authority">
      <name>Call Authority</name>
      <section anchor="general-requirements">
        <name>General Requirements</name>
        <t>The Call Authority <bcp14>MUST NOT</bcp14> run inside the Agent process. The Agent <bcp14>MUST NOT</bcp14> have access to any key material used to create or verify Call Proofs. Where available, keys <bcp14>SHOULD</bcp14> be generated and used inside a hardware root of trust (for example a TPM) so that they are never exported.</t>
        <t>The Call Authority exposes a local interface using JSON-RPC 2.0 messages over a local endpoint such as a Unix domain socket or a named pipe. The endpoint <bcp14>MUST NOT</bcp14> be reachable from outside the host.</t>
      </section>
      <section anchor="issue">
        <name>Issue</name>
        <t>An issue request carries the intended invocation:</t>
        <sourcecode type="json"><![CDATA[
{ "jsonrpc": "2.0", "id": 1, "method": "callProof/issue",
  "params": { "method": "tools/call", "name": "read_file",
              "arguments": { "path": "repo/src/main.ts" },
              "server": "filesystem" } }
]]></sourcecode>
        <t>The Call Authority:</t>
        <ol spacing="normal" type="1"><li>
            <t><bcp14>MUST</bcp14> establish the identity of the calling process from the platform, for example from the peer credentials of the local socket or from a workload identity issued to that process such as a SPIFFE ID <xref target="SPIFFE"/>. It <bcp14>MUST NOT</bcp14> rely on an identity asserted in the request body.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> evaluate Policy for that identity, target server, tool and arguments.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> return an error and <bcp14>MUST NOT</bcp14> issue a proof if Policy denies the invocation.</t>
          </li>
          <li>
            <t><bcp14>MAY</bcp14> return an approval-required result when Policy requires human approval (<xref target="approval"/>).</t>
          </li>
          <li>
            <t>Otherwise returns <tt>{ "type": "&lt;evidence type&gt;", "value": "&lt;proof&gt;", "expiresAt": "&lt;RFC 3339 timestamp&gt;" }</tt> <xref target="RFC3339"/>.</t>
          </li>
        </ol>
      </section>
      <section anchor="verify">
        <name>Verify</name>
        <t>A verify request carries the Action Digest computed by the Tool Server and the evidence received:</t>
        <sourcecode type="json"><![CDATA[
{ "jsonrpc": "2.0", "id": 2, "method": "callProof/verify",
  "params": { "actionDigest": "<base64url>", "server": "filesystem",
              "evidence": { "type": "<evidence type>",
                            "value": "<proof>" } } }
]]></sourcecode>
        <t>The Call Authority returns <tt>{ "valid": true }</tt> or <tt>{ "valid": false, "reason": "&lt;reason&gt;" }</tt>, where reason is one of <tt>invalid</tt>, <tt>expired</tt>, <tt>replayed</tt>, <tt>mismatch</tt> or <tt>unknownType</tt>. The Call Authority <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>treat the Action Digest supplied by the Tool Server as authoritative;</t>
          </li>
          <li>
            <t>return <tt>mismatch</tt> if the proof does not commit to that Action Digest;</t>
          </li>
          <li>
            <t>return <tt>expired</tt> if the proof is outside its validity window;</t>
          </li>
          <li>
            <t>accept a given proof at most once and return <tt>replayed</tt> for later attempts; and</t>
          </li>
          <li>
            <t>record each issue and verify decision, including caller identity, server, tool, Action Digest, result, approver if any, and time.</t>
          </li>
        </ul>
      </section>
      <section anchor="policy-integrity">
        <name>Policy Integrity</name>
        <t>Policy <bcp14>SHOULD</bcp14> be signed. The verification key for Policy <bcp14>SHOULD</bcp14> be fixed when the Call Authority is installed and <bcp14>SHOULD NOT</bcp14> be delivered together with the Policy. The Call Authority <bcp14>SHOULD</bcp14> reject a Policy whose version is lower than the currently loaded one, and <bcp14>MUST</bcp14> deny all issuance when no valid Policy is loaded.</t>
      </section>
    </section>
    <section anchor="tool-server">
      <name>Tool Server Enforcement</name>
      <t>A Tool Server that requires Call Proofs <bcp14>MUST</bcp14>, for each covered invocation and before any side effect:</t>
      <ol spacing="normal" type="1"><li>
          <t>compute the Action Digest from the invocation as received;</t>
        </li>
        <li>
          <t>reject the invocation if no Call Proof is present;</t>
        </li>
        <li>
          <t>otherwise call verify and reject the invocation unless the result is valid; and</t>
        </li>
        <li>
          <t>reject the invocation if the Call Authority cannot be reached (fail closed).</t>
        </li>
      </ol>
      <t>A Tool Server <bcp14>MAY</bcp14> operate in an audit mode in which it verifies proofs that are present and executes invocations without a proof, to support staged deployment. Audit mode does not provide the protections described in <xref target="threat-model"/>.</t>
      <t>For tools that operate on file system paths, Tool Servers <bcp14>SHOULD</bcp14> resolve and re-check paths at execution time where tool semantics allow, to reduce time-of-check to time-of-use risk.</t>
    </section>
    <section anchor="approval">
      <name>Approval-Bound Actions</name>
      <t>Policy <bcp14>MAY</bcp14> mark actions as requiring human approval. For such actions, the Call Authority <bcp14>MUST NOT</bcp14> issue a Call Proof until an approver designated by Policy has approved the specific Action Digest. Evidence type profiles define the approval channel. Profiles <bcp14>SHOULD</bcp14> present a human-readable summary of the action to the approver and <bcp14>SHOULD</bcp14> bind the approval to the Action Digest. Approval channels that do not require the Call Authority to accept inbound network connections are <bcp14>RECOMMENDED</bcp14>.</t>
    </section>
    <section anchor="profiles">
      <name>Evidence Type Profiles</name>
      <t>An evidence type profile <bcp14>MUST</bcp14> specify:</t>
      <ul spacing="normal">
        <li>
          <t>the Evidence Type identifier, using a namespaced form under a domain controlled by the profile author (for example <tt>com.example/token</tt>);</t>
        </li>
        <li>
          <t>the format of the proof value;</t>
        </li>
        <li>
          <t>how the proof commits to the Action Digest;</t>
        </li>
        <li>
          <t>the validity window, which <bcp14>SHOULD</bcp14> be 30 seconds or less;</t>
        </li>
        <li>
          <t>how keys are provisioned to and protected by the Call Authority; and</t>
        </li>
        <li>
          <t>how single use is enforced.</t>
        </li>
      </ul>
      <t>Profiles <bcp14>SHOULD</bcp14> keep proof values compact. Local channels such as stdio carry one message per line, and per-call evidence such as certificate chains adds overhead to every invocation.</t>
      <t>Anticipated profiles include (informative):</t>
      <ul spacing="normal">
        <li>
          <t>a JWS envelope issued by the Call Authority, aligned with <xref target="MCP-SEP-2787"/>;</t>
        </li>
        <li>
          <t>a passkey approval for approval-bound actions, aligned with <xref target="MCP-SEP-2672"/>; and</t>
        </li>
        <li>
          <t>a compact one-time authentication code derived inside a hardware root of trust, in the lineage of HOTP <xref target="RFC4226"/> and TOTP <xref target="RFC6238"/>, to be specified separately.</t>
        </li>
      </ul>
    </section>
    <section anchor="mcp-binding">
      <name>Binding for the MCP stdio Transport</name>
      <section anchor="capability-advertisement">
        <name>Capability Advertisement</name>
        <t>An MCP server that supports this mechanism advertises the extension <tt>io.modelcontextprotocol/call-proof</tt> in its capabilities:</t>
        <sourcecode type="json"><![CDATA[
{ "capabilities": { "tools": {},
    "extensions": { "io.modelcontextprotocol/call-proof": {
        "required": true,
        "methods": ["tools/call"],
        "authority": "unix:///run/mcp-call-authority.sock" } } } }
]]></sourcecode>
        <t><tt>required</tt> set to true selects enforcement as described in <xref target="tool-server"/>; false selects audit mode. <tt>methods</tt> lists covered request methods; <tt>tools/call</tt> <bcp14>MUST</bcp14> be included. <tt>authority</tt> optionally names the Call Authority endpoint.</t>
        <t>The extension identifier is shown with the MCP official prefix for illustration. Until the extension is accepted by the MCP project, implementations <bcp14>SHOULD</bcp14> use an identifier under their own vendor prefix.</t>
      </section>
      <section anchor="carrying-the-proof">
        <name>Carrying the Proof</name>
        <t>The Call Proof is carried in the request <tt>_meta</tt> object:</t>
        <sourcecode type="json"><![CDATA[
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call",
  "params": { "name": "read_file",
              "arguments": { "path": "repo/src/main.ts" },
              "_meta": { "io.modelcontextprotocol/callProof": {
                  "type": "com.example/token",
                  "value": "<opaque>" } } } }
]]></sourcecode>
        <t>For MCP, the Action Digest method is the JSON-RPC method, the name is <tt>params.name</tt>, and the arguments are <tt>params.arguments</tt>.</t>
      </section>
      <section anchor="rejection">
        <name>Rejection</name>
        <t>A rejected invocation returns a JSON-RPC error whose <tt>data.reason</tt> is <tt>missing</tt>, <tt>authorityUnavailable</tt>, or a reason returned by the Call Authority:</t>
        <sourcecode type="json"><![CDATA[
{ "jsonrpc": "2.0", "id": 7,
  "error": { "code": -32021, "message": "Call proof rejected",
             "data": { "reason": "missing" } } }
]]></sourcecode>
        <t>The numeric error code is a placeholder pending coordination with the MCP project. Verification <bcp14>MAY</bcp14> be implemented as a server-side validator in the MCP interceptor model <xref target="MCP-SEP-1763"/>.</t>
      </section>
    </section>
    <section anchor="relationship-to-other-work">
      <name>Relationship to Other Work</name>
      <t>AIMS <xref target="I-D.ietf-wimse-aims"/> addresses agent identity, credential provisioning, authentication and delegation across network boundaries. This document addresses the local invocation boundary that AIMS does not cover, and reuses workload identity for caller identification at the Call Authority.</t>
      <t>DPoP <xref target="RFC9449"/> and HTTP Message Signatures <xref target="RFC9421"/> bind proofs to HTTP requests. Local inter-process channels have no HTTP request to bind to, and DPoP does not cover the request content. The Action Digest plays the role of the bound request representation.</t>
      <t>Proposals in the MCP community define argument-bound attestation for audit <xref target="MCP-SEP-2787"/> and per-call human approval <xref target="MCP-SEP-2672"/>. This document adds the enforcement obligation on the tool server and the requirement that issuing keys reside outside the agent process, and treats those formats as candidate evidence types.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The unit of protection is a single tool invocation. Agents decompose a user request into separate invocations, and each one is authorized and verified independently, so a request that combines permitted and forbidden steps is stopped at the forbidden step. Most tool servers expose one operation per tool (for example, separate tools to read, write or send), which lets Policy decide by tool name and arguments. General-purpose tools, such as shell execution, arbitrary database queries or code execution, and workflow tools that perform several effects in one invocation, cannot be separated this way. Policy for such tools needs to evaluate their arguments, and deployments should treat them as high risk, subject them to approval (<xref target="approval"/>), or not grant them to roles that do not need them.</t>
      <t>When a later invocation in a sequence is denied, earlier invocations have already run. Data they returned remains available to the Agent, although the denied invocation cannot carry it further. This document does not provide authorization of a multi-step plan as a whole.</t>
      <t>The protections of this mechanism depend on the isolation assumption in <xref target="isolation"/>. Deployments that cannot separate the Agent from the Tool Server and Call Authority obtain protection against injected instructions and proof reuse, but not against extraction of Tool Server credentials by code running in the Agent process.</t>
      <t>The Call Authority is a high-value component. Its compromise is equivalent to Policy compromise. Hardware-protected keys, signed Policy with rollback protection, and fail-closed behavior limit the impact of partial failures but not of full compromise.</t>
      <t>JCS removes representation differences (member order, whitespace, number and string encoding) but not semantic equivalence. Two semantically equal argument sets can produce different digests; Policy must be written against arguments as transmitted or must evaluate semantic forms explicitly.</t>
      <t>Short validity windows and single-use enforcement limit replay. Clock skew between the Call Authority's issue and verify operations is not a concern because both run in the same component.</t>
      <t>Fail-closed behavior makes the Call Authority a dependency for every covered invocation. Its availability should be monitored like any other enforcement component.</t>
      <t>Approval channels can be targeted by social engineering. Summaries shown to approvers should be generated by the Call Authority from the invocation, not supplied by the Agent.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Call Authority records caller identity, tool names, Action Digests and approver identities. The audit log can reveal user activity and should be protected and retained according to applicable policy. Action Digests do not reveal argument values directly, but low-entropy arguments can be recovered by guessing; logs should be protected accordingly.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. Evidence Types use namespaced identifiers under domains controlled by profile authors.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-wimse-aims">
          <front>
            <title>AI Identity Management System</title>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Jeff Lombardo" initials="J." surname="Lombardo">
              <organization>AWS</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Nick Steele" initials="N." surname="Steele">
              <organization>OpenAI</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <date day="15" month="September" year="2026"/>
            <abstract>
              <t>   This document proposes best practices for authentication and
   authorization of AI agent interactions.  It leverages existing
   standards such as the Workload Identity in Multi-System Environments
   (WIMSE) architecture and OAuth 2.0 family of specifications.  Rather
   than defining new protocols, this document describes how existing and
   widely deployed standards can be applied or extended to establish
   agent authentication and authorization.  By doing so, it aims to
   provide a framework within which to use existing standards, identify
   gaps and guide future standardization efforts for agent
   authentication and authorization.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-aims-00"/>
        </reference>
        <reference anchor="RFC4226">
          <front>
            <title>HOTP: An HMAC-Based One-Time Password Algorithm</title>
            <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="F. Hoornaert" initials="F." surname="Hoornaert"/>
            <author fullname="D. Naccache" initials="D." surname="Naccache"/>
            <author fullname="O. Ranen" initials="O." surname="Ranen"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an algorithm to generate one-time password values, based on Hashed Message Authentication Code (HMAC). A security analysis of the algorithm is presented, and important parameters related to the secure deployment of the algorithm are discussed. The proposed algorithm can be used across a wide range of network applications ranging from remote Virtual Private Network (VPN) access, Wi-Fi network logon to transaction-oriented Web applications.</t>
              <t>This work is a joint effort by the OATH (Open AuTHentication) membership to specify an algorithm that can be freely distributed to the technical community. The authors believe that a common and shared algorithm will facilitate adoption of two-factor authentication on the Internet by enabling interoperability across commercial and open-source implementations. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4226"/>
          <seriesInfo name="DOI" value="10.17487/RFC4226"/>
        </reference>
        <reference anchor="RFC6238">
          <front>
            <title>TOTP: Time-Based One-Time Password Algorithm</title>
            <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
            <author fullname="S. Machani" initials="S." surname="Machani"/>
            <author fullname="M. Pei" initials="M." surname="Pei"/>
            <author fullname="J. Rydell" initials="J." surname="Rydell"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>This document describes an extension of the One-Time Password (OTP) algorithm, namely the HMAC-based One-Time Password (HOTP) algorithm, as defined in RFC 4226, to support the time-based moving factor. The HOTP algorithm specifies an event-based OTP algorithm, where the moving factor is an event counter. The present work bases the moving factor on a time value. A time-based variant of the OTP algorithm provides short-lived OTP values, which are desirable for enhanced security.</t>
              <t>The proposed algorithm can be used across a wide range of network applications, from remote Virtual Private Network (VPN) access and Wi-Fi network logon to transaction-oriented Web applications. The authors believe that a common and shared algorithm will facilitate adoption of two-factor authentication on the Internet by enabling interoperability across commercial and open-source implementations. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6238"/>
          <seriesInfo name="DOI" value="10.17487/RFC6238"/>
        </reference>
        <reference anchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="RFC9421">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="MCP" target="https://modelcontextprotocol.io/specification/2026-07-28">
          <front>
            <title>Model Context Protocol Specification, version 2026-07-28</title>
            <author>
              <organization>Model Context Protocol</organization>
            </author>
            <date year="2026" month="July" day="28"/>
          </front>
        </reference>
        <reference anchor="MCP-AUTHZ" target="https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization">
          <front>
            <title>Model Context Protocol: Authorization</title>
            <author>
              <organization>Model Context Protocol</organization>
            </author>
            <date year="2026" month="July" day="28"/>
          </front>
        </reference>
        <reference anchor="MCP-LOCAL" target="https://modelcontextprotocol.io/docs/draft/tutorials/security/local-server-security">
          <front>
            <title>Model Context Protocol: Local Server Security</title>
            <author>
              <organization>Model Context Protocol</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP-SEP-2787" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2787">
          <front>
            <title>SEP-2787: Tool Call Attestation</title>
            <author>
              <organization>Model Context Protocol contributors</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP-SEP-2672" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2672">
          <front>
            <title>SEP-2672: Per-Call Passkey Verified Approval for MCP Tool Calls</title>
            <author>
              <organization>Model Context Protocol contributors</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP-SEP-1763" target="https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1763">
          <front>
            <title>SEP-1763: Interceptors for Model Context Protocol</title>
            <author>
              <organization>Model Context Protocol contributors</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SPIFFE" target="https://spiffe.io/docs/latest/spiffe-about/overview/">
          <front>
            <title>Secure Production Identity Framework for Everyone (SPIFFE)</title>
            <author>
              <organization>Cloud Native Computing Foundation</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    

<section anchor="example-flow">
      <name>Example Flow</name>
      <t>A code-review agent is permitted by Policy to read files under <tt>repo/</tt> and to post review comments. Content in a pull request instructs it to read <tt>~/.aws/credentials</tt>.</t>
      <ol spacing="normal" type="1"><li>
          <t>The Agent requests issue for <tt>read_file</tt> with path <tt>~/.aws/credentials</tt>.</t>
        </li>
        <li>
          <t>The Call Authority identifies the caller as the code-review agent, evaluates Policy, denies, and records the attempt.</t>
        </li>
        <li>
          <t>If the Agent sends the invocation anyway, the Tool Server finds no Call Proof and rejects it.</t>
        </li>
        <li>
          <t>If the Agent replays a proof issued earlier for <tt>repo/README.md</tt>, the Tool Server computes a different Action Digest and the Call Authority returns <tt>mismatch</tt>.</t>
        </li>
      </ol>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations per <xref target="RFC7942"/> and is to be removed before publication.</t>
      <t>A reference implementation consisting of a Call Authority daemon, MCP server-side enforcement, client-side issuance and two evidence type profiles is in development. Repository location: TBD.</t>
    </section>
    <section anchor="open-issues">
      <name>Open Issues</name>
      <ul spacing="normal">
        <li>
          <t>Whether the Call Authority interface belongs in this document or a companion document.</t>
        </li>
        <li>
          <t>Coverage of additional MCP methods such as <tt>resources/read</tt> and <tt>prompts/get</tt>.</t>
        </li>
        <li>
          <t>Error code coordination with the MCP project.</t>
        </li>
        <li>
          <t>Alignment of the Action Digest definition with MCP community proposals.</t>
        </li>
        <li>
          <t>Whether an IANA registry for Evidence Types is warranted.</t>
        </li>
        <li>
          <t>Plan-level authorization: evaluating a declared sequence of invocations before the first one runs, and its relation to intent declaration proposals in the OAuth working group.</t>
        </li>
        <li>
          <t>Guidance for tools that combine several effects in one invocation.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TBD.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
zWEAAA==

-->

</rfc>
