
DOCA Structured Tools Contract
OfficialFreeStreamline DOCA tool interactions with structured responses.
Free · Opens the source repo
What DOCA Structured Tools Contract does
The DOCA Structured Tools Contract skill is designed to enhance interactions with the DOCA environment by providing a unified method to gather information from various commands. This skill is particularly useful when another DOCA skill indicates a preference for using a structured tool, allowing users to obtain comprehensive details about their DOCA installation in a single command. It consolidates information that would typically require multiple manual commands, thus saving time and reducing complexity for users.
When activated, this skill checks for the presence of the structured tool on the host system. If it is available, the skill will use it to generate a structured JSON response. If the tool is not present, the skill falls back to a predefined manual command sequence to gather the necessary information. This dual approach ensures that users receive accurate and relevant data regardless of the tool's availability, while also informing them of the method used to obtain the information.
This skill is particularly valuable for developers and system administrators who work with DOCA libraries and need quick access to environmental details, device capabilities, and validation states. It is designed to respond to implicit queries about the DOCA environment, making it easier for users to get the answers they need without having to remember specific command syntax or workflows.
However, it is important to note that this skill is not intended for general DOCA orientation or specific library API questions. For those types of inquiries, users should refer to other skills designed for broader guidance or installation assistance. The DOCA Structured Tools Contract skill is a focused tool that excels in providing structured outputs for specific command-related queries.
When to use it
Use this skill when another DOCA skill requests the structured tool or when you need a one-shot answer about your DOCA environment.
When not to use it
Avoid using this skill for general DOCA orientation or specific library API questions, as it is not designed for those purposes.
What you can build with it
Quick Environment Check
Use this skill to quickly gather all relevant information about your DOCA installation in one command.
Validate Before Commit
Easily check if a specific command or configuration is valid before committing changes in your DOCA environment.
Device Capability Overview
Obtain a consolidated view of all devices and their capabilities on a BlueField system with a single command.
How to install DOCA Structured Tools Contract
View source1. Install with the skills CLI
npx skills add nvidia/skills/doca-structured-tools-contract --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by nvidiaDOCA structured-tools contract
Where to start: Reach for this skill whenever a workflow in
another skill says "prefer the structured tool per
doca-structured-tools-contract". Read
## The agent behavior contract
first; then drill into the matching schema in ## Schemas.
If the host has the structured tool, prefer its output. If it does
not, fall back to the manual command chain in the same schema
section. Always report which path was taken so the user can fix
the gap (or so a future bundle update can detect that the structured
path was never tried).
Example questions this skill answers well
See references/examples.md for the five
worked routing examples. Keep this loader focused on detection,
fallback behavior, and the authoritative schemas below.
When to load this skill
Load this skill whenever another skill's workflow tells the agent to prefer the structured tool, OR whenever the user's question implies they want a single one-shot answer that consolidates information multiple manual commands would otherwise produce.
Concretely:
- A library / service / tool skill's Command appendix references this skill in its first column.
- The user asks "is there one command that tells me X about my DOCA install" (env / devices / version / capabilities / hardware topology).
- The user asks "how do I know X is valid before I commit" for any DOCA library that has a validate-before-commit call.
- The agent has computed the manual fallback answer and wants to also surface the equivalent structured-tool one-liner so the user can adopt it next time.
Do not load this skill for general DOCA orientation, for
specific library API questions, or for install-from-scratch
guidance. For those, use the matching library skill +
doca-public-knowledge-map
Running probes and fallbacks requires shell access to the target host, either directly by the agent or through commands the user runs.
Ground rules for any agent using this skill
- Detect first; never assume the tool is present. Each schema below names the probe command that decides whether the structured tool is installed on this host. Run the probe before reading the schema's output as authoritative.
- Prefer structured when present; fall back to manual when not. When the probe succeeds and the output validates against the selected schema, the structured JSON is the source of truth. When the probe fails or the output is invalid, walk the manual command chain in the same schema section and synthesize the equivalent answer.
- Report which path you took. Always tell the user at the
start of the answer: "using structured
<helper>(path:<path>)" OR "falling back to manual chain (structured<helper>probe failed:<reason>)", substituting the helper selected by the schema and the actual probe failure. Never report a helper different from the one the schema selected. - Schemas are locked here; per-skill overlays are NOT. A library / service / tool skill MAY add a per-skill row to its own Command appendix that uses a schema; it MUST NOT redefine the schema. If a schema needs to grow, the change happens here first and every Command appendix that consumes it inherits the change automatically.
- Never invent a JSON field that is not in the schema. The structured tool's output is exactly the shape this contract says it is. If the user pastes JSON that contains a field not in the schema, treat the extra field as advisory and quote the official schema as the boundary.
- Schemas describe contracts, not implementations. The executables that satisfy these contracts are deferred to a subsequent PR on the maintainer roadmap. This skill exists so every other skill in the bundle can be infra-aware before the executables ship.
- Privilege is never implicit. A manual fallback command that
requires
sudois emitted for the user to run or executed only through an already approved privileged channel. Never silently elevate merely because the structured helper was absent. Do not assume such a channel exists; if it does not, ask the user to run the command or report the privileged-data gap.
The agent behavior contract
The contract is a four-step loop the agent runs every time a skill's Command appendix references this contract:
- Detect. Run the probe command listed in the schema section
for the relevant tool. Examples:
command -v doca-env,test -f /opt/mellanox/doca/share/version-matrix.json,command -v doca-capability-snapshot. Probes are read-only and safe to run on any host. The executable helpers are deferred to PR2, so until they ship, failed command probes are expected and the manual chains are the operative path unless a helper was installed separately. - Prefer. If the probe succeeds, invoke the structured tool
and parse its JSON per the schema in
## Schemas. It is authoritative only when parsing succeeds and every required field has the documented type. Malformed JSON, missing fields, or type mismatches make the structured path fail: report that exact validation failure and use step 3. Ignore unexpected extra fields as advisory per ground rule 5; do not expose them as contract output. Do NOT run the manual chain merely "to double check" valid structured output — valid structured output replaces the chain. - Fall back. If the probe fails, walk the manual command
chain documented in the same schema section. Synthesize the
answer by combining the manual command outputs in the order the
chain lists them. If a manual command is unavailable on the
host, surface that as a gap and route the user to the matching
skill (typically
doca-setup). If that route cannot resolve the gap, name the missing commands or artifacts, state that the consolidated answer cannot be completed, and stop rather than presenting partial data as complete. - Report. Open the answer with one of:
- "Using structured
<tool>(path:<path>)." — when the probe succeeded and its output validated. - "Falling back to manual chain (structured
<tool>probe failed:<reason>)." — when the probe failed. Include the actual probe command and failure reason; forcommand -v, note that failure means the helper was not found onPATH, not that it is definitively absent. Plus a one-line note pointing the user at how to install the helpers when they become available. - "Falling back to manual chain (
<tool>output failed schema validation:<reason>)." — when the helper exists but its output is malformed, missing required fields, or has invalid field types.
- "Using structured
The report step proves the agent tried the helper before falling back.
Schemas
Select the schema from the question shape: environment/install state
uses doca-env; capability minimum-version lookup uses
version-matrix; per-device library capabilities use
capability-snapshot; spec validation uses
validate-before-commit; and a host-versus-DPU state comparison uses
the two collect-state schemas. When a per-skill Command appendix names
a schema, use that schema directly.
Each subsection below names ONE structured tool the bundle expects to interoperate with, gives its detection probe, names its top-level JSON shape, and lists the manual command chain the agent walks when the probe fails.
doca-env --json schema
Detection probe: command -v doca-env. The structured tool, if
installed, lives at the same $PATH location as doca_caps (i.e.
under the DOCA install tree's bin/).
Top-level shape (JSON object):
| Field | Type | Notes |
|---|---|---|
version | object | pkg_config / applications_version / doca_caps / bfb (string | null) / consistent (bool) |
devices | array of object | one entry per visible PCIe function: pcie_address (e.g. 0000:03:00.0), kind (PF | VF | SF), name, representor_of (string | null), state (active | down | unknown), mtu (number) |
libraries | array of object | one entry per public DOCA library: pkg_config_name, installed (bool), pc_path (string | null) |
sample_paths | array of object | one entry per library: library, path (the on-disk samples root) |
drivers | object | mlx5_core_loaded (bool), mlx5_ib_loaded (bool), kernel_version (string) |
hugepages | object | available_2m (number), available_1g (number), mount_point (string | null) |
host_kind | string | one of host | bluefield | unknown |
bf_mode | string | null | one of smartnic | dpu | switch | null (when host_kind != bluefield) |
Manual fallback chain (run in order; combine the outputs to synthesize the same answer):
pkg-config --modversion doca-common→version.pkg_configcat /opt/mellanox/doca/applications/VERSION→version.applications_versiondoca_caps --version→version.doca_capsdoca_caps --list-devs→devicesarray (parse PCIe address + kind + representor)- Find
doca-common.pcfirst. Iffind /opt/mellanox/doca -name doca-common.pc -print -quitreturns empty, stop this row, surface the partial-install gap, and route todoca-setup; do not expand an empty directory glob. Otherwise derivePCDIRfrom that result and runfor pc in "$PCDIR"/*.pc; do pkg-config --exists "$(basename "$pc" .pc)" && echo "$pc"; done→librariesarray. IfPCDIRis not a directory or no module resolves throughpkg-config --exists, surface that gap and route todoca-setup.PCDIRis commonly/opt/mellanox/doca/lib/<arch>-linux-gnu/pkgconfigon DOCA 3.3+, or/opt/mellanox/doca/infrastructure/lib/pkgconfigon legacy / split-profile installs. ls /opt/mellanox/doca/samples/→sample_pathsarraylsmod | grep -E '^mlx5_(core|ib)'anduname -r→driversobjectcat /proc/meminfo | grep -i Huge→hugepagesobjectdmidecode -s system-product-name(orcat /proc/device-tree/modelon BlueField) →host_kindmlxconfig -d <pcie> q INTERNAL_CPU_MODEL→bf_mode(whenhost_kind == bluefield)
version-matrix.json schema
Detection probe: test -f /opt/mellanox/doca/share/version-matrix.json.
If absent, use the manual fallback; do not guess another install path.
Top-level shape (JSON object):
| Field | Type | Notes |
|---|---|---|
schema_version | string | semver of THIS contract; bumps on schema changes |
generated_at | string | ISO-8601 timestamp of when the matrix was generated |
entries | array of object | one row per (library, capability) pair |
Per-entry shape:
| Field | Type | Notes |
|---|---|---|
library | string | pkg-config module name (doca-flow, doca-rdma, doca-comch, …) |
capability | string | machine-readable cap name; the per-library skill's Command appendix lists which doca_<lib>_cap_* query this maps to |
display_name | string | human-readable label; the agent quotes this when reporting |
min_doca_version | string | first DOCA release in which the capability was available (semver) |
max_doca_version | string | null | last DOCA release in which the capability was available (null = still available) |
source_url | string | the public docs URL the row was derived from |
source_quote | string | the exact prose from the public docs that established the row |
Manual fallback chain:
- Identify the library + capability the user asked about (via the matching library skill's CAPABILITIES.md ## Capabilities and modes table).
- Fetch the matching per-library doc page via
doca-public-knowledge-map. - Search the page for the capability name; extract the "available since" prose; quote it verbatim.
- Cross-check against
pkg-config --modversion doca-<library>on the user's host; if the installed version is older than the "available since" line, the capability is not on this install regardless of what the public docs say.
capability-snapshot schema
Detection probe: command -v doca-capability-snapshot. The
structured tool, if installed, lives at the same $PATH location as
doca_caps.
Top-level shape (JSON object):
| Field | Type | Notes |
|---|---|---|
snapshot_at | string | ISO-8601 timestamp |
doca_version | string | doca_caps --version at snapshot time |
host_kind | string | host | bluefield |
devices | array of object | one entry per doca_devinfo: pcie_address, library_capabilities (map of library → list of capability flags) |
Manual fallback chain:
doca_caps --list-devs→ device enumeration- For each device + each library of interest: invoke the
library-specific
doca_<lib>_cap_*query family from a small test program by following the library's own## testworkflow and modifying its named shipped sample. Do not invent test code.
validate-before-commit schema
Detection probe: command -v doca-validate. If that command is
absent, the structured helper is absent and the agent uses the manual
fallback below. A library-specific constructor-time validation
surface is not a detection probe and may mutate state. For example,
the public Flow header at this release does not ship a separate
doca_flow_pipe_validate symbol: never invent one and never use
doca_flow_pipe_create as a read-only probe. The structured tool
wraps only library-specific validation calls that are safe for its
contract and returns a uniform JSON result.
Top-level shape (JSON object):
| Field | Type | Notes |
|---|---|---|
library | string | which DOCA library the spec is for |
spec_path | string | path on disk to the spec being validated |
result | string | pass | fail | skip |
checks | array of object | per-check breakdown: name, status (pass | fail | skip), details (string), remediation (string | null) |
Manual fallback chain:
- Find the library-specific validate surface in the matching skill's
## testworkflow. For some libs this is a dedicated_validatecall. Constructor-time checks embedded in a mutating_createcall are not read-only validators. In particular,doca_flow_pipe_createbelongs todoca-flow TASKS.md ## testafter that skill's snapshot/safety preconditions; do not invoke it as a pre-commit probe. If the caller requires read-only validation and the installed API exposes no dedicated validator, reportresult: skipand route to the per-library## testworkflow. - Invoke it before any commit / create / submit call.
- Map validation outcomes deliberately:
DOCA_ERROR_INVALID_VALUEandDOCA_ERROR_NOT_SUPPORTEDareresult: fail. Permission, transport, unavailable-device, and other operational errors areresult: skip, with the exactdoca_error_get_descr()text and remediation in achecksentry. Never turn an inability to run validation into a claim that the spec itself failed.
collect-host-state and collect-dpu-state schemas
Select the helper for the side where commands execute: host uses
doca-collect-host-state; BlueField uses doca-collect-dpu-state.
The presence of both binaries does not imply cross-side access. For a
diff, collect independently on each side and then compare the outputs.
Detection probes: command -v doca-collect-host-state (run on
the host side) and command -v doca-collect-dpu-state (run on the
BlueField side).
Top-level shape (JSON object), shared by both:
| Field | Type | Notes |
|---|---|---|
side | string | host | dpu |
doca_version | string | doca_caps --version |
firmware_version | string | output of flint -d <pcie> q (sudo) |
kernel_version | string | uname -r |
mlx5_modules | array of string | which mlx5_* modules are loaded |
bf_mode | string | null | smartnic | dpu | switch | null |
devices | array of object | per-PCIe-function record: pcie_address, kind (PF | VF | SF), state, mtu, representor_of |
Manual fallback chain (per side):
doca_caps --version→doca_versionuname -r→kernel_versionlsmod | grep mlx5→mlx5_modulesdevlink dev show+lspci | grep Mellanox+ip -j link→ enumerate thedevicesarray and its PCIe addresses- For each discovered target PCIe address,
flint -d <pcie> qthrough the approved privileged channel →firmware_version - On a discovered BlueField target,
mlxconfig -d <pcie> q INTERNAL_CPU_MODEL→bf_mode
The two sides are deliberately symmetric so the agent can diff them trivially when diagnosing host ↔ BlueField mismatches.
Relationship to PR2 executables
The schemas above describe contracts. The implementations that satisfy each contract are deferred to a subsequent PR on the maintainer roadmap.
This skill ships first so other skills can reference the contract without later retrofit when PR2 executables land.
Concrete consequence for contributors writing a new library skill:
when you build the Command appendix, do not duplicate the manual
fallback chain — link to this skill's matching schema section and
add only the per-library overlay. For Flow, the public header at
this release has no separate doca_flow_pipe_validate symbol: do not
invent one or use doca_flow_pipe_create as this contract's read-only
pre-commit probe. Report result: skip and route to doca-flow TASKS.md ## test, where constructor-time checks may run only after
that workflow's snapshot and safety preconditions. The fallback chain
itself lives here.
URL audit
This skill references the following external URLs. All MUST be public and MUST resolve. The lint runs the URL check in CI.
| URL | Owner | Last verified | DOCA version | Notes |
|---|---|---|---|---|
(none — this skill is a contract, the substantive URLs are owned by doca-public-knowledge-map and the per-library skills) | n/a | 2026-05-17 | 3.3.0 | The agent reaches public docs via doca-public-knowledge-map; this skill stays vendor-neutral on URLs |
Frequently asked questions about DOCA Structured Tools Contract
Similar skills
WinMD API Search
Easily find and explore Windows desktop APIs.
WebMCPify
Transform any web app into an agent-ready platform.
Phoenix Tracing
Instrument LLM applications with OpenInference tracing.
Foundry Hosted Agent CopilotKit
Guidance for developing agentic web apps on Azure.
Power Automate Foundation
Connect AI agents to Power Automate seamlessly.
Power Automate Flow Builder
Efficiently build and deploy Power Automate flows programmatically.
