<?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.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-ai-agent-discovery-invocation-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="HAIDIP">HTTP-Based AI Agent Discovery and Invocation Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-ai-agent-discovery-invocation-00"/>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <author initials="Y." surname="Chao" fullname="Yihan Chao">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>chaoyh@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="C." surname="Du" fullname="Chenguang Du">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>ducg@zgclab.edu.cn</email>
      </address>
    </author>
    <date year="2025" month="October" day="15"/>
    <area>IRTF</area>
    <workgroup>Network Management Research Group</workgroup>
    <keyword>HTTP</keyword>
    <keyword>AI Agent</keyword>
    <keyword>Service Discovery</keyword>
    <abstract>
      <?line 117?>

<t>This document proposes a standardized protocol for <strong>discovery and invocation of AI agents</strong> over HTTP. It defines a common metadata format for describing AI agents (including capabilities, I/O specifications, supported languages, tags, authentication methods, etc.), a semantic search mechanism to discover and match agents based on capabilities, and a unified RESTful invocation interface for calling those agents. The goal is to enable cross-platform interoperability among AI agents by providing a <strong>“discover and match”</strong> mechanism and a <strong>unified invocation entry point</strong> via standard HTTP. Security considerations, including authentication and trust measures, are also discussed. This specification aims to facilitate the formation of multi-agent systems by making it easy to find the right agent for a task and invoke it in a consistent manner across different vendors and platforms.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://example.com/LATEST"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-cui-ai-agent-discovery-invocation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:WG@example.com"/>),
        which is archived at <eref target="https://example.com/WG"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/USER/REPO"/>.</t>
    </note>
  </front>
  <middle>
    <?line 122?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>AI agents (autonomous services powered by AI models) are proliferating rapidly across industries. Multi-agent collaboration scenarios are becoming common, where different AI agents need to work together. However, <strong>technology fragmentation has led to “capability islands” – agents from different vendors and platforms often cannot easily interconnect or form coordinated teams</strong>. Many enterprises have deployed AI agents (a PwC survey indicates 79% of companies have done so, with 66% reporting significant productivity gains), yet they face challenges in integrating these diverse agents into unified workflows.</t>
      <t>One key challenge is <strong>discoverability</strong>. Currently, finding an appropriate agent for a given task often relies on manual searches or browsing through catalogs, which is inefficient. Agents are distributed across many platforms and repositories, and each may have its own way of categorizing or exposing them, making it complicated for a developer or system to find the best match. For example, some platforms host thousands of AI tools but require users to navigate by predefined categories, and others provide basic search services but still depend on manual addition and configuration of agents by the user. Moreover, different agents might advertise overlapping or unclear capabilities, leading to confusion and the risk of misuse if an agent’s claimed capabilities are not trustworthy.</t>
      <t>Another challenge is the <strong>lack of a unified invocation interface</strong>. Once an agent is identified, calling it may involve platform-specific APIs, custom input/output formats, or unique authentication schemes. Integrators must write custom integration code for each new agent service. This heterogeneity hinders the seamless composition of agents from different sources. A unified calling mechanism would allow clients to invoke any compliant agent through a common protocol, hiding underlying platform differences – a concept similar to services like OpenRouter, which provide a single API to access models from multiple providers.</t>
      <t><strong>Scope of this Document:</strong> This document addresses the above challenges by specifying:</t>
      <ul spacing="normal">
        <li>
          <t>A standard <strong>agent metadata schema</strong> to describe an AI agent’s capabilities, interfaces, and requirements.</t>
        </li>
        <li>
          <t>A <strong>discovery and matching API</strong> (RESTful) that allows clients to find suitable agents via semantic search of agent metadata.</t>
        </li>
        <li>
          <t>A <strong>unified invocation API</strong> that defines how to call any compliant AI agent and receive results in a consistent format.</t>
        </li>
        <li>
          <t><strong>Security and authentication guidelines</strong> to ensure only authorized and safe interactions with agents.</t>
        </li>
        <li>
          <t>An <strong>example interaction flow</strong> illustrating how a client can discover and invoke an agent using this protocol.</t>
        </li>
      </ul>
      <t>By defining these elements, we aim to foster an open ecosystem where AI agents from different vendors can be registered in a common directory, searched by capability, and invoked in a uniform way. This will reduce integration effort and enable dynamic “agent teams” to be composed on the fly, as all agents adhere to a common invocation standard.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>For clarity, this draft uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t><strong>AI Agent (or simply Agent):</strong> An AI-driven service or tool that performs a specific task or set of tasks. An agent typically exposes a network API (in this context, an HTTP-based API) <xref target="RFC9110"/> to accept requests and return results. It could be a large language model interface, an image analysis service, an autonomous task-solving agent, etc.</t>
        </li>
        <li>
          <t><strong>Agent Metadata (Agent Description or *Agent Card*):</strong> A machine-readable description of an agent’s capabilities and interfaces. This is often a JSON document containing the agent’s identity, functionality, input/output specifications, supported languages, tags for search, and details on how to invoke and authenticate to the agent. The metadata acts as the agent’s “profile” in the discovery system.</t>
        </li>
        <li>
          <t><strong>Client:</strong> An entity (application, service, or another agent) that searches for and invokes agents via this protocol.</t>
        </li>
        <li>
          <t><strong>Registry / Discovery Service:</strong> A service implementing the discovery and matching API as defined in this document. It indexes agent metadata (from one or many providers) and allows clients to search for agents. In some deployments, this could be a centralized agent directory, whereas in others it could be a distributed or federated index. The registry may also facilitate the unified invocation (as a gateway) or simply provide the information for direct invocation.</t>
        </li>
        <li>
          <t><strong>Unified Invocation Endpoint:</strong> The standardized interface (HTTP method, path, and data format) through which a client sends requests to an agent and receives responses, abstracting away the agent’s internal implementation details. This could be implemented by each agent (each agent hosting a conformant API) or by a gateway that routes requests to agents.</t>
        </li>
      </ul>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <t>The following ASCII diagram illustrates the high-level architecture of the discovery and invocation protocol:</t>
      <t>```text
                             +------------------+
                             |      Client      |
                             +------------------+
                               |    ^      |
           Discovery &amp; Search  |    |      |  Unified Invocation
               (HTTP API)      v    |      |  (POST /agents/{id}/invoke)
                         +----------------------+
                         |   Registry/Gateway   |
                         +----------------------+
                            ^              |
      Search Results (metadata, score)     | Forwarded Invocation
                            |              v
                            |        +--------------+
                            |        | Agent Host 1 |
                            |        +--------------+
                            |               |
                            |               v
                            |        +--------------+
                            |        | Agent Host 2 |
                            |        +--------------+
                            |               |
                            |               v
                            |        +--------------+
                            |        | Agent Host N |
                            |        +--------------+
                            |
          +-----------------+-----------------------------+
          |                                               |
          |   (Optional Direct Invocation, dashed line)   |
          v                                               v
      +--------------+     +--------------+     +--------------+
      | Agent Host 1 |     | Agent Host 2 | ... | Agent Host N |
      +--------------+     +--------------+     +--------------+</t>
      <artwork><![CDATA[
     Figure 1: Client ↔ Registry/Gateway ↔ Agent Hosts
               (Direct and Gateway Invocation)
]]></artwork>
      <t>```</t>
      <t>This figure illustrates the overall architecture of the discovery and invocation protocol.</t>
      <t><em>Note:</em> The Client first uses the Registry/Gateway for discovery (search and metadata retrieval). For invocation, two modes are supported: (1) <strong>Gateway Invocation</strong>, where the Client calls the unified endpoint and the Registry forwards the request to the appropriate Agent Host; and (2) <strong>Direct Invocation</strong>, where the Client may optionally call an Agent Host directly. This dual-path design balances interoperability, centralized control, and low-latency flexibility.</t>
    </section>
    <section anchor="agent-metadata-format">
      <name>Agent Metadata Format</name>
      <ul spacing="normal">
        <li>
          <t>Each agent discoverable via this protocol must publish an <strong>Agent Metadata</strong> record (an “Agent Card”), typically as a JSON <xref target="RFC8259"/> object, optionally available at a standard URL (e.g., <tt>/.well-known/agent-card.json</tt>). Metadata enables both human understanding and machine processing for discovery and validation.  </t>
          <t>
Key fields include:  </t>
          <ul spacing="normal">
            <li>
              <t><strong><tt>id</tt></strong>: Unique identifier (UUID, slug, or URI).</t>
            </li>
            <li>
              <t><strong><tt>name</tt> / <tt>description</tt></strong>: Human-readable label and short description of the agent’s purpose.</t>
            </li>
            <li>
              <t><strong><tt>capabilities</tt></strong>: Array of tags describing core functions (e.g., <tt>translation</tt>, <tt>vision</tt>).</t>
            </li>
            <li>
              <t><strong><tt>operations</tt></strong>: (Optional) Structured list of operations, each with name, description, input/output schema, and endpoint. For simple agents, <tt>inputs</tt>/<tt>outputs</tt> at the top level may be used instead.</t>
            </li>
            <li>
              <t><strong><tt>endpoint</tt></strong>: Base URL or path to invoke the agent.</t>
            </li>
            <li>
              <t><strong><tt>authentication</tt></strong>: Required auth method (<tt>none</tt>, <tt>API key</tt>, <tt>OAuth2</tt>, <tt>mTLS</tt>).</t>
            </li>
            <li>
              <t><strong>Optional fields</strong>: <tt>supported_languages</tt>, <tt>tags</tt>, <tt>protocols</tt>, <tt>version</tt>, <tt>provider</tt>, <tt>license</tt>, <tt>certification</tt>, <tt>last_update</tt>.</t>
            </li>
          </ul>
          <t>
This metadata format provides a consistent way to describe agent identity, capabilities, and invocation details, supporting secure discovery, filtering, and interoperability across registries.</t>
        </li>
      </ul>
      <t><strong>Example Agent Metadata (JSON):</strong></t>
      <t><tt>json
{
  "id": "translator-001",
  "name": "MultiLang Text Translator",
  "description": "Translates text between English and French.",
  "capabilities": ["translation", "language"],
  "inputs": {
    "text": "string",
    "source_language": "string",
    "target_language": "string"
  },
  "outputs": {
    "translated_text": "string"
  },
  "supported_languages": ["en", "fr"],
  "tags": ["NLP", "translation", "English", "French"],
  "authentication": "API Key",
  "endpoint": "https://api.example.com/agents/translator-001",
  "version": "1.0",
  "provider": "ExampleAI",
  "certification": {
    "verified": true,
    "quality_score": 4.8
  }
}
</tt></t>
      <t><em>Figure: An illustrative example of an agent's metadata. This agent can translate text between English and French. It requires an API Key for authentication and is marked as verified with a high quality score. In practice, the metadata format could be extended or serialized in different ways (JSON, JSON-LD, etc.), but a concise JSON structure as shown is the default.</em></t>
      <t>The metadata format is crucial for discovery; it should provide enough information for a registry service to index the agent effectively (including semantic content from <tt>name</tt>, <tt>description</tt>, and <tt>tags</tt>) and for clients to know how to interact with the agent. Communities working on agent interoperability have stressed the importance of a comprehensive, machine-readable “agent card” schema that covers capabilities, interfaces, and security requirements. Formal schemas for inputs/outputs allow programmatic integration and even automated composition of agents, and including protocol/auth details ensures that invocation can be automated. Each agent should keep its metadata updated (preferably accessible at a stable URL) to reflect its current capabilities and interface. Caching and indexing by discovery services can be aided by standard HTTP cache headers on the metadata resource (e.g., ETag, Last-Modified). In the future, a dedicated media type for agent metadata could be registered (for example, <tt>application/agent-card+json</tt>) to make it easier to identify and validate these documents.</t>
    </section>
    <section anchor="discovery-and-matching-mechanism">
      <name>Discovery and Matching Mechanism</name>
      <t>A registry exposes RESTful endpoints for listing, searching, and retrieving agent metadata. The discovery API supports both structured filters and semantic (natural language) search. Implementations may use embedding-based similarity or rule-based matching; the protocol only standardizes the interface and result format (including an optional relevance <tt>score</tt>).</t>
      <section anchor="discovery-service-api">
        <name>Discovery Service API</name>
        <t>At minimum, the discovery service provides the following endpoints:</t>
        <ul spacing="normal">
          <li>
            <t><strong>List All (Public) Agents:</strong> <tt>GET /agents</tt> (or <tt>/agents/public</tt>) – returns a list of agent metadata entries that are publicly available for discovery. This endpoint allows unauthenticated browsing of agent descriptions (for agents that are open to all). It may support query parameters for basic filtering (e.g., by capability or tag) and pagination. The response would typically be a JSON object containing an array of agents (each possibly abridged to key fields like id, name, description, etc.) and perhaps a count or pagination links.</t>
          </li>
          <li>
            <t><strong>Search Agents:</strong> <tt>POST /agents/search</tt> – allows the client to submit a search query and criteria to find matching agents. A POST method is used (rather than GET) to allow complex query parameters and to support semantic query content in the request body. This endpoint requires the client to be authenticated if the search should include private or entitled agents (see Security and Authentication below), ensuring that each client sees only the agents they are allowed to access. The request body and response format are described below.</t>
          </li>
        </ul>
        <t>These endpoints can be part of a single “registry” service. In federated scenarios, multiple registries might exist (e.g., enterprise-specific ones, or vendor-specific ones), but all would adhere to the same API structure so that a client could query any of them in a standard way.</t>
      </section>
      <section anchor="search-request-and-response">
        <name>Search Request and Response</name>
        <t><strong>Search Request:</strong> The client sends a JSON request to <tt>POST /agents/search</tt> describing what it is looking for. The format may include:</t>
        <ul spacing="normal">
          <li>
            <t><strong><tt>query</tt></strong> (string): A text description of the desired capability or task. This can be natural language (e.g., <tt>"Find an agent that can summarize a document"</tt> or <tt>"image classification of medical images"</tt>). The discovery service will perform a semantic match of this text against agent metadata (such as agent descriptions, names, and tags) using NLP techniques (embedding-based similarity, etc.).</t>
          </li>
          <li>
            <t><strong><tt>filters</tt></strong> (object, optional): Additional filtering criteria to narrow down results. For example:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>capability</tt> or <tt>capabilities</tt>: specify one or more required capability tags (e.g., <tt>"translation"</tt>).</t>
              </li>
              <li>
                <t><tt>language</tt> or <tt>supported_language</tt>: specify required language (e.g., <tt>"zh"</tt> to find agents that support Chinese).</t>
              </li>
              <li>
                <t><tt>authentication</tt>: specify if only certain auth types are acceptable (e.g., <tt>{"authentication": "none"}</tt> to find open/public agents).</t>
              </li>
              <li>
                <t><tt>provider</tt> or other metadata fields can also be used as filters.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>top</tt></strong> (integer, optional): The maximum number of results to return (for pagination or limiting result set). For example, <tt>top: 10</tt> for top 10 matches.</t>
          </li>
          <li>
            <t><strong><tt>skip</tt></strong> (integer, optional): The number of results to skip from the start (for pagination offset). For instance, <tt>skip: 10</tt> to get the next page after the top 10.</t>
          </li>
          <li>
            <t><strong><tt>ranked</tt></strong> (boolean, optional): If true (default), results are returned with a relevance score. If false, the service may return unranked or alphabetical list (mainly useful for listing endpoints).</t>
          </li>
          <li>
            <t><strong><tt>include_metadata</tt></strong> (boolean, optional): If true, include full metadata for each agent in the results. If false or omitted, the service might return only a summary (e.g., id, name, description, score) to reduce payload size, with an option to fetch full details separately (like via <tt>GET /agents/{id}</tt>).</t>
          </li>
        </ul>
        <t>A simple example of a search request JSON might look like:</t>
        <t><tt>json
{
  "query": "translate English to Spanish",
  "filters": {
    "capabilities": ["translation"],
    "supported_language": "es"
  },
  "top": 5
}
</tt></t>
        <t>This asks for up to 5 agents that can translate into Spanish, using a semantic match with the query text.</t>
        <t><strong>Search Response:</strong> The discovery service responds with a JSON object containing the search results. The typical fields in the response could be:</t>
        <ul spacing="normal">
          <li>
            <t><strong><tt>results</tt></strong> (array): A list of agent results, each containing:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>id</tt> (string): the agent’s identifier.</t>
              </li>
              <li>
                <t><tt>name</tt> (string): the agent’s name.</t>
              </li>
              <li>
                <t><tt>description</tt> (string): a short description (this helps the client understand why it was matched).</t>
              </li>
              <li>
                <t><tt>score</tt> (number, optional): a relevance score or confidence value for the match, typically between 0 and 1 (where 1 means a perfect match). This is based on semantic similarity of the query to the agent’s metadata. The score can help the client rank or filter results if needed.</t>
              </li>
              <li>
                <t>Other metadata fields: depending on the <tt>include_metadata</tt> parameter and the service’s default behavior, additional fields like capabilities, supported languages, etc., might be included. If full metadata is requested, this could even embed the entire agent metadata object for each result.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>count</tt></strong> (integer, optional): The total number of matching agents (if known), which can be useful for pagination UI.</t>
          </li>
          <li>
            <t><strong><tt>top</tt></strong>, <strong><tt>skip</tt></strong> (integers, optional): Echoing back the request’s paging parameters or indicating the current slice of results.</t>
          </li>
          <li>
            <t><strong><tt>query</tt></strong> (string, optional): Echo of the query for reference.</t>
          </li>
          <li>
            <t><strong><tt>search_time</tt></strong> (number, optional): Time taken to execute the search (in milliseconds, perhaps).</t>
          </li>
        </ul>
        <t>Example of a search response:</t>
        <t><tt>json
{
  "results": [
    {
      "id": "translator-001",
      "name": "MultiLang Text Translator",
      "description": "Translates text between English, French, and Spanish.",
      "score": 0.93
    },
    {
      "id": "spanish-gpt",
      "name": "SpanishGPT Agent",
      "description": "Large language model specialized in Spanish outputs.",
      "score": 0.89
    }
  ],
  "count": 2,
  "query": "translate English to Spanish",
  "top": 5,
  "skip": 0
}
</tt></t>
        <t>In this example, two agents were found. The first has a high match score of 0.93, likely because it explicitly mentions translating to Spanish in its metadata. The second is a more general LLM that can output Spanish, with a slightly lower relevance. The client could decide to pick the top result (translator-001) for the task.</t>
        <t>The discovery mechanism leverages <strong>semantic search</strong> internally. This means the registry service might transform agent descriptions and queries into vector embeddings and do a nearest-neighbor match, or apply NLP to understand the query’s intent. The protocol, however, abstracts those details — it simply defines the interface (what clients send and receive). The scoring mechanism and algorithm are implementation-specific, but including a <tt>score</tt> in results allows transparency and further client-side logic (for example, choosing only agents above a certain confidence, or showing the score in a UI).</t>
        <t>In addition to the free-text search, the registry could support structured queries (for instance, a client could search by specifying a capability tag and a required output format, etc.). Those can be expressed via the <tt>filters</tt> object or through specialized endpoints. For example, a GET request like <tt>GET /agents?capability=translation&amp;language=es</tt> could be defined as a shorthand for certain filters (especially for public agents). This draft prioritizes the semantic POST search for flexibility, but does not preclude simpler query interfaces.</t>
        <t>It’s important to note that access control can be enforced at search time: an authenticated client will only see agents it is allowed to invoke. For example, an enterprise might have private agents that only employees (with a token) can discover. The registry would then combine public agents and those private agents accessible to the client’s identity when returning search results. If a client is unauthenticated and hits the search endpoint (and if the service allows it at all), it might either reject the request or return only publicly discoverable agents.</t>
      </section>
      <section anchor="matching-and-ranking">
        <name>Matching and Ranking</name>
        <t>The <strong>matching</strong> process uses the agent metadata fields defined earlier. Key fields that influence matching include:</t>
        <ul spacing="normal">
          <li>
            <t>The agent’s <tt>name</tt> and <tt>description</tt>: for semantic similarity to the query text.</t>
          </li>
          <li>
            <t><tt>capabilities</tt> and <tt>tags</tt>: for direct filtering or boosting of relevance if the query contains those terms.</t>
          </li>
          <li>
            <t><tt>supported_languages</tt>: for matching queries that specify language requirements.</t>
          </li>
          <li>
            <t>Possibly <tt>input_schema</tt>/<tt>output_schema</tt>: for advanced use-cases where the query might specify required input/output types (though this is more likely handled via filters than semantic match).</t>
          </li>
          <li>
            <t>Any other textual field in metadata could be indexed and matched (even <tt>provider</tt> or <tt>operations.description</tt>, etc., depending on implementation).</t>
          </li>
        </ul>
        <t>The <strong>matching score</strong> in the response is typically a normalized similarity measure. The exact scale and meaning might vary (cosine similarity of embeddings, for instance), but this specification assumes a 0.0 to 1.0 range where higher is better. The client should treat the score as a relative indicator. The registry may also rank results by other heuristics (popularity, performance, freshness of agent, etc.) in addition to pure semantic score, but such ranking policies are outside the scope of this protocol. If non-semantic factors are included, the score should still aim to reflect overall relevance.</t>
      </section>
      <section anchor="example-of-discovery-process">
        <name>Example of Discovery Process</name>
        <ol spacing="normal" type="1"><li>
            <t><strong>Agent Registration (pre-discovery):</strong> Providers of agents register their agent metadata with the registry service. This could be done through an administration interface or by the registry crawling known agent metadata URLs. (The protocol for registration is not fully defined in this draft, but it could simply be an admin uploading the agent’s JSON metadata or providing the URL of the agent’s card. Some proposals suggest agents host their own metadata at a well-known URL, and registries periodically fetch and index them.)</t>
          </li>
          <li>
            <t><strong>Client Query:</strong> A client (e.g., an application looking for a translation service) sends a <tt>POST /agents/search</tt> request with a query, e.g., <em>“translate product descriptions to Chinese”</em>.</t>
          </li>
          <li>
            <t><strong>Semantic Matching:</strong> The discovery service processes the query. It might detect the language requirement (“to Chinese”) and capability (“translate”) and use these to filter or boost candidates. It computes similarity between the query and each agent’s metadata (perhaps using vector embeddings of the text). It filters out any agents the client is not authorized to see.</t>
          </li>
          <li>
            <t><strong>Result Delivery:</strong> The service responds with a list of matching agents, including their IDs, names, descriptions, and scores. The client inspects the results, maybe chooses the top one, or presents options to a user if this is an interactive scenario.</t>
          </li>
          <li>
            <t><strong>Agent Selection:</strong> The client picks an agent from the list that best fits the need (for example, the one with highest score that meets any other criteria like trust or cost). Now the client is ready to invoke the chosen agent.</t>
          </li>
        </ol>
        <t>The next section describes the invocation process once an agent has been discovered.</t>
      </section>
    </section>
    <section anchor="unified-invocation-interface">
      <name>Unified Invocation Interface</name>
      <t>Clients invoke agents via a standardized HTTP interface. Two deployment models are supported:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Direct Invocation:</strong> Call the agent's <tt>endpoint</tt> (agent-hosted API).</t>
        </li>
        <li>
          <t><strong>Gateway/Proxy Invocation:</strong> Call a registry/gateway with an agent identifier (e.g., <tt>POST /agents/{agent_id}/invoke</tt>), and the gateway routes/translates as necessary.</t>
        </li>
      </ul>
      <t><strong>Invocation characteristics:</strong></t>
      <ul spacing="normal">
        <li>
          <t>Method: <tt>POST</tt></t>
        </li>
        <li>
          <t>Content-Type: <tt>application/json</tt> (unless otherwise specified)</t>
        </li>
        <li>
          <t>Request body: conforms to the agent's <tt>input_schema</tt> or <tt>inputs</tt> definition (or includes an <tt>operation</tt> field if required)</t>
        </li>
        <li>
          <t>Authentication: as declared in <tt>authentication</tt> metadata (e.g., <tt>Authorization: Bearer &lt;token&gt;</tt>)</t>
        </li>
      </ul>
      <section anchor="invocation-request">
        <name>Invocation Request</name>
        <t>The invocation is done via <strong>HTTP POST</strong> to the agent’s invocation URL. The URL could be:</t>
        <ul spacing="normal">
          <li>
            <t>In direct mode: the <tt>endpoint</tt> from the agent metadata (for example, <tt>https://agent-host.example.com/invoke</tt> or similar).</t>
          </li>
          <li>
            <t>In gateway mode: a path on the gateway that includes the agent’s ID, for example: <tt>POST /agents/{agent_id}/invoke</tt> on the registry or router service.</t>
          </li>
        </ul>
        <t>In either case, the request method is POST (since we are typically sending a complex payload and possibly performing an action on the server side, which is not idempotent). The content type of the request <strong>MUST</strong> be <tt>application/json</tt> (unless the agent specifically expects binary input; see below). The body of the request contains the input data for the agent, formatted according to the agent’s specified input schema or format.</t>
        <t>For an agent with a single operation, the JSON body should include all the necessary parameters defined in the agent’s <tt>inputs</tt>. For example, using the translator agent example above, a request might look like:</t>
        <t><strong>POST</strong> <tt>https://api.example.com/agents/translator-001/invoke</tt>
          <strong>Content-Type:</strong> application/json</t>
        <t>Request body:</t>
        <t><tt>json
{
  "text": "Hello, how are you?",
  "source_language": "en",
  "target_language": "fr"
}
</tt></t>
        <t>This corresponds to the agent’s expected input fields. If the agent had multiple operations and a unified endpoint, there might be an additional field to specify which operation or capability to use. For instance, the JSON could include something like <tt>"operation": "translateText"</tt> if needed. Alternatively, different operations could be exposed at different URLs (e.g., <tt>/agents/xyz/translate</tt> vs <tt>/agents/xyz/summarize</tt>), in which case the operation is selected by the URL and no extra field is required.</t>
        <t>The protocol does not fix a specific parameter naming; it defers to the agent’s published schema. The only requirement is that the client’s JSON must conform to what the agent expects. For interoperability, using clear field names and standard data types (strings, numbers, booleans, or structured objects) is encouraged. Binary data (like images for an image-processing agent) should be handled carefully: typically, binary inputs can be provided either as URLs (pointing to where the data is stored), or as base64-encoded strings within the JSON, or by using an HTTP multipart request. This specification suggests that if agents need to receive large binary payloads, they either use URL references or out-of-scope mechanisms (like a separate upload and then an ID in the JSON). The core invocation remains JSON-based for simplicity and consistency.</t>
        <t><strong>Headers:</strong> If authentication is required (see Security section), the client must also include the appropriate headers (e.g., <tt>Authorization: Bearer &lt;token&gt;</tt> or an API key header) as dictated by the agent’s metadata. The invocation request may also include optional headers for correlation or debugging, such as a request ID, but those are not standardized here.</t>
      </section>
      <section anchor="invocation-response">
        <name>Invocation Response</name>
        <t>The agent (or gateway) will process the request and return a response. The HTTP status code and JSON body of the response follow these guidelines:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Success (2xx status):</strong> If the agent successfully performed its task and produced a result, the status SHOULD be <strong>200 OK</strong> (or <strong>201 Created</strong> if a new resource was created as a result, though usually for these actions 200 is fine). The response body will contain the output data in JSON. Ideally, the output JSON conforms to the agent’s advertised output schema.  </t>
            <t>
For example, for the translation request above, a success response might be:  </t>
            <t><tt>json
{
  "translated_text": "Bonjour, comment êtes-vous?"
}
</tt>  </t>
            <t>
Here the JSON structure matches what was described in the agent metadata’s <tt>outputs</tt>. If the output is complex (e.g., multiple fields or nested objects), those should appear accordingly. The response can include other informational fields if necessary (for example, some agents might return usage metrics, like tokens used or time taken, or a trace id for debugging, but these are optional and out of scope of the core spec).</t>
          </li>
          <li>
            <t><strong>Client Error (4xx status):</strong> If the request was malformed or invalid, the agent returns a <strong>4xx</strong> status code. The most common would be <strong>400 Bad Request</strong> for a JSON that doesn’t conform to the expected schema or missing required fields. For example, if the client omitted a required field <tt>target_language</tt>, the agent might respond with 400. The response body SHOULD include an error object explaining what went wrong. We define a simple standard for error objects:  </t>
            <t><tt>json
{
  "error": {
    "code": "InvalidInput",
    "message": "Required field 'target_language' is missing."
  }
}
</tt>  </t>
            <t>
Here, <tt>"code"</tt> is a short string identifier for the error type (e.g., <tt>InvalidInput</tt>, <tt>Unauthorized</tt>, <tt>NotFound</tt>), and <tt>"message"</tt> is a human-readable description. The agent can include additional details if available (e.g., a field name that is wrong, etc.). If the error is due to unauthorized access, <strong>401 Unauthorized</strong> or <strong>403 Forbidden</strong> should be used (with an appropriate error message indicating credentials are missing or insufficient). If the agent ID is not found (perhaps the client used an outdated reference), <strong>404 Not Found</strong> is appropriate.</t>
          </li>
          <li>
            <t><strong>Server/Agent Error (5xx status):</strong> If something goes wrong on the agent’s side during processing (an exception, a timeout while executing the task, etc.), the agent (or gateway) returns a <strong>5xx</strong> status (most likely <strong>500 Internal Server Error</strong> or <strong>502/504</strong> if there are upstream issues). The response should again include an error object. For example:  </t>
            <t><tt>json
{
  "error": {
    "code": "AgentError",
    "message": "The agent encountered an unexpected error while processing the request."
  }
}
</tt>  </t>
            <t>
The agent might log the detailed error internally, but only convey a generic message to the client for security. A <strong>503 Service Unavailable</strong> might be returned if the agent is temporarily overloaded or offline, indicating the client could retry later.</t>
          </li>
          <li>
            <t><strong>Status Codes Summary:</strong> In short, this protocol expects the use of standard HTTP status codes to reflect outcome (200 for success, 4xx for client-side issues, 5xx for server-side issues). Agents should avoid using 2xx if the operation did not semantically succeed (even if technically a response was generated). For example, if an agent is a composite that calls other services and one of those calls fails, it should propagate an error rather than returning 200 with an error in the data.</t>
          </li>
        </ul>
      </section>
      <section anchor="additional-considerations-for-invocation">
        <name>Additional Considerations for Invocation</name>
        <ul spacing="normal">
          <li>
            <t><strong>Streaming Responses:</strong> Some agents (especially those wrapping large language models) may produce results that are streamed (for example, token-by-token outputs). While this base protocol assumes a request-response pattern with the full result delivered at once, it can be extended to support streaming by using HTTP chunked responses or WebSockets. For instance, an agent might accept a parameter like <tt>stream: true</tt> and then send partial outputs as they become available. This is an advanced use case and not elaborated in this draft, but implementers should consider compatibility with streaming if real-time responsiveness is needed.</t>
          </li>
          <li>
            <t><strong>Batch Requests:</strong> If a client wants to send multiple independent requests to an agent in one go (for efficiency), the protocol can support that by allowing an array of input objects in the POST body instead of a single object. The response would then be an array of output results. This is optional and depends on agent support.</t>
          </li>
          <li>
            <t><strong>Idempotency and Retries:</strong> Most agent invocations are not strictly idempotent (since an agent might perform an action or have side effects), but many are pure functions (e.g., translate text). Clients and gateways should design with retry logic carefully — if a network failure happens, a retry might re-run an operation. It’s best to ensure that agents’ operations are either idempotent or have safeguards (for example, an operation that sends an email might have an idempotency key).</t>
          </li>
          <li>
            <t><strong>Operation Metadata:</strong> In cases where the agent defines multiple <tt>operations</tt> in its metadata, the invocation interface might allow a generic endpoint that accepts an operation name. Alternatively, each operation could be a sub-resource. This draft leaves the exact mechanism flexible: an implementation could choose one of these approaches. The key is that in either case, the invocation uses HTTP POST and a JSON body following the agent’s schema.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security is a critical aspect of this protocol. All discovery and invocation traffic MUST be protected with TLS <xref target="RFC8446"/>, and authentication mechanisms such as OAuth 2.0 <xref target="RFC6749"/>  bearer tokens, API keys, or mutual TLS are required except for public discovery endpoints. Registries MUST enforce per-client entitlements, ensuring that both search results and invocation access respect permissions and scopes. Gateways forwarding requests should authenticate themselves to agents, and agents should maintain stable identifiers and use signed responses when integrity is essential. All communication MUST be encrypted, and agents are encouraged to disclose data-retention or logging practices, while sensitive data is best handled by on-premises or certified agents. To mitigate abuse, registries and agents MUST implement rate limiting and quotas, particularly in semantic search scenarios. Trust mechanisms such as certification, test harnesses, or reputation systems may be used to validate agent claims, and metadata fields like “certification” or “quality_score” can inform client trust decisions. Systems SHOULD also provide audit and logging with privacy-aware retention, while clients must treat agent outputs as untrusted until verified, using sandboxing and validation before executing code or commands.</t>
    </section>
    <section anchor="example-interaction-flow">
      <name>Example Interaction Flow</name>
      <ol spacing="normal" type="1"><li>
          <t><strong>Search:</strong> Client <tt>POST /agents/search</tt> with <tt>{"query":"summarize an English document","filters":{"capabilities":["summarization"],"supported_language":"en"},"top":3}</tt>.</t>
        </li>
        <li>
          <t><strong>Select:</strong> Registry returns candidate agents with <tt>id</tt>, <tt>name</tt>, <tt>description</tt>, and <tt>score</tt>. Client retrieves full metadata via <tt>GET /agents/{id}</tt> if needed.</t>
        </li>
        <li>
          <t><strong>Invoke:</strong> Client <tt>POST</tt> to the agent's <tt>endpoint</tt> (or gateway path) with inputs conforming to agent schema and required auth header.</t>
        </li>
        <li>
          <t><strong>Handle Response:</strong> Client processes success or error response; may log usage and optionally rate/feedback the agent.</t>
        </li>
      </ol>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9110">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
            <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="RFC8259">
        <front>
          <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
          <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
          <date month="December" year="2017"/>
          <abstract>
            <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
            <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="90"/>
        <seriesInfo name="RFC" value="8259"/>
        <seriesInfo name="DOI" value="10.17487/RFC8259"/>
      </reference>
      <reference anchor="RFC6749">
        <front>
          <title>The OAuth 2.0 Authorization Framework</title>
          <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6749"/>
        <seriesInfo name="DOI" value="10.17487/RFC6749"/>
      </reference>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
    </references>
    <?line 477?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196ZLbVpbmf0XoHRDp6C4yi2SmZMllp2tLa7GzS7I0ytS4
a7p7nCBxScICARaWTNEuR9SvfoHpPxPR8wLzGvMmfpI531nuvQAp2a6amYiJ
aHdHiUkCuNtZvrNiOp3evfPBBx/Q/yQXZevq0rXTx3W6bJPnaf0mq27L5Mpt
tkXaOroGl71yZbpxSbvOm2SZFy5Z1tUmyXDPtK2yarqruhqXTLd11VaLqpht
sqStkpVrk6ZN69ZlMzxIhuGHLat6k7YJPfFIHvRre8hvp7++reo3q7rqtvSZ
v6LnHc10Nk+rOsnLvM3TImlc220nCd2aVGWxS0rneGCX5S3Nl4bJ66ZN5kW1
eJNUS/rTFVnDc3mB64/avC3cEd/X4Ma5SxbrtFy57NMkc4VrXXKUzue1uzlK
8iUGqhO+BzNv1lXd8sPOy11S0Xh1sqhoT8s2WaQlHoaJuGySzLuWn53WbtkV
SVm1GC0v27rKugVdV9dVLRO7rLA9PNHkNi8K3EfrTNKurWjL8kVa0Myzrs7L
lWwAZkaD7xJ6etKVugDbr8dV+Qva6HJRdBmtZnp6epTQFh5NccJNS+sqdasK
PmeexLN07orG/0SHlfyEY9JHyjwaOor5Dg/DI9qqKniHaQNom+gDvl10dY3d
unF1k1flp7QemmJWLfC4I4ybuLcpEaOz1VyBCFulTwzSJG/qdAOyndbLxVmy
btttc3ZyssrbdTefLarNySKdVyfxVXjQH4lmcEi1o0ctHE+HppLXshN62slW
5psmWb6kD5iskC5v0yPear99NFk6fKwEC6SLFmu/f0Tso9nbTcGL+sfnzyaJ
axez2WwsCwNDMmGdJUdfXF29nH6WYgPPL5LzFQZ9nDeLiraJDrnMiHFvqgXR
Ag30Ulnu6O4dIVQ84Pzi8cVL+oaucauq3p3RSS6ru3fu3tG9PdPjXHT5NKX/
xxjTzMaY5v75RC537zTdfJM3WFe729K9F0+unibJB0laNBUNl5eZ2zr6n7I9
miRHoPmqJvbEHxfnn9E/oLeLV1dPaUplt5m7+oxmQnOjf4hhGtqzrjlL2roj
kUML+JDWUruUBqJ77t7xdHaWfOla/EWiqqQ5b7Azr1zj0pp2+nNccvfOG7ej
SzJ6dDJNsJX8wTaS/7h09U1OZ+43lUZ1ZYfpJImO9NXn+EPW+xUNCW7TERI6
2rzAJb836iQyw/eYRyDB6McTeZwQ5Vny+vLJq5NXT16+wJfCNIdve3Z+9eTy
CgdH7E/ihmY4TeoKZEL7X7sNTR+kygKFty+ho6a9/OMsedTl+FOO+48VzV+/
qerVWXLV0IrWXZq8LnNmv3aH35q2dq7ljVjQV/yhdis6+rPkM5d/g234gIdL
i9t01yTpDe1FOi946EWV0Vj3Tk9PP34gf3ck4oj8Hq3zMqUbiWGTq2ePk5F7
u3DbNnn9hzGIQ6/jueK+7boq6UH46GSviVB3tITftzrtmcu62aLEFSQJZfNo
725vb2d66YwU20nYrh/drXVaRduVE2f773jD/gvNabXq0nLRlZCPVZ0SmR/c
tOSv3bVP/qZds62iWe/Wv/92taAR/D79pH14NEsed2EXHq1diRWv9Nv/T/Zh
n3pIx66GG0KiiMUyUT/P+NXTR5/cu3dqnz++//AT+/zRrx74zx8/ePDRGe6G
RA33q0h57po1X2my3EQN/0Day5EIe9sml63bQrs+zxd11cg1zRGLEOPzhP6b
6kH8wyz5rCMJXDHBs+RM7p/eP+VNd3XuGsyGNqrabLoyF9HdAPFA/Zw/ej5J
/jOhsuSjD5Mvq1ly7/4keewWDpJYn/OMTpnIPS97sw/fYvwiw/mdb7eFH+GW
BFry7Nlz0slrEo6rNaawrUia0M/vXs8XzG+N663mQx45rQk1BmEIhi5oFgvM
gkXi3TvnhIQ+d/2Z2nfJk5LICfPEPk/pK0yvP+mbPE2ed0WbT0W3PqpKSMD0
/XMmGfFV1/8KqKyY7S8iPpK0/sf85uz+h6cfz04/vvfw4d07r+jAS9r5FcPh
/iouvD5/PzX4Z7x/cFHytV0MVW8QvWHNTgAEtIz/m06nSTonFk4XLf5mpEVw
oWMtS7fRsRLaSoHoyyyts/xbAij2OIY1x8dZD6YEGAFSpMUxzmiOjxNcw8p5
lly0hLSXecnPpgPe0NUb16a0qtSQEx6euWZR53MmQXtSMhJciy8X6Tad5wVR
nmsmycXJi6TZukW+tGOfJE233VYwRhJQVEePoC/bdEX/i30G+tPZ0vjrKmsE
o40nWDRJEvyeKNjYOMDsvNkA6dmqedEC+3R+c0Zx9MT+7HBdSlCdZkc/vyIV
D6sg2q4cltkSuBRLB+THEmlSJAHl0TMWJquKrKCcgbUD4ROkptNupoDHjNr5
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
AfNM3iJ2lAAA

-->

</rfc>
