<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" docName="draft-correctover-gg-mcp-parameter-risk-01" category="info" ipr="trust200902" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="en">
  <link rel="license" href="https://trustee.ietf.org/license-info"/>
  <front>
    <title abbrev="MCP Parameter Risk Classes">MCP Parameter Risk Classes for Machine-Readable Risk Metadata</title>
    <author initials="G." surname="Wang" fullname="Guigui Wang">
      <organization>Correctover</organization>
      <address>
        <email>wgg234114134@163.com</email>
        <email>wangguigui@correctover.com</email>
        <uri>https://correctover.com</uri>
      </address>
    </author>
    <date year="2026" month="October" day="14"/>
    <abstract>
      <t>This document defines a fixed set of five canonical MCP parameter risk
      classes: semantic categories for sensitive parameters that appear in the
      JSON Schemas of Model Context Protocol (MCP) tool definitions, together
      with deterministic decision rules and boundary conditions for assigning
      those labels. The classes are designed to supply machine-readable,
      pre-invocation risk metadata about tool inputs, independent of any
      particular gateway, routing, or capability-profile specification.</t>
      <t>The classes and their decision rules were derived from, and applied
      against, a SHA-256-frozen empirical census of publicly reachable MCP
      servers. The frozen census and the classification suite that implements
      these rules are archived on Zenodo; the archived suite is the normative
      tie-breaker for exact matching behaviour.</t>
      <t>This is an Informational, individual submission. It defines the
      canonical classes and decision rules. Other specifications MAY cite this
      document as the canonical source of the class labels and MAY define their
      own operators that consume those labels; they SHOULD NOT re-derive or
      inline the normative decision rules into their own normative text.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>An agent system that invokes a remote Model Context Protocol (MCP)
      <xref target="ref-mcp"/> server is presented with a
      list of tools, each carrying a name, a free-text description, and an input
      JSON Schema. These artifacts are descriptive, not normative about risk:
      there is no standardized, machine-readable signal indicating that a given
      parameter carries a secret, names a filesystem path, executes a command
      string, moves money, or addresses an external network endpoint.</t>
      <t>Gateway pre-invocation checks, routing policies, and bounded-capability
      profiles all need exactly that signal, expressed in a small stable
      vocabulary that can be derived deterministically from a tool schema. This
      document specifies such a vocabulary: five canonical parameter risk
      classes and the exact lexical decision rules that assign them.</t>
      <t>The rules were not designed in isolation. They were developed against a
      census of publicly reachable MCP servers and run over a frozen snapshot of
      229,539 live tools on 13,089 reachable servers; the resulting class
      frequencies and high-consequence intersections are reported in
      <xref target="census"/>. The frozen census, its hashes, and the exact
      classification suite are archived on Zenodo (see
      <xref target="snapshot"/>).</t>
      <t>Throughout this document the measured dataset is referred to as
      <em>G-G, the MCP runtime measurement and audit dataset</em>. The two
      Zenodo records that archive the frozen snapshot were deposited under the
      earlier working title "MCP Atlas"; the archived bytes and hashes are
      unchanged by the rename.</t>
      <t>This document is standalone. It cites a separate Correctover
      Conformance Shape (CCS) document only for the unrelated runtime
      attestation layer (<xref target="ref-ccs"/>); the parameter classification
      logic here does not depend on CCS.</t>
    </section>

    <section anchor="terms">
      <name>Terminology</name>
      <dl>
        <dt>MCP tool</dt>
        <dd><t>A single callable capability exposed by an MCP server, with a
        name, a description, and an input JSON Schema.</t></dd>
        <dt>parameter property</dt>
        <dd><t>A named property in a tool input JSON Schema, identified by its
        property name and optional description string.</t></dd>
        <dt>class label</dt>
        <dd><t>One of the five canonical identifiers defined in
        <xref target="classes"/>.</t></dd>
        <dt>decision rule</dt>
        <dd><t>The deterministic predicate that assigns a class label to a
        parameter property, defined in <xref target="procedure"/> and
        <xref target="classes"/>.</t></dd>
        <dt>frozen snapshot</dt>
        <dd><t>The byte-frozen 2026-10-12 census corpus and the archived
        classification suite described in <xref target="snapshot"/>.</t></dd>
      </dl>
      <t>The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>,
      <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>, and
      <bcp14>MAY</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>
    </section>

    <section anchor="procedure">
      <name>Classification Procedure</name>
      <t>For every MCP tool, the classifier enumerates parameter properties as
      follows and applies each decision rule independently.</t>
      <section>
        <name>Property enumeration</name>
        <t>Properties are enumerated from the input JSON Schema in two
        locations:</t>
        <ul>
          <li>the top-level <tt>properties</tt> object; and</li>
          <li>every object schema nested under a top-level <tt>definitions</tt>
          or <tt>$defs</tt> key that itself contains a <tt>properties</tt>
          object.</li>
        </ul>
        <t>For each enumerated property the classifier records three values: the
        property name, the value of its <tt>description</tt> keyword as a string
        (empty when absent or non-string), and whether the property name appears
        in that schema's <tt>required</tt> array. The property name and
        description are combined into a single match target</t>
        <sourcecode type="text">haystack = lowercase(property_name + " : " + description)</sourcecode>
      </section>
      <section>
        <name>Rule application and multi-label assignment</name>
        <t>Each decision rule is one or more regular expressions evaluated with
        Unicode case-insensitive matching against <tt>haystack</tt> using a
        substring (search) match. A class label is assigned when any
        of that class's patterns matches. A single property
        <bcp14>MAY</bcp14> receive multiple class labels; classification is not
        exclusive. A tool is counted under a class when at least one of its
        properties carries that label. A separate per-class count records whether
        at least one labelled property was also declared
        <tt>required</tt>.</t>
        <t>All patterns use the boundaries described in
        <xref target="boundary"/>; the archived Python classification suite is
        the normative tie-breaker for regex dialect and matching semantics.</t>
      </section>
      <section anchor="boundary">
        <name>Token boundaries</name>
        <t>Class patterns are written as whole word-form tokens. The archived
        suite implements the left and right boundaries in a Python regular
        expression as negative lookbehind and negative lookahead over ASCII
        lowercase letters, digits, and underscore:</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])  &lt;alternation of word forms&gt;  (?![a-z0-9_])</sourcecode>
        <t>Consequently a form matches when bounded by punctuation, hyphens,
        whitespace, the start/end of the target, or an underscore-delimited
        segment boundary, but <bcp14>MUST NOT</bcp14> match as a substring of a
        longer contiguous letter/digit/underscore identifier. Hyphenated
        forms do match, because the hyphen is a boundary (for example
        <tt>client-secret</tt> matches the <tt>secret</tt> form); a
        camelCase identifier with no hyphen or underscore delimiter, such as
        <tt>clientSecret</tt>, is <em>not</em> segmented and does not match on
        the property name alone. This is a known lexical false-negative
        surface; an informative word in the property description can still
        produce a match through the <tt>haystack</tt> combination in
        Section 3.1.</t>
      </section>
    </section>

    <section anchor="classes">
      <name>Canonical Parameter Risk Classes</name>
      <t>Five classes are normative. Each has a stable identifier, a definition,
      its decision rule, and positive and boundary examples. The identifiers
      use the <tt>gg:</tt> prefix to keep the canonical namespace independent of
      any consuming specification. Examples that match use a ✓ form; boundary
      cases that do not match use a ✗ form.</t>

      <section anchor="class-credential">
        <name>gg:credential-value</name>
        <t><em>Definition.</em> A parameter intended to carry an authentication
        secret or credential material, such as a token, API key, password,
        private key, or bearer/authorization value. Only presence and scope of
        such a parameter are classified; the secret value itself is never part
        of the label.</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])(token|apikey|api_key|secret|password|passwd|
private_key|access_key|credential|client_secret|bearer|
authorization)(?![a-z0-9_])</sourcecode>
        <t>✓ <tt>api_key</tt>, <tt>client_secret</tt>, <tt>client-secret</tt>
        (hyphen-bounded <tt>secret</tt>), <tt>"bearer token"</tt>,
        <tt>authorization</tt>.</t>
        <t>✗ <tt>secretariat_note</tt>, <tt>tokenizer_model</tt>,
        <tt>authorization_flow_name</tt> (the contiguous underscore forms do
        not present a bounded word token), <tt>clientSecret</tt>,
        <tt>accessKeyId</tt> (delimiter-free camelCase is not segmented; known
        false negatives).</t>
      </section>

      <section anchor="class-path">
        <name>gg:filesystem-path</name>
        <t><em>Definition.</em> A parameter that names a filesystem location: a
        file path, file name, directory, folder, or an explicit target/
        destination path.</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])(path|filepath|filename|file_path|dir|directory|
folder|target_path|destination_path|dest_path)(?![a-z0-9_])</sourcecode>
        <t>✓ <tt>file_path</tt>, <tt>destination_path</tt>, <tt>dir</tt>,
        <tt>"output folder"</tt>, <tt>target_path</tt>.</t>
        <t>✗ <tt>pathology_code</tt>, <tt>directory_sync_toggle</tt> (no bounded
        token), <tt>destinationPath</tt> without an informative description
        (delimiter-free camelCase is not segmented; known false negative), a bare
        OS-specific path string with no matching property name or
        description.</t>
      </section>

      <section anchor="class-command">
        <name>gg:command-string</name>
        <t><em>Definition.</em> A parameter intended to carry an executable
        string or fragment: a shell/system command, script, code, expression,
        SQL statement, arguments vector, or a free-form instruction interpreted
        by an execution engine.</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])(command|cmd|script|code|expression|sql|
statement|shell_cmd|args?|arguments?|instruction|prompt)(?![a-z0-9_])</sourcecode>
        <t>The forms <tt>args?</tt> and <tt>arguments?</tt> denote the singular
        and plural alternation. ✓ <tt>shell_cmd</tt>, <tt>sql</tt>,
        <tt>"execute code"</tt>, <tt>args</tt>, <tt>prompt</tt>.</t>
        <t>✗ <tt>commandment_count</tt>, <tt>scripture_ref</tt> (no bounded
        token). Note that <tt>prompt</tt> is a deliberately high-recall form:
        ordinary LLM prompt text is included, so this label indicates
        interpretability risk surface, not guaranteed command execution.</t>
      </section>

      <section anchor="class-money">
        <name>gg:money-amount</name>
        <t><em>Definition.</em> A parameter that carries a monetary quantity or
        currency designation: an amount, price, total, sum, currency, or a
        domain-specific refund/charge/unit amount expressed in cents.</t>
        <t>The class is assigned if <em>either</em> of the two patterns
        matches:</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])(amount|price|total|sum|currency|refund_amount|
charge_amount|unit_amount|cents)(?![a-z0-9_])</sourcecode>
        <sourcecode type="text">\b(amount in|monetary|currency code)\b</sourcecode>
        <t>✓ <tt>refund_amount</tt>, <tt>"total in cents"</tt>, <tt>currency</tt>,
        <tt>"amount in USD"</tt>, <tt>unit_amount</tt>.</t>
        <t>✗ <tt>total_results</tt> — the word form <tt>total</tt> is bounded on
        the left but is followed by the underscore-adjacent token
        <tt>results</tt> with no boundary, so it does not match; <tt>summed</tt>
        (no bounded <tt>sum</tt> token).</t>
      </section>

      <section anchor="class-url">
        <name>gg:url-endpoint</name>
        <t><em>Definition.</em> A parameter that addresses an external network
        destination: a URL/URI, endpoint, host/hostname/domain, link, webhook,
        or an explicit base/target/callback URL.</t>
        <sourcecode type="text">(?&lt;![a-z0-9_])(url|uri|endpoint|webhook_url|target_url|host|
hostname|domain|link|webhook|base_url|callback_url)(?![a-z0-9_])</sourcecode>
        <t>✓ <tt>target_url</tt>, <tt>base_url</tt>, <tt>webhook</tt>,
        <tt>hostname</tt>, <tt>"callback URL"</tt>.</t>
        <t>✗ <tt>curriculum</tt>, <tt>hostname_label_prefix</tt> when presented
        as one contiguous token without a boundary, <tt>domainKnowledge</tt>,
        <tt>baseUrl</tt> (delimiter-free camelCase, not segmented; known false
        negative).</t>
      </section>
    </section>

    <section anchor="contextual">
      <name>High-Recall Contextual Buckets (Non-Normative)</name>
      <t>The frozen suite also computes two additional buckets that are
      deliberately high-recall and low-specificity. They are reported for
      completeness but are not canonical parameter risk classes:
      they are too generic to function as standalone containment or grant
      domains, and they are excluded from the five-class risk vocabulary.</t>
      <ul>
        <li><tt>account_identity</tt> matches identifiers such as account,
        account_id, iban, wallet, recipient, customer_id, user_id, beneficiary,
        card_token, payment_method, bank, routing_number, and bounded
        <tt>email</tt>, <tt>to</tt>, and <tt>from</tt> forms. It fires on roughly half of all live tools.</li>
        <li><tt>raw_content_blob</tt> matches generic payload forms such as
        content, body, data, payload, html, markdown, file_content, and text.</li>
      </ul>
      <t>Consuming specifications <bcp14>MAY</bcp14> reproduce these buckets for
        corpus comparability, but they are not part of the canonical risk-class
        vocabulary and carry no normative containment semantics here.</t>
    </section>

    <section anchor="census">
      <name>Application to the Frozen Census</name>
      <t>The rules in <xref target="classes"/> were applied to the frozen
      snapshot. A tool is counted in a class when at least one of its properties
      matches; a separate column counts tools with at least one matching property
      that is also <tt>required</tt>. Percentages are of 229,539 live
      tools.</t>
      <table anchor="class-freq">
        <name>Parameter risk class frequencies in the frozen snapshot</name>
        <thead>
          <tr>
            <th>Class</th><th>Tools (≥1 property)</th><th>% of live</th>
            <th>≥1 required</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>gg:url-endpoint</td><td>31,880</td><td>13.889</td><td>22,891</td></tr>
          <tr><td>gg:command-string</td><td>23,847</td><td>10.389</td><td>13,619</td></tr>
          <tr><td>gg:money-amount</td><td>15,229</td><td>6.635</td><td>4,449</td></tr>
          <tr><td>gg:credential-value</td><td>14,753</td><td>6.427</td><td>3,418</td></tr>
          <tr><td>gg:filesystem-path</td><td>5,569</td><td>2.426</td><td>1,690</td></tr>
        </tbody>
      </table>
      <t>The non-normative contextual buckets fire on 44,429 tools
      (raw_content_blob, 19.356%) and 117,085 tools (account_identity, 51.009%)
      respectively, illustrating why they are not treated as risk
      classes.</t>
      <t>A separate, tool-surface analysis (distinct from the parameter labels
      above) intersects a high-consequence tool-name/description signal — tools
      signalling payment/money, filesystem write or delete, command/code
      execution, infrastructure deployment, or credential handling — with an
      outbound-network signal. That intersection contains 995 tools, 0.43% of
      live tools. It is empirical evidence that risk is set jointly by a tool's
      functional class <em>and</em> by its outbound parameter surface; neither
      axis alone fully describes it. This intersection is reproduced by the
      archived suite, not defined by the parameter-class rules in
      <xref target="classes"/>.</t>
      <t>Class frequency is heavily skewed and dominated by read/retrieval
      tools: the read/retrieval control surface alone contains 67,423 tools
      across 11,520 distinct servers. This motivates attaching containment
      semantics to a class selectively rather than requiring a domain on every
      node of a capability profile.</t>
    </section>

    <section anchor="relationship">
      <name>Relationship to Other Specifications</name>
      <t>This document is the canonical source for the five parameter risk
      class identifiers, their definitions, and the normative decision rules in
      <xref target="classes"/>.</t>
      <t>Other specifications — including capability-profile languages,
      intent-based selection and routing schemes, gateway policy models, and
      the various drafts discussed in the DMSC BoF context — <bcp14>MAY</bcp14>
      cite this document as the source of the class labels and <bcp14>MAY</bcp14>
      define their own mapping, comparison, or containment operators that
      consume those labels.</t>
      <t>To keep the semantics stable across future census releases, such
      specifications <bcp14>SHOULD</bcp14> reference this document rather than
      copy or re-derive the decision rules in their own normative sections. A
      specification that inlines or alters the predicates creates an
      independent, divergent vocabulary and <bcp14>SHOULD NOT</bcp14> present it
      as the classes defined here. Defining a downstream operator over the
      labels (for example, a containment or grant function) is explicitly out of
      scope here and remains entirely the work of the consuming
      specification.</t>
      <t>Maintaining these definitions in a standalone Informational document
      lets them evolve independently and be reused by multiple specifications
      without coupling to any single working-group draft.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>The five classes are static, lexical pre-invocation signals derived
      only from tool property names and descriptions in a schema. They do not
      observe runtime behavior, data flow, or server-side vulnerabilities, and
      they cannot confirm that a labelled parameter actually receives
      sensitive input.</t>
      <t>Lexical matching has known limits. It produces false positives for
      high-recall word forms (for example <tt>prompt</tt> and
      <tt>total</tt>), and false negatives when a sensitive parameter uses an
      opaque or delimiter-free identifier with no informative description. It
      does not perform semantic type inference or string-value taint tracking.
      The boundary rules in <xref target="boundary"/> and the examples in
      <xref target="classes"/> delimit the intended behaviour; the archived suite
      is authoritative for edge cases.</t>
      <t>These labels are advisory inputs. They <bcp14>MUST NOT</bcp14> be used
      as the sole authorization decision and <bcp14>SHOULD</bcp14> be combined
      with runtime verification, canonicalization of the actual values, and
      auditable attestation receipts (such as the bounded receipts discussed in
      the CCS work) before a sensitive tool invocation is permitted.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. The <tt>gg:</tt> class identifiers
      are document-local labels, not IANA registrations.</t>
    </section>
  </middle>

  <back>
    <references title="References">
      <references title="Normative References" anchor="s-ref-norm">
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization>Harvard University</organization>
            </author>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization>Futurewei Technologies</organization>
            </author>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>
      </references>
      <references title="Informative References" anchor="s-ref-info">
        <reference anchor="ref-ccs" quoteTitle="true" target="https://datatracker.ietf.org/doc/draft-correctover-ccs/">
          <front>
            <title>Correctover Conformance Shape (CCS): Layered Trust Runtime Verification for Agent Tool Calls</title>
            <author initials="G." surname="Wang" fullname="Guigui Wang">
              <organization>Correctover</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="ref-mcp" quoteTitle="true" target="https://modelcontextprotocol.io/">
          <front>
            <title>Model Context Protocol Specification</title>
            <author><organization>Anthropic, Inc.</organization></author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="ref-zencensus" quoteTitle="true" target="https://doi.org/10.5281/zenodo.23333514">
          <front>
            <title>MCP Atlas: A Reproducible SHA-256-Frozen Census of Public MCP Servers - Milestone A Baseline (2026-10-12)</title>
            <author initials="G." surname="Wang" fullname="Guigui Wang"><organization>Correctover</organization></author>
            <date year="2026" month="October" day="13"/>
          </front>
        </reference>
        <reference anchor="ref-zenaudit" quoteTitle="true" target="https://doi.org/10.5281/zenodo.23333516">
          <front>
            <title>MCP Atlas: A Static Compliance Audit of Public MCP Servers - Milestone A, 229,539 Tools (2026-10-13)</title>
            <author initials="G." surname="Wang" fullname="Guigui Wang"><organization>Correctover</organization></author>
            <date year="2026" month="October" day="13"/>
          </front>
        </reference>
        <reference anchor="ref-zensource" quoteTitle="true" target="https://doi.org/10.5281/zenodo.23365412">
          <front>
            <title>G-G MCP Parameter Risk: Internet-Draft -00 Source and Canonical Checker</title>
            <author initials="G." surname="Wang" fullname="Guigui Wang"><organization>Correctover</organization></author>
            <date year="2026" month="October" day="14"/>
          </front>
        </reference>
      </references>
    </references>
  <section anchor="snapshot">
      <name>Frozen Snapshot and Reproducibility</name>
      <t>The empirical baseline is a byte-frozen census with snapshot date
      2026-10-12, covering 13,089 reachable servers and 229,539 live tools. Two
      Zenodo records archive it:</t>
      <ul>
        <li>Census baseline <xref target="ref-zencensus"/>: <eref target="https://doi.org/10.5281/zenodo.23333514">10.5281/zenodo.23333514</eref>
        (concept <eref target="https://doi.org/10.5281/zenodo.23333513">10.5281/zenodo.23333513</eref>),
        file <tt>mcp-atlas-milestone-a-baseline-20261013.zip</tt> (MD5
        9d383214877ad5c06749995e67a893f5).</li>
        <li>Static compliance audit containing the frozen classification suite
        that implements the rules here <xref target="ref-zenaudit"/>:
        <eref target="https://doi.org/10.5281/zenodo.23333516">10.5281/zenodo.23333516</eref>
        (concept <eref target="https://doi.org/10.5281/zenodo.23333515">10.5281/zenodo.23333515</eref>),
        file <tt>mcp-atlas-audit-20261013-public.zip</tt>, 11,044,763 bytes (MD5
        a22741da7be8622cdaf1783afa91e225).</li>
      </ul>
      <t>The normative text source of this specification and the single archived
      canonical checker (the <tt>PARAM_CLASSES</tt> table and <tt>param_hits</tt>
      routine) are also archived together as <xref target="ref-zensource"/>, so
      the governing text and code share one citable record. That archive adds no
      new data and does not change any decision rule in <xref target="classes"/>;
      it is the companion software/text record for this document.</t>
      <t>The pinned SHA-256 of the frozen corpus files verified by the suite
      are:</t>
      <ul>
        <li><tt>servers.jsonl.gz</tt>:
        3071866184521fb36aeac6ac715687ed4bf99b9b034646da61176f54a3dfa9d8</li>
        <li><tt>server_tools.jsonl.gz</tt>:
        2350dc773dc43fd6ed0b012588f3ff295fb358106a0291a7dc59c57427f5780f</li>
        <li><tt>candidates_remotes.jsonl</tt>:
        2f24ccc39ffeebe17f2dfe3c59f04b5b2f816c886239fdfe8df4995848326157</li>
      </ul>
      <t>All three pinned hashes matched at audit time. The decision rules in
      <xref target="classes"/> are the human-readable expression of the
      <tt>PARAM_CLASSES</tt> table and <tt>param_hits</tt> routine in the
      archived <tt>atlas_analyze.py</tt>; where prose and code differ, the
      archived code at the pinned release governs the reported counts.</t>
    </section>

    <section anchor="examples">
      <name>Example Classification Vectors</name>
      <t>Representative property vectors (informative):</t>
      <ul>
        <li><tt>{"name":"cmd","description":"shell command for execution"}</tt> →
        gg:command-string.</li>
        <li><tt>{"name":"destPath","description":"destination file path"}</tt>
        → gg:filesystem-path.</li>
        <li><tt>{"name":"webhook_url","description":"callback endpoint"}</tt>
        → gg:url-endpoint (both the <tt>webhook_url</tt> and <tt>url</tt>/
        <tt>endpoint</tt> forms apply; one label).</li>
        <li><tt>{"name":"refund_amount","description":"amount in cents"}</tt>
        → gg:money-amount.</li>
        <li><tt>{"name":"Authorization","description":"bearer token"}</tt>
        → gg:credential-value.</li>
        <li><tt>{"name":"total_results","description":"page size"}</tt> → no
        risk class.</li>
        <li><tt>{"name":"data","description":"request body"}</tt> → only the
        non-normative raw_content_blob bucket.</li>
      </ul>
    </section>

    </back>
</rfc>