<?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.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-petrie-vcon-tool-invocation-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="vCon Tool Invocation Extension">The JSON vCon - Tool Invocation Extension</title>
    <seriesInfo name="Internet-Draft" value="draft-petrie-vcon-tool-invocation-00"/>
    <author fullname="Daniel G Petrie">
      <organization>SIPez LLC</organization>
      <address>
        <email>dan.ietf@sipez.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Applications and Real-Time</area>
    <workgroup>Virtualized Conversations</workgroup>
    <keyword>vcon</keyword>
    <keyword>conversation</keyword>
    <keyword>AI agent</keyword>
    <keyword>tool invocation</keyword>
    <keyword>MCP</keyword>
    <keyword>agentproto</keyword>
    <keyword>AUDIT</keyword>
    <abstract>
      <?line 64?>

<t>A vCon is a container for data and information relating to a conversation.
This document defines an extension to the JSON vCon schema for recording the policy decisions of AI agents and their invocation of tools.
Before an agent performs an operation, the agent or its host uses policy to decide whether the operation is allowed, disallowed or requires permission.
This document defines an Event Object type for those decisions, and Event Object types for each step of a tool invocation.
It also outlines requirements for recording requests for permission and direction, which need to be defined in a future document.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://dgpetrie.github.io/draft-petrie-vcon-tool-invocation/draft-petrie-vcon-tool-invocation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-petrie-vcon-tool-invocation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Virtualized Conversations Working Group mailing list (<eref target="mailto:vcon@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/vcon/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/vcon/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dgpetrie/draft-petrie-vcon-tool-invocation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document adds Event Object types for recording the policy decisions of AI agents and their invocation of tools to the JSON <xref target="JSON"/> vCon schema defined in <xref target="VCON-CORE"/>.
The general framework and requirements for defining an extension to the JSON vCon schema are defined in <xref target="VCON-CORE"/>.</t>
      <t>AI agents converse with people and other agents, and perform operations on their behalf (e.g. invoking tools).
The conversation between an agent and a person or another agent is captured with Dialog Objects in <xref target="VCON-CORE"/>.
The use of a tool by an agent is not dialog.
It is a request to the tool and one or more responses from it, which are captured in this document as Event Objects.
This fills the gap for tool invocations and results identified in <xref target="ROADMAP"/>, and covers the agent view of an Action Record in <xref target="AUDIT-ARCH"/>.</t>
      <t>Before an agent performs an operation (e.g. invoking a tool), the agent or its host decides by policy whether the operation may be performed.
The decision is that no permission is needed, that permission is required or that the operation is disallowed.
No one is asked, so there is no conversation, only the decision and what it applies to.</t>
      <t>The policy decision is defined in this document because the invocation of a tool is the most common operation it applies to, and the decision is part of the life cycle of a tool invocation.
Its outcome determines whether the tool is invoked, and it identifies the tool by the same parameters as the invocation.
Without it, a use of a tool which was disallowed, or for which permission was not granted, would leave no record.
The decision is defined so that it can also apply to other operations (e.g. delegating to another agent).</t>
      <t>This document defines a state model for the policy decision (see <xref target="policy-model"/>) and a state model for a tool invocation (see <xref target="state-model"/>), with an Event Object type for each transition in them.
The Event Object types are not specific to any one protocol.
The Model Context Protocol <xref target="MCP"/> is used as the first example, and a mapping to it is given in <xref target="mapping-to-mcp"/>.
The word "invocation" is used rather than "call", as "call" in vCon commonly implies a telephone call.</t>
      <t>Requests for permission or direction made to the person or agent on whose behalf the agent is acting, and their responses, are not defined in this document.
They are part of the conversation, and occur outside tool invocations as well as within them (e.g. a clarifying choice put to a person, approval to delegate to another agent, and in contact centers, consent to record and IVR menu choices).
Event Object types for them need to be defined in a future document.
The requirements identified so far are outlined in <xref target="directives"/>.</t>
      <t>The following are also not in the scope of this document:</t>
      <ul spacing="normal">
        <li>
          <t>The definition of tools and of the tools available to an agent.
This document assumes that tools are defined elsewhere and only records their use.</t>
        </li>
        <li>
          <t>Making or enforcing the policy decision.
Only the decision is recorded.</t>
        </li>
        <li>
          <t>The record of the invocation kept by the tool or its provider.
This is another observation point, which may be captured in the same vCon, in a separate vCon or in a log (see <xref target="ROADMAP"/>).</t>
        </li>
        <li>
          <t>The protocol used to invoke the tool.
Only the data exchanged and the outcome of the invocation are captured.</t>
        </li>
      </ul>
    </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>
      <?line -18?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>See section 2.1 of <xref target="VCON-CORE"/> for terminology used in this document.</t>
        <dl>
          <dt>Agent:</dt>
          <dd>
            <t>A party that acts on behalf of a person or another agent and that performs operations, such as invoking tools.
TODO: align with the definition in <xref target="ROADMAP"/>.</t>
          </dd>
          <dt>Host:</dt>
          <dd>
            <t>The software in which an agent runs and through which it sends requests to tools.
The host may itself provide tools, and is then a server.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The provider of a set of tools (e.g. an <xref target="MCP"/> server, or the host).</t>
          </dd>
          <dt>Tool:</dt>
          <dd>
            <t>A named function or service which an agent may invoke.
A tool is not a party in the vCon.</t>
          </dd>
          <dt>Operation:</dt>
          <dd>
            <t>An action which an agent performs, and to which a policy decision applies (e.g. the invocation of a tool).</t>
          </dd>
          <dt>Policy Decision:</dt>
          <dd>
            <t>The decision made by the agent or its host, by policy, whether an operation may be performed.</t>
          </dd>
          <dt>Invocation:</dt>
          <dd>
            <t>The use of a tool by an agent, which is one kind of operation, consisting of one or more attempts.</t>
          </dd>
          <dt>Attempt:</dt>
          <dd>
            <t>A single request sent to a tool for an invocation, and the responses to that request.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="extension-name">
      <name>Extension Name</name>
      <t>The extension name for this document is "tool-invocation".</t>
      <t>A vCon that contains any of the Event Object types defined in this document <bcp14>SHOULD</bcp14> include "tool-invocation" in the extensions parameter.
"tool-invocation" is not required in the critical parameter (see <xref target="compatibility-considerations"/>).</t>
      <t>TODO: revisit whether "tool-invocation" is required in the critical parameter, pending <xref target="incompatibility-considerations"/>.</t>
    </section>
    <section anchor="policy-model">
      <name>Policy Decision State Model</name>
      <t>Before an operation is performed, the agent or its host makes a policy decision whether it may be performed.
When the decision is made for that operation alone, it is recorded as a "policy-decision" type Event Object (see <xref target="policy-decisions"/>).
If the operation is allowed, or permission is required and is granted, the operation is performed.
For a tool invocation, the next Event Object is then the "tool-invocation" type Event Object (see <xref target="state-model"/>).
If the operation is disallowed, or permission is required and is not granted, the operation is not performed.</t>
      <t>The state before an operation is set by the policy decision which applies to it: a "policy-decision" type Event Object for that operation alone, or a standing decision in effect for it (see <xref target="policy-decisions"/>).
An operation covered by a standing decision has no "policy-decision" type Event Object of its own.
When no policy decision for an operation was observed (e.g. by an observer at the tool), the vCon contains no "policy-decision" type Event Object for it.</t>
      <t>The policy decision follows the state model shown in <xref target="fig-policy-states"/>.</t>
      <figure anchor="fig-policy-states">
        <name>Policy Decision States</name>
        <artwork><![CDATA[
                     policy-decision
                            |
      +---------------------+----------------------+
      | allowed             | permission-required  | disallowed
      v                     v                      v
 +---------+     +---------------------+     +------------+
 | Allowed |     | Permission Required |     | Disallowed |
 +---------+     +---------------------+     +------------+
      |                     | (1)
      +---------------------+
                            v
                operation is performed
                (e.g. tool-invocation)

  (1) permission granted (see Requirements for Permission and
      Directive Events)
]]></artwork>
      </figure>
      <t>The states are:</t>
      <ul spacing="normal">
        <li>
          <t>Allowed - the policy decision is that no permission is needed</t>
        </li>
        <li>
          <t>Permission Required - the policy decision is that permission is required before the operation is performed</t>
        </li>
        <li>
          <t>Disallowed - the policy decision is that the operation is disallowed, and it is not performed</t>
        </li>
      </ul>
      <t>The following table defines the transitions.</t>
      <table>
        <name>Policy Decision State Transitions</name>
        <thead>
          <tr>
            <th align="left">From State</th>
            <th align="left">Event Object</th>
            <th align="left">To State</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">(before the operation)</td>
            <td align="left">policy-decision, decision "allowed"</td>
            <td align="left">Allowed</td>
          </tr>
          <tr>
            <td align="left">(before the operation)</td>
            <td align="left">policy-decision, decision "permission-required"</td>
            <td align="left">Permission Required</td>
          </tr>
          <tr>
            <td align="left">(before the operation)</td>
            <td align="left">policy-decision, decision "disallowed"</td>
            <td align="left">Disallowed</td>
          </tr>
          <tr>
            <td align="left">Allowed</td>
            <td align="left">the operation (e.g. tool-invocation)</td>
            <td align="left">(operation is performed)</td>
          </tr>
          <tr>
            <td align="left">Permission Required, when permission is granted</td>
            <td align="left">the operation (e.g. tool-invocation)</td>
            <td align="left">(operation is performed)</td>
          </tr>
        </tbody>
      </table>
      <t>The request for permission and the response are not defined in this document (see <xref target="directives"/>).
When permission is not granted, the operation is not performed, and for a tool invocation no "tool-invocation" type Event Object follows.
The Event Objects of this document alone do not distinguish permission refused, from no response, from a response which was not observed.</t>
      <section anchor="policy-decisions">
        <name>Policy Decisions</name>
        <t>The policy decides whether a decision applies to one operation only or is standing.</t>
        <t>A decision for one operation applies only to that operation, and is recorded before the operation is performed.
It is recorded as a "policy-decision" type Event Object with the policy_life parameter "once" and the operation_id of the operation.
Depending upon the policy, a decision for one operation may be made before any attempt of it, and is then recorded before that attempt with its attempt number.</t>
        <t>A standing decision applies to all later operations of the same kind and target.
For a tool invocation, the target is a tool, or all of the tools of a server when no tool is named.
It is recorded as a "policy-decision" type Event Object with the policy_life parameter "standing" and no operation_id.
Operations covered by a standing decision have no "policy-decision" type Event Object of their own.
A standing decision applies until a later "policy-decision" type Event Object for the same operation and target replaces it, or until the end of the vCon.
When a host starts a new vCon while standing decisions from an earlier vCon are still in effect, it <bcp14>SHOULD</bcp14> record a "policy-decision" type Event Object for each of them at the start of the new vCon.</t>
        <t>TODO: how a standing decision for one tool and a standing decision for all of the tools of the same server interact (e.g. which applies when both are in effect).</t>
      </section>
    </section>
    <section anchor="state-model">
      <name>Tool Invocation State Model</name>
      <t>A tool invocation starts with a "tool-invocation" type Event Object, after any policy decision which applies to it (see <xref target="policy-model"/>).
The invocation, and each attempt of it, follows the state model shown in <xref target="fig-states"/>.
Each transition is recorded as an Event Object of the type that labels it.</t>
      <figure anchor="fig-states">
        <name>Tool Invocation States</name>
        <artwork><![CDATA[
                tool-invocation (attempt n) <- - - - - - - - - -+
                            |                                   .
+- Active ------------------|-------------------------------+   .
| +- Working ---------------|-----------------------------+ |   .
| |                         v                             | |   .
| |   +-----------+   tool-pending   +-----------+        | |   .
| |   |  Running  |----------------->|  Pending  |        | |   .
| |   +-----------+                  +-----------+        | |   .
| |       ^   |                        |   ^              | |   .
| |   (2) |   | (1)                (1) |   | (2)          | |   .
| |       |   v                        v   |              | |   .
| |   +----------------------------------------+          | |   .
| |   |             Input Required             |          | |   .
| |   +----------------------------------------+          | |   .
| +-------------------------------------------------------+ |   .
|         |                          |                      |   .
|         | tool-timeout             | tool-cancel          |   .
|         v                          v                      |   .
|   +-----------+  tool-cancel  +------------------+        |   .
|   | Timed Out |-------------->| Cancel Requested |        |   .
|   +-----------+               +------------------+        |   .
+-----------------------------------------------------------+   .
                            |                                   .
       tool-result, tool-failure, tool-error, tool-denied       .
                            v                                   .
+- Attempt Ended -------------------------------------------+   .
|  +-----------+  +--------+  +---------+  +--------+       |   .
|  | Completed |  | Failed |  | Errored |  | Denied |       |- -+
|  +-----------+  +--------+  +---------+  +--------+       |
+-----------------------------------------------------------+

  (1) tool-input   (2) tool-input-response
  tool-progress may occur in Running, Pending, Timed Out and
  Cancel Requested.
  - - - next attempt: same operation_id, attempt n + 1
]]></artwork>
      </figure>
      <t>The states are:</t>
      <ul spacing="normal">
        <li>
          <t>Running - the request has been sent to the tool and it is performing the operation</t>
        </li>
        <li>
          <t>Pending - the tool has accepted the request and will complete it later</t>
        </li>
        <li>
          <t>Input Required - the tool has asked the agent for input before it continues</t>
        </li>
        <li>
          <t>Timed Out - the agent has stopped waiting for a response</t>
        </li>
        <li>
          <t>Cancel Requested - the agent has asked the tool to stop</t>
        </li>
        <li>
          <t>Completed, Failed, Errored and Denied - the attempt has ended</t>
        </li>
      </ul>
      <t>Running, Pending and Input Required are the Working states.
The Working states, Timed Out and Cancel Requested are the Active states.
Timed Out and Cancel Requested are not final.
A tool may still respond after the agent has timed out or asked it to stop, and that response is recorded.</t>
      <t>The following table defines the transitions.</t>
      <table>
        <name>Tool Invocation State Transitions</name>
        <thead>
          <tr>
            <th align="left">From State</th>
            <th align="left">Event Object Type</th>
            <th align="left">To State</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">(start of an attempt)</td>
            <td align="left">tool-invocation</td>
            <td align="left">Running</td>
          </tr>
          <tr>
            <td align="left">Running</td>
            <td align="left">tool-pending</td>
            <td align="left">Pending</td>
          </tr>
          <tr>
            <td align="left">Running, Pending, Timed Out, Cancel Requested</td>
            <td align="left">tool-progress</td>
            <td align="left">(unchanged)</td>
          </tr>
          <tr>
            <td align="left">Running, Pending</td>
            <td align="left">tool-input</td>
            <td align="left">Input Required</td>
          </tr>
          <tr>
            <td align="left">Input Required</td>
            <td align="left">tool-input-response</td>
            <td align="left">Running or Pending, the state from which the input was requested</td>
          </tr>
          <tr>
            <td align="left">Running, Pending, Input Required</td>
            <td align="left">tool-timeout</td>
            <td align="left">Timed Out</td>
          </tr>
          <tr>
            <td align="left">Running, Pending, Input Required, Timed Out</td>
            <td align="left">tool-cancel</td>
            <td align="left">Cancel Requested</td>
          </tr>
          <tr>
            <td align="left">any Active state</td>
            <td align="left">tool-result</td>
            <td align="left">Completed</td>
          </tr>
          <tr>
            <td align="left">any Active state</td>
            <td align="left">tool-failure</td>
            <td align="left">Failed</td>
          </tr>
          <tr>
            <td align="left">any Active state</td>
            <td align="left">tool-error</td>
            <td align="left">Errored</td>
          </tr>
          <tr>
            <td align="left">any Active state</td>
            <td align="left">tool-denied</td>
            <td align="left">Denied</td>
          </tr>
        </tbody>
      </table>
      <t>TODO: should a "tool-input-response" type Event Object return to the state from which the input was requested, as above, or always to Running?</t>
      <t>A vCon records what was observed.
An Event Object which does not follow the state model (e.g. because an earlier Event Object was not observed) is still recorded.</t>
      <section anchor="attempts">
        <name>Attempts</name>
        <t>An invocation may take more than one attempt.
Each attempt starts with a "tool-invocation" type Event Object and follows the state model above.
All attempts of an invocation have the same operation_id, and each later attempt has the next attempt number.
An agent may retry after any ended attempt, for example after "tool-denied" when it has obtained more authorization, or after "tool-error".
Every attempt <bcp14>SHOULD</bcp14> be recorded, so that the escalation leading to the final attempt can be reviewed.</t>
        <t>The Event Objects of an attempt carry its attempt number, so that a late response is associated with the attempt to which it responds.</t>
      </section>
    </section>
    <section anchor="parameter-definitions">
      <name>Parameter Definitions</name>
      <section anchor="event-types">
        <name>Event Object Types and Parameters</name>
        <t>The following types of events are defined in this document:</t>
        <ul spacing="normal">
          <li>
            <t>"policy-decision" - the agent or its host made a policy decision whether an operation may be performed</t>
          </li>
        </ul>
        <t>and the following, collectively referred to as the tool event types:</t>
        <ul spacing="normal">
          <li>
            <t>"tool-invocation" - the agent sent a request to the tool</t>
          </li>
          <li>
            <t>"tool-pending" - the tool accepted the request and will complete it later</t>
          </li>
          <li>
            <t>"tool-progress" - the tool reported progress or partial output</t>
          </li>
          <li>
            <t>"tool-input" - the tool asked the agent for input before it continues</t>
          </li>
          <li>
            <t>"tool-input-response" - the agent sent the input requested by the tool</t>
          </li>
          <li>
            <t>"tool-result" - the tool completed the operation and returned its output</t>
          </li>
          <li>
            <t>"tool-failure" - the tool performed or attempted the operation and reported an error</t>
          </li>
          <li>
            <t>"tool-error" - the request failed at the protocol level (e.g. an unknown tool or invalid arguments)</t>
          </li>
          <li>
            <t>"tool-denied" - the tool refused to perform the operation</t>
          </li>
          <li>
            <t>"tool-timeout" - the agent stopped waiting for a response from the tool</t>
          </li>
          <li>
            <t>"tool-cancel" - the agent asked the tool to stop</t>
          </li>
        </ul>
        <t>The "policy-decision" type Event Object records the decision of the policy of the agent or its host, before the operation is performed (see <xref target="policy-model"/>).
It is not a response from a tool.</t>
        <t>The "tool-denied" type Event Object records a refusal by the tool, after the request was sent to it.
It is used only when the response from the tool is identified by the protocol as a denial (e.g. for <xref target="MCP"/>, an HTTP 401 or 403 response).
A refusal which the protocol does not distinguish from other errors is recorded as a "tool-failure" type Event Object, with the refusal in its content.</t>
        <t>The "tool-invocation" type Event Object records the request actually sent to the tool.</t>
        <t>In the Event Object types defined in this document:</t>
        <ul spacing="normal">
          <li>
            <t>the sessions parameter references the Session Object(s) in which the agent performed, or decided whether to perform, the operation</t>
          </li>
          <li>
            <t>the party parameter references the agent, including in the Event Objects for policy decisions and for responses from the tool</t>
          </li>
          <li>
            <t>the tool is identified by the server and tool parameters in the "tool-invocation" type Event Object and in a "policy-decision" type Event Object for the "tool-invocation" operation, and the operation by the operation_id parameter in the other tool event types</t>
          </li>
        </ul>
        <t>TODO: the dialog parameter in <xref target="VCON-CORE"/>; decide whether it applies to the Event Object types defined in this document (e.g. a "tool-invocation" which an agent made in response to a Dialog Object).</t>
        <section anchor="event-object-parameter-applicability-by-type">
          <name>Event Object Parameter Applicability by Type</name>
          <t>The following tables summarize which Event Object parameters apply to each Event Object type defined in this document.
The parameter definitions in the subsections of this document are definitive; these tables are provided as a summary.
The symbols used in the tables are: M the parameter <bcp14>MUST</bcp14> be present, S the parameter <bcp14>SHOULD</bcp14> be present, O the parameter is optional, X the parameter <bcp14>MUST NOT</bcp14> be present.
"Content" is the body, encoding and mediatype parameters or the url, content_hash and mediatype parameters (see <xref target="event-content"/>).</t>
          <t>The following table applies to the "policy-decision" type Event Object for the "tool-invocation" operation.</t>
          <table>
            <name>Policy Decision Event Parameters</name>
            <thead>
              <tr>
                <th align="left">Parameter</th>
                <th align="left">policy-decision, policy_life "once"</th>
                <th align="left">policy-decision, policy_life "standing"</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">type</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">time</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">sessions</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">party</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">decision</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">policy_life</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">reason</td>
                <td align="left">O</td>
                <td align="left">O</td>
              </tr>
              <tr>
                <td align="left">operation</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">operation_id</td>
                <td align="left">M</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">attempt</td>
                <td align="left">M</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">server</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">tool</td>
                <td align="left">M</td>
                <td align="left">O</td>
              </tr>
              <tr>
                <td align="left">content</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">attachment</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
            </tbody>
          </table>
          <table>
            <name>Tool Event Parameters, Part 1</name>
            <thead>
              <tr>
                <th align="left">Parameter</th>
                <th align="left">tool-invocation</th>
                <th align="left">tool-pending</th>
                <th align="left">tool-progress</th>
                <th align="left">tool-input</th>
                <th align="left">tool-input-response</th>
                <th align="left">tool-result</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">type</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">time</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">sessions</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">party</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">operation_id</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">attempt</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">server</td>
                <td align="left">M</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">tool</td>
                <td align="left">M</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">content</td>
                <td align="left">S</td>
                <td align="left">O</td>
                <td align="left">S</td>
                <td align="left">S</td>
                <td align="left">S</td>
                <td align="left">S</td>
              </tr>
              <tr>
                <td align="left">attachment</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
              </tr>
            </tbody>
          </table>
          <table>
            <name>Tool Event Parameters, Part 2</name>
            <thead>
              <tr>
                <th align="left">Parameter</th>
                <th align="left">tool-failure</th>
                <th align="left">tool-error</th>
                <th align="left">tool-denied</th>
                <th align="left">tool-timeout</th>
                <th align="left">tool-cancel</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">type</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">time</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">sessions</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">party</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">operation_id</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">attempt</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
                <td align="left">M</td>
              </tr>
              <tr>
                <td align="left">server</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">tool</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
                <td align="left">X</td>
              </tr>
              <tr>
                <td align="left">content</td>
                <td align="left">S</td>
                <td align="left">S</td>
                <td align="left">S</td>
                <td align="left">O</td>
                <td align="left">O</td>
              </tr>
              <tr>
                <td align="left">attachment</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
                <td align="left">O</td>
              </tr>
            </tbody>
          </table>
          <t>The decision, policy_life, reason and operation parameters <bcp14>MUST NOT</bcp14> be present in the tool event types.</t>
          <t>The content of each Event Object type is:</t>
          <ul spacing="normal">
            <li>
              <t>"policy-decision" - none, the arguments of an invocation are recorded only in its "tool-invocation" type Event Object</t>
            </li>
            <li>
              <t>"tool-invocation" - the arguments sent to the tool</t>
            </li>
            <li>
              <t>"tool-pending" - any reference to the pending operation returned by the tool (e.g. a task handle)</t>
            </li>
            <li>
              <t>"tool-progress" - the progress report or the partial output</t>
            </li>
            <li>
              <t>"tool-input" - the request for input</t>
            </li>
            <li>
              <t>"tool-input-response" - the input sent to the tool</t>
            </li>
            <li>
              <t>"tool-result" - the output of the tool</t>
            </li>
            <li>
              <t>"tool-failure" - the error reported by the tool</t>
            </li>
            <li>
              <t>"tool-error" - the protocol error</t>
            </li>
            <li>
              <t>"tool-denied" - the reason given by the tool for the denial (e.g. for <xref target="MCP"/>, the required scopes and the error description)</t>
            </li>
            <li>
              <t>"tool-timeout" - any detail of the timeout (e.g. how long the agent waited)</t>
            </li>
            <li>
              <t>"tool-cancel" - any reason for the cancellation sent to the tool</t>
            </li>
          </ul>
          <t>As the arguments are recorded only in the "tool-invocation" type Event Object, the arguments of an invocation which is disallowed, or for which permission is not granted, are not recorded.</t>
          <t>TODO: whether "tool-input-response" carries the outcome of the response (e.g. accept, decline or cancel in <xref target="MCP"/>) as a parameter of its own, rather than only in its content.</t>
        </section>
        <section anchor="event-operation-id">
          <name>operation_id</name>
          <t>The operation_id parameter identifies the operation to which this event relates.</t>
          <ul spacing="normal">
            <li>
              <t>operation_id: "String"</t>
            </li>
          </ul>
          <t>The operation_id parameter <bcp14>MUST</bcp14> be present in the Event Object types defined in this document, other than "policy-decision" type Event Objects with the policy_life "standing", in which it <bcp14>MUST NOT</bcp14> be present.
All of the Event Objects for an operation, across all of its attempts, <bcp14>MUST</bcp14> have the same operation_id.
The operation_id <bcp14>MUST</bcp14> be unique among the operations in the vCon.</t>
          <t>The operation_id is assigned by the agent or its host, and is not the request identifier of the protocol used to perform the operation (e.g. to invoke the tool).
The protocol request identifier may change between attempts or when a request is reissued.
When a policy decision is made for an operation alone, the operation_id is assigned when the decision is made, before the operation is performed.
It can then also be referenced by the permission request and response Event Objects to be defined in a future document (see <xref target="directives"/>).</t>
        </section>
        <section anchor="event-attempt">
          <name>attempt</name>
          <t>The attempt parameter indicates the attempt of the operation to which this event relates.</t>
          <ul spacing="normal">
            <li>
              <t>attempt: "UnsignedInt"</t>
            </li>
          </ul>
          <t>The attempt parameter <bcp14>MUST</bcp14> be present in the Event Object types defined in this document, other than "policy-decision" type Event Objects with the policy_life "standing", in which it <bcp14>MUST NOT</bcp14> be present.
In a "policy-decision" type Event Object, it is the attempt which the decision precedes.
The first attempt of an operation is 1, and each later attempt is one more than the attempt before it (see <xref target="attempts"/>).</t>
        </section>
        <section anchor="event-decision">
          <name>decision</name>
          <t>The decision parameter indicates the outcome of a policy decision.</t>
          <ul spacing="normal">
            <li>
              <t>decision: "String"</t>
            </li>
          </ul>
          <t>The decision parameter <bcp14>MUST</bcp14> be present in "policy-decision" type Event Objects.
The value <bcp14>MUST</bcp14> be one of:</t>
          <ul spacing="normal">
            <li>
              <t>"allowed" - no permission is needed to perform the operation</t>
            </li>
            <li>
              <t>"permission-required" - permission is required before the operation is performed</t>
            </li>
            <li>
              <t>"disallowed" - the operation is disallowed</t>
            </li>
          </ul>
        </section>
        <section anchor="event-policy-life">
          <name>policy_life</name>
          <t>The policy_life parameter indicates how long a policy decision applies (see <xref target="policy-decisions"/>).</t>
          <ul spacing="normal">
            <li>
              <t>policy_life: "String"</t>
            </li>
          </ul>
          <t>The policy_life parameter <bcp14>MUST</bcp14> be present in "policy-decision" type Event Objects.
The value <bcp14>MUST</bcp14> be one of:</t>
          <ul spacing="normal">
            <li>
              <t>"once" - the decision applies to one operation only</t>
            </li>
            <li>
              <t>"standing" - the decision applies to later operations until it is replaced or the vCon ends</t>
            </li>
          </ul>
        </section>
        <section anchor="event-reason">
          <name>reason</name>
          <t>The reason parameter gives the reason for a policy decision (e.g. why an operation was disallowed).</t>
          <ul spacing="normal">
            <li>
              <t>reason: "String" (optional)</t>
            </li>
          </ul>
          <t>The reason parameter <bcp14>MAY</bcp14> be present in "policy-decision" type Event Objects.</t>
        </section>
        <section anchor="event-operation">
          <name>operation</name>
          <t>The operation parameter indicates the kind of operation to which a policy decision applies.</t>
          <ul spacing="normal">
            <li>
              <t>operation: "String"</t>
            </li>
          </ul>
          <t>The operation parameter <bcp14>MUST</bcp14> be present in "policy-decision" type Event Objects.
This document defines the value "tool-invocation", for the invocation of a tool.
For the "tool-invocation" operation, the server and tool parameters identify the tool (see <xref target="event-server"/> and <xref target="event-tool"/>).</t>
          <t>TODO: other operations (e.g. access to a resource, delegation to another agent, sharing data with another agent or service, and in contact centers, recording), the parameters which identify them, and whether operation names need a registry.</t>
        </section>
        <section anchor="event-server">
          <name>server</name>
          <t>The server parameter identifies the server which provides the tool.</t>
          <ul spacing="normal">
            <li>
              <t>server: "String"</t>
            </li>
          </ul>
          <t>The server parameter <bcp14>MUST</bcp14> be present in "tool-invocation" type Event Objects and in "policy-decision" type Event Objects for the "tool-invocation" operation.
It <bcp14>MUST NOT</bcp14> be present in the other tool event types.
The value is one of:</t>
          <ul spacing="normal">
            <li>
              <t>the URL of the server, when it has one (e.g. an <xref target="MCP"/> server reached over HTTP)</t>
            </li>
            <li>
              <t>the name of the server, when it has no URL (e.g. for <xref target="MCP"/>, the name in serverInfo of a server reached over stdio)</t>
            </li>
            <li>
              <t>"!host", when the tool is provided by the host</t>
            </li>
          </ul>
          <t>A server name <bcp14>MUST NOT</bcp14> start with "!", which is reserved for values defined by this document or a vCon extension.
The "!" character is not allowed in DNS host names or IPv6 addresses, and cannot start a URL.</t>
          <t>A server name is not guaranteed to be unique (e.g. the name in <xref target="MCP"/> serverInfo), so the URL <bcp14>SHOULD</bcp14> be used when there is one.</t>
        </section>
        <section anchor="event-tool">
          <name>tool</name>
          <t>The tool parameter identifies the tool that was invoked, or to which a policy decision applies.</t>
          <ul spacing="normal">
            <li>
              <t>tool: "String"</t>
            </li>
          </ul>
          <t>The tool parameter <bcp14>MUST</bcp14> be present in "tool-invocation" type Event Objects, and in "policy-decision" type Event Objects for the "tool-invocation" operation with the policy_life "once".
It <bcp14>MAY</bcp14> be present in "policy-decision" type Event Objects for the "tool-invocation" operation with the policy_life "standing", and when absent, the decision applies to all of the tools of the server.
It <bcp14>MUST NOT</bcp14> be present in the other tool event types.
The value is the name of the tool as known to the server (e.g. for <xref target="MCP"/>, the name of the tool in the tools/call request).
A tool name is unique within a server, so the server and tool parameters together identify the tool.</t>
          <t>TODO: whether a standing "policy-decision" type Event Object may name a list of tools of a server, rather than one tool or all of them.</t>
        </section>
        <section anchor="event-content">
          <name>Event Content</name>
          <t>The content of a tool event type is included inline or referenced externally, in the same way as Dialog Object content in <xref target="VCON-CORE"/>.</t>
          <t>For inline included content:</t>
          <ul spacing="normal">
            <li>
              <t>body: "*" (optional in a redacted vCon)</t>
            </li>
            <li>
              <t>encoding: "String"</t>
            </li>
          </ul>
          <t>Alternatively, for externally referenced content:</t>
          <ul spacing="normal">
            <li>
              <t>url: "String" (optional in a redacted vCon)</t>
            </li>
            <li>
              <t>content_hash: "ContentHash" | "ContentHash[]"</t>
            </li>
          </ul>
          <t>The media type of the content:</t>
          <ul spacing="normal">
            <li>
              <t>mediatype: "String" (required for inline content)</t>
            </li>
          </ul>
          <t>The body and url parameters <bcp14>MUST NOT</bcp14> both be present in the same Event Object.
The mediatype parameter <bcp14>MUST</bcp14> be present for inline content, as for other inline content in <xref target="VCON-CORE"/> (e.g. "application/json" for the arguments of an <xref target="MCP"/> tool invocation).
It is not required when the content is absent.</t>
        </section>
        <section anchor="event-attachment">
          <name>attachment</name>
          <t>The attachment parameter references files which are passed to or returned by the tool.</t>
          <ul spacing="normal">
            <li>
              <t>attachment: "UnsignedInt" | "UnsignedInt[]" (optional)</t>
            </li>
          </ul>
          <t>The value of the attachment parameter is the index, or an array of indices, into the attachments Object array to the Attachment Objects to which this event relates.</t>
        </section>
      </section>
    </section>
    <section anchor="directives">
      <name>Requirements for Permission and Directive Events</name>
      <t>This section is informative.</t>
      <t>When a policy decision requires permission, or an agent needs direction, the agent asks the person or agent on whose behalf it is acting, and they respond.
These requests and responses are part of the conversation.
They occur outside tool invocations as well as within them, and also in contact centers (e.g. consent to record and IVR menu choices).
For this reason they are not defined in this document.
Event Object types for them need to be defined in a future document.
The following requirements have been identified so far.</t>
      <ul spacing="normal">
        <li>
          <t>PD-1: permission requests and responses, with responses beyond yes or no (e.g. allow once, allow for the Session, always allow or a choice from a menu)</t>
        </li>
        <li>
          <t>PD-2: a request and its response refer to the policy decision and the operation they apply to (e.g. by operation_id)</t>
        </li>
        <li>
          <t>PD-3: a response given by a button press (e.g. a "keydown" type Event Object) is linked to the request it answers</t>
        </li>
        <li>
          <t>PD-4: a question from a tool ("tool-input") which is passed on to the person or a parent agent, and its answer, are correlated with the "tool-input"</t>
        </li>
        <li>
          <t>PD-5: step-up consent after a "tool-denied" (e.g. an <xref target="MCP"/> HTTP 403 with insufficient scope) is correlated with the retried attempt</t>
        </li>
        <li>
          <t>PD-6: directive requests which are not about an operation (e.g. a clarifying choice put to a person)</t>
        </li>
        <li>
          <t>PD-7: a subagent asking its parent agent, rather than a person</t>
        </li>
        <li>
          <t>PD-8: directives no one asked for (e.g. stop, redirect, change of mode, and grant or revocation of a permission)</t>
        </li>
        <li>
          <t>PD-9: requests which end other than with an answer (withdrawn, timed out or expired, and declined versus dismissed)</t>
        </li>
        <li>
          <t>PD-10: requests passed along a chain of agents, and the answer passed back, across Sessions</t>
        </li>
        <li>
          <t>PD-11: who may answer a request, including more than one approver</t>
        </li>
        <li>
          <t>PD-12: answers given out of band (e.g. <xref target="MCP"/> URL mode elicitation), where only the outcome is observed</t>
        </li>
        <li>
          <t>PD-13: the kind of answer (e.g. free text, a form with a schema, or a single or multiple choice)</t>
        </li>
        <li>
          <t>PD-14: a response or an unprompted grant which changes the policy (e.g. always allow) is linked to the standing "policy-decision" type Event Object that follows it</t>
        </li>
      </ul>
      <t>In the absence of that document, a request and its response may be recorded with the existing Objects of <xref target="VCON-CORE"/>:</t>
      <ul spacing="normal">
        <li>
          <t>the question and the answer as Dialog Objects</t>
        </li>
        <li>
          <t>a button press as a "keydown" type Event Object</t>
        </li>
      </ul>
      <t>These do not record the link to the policy decision and the operation, which is why Event Object types for requests and responses need to be defined.</t>
    </section>
    <section anchor="compatibility-considerations">
      <name>Compatibility Considerations</name>
      <t>The Event Object types defined in this document are new values of the Event Object type parameter.
An implementation that does not recognize this extension ignores Event Objects with a type which it does not recognize, as described in <xref target="VCON-CORE"/>.
It can still process the rest of the vCon correctly, as the Dialog, Attachment and other Objects do not depend on these Event Object types.</t>
      <t>The parameters defined in this document apply only to the Event Object types defined in this document, and so are ignored with them.</t>
    </section>
    <section anchor="incompatibility-considerations">
      <name>Incompatibility Considerations</name>
      <t>This extension introduces no incompatibilities in the processing of the conversation itself.</t>
      <t>TODO: the content of the tool event types may contain data that must be redacted (see <xref target="privacy-and-integrity-considerations"/>).
An implementation that redacts a vCon but does not recognize this extension might copy the tool event types unchanged into the redacted vCon.
Decide whether "tool-invocation" is therefore required in the critical parameter when tool event types with content are present, or whether <xref target="VCON-CORE"/> already requires unrecognized Objects to be removed when redacting.</t>
    </section>
    <section anchor="privacy-and-integrity-considerations">
      <name>Privacy and Integrity Considerations</name>
      <t>The content of the tool event types can contain personally identifiable information, party identifying data, the contents of files, credentials and other secrets, and data belonging to third parties.
The arguments of a "tool-invocation" and the output of a "tool-result" are the most likely to contain such data.
The content of the tool event types is subject to redaction in the same way as Dialog Object content in <xref target="VCON-CORE"/>.
The body or url parameter <bcp14>MAY</bcp14> be absent in a redacted vCon.</t>
      <t>The tool and server parameters can themselves reveal information about the conversation (e.g. the name of a tool which accesses a medical record).
The reason parameter of a "policy-decision" type Event Object can reveal the policy of the host, and may contain data from the conversation.</t>
      <t>Externally referenced content <bcp14>MUST</bcp14> have a content_hash, as for other externally referenced files in <xref target="VCON-CORE"/>.</t>
      <t>Credentials (e.g. access tokens) used to invoke a tool <bcp14>MUST NOT</bcp14> be recorded in the Event Object types defined in this document.
This includes the content of a "tool-denied" type Event Object.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="VCON-CORE"/> apply.</t>
      <ul spacing="normal">
        <li>
          <t>The output of a tool may contain instructions intended to manipulate an agent (e.g. prompt injection).
Such content is recorded as it was received, and implementations processing a vCon <bcp14>MUST NOT</bcp14> act on instructions in the content of the tool event types.</t>
        </li>
        <li>
          <t>TODO: other security considerations.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="vcon-json-registry-additions">
        <name>vCon JSON Registry Additions</name>
        <section anchor="vcon-extensions-names-registry">
          <name>vCon Extensions Names Registry</name>
          <t>The following extension name is added to the vCon Extensions Names Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Extension Name</th>
                <th align="left">Extension Description</th>
                <th align="left">Change Controller</th>
                <th align="left">Specification Document(s)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">tool-invocation</td>
                <td align="left">policy decision and tool invocation Event Object types</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="extension-name"/> RFC XXXX</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="event-type-name-registry">
          <name>Event Type Name Registry</name>
          <t>The following defines additional values for the Event Type Name Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Event Type Name</th>
                <th align="left">Event Type Description</th>
                <th align="left">Change Controller</th>
                <th align="left">Specification Document(s)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">policy-decision</td>
                <td align="left">operation policy decision event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-invocation</td>
                <td align="left">tool invocation request sent event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-pending</td>
                <td align="left">tool invocation pending event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-progress</td>
                <td align="left">tool invocation progress event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-input</td>
                <td align="left">tool input request event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-input-response</td>
                <td align="left">tool input response event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-result</td>
                <td align="left">tool invocation result event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-failure</td>
                <td align="left">tool reported failure event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-error</td>
                <td align="left">tool invocation protocol error event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-denied</td>
                <td align="left">tool denied invocation event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-timeout</td>
                <td align="left">tool invocation timeout event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool-cancel</td>
                <td align="left">tool invocation cancel event</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-types"/> RFC XXXX</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="event-object-parameter-names-registry">
          <name>Event Object Parameter Names Registry</name>
          <t>The following defines additional values for the Event Object Parameter Names Registry.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Parameter Name</th>
                <th align="left">Parameter Description</th>
                <th align="left">Change Controller</th>
                <th align="left">Specification Document(s)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">operation_id</td>
                <td align="left">operation identifier</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-operation-id"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">attempt</td>
                <td align="left">operation attempt number</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-attempt"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">decision</td>
                <td align="left">policy decision outcome</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-decision"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">policy_life</td>
                <td align="left">policy decision life</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-policy-life"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">reason</td>
                <td align="left">policy decision reason</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-reason"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">operation</td>
                <td align="left">kind of operation of a policy decision</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-operation"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">server</td>
                <td align="left">tool server URL or name</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-server"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">tool</td>
                <td align="left">tool name</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-tool"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">body</td>
                <td align="left">inline tool event content</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-content"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">encoding</td>
                <td align="left">inline tool event content encoding</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-content"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">url</td>
                <td align="left">externally referenced tool event content</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-content"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">content_hash</td>
                <td align="left">externally referenced tool event content hash</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-content"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">mediatype</td>
                <td align="left">tool event content media type</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-content"/> RFC XXXX</td>
              </tr>
              <tr>
                <td align="left">attachment</td>
                <td align="left">tool event attachment index or indices</td>
                <td align="left">IESG</td>
                <td align="left">
                  <xref target="event-attachment"/> RFC XXXX</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="JSON">
          <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="VCON-CORE">
          <front>
            <title>The JSON format for vCon - Conversation Data Container</title>
            <author fullname="Daniel Petrie" initials="D." surname="Petrie">
              <organization>SIPez LLC</organization>
            </author>
            <date day="31" month="October" year="2026"/>
            <abstract>
              <t>   vCon is a standardized framework for the exchange of conversational
   data.  Conversations, which may involve one or more participants,
   occur across a wide variety of modes and application platforms.  This
   document defines a JSON format for representing conversational data,
   encompassing metadata, conversation media, related documents, and
   analysis.  The goal of this standard is to provide an abstracted,
   platform-independent data format for conversations, regardless of the
   mode or application platform.  By doing so, it facilitates the
   integration and seamless exchange of conversational data across
   application platforms, enterprises, and trust boundaries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-vcon-vcon-core-05"/>
        </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="CDDL">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="ROADMAP">
          <front>
            <title>vCon for AI Agent Conversations: Requirements, Gaps and Extension Roadmap</title>
            <author fullname="Daniel Petrie" initials="D." surname="Petrie">
              <organization>SIPez LLC</organization>
            </author>
            <date day="2" month="November" year="2026"/>
            <abstract>
              <t>   AI agents converse with people, other agents and tools.  There is a
   growing need to capture these conversations for audit, compliance and
   review.  This document sorts the requirements for capturing agent
   conversations into those that fit vCon, those better met by plain
   logging and those that need other solutions.  It then identifies the
   gaps in vCon and proposes a strawman set of vCon extensions to fill
   them.  It is intended as a discussion document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-petrie-vcon-agent-audit-roadmap-00"/>
        </reference>
        <reference anchor="AUDIT-ARCH">
          <front>
            <title>An Architecture for Auditing Agent Delegation and Interactions</title>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="7" month="September" year="2026"/>
            <abstract>
              <t>   This document describes an architecture for auditing of agent-driven
   interactions on the Internet.  Autonomous and semi-autonomous
   software agents, including those based on artificial intelligence,
   increasingly act on behalf of users, organizations, and services.
   Existing auditing mechanisms often capture isolated system events but
   do not consistently represent delegation relationships, user intent,
   or evolving authorization.  In agent-driven systems, auditability
   requires linking intent, delegation, authorization, and execution.
   The proposed architecture enables this through distributed audit
   record generation, propagation of audit context, optional
   attestation, and additional logging for transparency.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kuehlewind-audit-architecture-01"/>
        </reference>
        <reference anchor="MCP" target="https://modelcontextprotocol.io/specification/">
          <front>
            <title>Model Context Protocol Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP-2025-11-25" target="https://modelcontextprotocol.io/specification/2025-11-25">
          <front>
            <title>Model Context Protocol Specification, Revision 2025-11-25</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP-2026-07-28" target="https://modelcontextprotocol.io/specification/2026-07-28">
          <front>
            <title>Model Context Protocol Specification, Revision 2026-07-28</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 713?>

<section anchor="mapping-to-mcp">
      <name>Mapping to MCP</name>
      <t>This appendix describes how the Event Object types defined in this document map to the messages of <xref target="MCP"/>.
The mapping is informative.
It is given for two revisions, <xref target="MCP-2025-11-25"/> and <xref target="MCP-2026-07-28"/>, as the later revision changes how input, pending operations and retries are handled.</t>
      <table>
        <name>Mapping of Event Object Types to MCP</name>
        <thead>
          <tr>
            <th align="left">Event Object Type</th>
            <th align="left">MCP Revision 2025-11-25</th>
            <th align="left">MCP Revision 2026-07-28</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">policy-decision</td>
            <td align="left">no message; the host applies its policy</td>
            <td align="left">no message; the host applies its policy</td>
          </tr>
          <tr>
            <td align="left">tool-invocation</td>
            <td align="left">tools/call request</td>
            <td align="left">tools/call request</td>
          </tr>
          <tr>
            <td align="left">tool-pending</td>
            <td align="left">task-augmented response to tools/call</td>
            <td align="left">task handle returned by the tasks extension (io.modelcontextprotocol/tasks)</td>
          </tr>
          <tr>
            <td align="left">tool-progress</td>
            <td align="left">notifications/progress</td>
            <td align="left">notifications/progress on the response stream of the request</td>
          </tr>
          <tr>
            <td align="left">tool-input</td>
            <td align="left">elicitation/create request from the server; for a task, task status input_required</td>
            <td align="left">result with resultType "input_required"; for a task, task status input_required</td>
          </tr>
          <tr>
            <td align="left">tool-input-response</td>
            <td align="left">response to elicitation/create</td>
            <td align="left">inputResponses in a retry of the original request; for a task, inputResponses in tasks/update</td>
          </tr>
          <tr>
            <td align="left">tool-result</td>
            <td align="left">tools/call result with isError absent or false</td>
            <td align="left">tools/call result with isError absent or false</td>
          </tr>
          <tr>
            <td align="left">tool-failure</td>
            <td align="left">tools/call result with isError true</td>
            <td align="left">tools/call result with isError true</td>
          </tr>
          <tr>
            <td align="left">tool-error</td>
            <td align="left">JSON-RPC error response</td>
            <td align="left">JSON-RPC error response</td>
          </tr>
          <tr>
            <td align="left">tool-denied</td>
            <td align="left">HTTP 401 or 403 response (HTTP transports only)</td>
            <td align="left">HTTP 401 or 403 response (HTTP transports only)</td>
          </tr>
          <tr>
            <td align="left">tool-timeout</td>
            <td align="left">no message; the client stops waiting</td>
            <td align="left">no message; the client stops waiting</td>
          </tr>
          <tr>
            <td align="left">tool-cancel</td>
            <td align="left">notifications/cancelled</td>
            <td align="left">notifications/cancelled; for a task, tasks/cancel</td>
          </tr>
        </tbody>
      </table>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>The operation_id is not the JSON-RPC request id, which changes when a request is reissued.</t>
        </li>
        <li>
          <t>The server parameter is the URL of a server reached over HTTP, or the name in serverInfo of a server reached over stdio.
<xref target="MCP"/> tool names are unique within a server, and <xref target="MCP"/> says the serverInfo name is not guaranteed to be unique.</t>
        </li>
        <li>
          <t>In <xref target="MCP-2026-07-28"/>, input is supplied by retrying the original request.
TODO: decide whether that retry is a new attempt, with a "tool-invocation" type Event Object, or only a "tool-input-response" type Event Object in the same attempt.</t>
        </li>
        <li>
          <t>A tool reached over the stdio transport has no HTTP response, so a refusal by it is reported as a tool execution error and recorded as "tool-failure".</t>
        </li>
        <li>
          <t>After an HTTP 403 with insufficient scope, a client acting for a user may obtain a token with more scope and retry the request.
The retry is a new attempt of the same invocation (see <xref target="attempts"/>).
The consent of the user is a permission request (see PD-5 in <xref target="directives"/>).</t>
        </li>
        <li>
          <t>In <xref target="MCP-2026-07-28"/>, notifications/cancelled <bcp14>MUST NOT</bcp14> be used to cancel a task, which is cancelled with tasks/cancel.
Cancellation of a task is cooperative, and the task may still end with another status.</t>
        </li>
        <li>
          <t>A sampling/createMessage request from the server, which is deprecated in <xref target="MCP-2026-07-28"/>, is not supported by this document.</t>
        </li>
      </ul>
    </section>
    <section anchor="example-vcons">
      <name>Example vCons</name>
      <t>TODO</t>
    </section>
    <section anchor="json-schema-for-the-tool-invocation-extension">
      <name>JSON Schema for the tool-invocation Extension</name>
      <t>This appendix provides a JSON schema for the parameters defined by the tool-invocation extension.
The text in the preceding sections of this document defines the normative definition of these parameters.
If the JSON schema provided below differs from that in the text of the preceding sections, the text is the definitive definition and the JSON schema below is to be considered incorrect.</t>
      <t>This schema supplements, and does not replace, the core vCon JSON schema.
To fully validate a vCon that uses this extension, apply both the core vCon schema and this schema to the vCon.</t>
      <t>The JSON schema definition below has been formatted with line breaks to print nicely on the page.
The unformatted version of the JSON schema can be downloaded from:
https://raw.githubusercontent.com/dgpetrie/draft-petrie-vcon-tool-invocation/refs/heads/main/tool_invocation_json_schema.json</t>
      <artwork><![CDATA[
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ietf.org/vcon/schemas/tool-invocation-extension
    .json",
  "title": "vCon Tool Invocation (tool-invocation) Extension",
  "description": "Supplemental JSON schema for the Event Object t
    ypes and parameters defined by the vCon tool-invocation exten
    sion, RFCXXXX. This schema is applied in addition to the core
     vCon schema; it constrains only the Event Object types and p
    arameters added by this extension and leaves all other parame
    ters to the core schema. The text of this document is normati
    ve; this schema is informational.",
  "type": "object",
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/EventToolInvocationExtension"
      }
    }
  },
  "definitions": {
    "EventToolInvocationExtension": {
      "type": "object",
      "description": "Event Object types and parameters added to 
        the core Event Object by the tool-invocation extension",
      "properties": {
        "type": {
          "type": "string",
          "description": "policy-decision, tool-invocation, tool-
            pending, tool-progress, tool-input, tool-input-respon
            se, tool-result, tool-failure, tool-error, tool-denie
            d, tool-timeout or tool-cancel, in addition to the co
            re Event Object types"
        },
        "decision": {
          "type": "string",
          "enum": [
            "allowed",
            "permission-required",
            "disallowed"
          ],
          "description": "Outcome of a policy decision (policy-de
            cision only)"
        },
        "policy_life": {
          "type": "string",
          "enum": [
            "once",
            "standing"
          ],
          "description": "Whether a policy decision applies to on
            e operation only or is standing (policy-decision only
            )"
        },
        "reason": {
          "type": "string",
          "description": "Reason for a policy decision (policy-de
            cision only)"
        },
        "operation": {
          "type": "string",
          "description": "Kind of operation to which a policy dec
            ision applies; this document defines tool-invocation 
            (policy-decision only)"
        },
        "operation_id": {
          "type": "string",
          "description": "Identifier of the operation; the same f
            or all Event Objects of an operation, across all of i
            ts attempts; not present in standing policy decisions
            "
        },
        "attempt": {
          "type": "integer",
          "minimum": 1,
          "description": "Attempt of the operation, starting at 1
            ; not present in standing policy decisions"
        },
        "server": {
          "type": "string",
          "description": "URL of the server which provides the to
            ol, otherwise its name, or !host for a tool provided 
            by the host (policy-decision and tool-invocation only
            )"
        },
        "tool": {
          "type": "string",
          "description": "Name of the tool as known to the server
             (policy-decision and tool-invocation only); absent i
            n a standing policy decision for all of the tools of 
            the server"
        },
        "mediatype": {
          "type": "string",
          "description": "Media type of the content of a tool eve
            nt type; MUST be present for inline content"
        },
        "encoding": {
          "type": "string",
          "description": "Encoding of the inline content of a too
            l event type: json, none or base64url"
        },
        "body": {
          "description": "Inline content of a tool event type; an
            y JSON value when encoding is json, otherwise a strin
            g"
        },
        "url": {
          "type": "string",
          "description": "URL of the externally referenced conten
            t of a tool event type"
        },
        "content_hash": {
          "oneOf": [
            {
              "type": "string",
              "pattern": "^[a-z0-9]+-[A-Za-z0-9_-]+$"
            },
            {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[a-z0-9]+-[A-Za-z0-9_-]+$"
              }
            }
          ],
          "description": "Hash of the externally referenced conte
            nt of a tool event type"
        },
        "attachment": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "array",
              "items": {
                "type": "integer",
                "minimum": 0
              }
            }
          ],
          "description": "Index or indices of the Attachment Obje
            cts passed to or returned by the tool (tool event typ
            es only)"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "policy-decision"
                ]
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "required": [
              "sessions",
              "party",
              "decision",
              "policy_life",
              "operation",
              "server"
            ],
            "allOf": [
              {
                "not": {
                  "anyOf": [
                    {
                      "required": [
                        "mediatype"
                      ]
                    },
                    {
                      "required": [
                        "encoding"
                      ]
                    },
                    {
                      "required": [
                        "body"
                      ]
                    },
                    {
                      "required": [
                        "url"
                      ]
                    },
                    {
                      "required": [
                        "content_hash"
                      ]
                    },
                    {
                      "required": [
                        "attachment"
                      ]
                    }
                  ]
                }
              },
              {
                "if": {
                  "properties": {
                    "policy_life": {
                      "const": "once"
                    }
                  },
                  "required": [
                    "policy_life"
                  ]
                },
                "then": {
                  "required": [
                    "operation_id",
                    "attempt",
                    "tool"
                  ]
                },
                "else": {
                  "not": {
                    "anyOf": [
                      {
                        "required": [
                          "operation_id"
                        ]
                      },
                      {
                        "required": [
                          "attempt"
                        ]
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "tool-invocation",
                  "tool-pending",
                  "tool-progress",
                  "tool-input",
                  "tool-input-response",
                  "tool-result",
                  "tool-failure",
                  "tool-error",
                  "tool-denied",
                  "tool-timeout",
                  "tool-cancel"
                ]
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "required": [
              "sessions",
              "party",
              "operation_id",
              "attempt"
            ],
            "allOf": [
              {
                "not": {
                  "anyOf": [
                    {
                      "required": [
                        "decision"
                      ]
                    },
                    {
                      "required": [
                        "policy_life"
                      ]
                    },
                    {
                      "required": [
                        "reason"
                      ]
                    },
                    {
                      "required": [
                        "operation"
                      ]
                    }
                  ]
                }
              },
              {
                "if": {
                  "properties": {
                    "body": {}
                  },
                  "required": [
                    "body"
                  ]
                },
                "then": {
                  "required": [
                    "encoding"
                  ],
                  "not": {
                    "required": [
                      "url"
                    ]
                  }
                }
              },
              {
                "if": {
                  "required": [
                    "url"
                  ]
                },
                "then": {
                  "required": [
                    "content_hash"
                  ]
                }
              }
            ]
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "tool-invocation"
                ]
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "required": [
              "server",
              "tool"
            ]
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "tool-pending",
                  "tool-progress",
                  "tool-input",
                  "tool-input-response",
                  "tool-result",
                  "tool-failure",
                  "tool-error",
                  "tool-denied",
                  "tool-timeout",
                  "tool-cancel"
                ]
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "server"
                  ]
                },
                {
                  "required": [
                    "tool"
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  }
}
]]></artwork>
    </section>
    <section anchor="cddl-for-the-tool-invocation-extension">
      <name>CDDL for the tool-invocation Extension</name>
      <t>This appendix provides a <xref target="CDDL"/> definition for the parameters defined by the tool-invocation extension.
The text in the preceding sections of this document defines the normative definition of these parameters.
If the CDDL provided below differs from that in the text of the preceding sections, the text is the definitive definition and the CDDL below is to be considered incorrect.</t>
      <t>This CDDL is used together with the core vCon CDDL in <xref target="VCON-CORE"/>.
It adds Event Object types through the event-type-ext socket of the core CDDL, and needs no other core socket.
Each Event Object type it defines ends with a socket of its own, so that another vCon extension can add parameters to it.</t>
      <t>The unformatted version of the CDDL can be downloaded from:
https://raw.githubusercontent.com/dgpetrie/draft-petrie-vcon-tool-invocation/refs/heads/main/tool_invocation.cddl</t>
      <sourcecode type="cddl"><![CDATA[
; CDDL for the tool-invocation vCon extension
; (draft-petrie-vcon-tool-invocation).
; The prose of the draft is normative.
; This CDDL is informative.
; Constraints that cannot be expressed in CDDL are stated in
; comments.
;
; This CDDL is used together with the core vCon CDDL
; (draft-ietf-vcon-vcon-core, syntax version 0.5.0).
; It adds Event Object types through the event-type-ext socket of
; the core CDDL, and uses no other core socket.
; It uses these rules of the core CDDL: date_type,
; session_index_or_list_type, party_index_type,
; attachment_index_or_list_type, media_type_value_type and
; file_content_type.
;
; Each Event Object type defined here ends with a socket of its
; own, so that another vCon extension can add parameters to it.
; A policy decision for another kind of operation is added by
; another vCon extension, as a group of its own with the type
; "policy-decision" and its own operation value, through the
; event-type-ext socket.
;
; Not enforced by this CDDL:
; - A vCon which contains these Event Object types SHOULD list
;   "tool-invocation" in its extensions parameter.
; - operation_id MUST be unique among the operations in the vCon,
;   and all of the Event Objects of an operation, across all of
;   its attempts, MUST have the same operation_id.
; - Each later attempt of an operation is one more than the
;   attempt before it.
; - mediatype MUST be present for inline content.

$$event-type-ext //= ( event_policy_decision_once_type )
$$event-type-ext //= ( event_policy_decision_standing_type )
$$event-type-ext //= ( event_tool_invocation_type )
$$event-type-ext //= ( event_tool_response_type )

; Parameters common to the Event Object types of this extension
; party references the agent, also in the Event Objects for
; policy decisions and for responses from the tool.
event_ti_common_type = (
    "time": date_type,
    sessions: session_index_or_list_type,
    party: party_index_type
  )

; Policy decision event type
policy_decision_value_type = "allowed" / "permission-required" /
    "disallowed"

; Parameters common to the policy-decision type
policy_decision_common_type = (
    type: "policy-decision",
    event_ti_common_type,
    decision: policy_decision_value_type,
    ? reason: tstr
  )

; A decision for one tool invocation
event_policy_decision_once_type = (
    policy_decision_common_type,
    operation: "tool-invocation",
    policy_life: "once",
    operation_id: tstr,
    attempt: attempt_value_type,
    tool_identity_type,
    * $$event-policy-decision-ext
  )

; A standing decision for one tool, or for all of the tools of a
; server when tool is absent
; Not enforced by this CDDL:
; - A standing decision applies until a later policy-decision type
;   Event Object for the same operation and target replaces it, or
;   until the end of the vCon.
event_policy_decision_standing_type = (
    policy_decision_common_type,
    operation: "tool-invocation",
    policy_life: "standing",
    server: server_value_type,
    ? tool: tstr,
    * $$event-policy-decision-ext
  )

; The server and the tool together identify a tool.
tool_identity_type = (
    server: server_value_type,
    tool: tstr
  )

; The URL of the server when it has one, otherwise the name of the
; server, or "!host" for a tool provided by the host.
; Not enforced by this CDDL:
; - A server name MUST NOT start with "!".
server_value_type = tstr

; Parameters common to the tool event types
event_tool_common_type = (
    event_ti_common_type,
    operation_id: tstr,
    attempt: attempt_value_type
  )

; Content of a tool event type, inline or externally referenced
; as for Dialog Content in the core CDDL.
; Not enforced by this CDDL:
; - Content SHOULD be present in the tool event types, other than
;   tool-pending, tool-timeout and tool-cancel, in which it is
;   optional (see Event Object Parameter Applicability by Type).
event_tool_content_type = (
    ? mediatype: media_type_value_type,
    file_content_type
  )

; Tool invocation event type
; The content is the arguments sent to the tool.
event_tool_invocation_type = (
    type: "tool-invocation",
    event_tool_common_type,
    tool_identity_type,
    ? event_tool_content_type,
    ? attachment: attachment_index_or_list_type,
    * $$event-tool-invocation-ext
  )

; Event types for the responses from the tool, and for the input,
; timeout and cancellation of the agent
; Not enforced by this CDDL:
; - tool-denied is used only when the response from the tool is
;   identified by the protocol as a denial.
event_tool_response_type = (
    type: "tool-pending" / "tool-progress" / "tool-input" /
      "tool-input-response" / "tool-result" / "tool-failure" /
      "tool-error" / "tool-denied" / "tool-timeout" /
      "tool-cancel",
    event_tool_common_type,
    ? event_tool_content_type,
    ? attachment: attachment_index_or_list_type,
    * $$event-tool-ext
  )

; The first attempt of an operation is 1.
attempt_value_type = uint .ge 1
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
