Physical Capability Cloud
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Discover, hire, and verify real-world physical capability through MCP.
| Author | network.capability |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2155 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Physical Capability Cloud": {
"url": "https://capability.network/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (256)
provision_api_keyCALL THIS FIRST. Provisions an API key for the operator. Returns a pcc_live_* key that must be included as 'Authorization: Bearer <key>' on all subsequent requests. Accepts either email OR walletAddress. The key is shown once — save it. Without it, all other endpoints return 401.
Parameters:
name— string — Operator display name (optional)email— string — Operator email address (use this OR walletAddress)capability— string — What the operator does — e.g. 'FDM 3D printing', 'CNC milling', 'HPLC analysis'walletAddress— string — EVM wallet address (use this OR email)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_api_keysread-onlyList all active API keys for the authenticated operator. Returns key IDs, prefixes, scopes, rate limits, usage counts, and creation/expiry timestamps. Requires a valid API key or SIWE session.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
revoke_api_keydestructiveRevoke an API key permanently. The key will immediately stop working. You must own the key. Use list_api_keys to find the key ID.
Parameters:
keyId(required) — string — Key ID to revoke (from list_api_keys)
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
setup_detectread-onlyAuto-detect current setup state: env vars, database, adapters, chain connectivity, storage, identity. Use this to see what's configured and what's missing before onboarding.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
setup_generate_configGenerate a KERNEL_CONFIG JSON from device descriptions. Tell it what machines you have and it produces the config ready to paste into your environment.
Parameters:
devices(required) — array — Array of device descriptions with type, model, and connection info
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
setup_validateValidate a kernel config (20+ checks: JSON structure, device connectivity, adapter compatibility). Returns validation errors and warnings.
Parameters:
config(required) — object — Kernel config JSON to validate
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
setup_register_deviceRegister a device in the database with adapter config and capabilities. Part of Step 3 in the onboarding flow. Required: kernelId, deviceId, type and adapterType (400 missing_required_fields otherwise).
Parameters:
kernelId(required) — string — Kernel ID to register the device underdeviceId(required) — string — Your ID for this device, unique within the kerneltype(required) — string — Device role: machine, sensor or camera (the values setup_generate_config and setup_validate accept)adapterType(required) — string — One of octoprint, modbus, opcua, sila, ipp, generic-http or mock; the route refuses anything else (including opentrons)model— string — Device model identifier (optional; stored as "unknown" if absent)capabilities— array — Capability types this device servesadapterConfig— object — Adapter-specific configuration (host, port, auth, etc.)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
setup_test_jobSubmit a test job to verify the full pipeline works end-to-end (Step 4 of onboarding). Returns job ID and result.
Parameters:
kernelId(required) — string — Kernel ID to testdeviceId— string — Specific device ID to test (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
setup_statusread-onlyComprehensive setup status across 6 categories: gateway, database, adapters, chain, storage, identity. Use to confirm everything is green before going live.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_capability_typesread-onlyList all capability types registered on the network (FDM, SLA, CNC, HPLC, etc.) with metadata.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
search_capabilitiesread-onlySearch capability templates by type or keyword. Returns templates with pricing, assurance tiers, and availability.
Parameters:
query(required) — string — Search query (type name, material, process, etc.)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_build_optionsGet configuration options for a capability type (materials, dimensions, tolerances, assurance tiers). Use before calling calculate_price.
Parameters:
type(required) — string — Capability type (e.g. fdm, cnc-3axis, hplc)profileId— string — Optional capability profile IDselections— object — Current selections to refine available options
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
calculate_priceCalculate price for a capability configuration. Returns base price, tier premiums, and estimated total cost.
Parameters:
type(required) — string — Capability typeselections(required) — object — Configuration selections (material, dimensions, quantity, etc.)profileId— string — Optional capability profile ID
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
build_contractBuild and submit a capability contract with on-chain milestone escrow. Returns job ID and escrow address.
Parameters:
type(required) — string — Capability typeselections(required) — object — Configuration selectionsassuranceTier(required) — number — Assurance tier 0-3 (0=self-reported, 3=ZK-proven+bonds)profileId— string — Optional capability profile ID
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_kernelsread-onlyList all Shop Kernels on the network with status and capability types. Optionally filter by status.
Parameters:
status— string — Filter by kernel status (online, offline, maintenance)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_kernelread-onlyGet kernel details including full capability objects, devices, and queue.
Parameters:
kernelId(required) — string — Kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_kernel_devicesread-onlyList all devices registered under a specific kernel, including adapter configs and device types.
Parameters:
kernelId(required) — string — Kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_kernel_jobsread-onlyList all jobs submitted to a specific kernel, including job status and progress.
Parameters:
kernelId(required) — string — Kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_kernelRegister a new Shop Kernel (physical site) on the PCC network. Part of Step 2 in the onboarding flow.
Parameters:
name(required) — string — Kernel/site name (e.g. 'BioPunk Lab - Bay A')config— object — Kernel configuration JSONlocation— object — Location object with address and geo coordinatesdescription— string — Description of the site and its capabilities
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_jobsread-onlyList all jobs with status. Optionally filter by kernelId or status.
Parameters:
status— string — Filter by status (pending, queued, in_progress, paused, completed, failed, cancelled)kernelId— string — Filter by kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_jobread-onlyGet job details including progress, evidence bundles, and milestones.
Parameters:
jobId(required) — string — Job ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
update_job_statusUpdate a job's status and optional progress percentage. Used by kernels to report job progress.
Parameters:
jobId(required) — string — Job IDstatus(required) — string — New status (pending, queued, in_progress, paused, completed, failed, cancelled). 'running' is accepted as a legacy alias for in_progress.progress— number — Progress percentage 0-100 (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_escrowsread-onlyList escrow contracts with milestones and bonds. Optionally filter by status.
Parameters:
status— string — Filter by escrow status
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_escrowread-onlyGet escrow details. Pass a DB ID for database record (with milestones and disputes), or an EVM address (0x...) to read directly from the blockchain.
Parameters:
escrowId(required) — string — DB escrow ID or on-chain contract address (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_escrow_chain_stateread-onlyRead full on-chain escrow state with all milestone details from the blockchain. More detailed than get_escrow for on-chain contracts.
Parameters:
address(required) — string — On-chain escrow contract address (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_escrow_eventsread-onlyGet on-chain event history for an escrow contract. Returns funding, release, dispute, and bond events.
Parameters:
address(required) — string — On-chain escrow contract address (0x...)fromBlock— string — Starting block number (optional)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_token_balanceread-onlyRead an ERC-20 token balance for an account address from the blockchain.
Parameters:
tokenAddress(required) — string — ERC-20 token contract address (0x...)account(required) — string — Account address to check balance for (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_token_allowanceread-onlyRead the ERC-20 token allowance granted by an owner to a spender from the blockchain.
Parameters:
tokenAddress(required) — string — ERC-20 token contract address (0x...)owner(required) — string — Token owner address (0x...)spender(required) — string — Spender address (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_escrow_disputeread-onlyRead dispute state for a specific milestone from the blockchain.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index (0-based)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_write_statusread-onlyCheck if on-chain write operations are enabled (requires PCC_GATEWAY_PRIVATE_KEY to be configured). Returns write status and signer address.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
fund_escrowFund a protocol-created escrow on-chain. Approval is handled INTERNALLY by the gateway for protocol-created escrows (audit C-03 removed the public approve step) — do NOT call a separate approve first; fund directly. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
release_milestoneRelease a milestone payment on-chain after the challenge window has expired. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index to release (0-based)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
file_escrow_disputeFile a dispute against a milestone on-chain. Challenger must post a bond and provide evidence hash. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index to dispute (0-based)challengerBond(required) — string — Bond amount in wei (as string)challengerEvidenceHash(required) — string — Evidence hash as 0x-prefixed hex bytes32reason(required) — string — Human-readable dispute reason
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
deposit_bondDeposit an operator bond for a milestone on-chain. Required for Assurance Tier 3 jobs. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index to post bond for (0-based)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
submit_evidence_hashSubmit an evidence bundle hash for a milestone on-chain. Links the physical evidence to the on-chain settlement record. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index (0-based)evidenceBundleHash(required) — string — Evidence bundle hash as 0x-prefixed hex bytes32
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
submit_attestationSubmit a verifier attestation for a milestone on-chain. Used by third-party verifiers (Bittensor subnet) to confirm evidence quality. Returns transaction hash.
Parameters:
address(required) — string — Escrow contract address (0x...)milestoneIndex(required) — number — Milestone index (0-based)attestationHash(required) — string — Attestation hash as 0x-prefixed hex bytes32
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
archive_evidenceArchive an evidence bundle to IPFS/Storacha for permanent decentralized storage. Returns the content-addressed CID.
Parameters:
bundle(required) — object — Evidence bundle object to archive
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_evidence_bundleread-onlyGet an encrypted evidence bundle by its bundle ID. Returns the encrypted payload and key capsules.
Parameters:
bundleId(required) — string — Evidence bundle ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
grant_evidence_accessGrant a new recipient access to an encrypted evidence bundle. Creates a re-encrypted key capsule for the recipient.
Parameters:
bundleId(required) — string — Evidence bundle IDrecipientAddress(required) — string — Recipient EVM address (0x...)accessLevel— string — Level of access to grant (default: full)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_evidence_grantsread-onlyList all evidence access grants for an address. Returns bundles the address has been granted access to.
Parameters:
address(required) — string — EVM address to look up grants for (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
archive_encrypted_bundleArchive an encrypted evidence bundle to IPFS and store the resulting CID in the database. Idempotent — returns existing CID if already archived.
Parameters:
bundleId(required) — string — Encrypted evidence bundle ID
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_bundle_ipfsread-onlyGet IPFS CIDs for a bundle — returns the primary CID, metadata CID, and Filecoin deal ID if available.
Parameters:
bundleId(required) — string — Evidence bundle ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
retrieve_ipfsread-onlyRetrieve raw data from IPFS by CID. Used to fetch archived evidence bundles from decentralized storage.
Parameters:
cid(required) — string — IPFS content identifier (CID)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_lit_conditionsread-onlyGet Lit Protocol access conditions for a Lit-encrypted evidence bundle. Returns the conditions that gate decryption.
Parameters:
bundleId(required) — string — Evidence bundle ID (must be Lit-encrypted)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
lit_decryptDecrypt a Lit Protocol-encrypted evidence bundle using a Lit auth signature. Returns the decrypted bundle payload.
Parameters:
bundleId(required) — string — Evidence bundle ID (must be Lit-encrypted)authSig(required) — object — Lit auth signature object with sig, derivedVia, signedMessage, and address fields
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
verify_evidence_zkVerify a ZK proof by its proof ID. Checks the proof against its verification key and public inputs.
Parameters:
proofId(required) — string — ID of the ZK proof to verify
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
commit_evidenceCreate a Merkle commitment for an evidence bundle hash. Used as the first step in ZK proof generation for Tier 3 assurance.
Parameters:
bundleHash(required) — string — SHA-256 hash of the evidence bundle
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_telemetry_statsread-onlyGet aggregate pipeline telemetry statistics including phase timings, success rates, and throughput metrics across all jobs.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_active_telemetryread-onlyList currently active jobs with their current pipeline phase and telemetry status.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_job_telemetryread-onlyGet full event timeline for a specific job — all pipeline phase transitions with timings and metadata.
Parameters:
jobId(required) — string — Job ID to get pipeline timeline for
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_telemetry_logsread-onlyQuery structured logs with filters for level, source, jobId, kernelId, time range, and full-text search.
Parameters:
after— string — Return logs after this ISO timestampjobId— string — Filter by job IDlevel— string — Filter by log levellimit— number — Max entries to return (default 200)before— string — Return logs before this ISO timestampsearch— string — Full-text search querysource— string — Filter by source modulekernelId— string — Filter by kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
emit_telemetryManually emit a telemetry event for a job pipeline phase. Used by kernels and agents to report execution progress.
Parameters:
jobId(required) — string — Job IDphase(required) — string — Pipeline phase name (e.g. intake, binding, execution, evidence, settlement)status(required) — string — Phase statuslevel— string — Log level for this eventsource— string — Source module or componentmetadata— object — Additional event metadataduration_ms— number — Phase duration in milliseconds
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
submit_for_human_verificationSubmit an evidence bundle for human verification. Selects a panel of verifiers from the network and returns assigned verifier IDs.
Parameters:
bundleHash(required) — string — SHA-256 hash of the evidence bundlephotoRef(required) — string — Reference to the photo evidence (CID or URL)referenceRef(required) — string — Reference to the reference/spec documentverifierCount— number — Number of verifiers to assign (default 5)comparisonScore— number — Pre-computed comparison score 0-1 (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_verification_assignmentsread-onlyGet pending verification assignments for a verifier node. Returns requests this verifier has been assigned but not yet responded to.
Parameters:
verifierId(required) — string — Verifier node ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_verification_statusread-onlyGet verification status for a request. Returns vote tally, consensus state, dispute list, and pending response count.
Parameters:
requestId(required) — string — Verification request ID (hvreq_...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
respond_to_verificationSubmit a verifier's verdict for a verification request. Returns consensus state after this vote.
Parameters:
requestId(required) — string — Verification request ID (hvreq_...)verifierId(required) — string — Verifier node IDverdict(required) — string — Verifier's verdictsignature(required) — string — Cryptographic signature of the verdictnotes— string — Optional notes explaining the verdict
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
dispute_verificationFile a dispute against the consensus verdict. Only verifiers who submitted a response can dispute. Requires additional evidence CID.
Parameters:
requestId(required) — string — Verification request ID (hvreq_...)disputerId(required) — string — Verifier node ID filing the disputereason(required) — string — Reason for disputing the consensusevidenceCid(required) — string — IPFS CID of the counter-evidence
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
register_capability_ipRegister a capability as a Story Protocol IP Asset. Returns an ipId and NFT token. The designer earns royalties whenever this capability is used.
Parameters:
capability(required) — object — Capability objectdesignerAddress(required) — string — EVM address of the capability designerdesignerName(required) — string — Display name of the designeripfsCid— string — IPFS CID of the capability spec document (optional)commercialRevShare— number — Revenue share percentage for commercial use (0-100)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
register_job_evidence_ipRegister job evidence as a derivative IP asset on Story Protocol, linking it to the parent capability's IP. Operators earn royalties from derivative use.
Parameters:
parentIpId(required) — string — IP ID of the parent capabilityjobId(required) — string — Job ID whose evidence is being registeredevidenceBundleHash(required) — string — Hash of the evidence bundleoperatorAddress(required) — string — EVM address of the operatoroperatorName(required) — string — Display name of the operatoripfsCid— string — IPFS CID of the evidence bundle (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
distribute_royaltiesSet revenue splits for an IP asset among stakeholders (designer, operator, verifier, assembler, curator). Splits must sum to 100.
Parameters:
ipId(required) — string — IP asset IDsplits(required) — array — Revenue splits — must sum to 100
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pay_ip_royaltyPay royalties to an IP asset vault. The payer sends tokens that flow to stakeholders via the royalty splits.
Parameters:
ipId(required) — string — IP asset IDamount(required) — string — Amount to pay in wei (as string)payerAddress(required) — string — EVM address of the payer
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
claim_ip_revenueClaim earned revenue from an IP asset vault. Returns the claimed amount and transaction hash.
Parameters:
ipId(required) — string — IP asset IDtokenIds— array — Specific royalty token IDs to claim (optional — claims all if omitted)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_ip_revenueread-onlyGet a revenue snapshot for an IP asset — total earned, pending claims, and recent payments.
Parameters:
ipId(required) — string — IP asset ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_ip_lineageread-onlyGet the full IP lineage chain for an asset — parent capabilities and all derivative job registrations.
Parameters:
ipId(required) — string — IP asset ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_capability_ipread-onlyGet the Story Protocol IP registration for a capability by its capability ID.
Parameters:
capabilityId(required) — string — Capability ID to look up IP registration for
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
raise_ip_disputeRaise a Story Protocol IP dispute against an asset. Provide evidence hash and reason.
Parameters:
ipId(required) — string — IP asset ID to disputeevidenceHash(required) — string — Hash of the dispute evidencereason(required) — string — Reason for the dispute
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_protocolsread-onlyList protocol templates in the library. Filter by tags, required capabilities, search query, or status.
Parameters:
tags— string — Comma-separated tag filter (e.g. 'biotech,protein')search— string — Full-text search querystatus— string — Filter by template statuscapabilities— string — Comma-separated required capability filter (e.g. 'hplc,centrifuge')
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_protocolread-onlyGet protocol template details by ID. Returns steps, transfers, parameters, and metadata.
Parameters:
id(required) — string — Protocol template ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_protocolCreate a new protocol template draft. Returns the new template ID.
Parameters:
name(required) — string — Protocol nametags— array — Tags for discoverysteps— array — Array of protocol step objectstransfers— array — Array of transfer objects between stepsparameters— array — Array of parameter definitionsdescription— string — Protocol descriptionrequiredCapabilities— array — Required capability types
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
update_protocolUpdate an existing protocol template (must be in draft status). Returns updated name and version.
Parameters:
id(required) — string — Protocol template IDname— string — Updated namesteps— array — Updated steps arrayversion— string — New version string (semver)parameters— array — Updated parameters arraydescription— string — Updated description
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
publish_protocolPublish a draft protocol template, making it visible in the protocol library for others to discover and use.
Parameters:
id(required) — string — Protocol template ID to publish
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
fork_protocolFork a protocol template to create your own version with parameter overrides. Returns the new fork ID.
Parameters:
id(required) — string — Protocol template ID to forkname— string — Name for the forked protocolparameterOverrides— object — Parameter values to override from the source template
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_protocol_forksread-onlyList all forks of a protocol template. Shows who forked it and what parameters they changed.
Parameters:
id(required) — string — Protocol template ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
validate_protocolValidate a protocol template against a specific kernel — checks capability availability, transfer compatibility, and automation level feasibility.
Parameters:
id(required) — string — Protocol template IDkernelId— string — Kernel ID to validate against (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_protocol_runsread-onlyList protocol runs. Filter by status or kernelId.
Parameters:
status— string — Filter by run statuskernelId— string — Filter by kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_protocol_runread-onlyGet protocol run status including step progress, transfer status, current phase, and evidence hashes.
Parameters:
runId(required) — string — Protocol run ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_protocol_runInstantiate a protocol template as a run on a specific kernel with given parameter values.
Parameters:
id(required) — string — Protocol template IDkernelId— string — Kernel ID to run the protocol onsampleIds— array — Sample IDs being processed in this runparameterValues— object — Runtime parameter values (overrides template defaults)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
start_protocol_runStart execution of a protocol run that is in 'ready' or 'binding' state.
Parameters:
runId(required) — string — Protocol run ID to start
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pause_protocol_runPause a running protocol run. Use resume_protocol_run to continue.
Parameters:
runId(required) — string — Protocol run ID to pause
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
resume_protocol_runResume a paused protocol run from where it stopped.
Parameters:
runId(required) — string — Protocol run ID to resume
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
cancel_protocol_runCancel a protocol run. Cannot be cancelled once completed or already cancelled.
Parameters:
runId(required) — string — Protocol run ID to cancel
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_workflowsread-onlyList active instrument workflows in the orchestrator. Optionally filter by status.
Parameters:
status— string — Filter by workflow status (e.g. running, completed)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_workflowread-onlyGet detailed workflow information including steps, node assignments, and progress.
Parameters:
workflowId(required) — string — Workflow ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_transfer_graphsread-onlyGet resource transfer graphs showing instrument topology, transfer edges, and mechanisms for all kernels.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_automation_statusread-onlyList automation status for all instrument transfer pairs. Shows current automation level, episode count, and training readiness. Filter by kernelId.
Parameters:
kernelId— string — Filter by kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_automation_statusread-onlyGet automation status for a specific instrument-to-instrument transfer pair.
Parameters:
fromNodeId(required) — string — Source instrument node IDtoNodeId(required) — string — Destination instrument node ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
record_episodeRecord a transfer episode for a node pair. Increments episode count toward VLA training threshold.
Parameters:
fromNodeId(required) — string — Source instrument node IDtoNodeId(required) — string — Destination instrument node IDsuccess— boolean — Whether the episode succeededepisodeId— string — Episode ID (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
advance_automationAdvance the automation level for a transfer pair (manual → teleoperated → pilot_operated → vla_assisted → fully_autonomous). Requires sufficient training episodes.
Parameters:
fromNodeId(required) — string — Source instrument node IDtoNodeId(required) — string — Destination instrument node ID
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_transfer_agentsread-onlyList all transfer agents (robots and human operators) available for instrument-to-instrument transfers.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_logistics_overviewread-onlyLogistics hub overview: active shipments, pending installations, and upcoming bookings.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_shipmentsread-onlyList equipment shipments with tracking status. Optionally filter by status.
Parameters:
status— string — Filter by shipment status (in_transit, delivered, pickup_scheduled, etc.)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_shipmentCreate a new equipment shipment with origin, destination, package details, and provider.
Parameters:
equipmentDescription(required) — string — Description of equipment being shippedorigin— object — Origin location with label, address, geo coordinatespackage— object — Package details (weightKg, dimensions, fragile, etc.)providerId— string — Logistics provider IDdestination— object — Destination location with label, address, geo coordinates
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_shipment_quoteGet shipping quotes from logistics providers based on origin, destination, weight, and priority.
Parameters:
priority— string — Shipping priority levelweightKg— number — Package weight in kgoriginZip— string — Origin ZIP codedestinationZip— string — Destination ZIP code
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_installationsread-onlyList equipment installation orders with step progress and status.
Parameters:
status— string — Filter by installation status (draft, scheduled, in_progress, completed)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_space_bookingsread-onlyList space bookings for hosting equipment. Optionally filter by status or space.
Parameters:
status— string — Filter by booking statusspaceId— string — Filter by space ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
search_spacesread-onlySearch for lab/workshop hosting spaces. Filter by size, access schedule, and other requirements.
Parameters:
access— string — Access schedule (24/7, business-hours, all)maxSqft— number — Maximum square footage
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_spaceread-onlyGet detailed information about a hosting space including power, amenities, safety features, and pricing.
Parameters:
id(required) — string — Space ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
match_spacesFind hosting spaces that match specific machine requirements (voltage, area, etc.). Returns scored matches.
Parameters:
minArea— number — Minimum floor area in square feetvoltage— number — Required voltage (e.g. 208, 480)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_marketplace_overviewread-onlyEquipment marketplace overview with demand/supply metrics across all capability types.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_equipment_classesread-onlyList equipment classes (FDM printers, CNC mills, etc.) with market snapshot data including utilization, demand, and pricing.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_demand_supplyread-onlyGet network-wide demand vs supply timeline data for capacity planning and market analysis.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
calculate_roiCalculate ROI projection for onboarding equipment. Returns month-by-month revenue, cost, and break-even analysis.
Parameters:
avgJobValue— number — Average revenue per job in USDmonthlyCost— number — Monthly operating cost in USDutilization— number — Expected utilization percentage (0-100)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_operator_dashboardread-onlyNot available: no route answers GET /api/operator on this gateway. The operator's real kernels, devices and in-flight jobs are at GET /api/agent/me.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_operator_machinesread-onlyAnswers 501 not_available: operator machines with utilization and uptime are not recorded on this gateway. The operator's real kernels, devices and in-flight jobs are at GET /api/agent/me.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_operator_earningsread-onlyAnswers 501 not_available: operator earnings history is not recorded on this gateway. Per-job payment state is at GET /api/jobs/:jobId/execution.
Parameters:
period— string — Time period for earnings data
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_operator_certsread-onlyAnswers 501 not_available: operator certifications are not recorded on this gateway (there is no certification store; certifications typed at registration are the operator's own claim and are not checked).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_sensor_channelsread-onlyList all registered sensor channels across kernels. Returns channel descriptors with units and ranges.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_kernel_sensorsread-onlyGet sensor channels for a specific kernel. Returns live channel descriptors.
Parameters:
kernelId(required) — string — Kernel ID to get sensors for
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_settlement_statusread-onlyGet settlement pipeline status including pending operations count, total value queued, and smart account address.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_settlement_epochsread-onlyGet settlement epoch history showing past batch settlements with timing and operation counts.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_depin_statsread-onlyDePIN treasury, soulbound capability certificates, and current reward epoch stats.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
mint_certificateMint a soulbound capability certificate (cNFT via Metaplex Core) for a kernel. Proves a verified capability on-chain as an immutable credential. Step 5 of onboarding.
Parameters:
kernelDid(required) — string — DID of the kernel (e.g. did:pcc:kernel:biolab-01)capabilityType(required) — string — Capability type (e.g. fdm, cnc-3axis, hplc)metadata— object — Additional metadata (tolerances, materials, calibration proof CID)assuranceTier— number — Assurance tier (0-3)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
onboard_machineRegister a new machine on the PCC network. Provide machine details to create a registration record. Include `operator` ({walletAddress, displayName, email}): without it the registration is recorded as operator 0x0000000000000000000000000000000000000000 / "Unknown", and prove cannot match it to you.
Parameters:
name(required) — string — Machine namecategory(required) — string — Machine category (e.g. fdm, cnc, laser-cut, hplc)model— string — Model identifieroperator— object — Who owns this machine. prove and activate match the caller against operator.walletAddress (or operator.email).description— string — Machine descriptioncapabilities— array — Array of capability objectsmanufacturer— string — Manufacturer name
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
analyze_machine_docsAI analysis of machine documentation. Upload docs to get suggested capabilities, extracted specs, materials, and tolerances.
Parameters:
document— string — Document content or reference to analyze
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
redeem_inviteOne-click agent onboarding with an invite code. Provisions wallet, identity, LLM access, and PCC tools in a single call.
Parameters:
inviteCode(required) — string — Invite code to redeememail(required) — string — Email address for the accountpassword(required) — string — Password for the accountname— string — Display name (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
check_inviteread-onlyValidate an invite code before redeeming it. Returns whether the code is valid and what it includes.
Parameters:
code(required) — string — Invite code to check
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_batchesread-onlyList active and completed settlement batches.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_evidenceread-onlyList encrypted evidence bundles stored in the gateway.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
submit_demandSignal that you want a capability that doesn't exist on the network yet. Creates a demand signal and may auto-create a bounty if enough demand accumulates.
Parameters:
requesterId(required) — string — ID of the requestercapabilityType(required) — string — Type of capability wanted (e.g. electron-beam-welding, cryo-em)description(required) — string — Description of what you needassuranceTier— number — Required assurance tier (0-3)estimatedJobValue— number — Estimated payment per job in USDestimatedFrequency— string — How often you would use this capability
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_bountiesread-onlyList open bounties for capabilities the network needs. Operators can claim these to earn rewards by onboarding new capabilities.
Parameters:
status— string — Filter by bounty statuscapabilityType— string — Filter by capability type
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
claim_bountyClaim a bounty to onboard a new capability. The operator commits to registering the capability and completing verification.
Parameters:
bountyId(required) — string — ID of the bounty to claimoperatorId(required) — string — ID of the operator claiming the bounty
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
verify_bountyVerify bounty completion by scoring the delivered capability against requirements.
Parameters:
bountyId(required) — string — Bounty ID to verifyjobId(required) — string — Job ID that fulfilled the bountyscore(required) — number — Verification score (0-1)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_top_demandread-onlyGet top demand signals aggregated by capability type. Shows which capabilities are most wanted on the network.
Parameters:
limit— number — Number of top demand entries to return (default 10)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_bounty_leaderboardread-onlyGet the bounty hunter leaderboard showing top operators by bounties claimed and verified.
Parameters:
limit— number — Number of entries to return (default 10)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_investment_poolCreate an investment pool for a capability bounty. Stakers earn future protocol fees when the capability goes live.
Parameters:
capabilityType(required) — string — Type of capability to invest in (e.g. cnc-milling, sla-printing)description(required) — string — Description of the capability poolcurrency— string — Currency for the pooltargetAmount— number — Funding target amount
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
stake_in_poolStake USDC or credits into a capability investment pool.
Parameters:
poolId(required) — string — Investment pool IDstaker(required) — string — Address or DID of the stakeramount(required) — number — Amount to stake
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_pool_earningsread-onlyCheck earnings from capability investment pools for a staker address.
Parameters:
staker(required) — string — Address or DID of the staker
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_poolread-onlyGet details of a specific investment pool including stakes, status, and revenue share terms.
Parameters:
poolId(required) — string — Investment pool ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_poolsread-onlyList all investment pools. Optionally filter by status or capability type.
Parameters:
status— string — Filter by pool statuscapabilityType— string — Filter by capability type
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
close_poolClose an investment pool to new stakes. Pool enters sunset phase.
Parameters:
poolId(required) — string — Pool ID to close
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
claim_poolOperator claims an investment pool reward after capability verification.
Parameters:
poolId(required) — string — Pool ID to claimoperatorId(required) — string — Operator ID making the claim
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
convert_bounty_to_poolConvert an existing bounty into an investment pool. Allows community staking toward the bounty's capability.
Parameters:
bountyId(required) — string — Bounty ID to convert to a pool
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_subnet_statusread-onlyGet Bittensor verification subnet health, agent bridge status, and network connectivity.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_subnet_minersread-onlyList verification subnet miners on the Bittensor network. Returns miner addresses, scores, and leaderboard positions.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
list_conversationsread-onlyList agent-to-agent conversations showing topic, participants, message count, and status.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
submit_feedbackSubmit a bug report, suggestion, or general feedback about the PCC network.
Parameters:
message(required) — string — Feedback message (max 5000 chars)page— string — Page or feature the feedback relates totype— string — Feedback type
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
report_anomalyReport a detected anomaly — protocol failure, evidence mismatch, stuck job, or suspicious behavior. All agents on the network are notified.
Parameters:
severity(required) — string — Anomaly severitycategory(required) — string — Anomaly categorydescription(required) — string — Human-readable description of what went wrongjobId— string — Related job ID (optional)targetAgentId— string — Agent or kernel ID being reported (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_unresolved_anomaliesread-onlyList all unresolved anomalies on the network. Filter by severity, category, or target agent.
Parameters:
category— string — Filter by categoryseverity— string — Filter by severity: info, warning, criticaltargetId— string — Filter by target agent/kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_agent_anomaliesread-onlyGet anomalies involving a specific agent, plus their trust impact score.
Parameters:
agentId(required) — string — Agent or kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
resolve_anomalyMark an anomaly as resolved with a resolution note.
Parameters:
anomalyId(required) — string — Anomaly ID to resolveresolution(required) — string — How the anomaly was resolved
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_anomaly_statsread-onlyGet aggregate anomaly statistics — total, unresolved, by severity, by category.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
report_protocol_failureReport a protocol failure — when a step in the evidence/escrow/verification pipeline breaks. System may auto-recover.
Parameters:
protocol(required) — string — Which protocol failed: evidence_submission, escrow_release, verification_consensus, settlementerrorCode(required) — string — Error codeerrorMessage(required) — string — Error descriptioninvolvedAgents(required) — array — Agent IDs involvedjobId— string — Related job IDrecoveryAction— string — Suggested recovery
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_dht_queryQuery the DHT for capabilities matching your requirements. Returns announcements from operators whose equipment matches the type, materials, and price range you specify.
Parameters:
type— string — Capability type to search for (e.g. 'fdm_print', 'liquid-handler', 'cnc-3axis')limit— number — Maximum results to return (default 10)maxPrice— number — Maximum price per job — matches operators whose min price is at or below thismaterials— array — Materials you need (matches if operator supports ANY of these)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_dht_announceAnnounce capabilities to the DHT network. Signs the announcement with your node's Ed25519 key and broadcasts to connected peers.
Parameters:
kernelId(required) — string — Kernel ID announcing capabilitiescapabilities(required) — array — Array of capability summaries to announcettlSeconds— number — How long the announcement is valid (default 300)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_dht_peersread-onlyList known DHT peers and their connection status. Shows which nodes are currently connected to the gossip network.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_create_scopeCreate an execution scope for a job. Scopes define exactly which tool calls are allowed on a kernel during a job, with command budgets, retry limits, and time-to-live. Required before issuing SCOPED WRITE operations (protocol upload, run create, run action).
Parameters:
kernelId(required) — string — Kernel ID to create the scope forallowedTools(required) — array — List of tool names allowed in this scope (e.g. ['ot2_protocol_upload', 'ot2_run_create', 'ot2_run_action'])jobId— string — Job ID this scope is bound to (optional)maxRetries— number — Maximum retries allowed (default 3)ttlMinutes— number — Scope duration in minutes (default 30)maxCommands— number — Maximum tool calls allowed in this scope (default 100)allowedSlots— array — Which deck slots may be accessed (e.g. [1, 2, 3, 9])protocolHash— string — SHA-256 hash of the approved protocol content. If set, protocol uploads are hash-verified.allowedPipettes— array — Which pipettes may be used (e.g. ['left'])
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_revoke_scopeRevoke an execution scope immediately (emergency stop). All pending tool calls under this scope are rejected. The kernel enters a stopped state. A new scope must be created to resume.
Parameters:
scopeId(required) — string — Scope ID to revoke
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_scope_auditread-onlyGet the audit trail for an execution scope — every tool call made under this scope, with validation results, timestamps, and outcomes.
Parameters:
scopeId(required) — string — Scope ID to audit
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_relay_tool_callRelay a tool call to a device executor. The brain (LLM) posts tool calls here; the executor (on the device) polls for them and executes locally. Used for the brain/executor split architecture.
Parameters:
kernelId(required) — string — Kernel ID of the target devicetoolName(required) — string — Tool to execute (e.g. 'ot2_health', 'ot2_run_create')toolArgs(required) — object — Arguments for the tool callscopeId— string — Execution scope ID (required for SCOPED WRITE tools)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_get_tool_resultread-onlyGet the result of a previously relayed tool call. Poll this endpoint until the executor has processed the call and posted results.
Parameters:
callId(required) — string — Tool call ID returned from pcc_relay_tool_call
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_camera_latestread-onlyGet the latest camera frame from a kernel as a JSON snapshot (base64 JPEG + metadata). For raw JPEG image, use GET /api/ot2/camera/latest directly.
Parameters:
kernelId(required) — string — Kernel ID to get camera frame from
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_chat_sendSend a chat message to a kernel's operator or agent. Used for human-in-the-loop communication during job execution, troubleshooting, and escalation.
Parameters:
kernelId(required) — string — Kernel ID to send the message tomessage(required) — string — Message contentrole— string — Sender role (default: user)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_chat_historyread-onlyGet chat history with a kernel. Returns messages between agents, operators, and users for a specific kernel.
Parameters:
kernelId(required) — string — Kernel ID to get chat history forlimit— number — Maximum messages to return (default 50)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
approve_registrationApprove a submitted machine registration. Moves it from 'submitted' to 'approved' status, enabling the operator to activate and start accepting jobs.
Parameters:
registrationId(required) — string — Registration ID (e.g. 'reg-1234567890')
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
reject_registrationReject a machine registration with a reason. The operator can see the rejection reason and resubmit.
Parameters:
registrationId(required) — string — Registration IDreason— string — Reason for rejection
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
activate_registrationActivate an approved registration, making the operator's equipment live on the network and ready to accept jobs.
Parameters:
registrationId(required) — string — Registration ID
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
prove_registrationFast-track: submit evidence that your device works and get auto-approved + activated immediately. No manual review needed. Submit a photo of test output, device health snapshot, or a full evidence bundle with completion events. If evidence meets requirements, registration jumps straight to 'active'.
Parameters:
registrationId(required) — string — Registration ID to proveevidence(required) — object — Evidence proving the device works. Include at least one of: bundleHash+events, photoBase64, or deviceHealth.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_registrationsread-onlyList all machine registrations on the network. See pending, approved, active, and rejected registrations. Public endpoint — no auth required.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_registrationread-onlyGet details of a specific machine registration by ID, including capabilities, pricing, operator info, and current status.
Parameters:
registrationId(required) — string — Registration ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
near_statusread-onlyGet NEAR Protocol chain-abstraction integration status. Returns supported chains (near, eth, base, arbitrum, optimism, polygon), supported assets (USDC, USDT, NEAR, ETH, WBTC), and capability flags. Use this to confirm cross-chain settlement is available before requesting quotes.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
near_quoteGet a cross-chain payment quote from the NEAR 1Click solver network (chaindefuser.com). Provides optimal routing and fee estimates for funding PCC escrow contracts using any source asset on any supported chain. Call near_status first to confirm available chains/assets.
Parameters:
fromChain(required) — string — Source chain (e.g. 'eth', 'base', 'near', 'arbitrum')fromAsset(required) — string — Source asset symbol (e.g. 'USDC', 'ETH', 'NEAR')toChain(required) — string — Destination chain (e.g. 'base', 'eth')toAsset(required) — string — Destination asset symbol (e.g. 'USDC')amount(required) — string — Amount as an integer string in the smallest denomination (e.g. '1000000' for 1 USDC with 6 decimals)recipient— string — Recipient address on the destination chain (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
near_intentSubmit a cross-chain payment intent to the NEAR 1Click solver network. Creates a signed intent that routes the payment atomically across chains. Call near_quote first to obtain a quoteId. Intents typically settle within 30-60 seconds — poll near_intent_status to track progress.
Parameters:
quoteId(required) — string — Quote ID returned from near_quoteworkflowId(required) — string — PCC workflow or job ID this payment is forrecipient— string — Recipient address on the destination chain (optional)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
near_intent_statusread-onlyCheck the settlement status of a submitted NEAR 1Click cross-chain payment intent. Statuses progress: pending → submitted → settled | failed. Returns txHash and explorerUrl when settled.
Parameters:
intentId(required) — string — Intent ID returned from near_intent
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
protocol_stateread-onlyRead the PCCProtocol root contract state: current fee rate, total protocol fees collected, total escrow count, and registry addresses. Requires PCC_PROTOCOL_ADDRESS to be configured on the gateway.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
protocol_feeread-onlyCalculate the protocol fee for a given USDC amount (6-decimal units). Returns the fee, the net amount after fee, and formatted versions of both. Use this before building escrow contracts to understand the true cost.
Parameters:
amount(required) — string — Amount as a BigInt string in USDC 6-decimal units (e.g. '1000000000' = 1000 USDC)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
protocol_token_feesread-onlyGet total protocol fees collected for a specific ERC-20 token address across all escrows. Returns raw wei amount and human-readable formatted value.
Parameters:
tokenAddress(required) — string — ERC-20 token contract address (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
protocol_escrow_feesread-onlyGet protocol fees collected from a specific escrow contract. Also returns whether the escrow was deployed via the protocol factory. Useful for auditing fee flows.
Parameters:
escrowAddress(required) — string — Escrow contract address (0x...)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
protocol_create_escrowCreate a new MilestoneEscrow contract via the PCCProtocol factory on-chain. Protocol-deployed escrows have fee collection and registry tracking built in. Requires PCC_GATEWAY_PRIVATE_KEY write access.
Parameters:
payer(required) — string — Payer EVM address (0x...)arbiter(required) — string — Arbiter EVM address (0x...) — resolves disputestoken(required) — string — ERC-20 token address for payment (0x...)cwmId(required) — string — Capability Work Module ID as a 32-byte hex string (0x + 64 chars)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_dht_metricsread-onlyGet a snapshot of DHT telemetry counters and recent events. Returns message counts, peer connection stats, query/announce rates, and a list of the last 50 metric events. Use for monitoring network health.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
marketplace_categoriesread-onlyList all supplies and materials marketplace categories with the count of active listings in each. Categories cover the full spectrum of physical production inputs: raw metals, plastics, lab reagents, consumables, electronics, tooling, and more.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
marketplace_list_listingsread-onlySearch and filter supplies/materials marketplace listings. Operators buy raw materials here to fulfill capability contracts. Filter by category, in-stock status, location, or free-text query.
Parameters:
query— string — Full-text search across name, description, and tagsinStock— string — Filter to only in-stock listingscategory— string — Filter by category: raw-metals, plastics-polymers, lab-reagents, lab-consumables, electronics, chemicals, biologicals, tooling, packaging, calibration, safety, otherlocation— string — Filter by region (e.g. 'US-Midwest', 'EU-West', 'Asia-Pacific')
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
marketplace_get_listingread-onlyGet full details of a specific supplies/materials marketplace listing by ID. Returns pricing, availability, lead time, location, and tags.
Parameters:
id(required) — string — Listing ID (e.g. 'lst-al6061-bar')
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
marketplace_create_listingCreate a new supplies/materials listing in the marketplace. Suppliers post available raw materials, lab reagents, tooling, or consumables for other operators to purchase.
Parameters:
category(required) — string — Category: raw-metals, plastics-polymers, lab-reagents, lab-consumables, electronics, chemicals, biologicals, tooling, packaging, calibration, safety, othername(required) — string — Product namepricePerUnit(required) — number — Price per unit in USDCunit(required) — string — Unit of sale: kg, L, each, box, plate, etc.tags— array — Search tagsinStock— boolean — Whether the item is currently availablelocation— string — Supplier region or countrymaxOrder— number — Maximum order quantityminOrder— number — Minimum order quantitysellerId— string — Supplier entity IDdescription— string — Detailed product descriptionleadTimeDays— number — Estimated lead time in business days
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
marketplace_update_listingUpdate an existing supplies/materials listing (price, stock status, description, etc.). Pass only the fields you want to change.
Parameters:
id(required) — string — Listing ID to updatetags— array — Updated search tagsinStock— boolean — Stock availabilitydescription— string — Updated descriptionleadTimeDays— number — Updated lead time in dayspricePerUnit— number — New price per unit in USDC
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
marketplace_delete_listingdestructiveRemove a supplies/materials listing from the marketplace. The listing is immediately hidden from search results.
Parameters:
id(required) — string — Listing ID to remove
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
marketplace_place_orderPlace a purchase order for supplies or materials. Calculates total price automatically (quantity × pricePerUnit). Returns an order with 'pending' status. Optionally links to an on-chain escrow for trustless settlement.
Parameters:
listingId(required) — string — Listing ID to order fromquantity(required) — number — Quantity to order (must meet listing minOrder/maxOrder)buyerId— string — Buyer entity ID (operator kernel ID, etc.)escrowAddress— string — Optional on-chain escrow address for trustless settlement
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
marketplace_list_ordersread-onlyList marketplace supply orders. Filter by buyerId, sellerId, or status. Returns order history with pricing and status.
Parameters:
status— string — Filter by order statusbuyerId— string — Filter to orders placed by this buyersellerId— string — Filter to orders received by this seller
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
marketplace_get_orderread-onlyGet details of a specific supply order including the associated listing details, quantity, total price, status, and optional escrow address.
Parameters:
id(required) — string — Order ID (e.g. 'ord-demo-001')
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
system_telemetryread-onlyRaw system state dump — actual DB rows for kernels, devices, jobs, evidence, registrations, capabilities, agent conversations, audit log. No fake numbers, no summaries.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
operator_poll_jobsread-onlyOperator polls jobs assigned to their kernel; status defaults to queued, and the route can filter any status. Requires operate authority for this kernel: its recorded operator identity (the caller that registered it), its proven operator wallet, or the gateway admin authority. Another identity gets 403; no credentials gets 401; an unregistered kernel gets 404 for a non-admin. Operator identity proof for operate is completed by WP-A (DECISIONS items 136 and 138). The pcc-node 0.1.1 daemon does not call it: it takes no jobs.
Parameters:
kernelId(required) — string — Kernel ID to poll jobs for
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
operator_push_evidenceOperator pushes evidence bundle from a completed job execution. Requires decide authority for the stored job's kernel: its proven operator wallet or the gateway admin authority. A matching claimed operator key gets 403 operator_proof_required. Evidence takes decide, per DECISIONS 2026-10-04 01:25 (N31c). Evidence is posted with the kernel's proven operator wallet authority (decide). The body's kernelId cannot choose the authorization target. No credentials gets 401 before the job read; a job without a kernel gets 403 for a non-admin. Contains device ID, execution timestamp, result payload, and event timeline. Success is a receipt with stored: true naming this jobId. HTTP 200 with stored: false means nothing was stored: never follow it with status completed.
Parameters:
jobId(required) — stringkernelId(required) — stringevidence(required) — object
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
operator_heartbeatOperator sends heartbeat with capability re-announcement. Keeps the kernel alive on the network and updates its own capability rows. Requires operate authority for this kernel: its recorded operator identity (the caller that registered it), its proven operator wallet, or the gateway admin authority. Another identity gets 403; no credentials gets 401; an unregistered kernel gets 404 for a non-admin. Operator identity proof for operate is completed by WP-A (DECISIONS items 136 and 138).
Parameters:
kernelId(required) — stringcapabilities— array
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
operator_update_job_statusOperator reports a job's status (in_progress, completed, failed). Requires operate authority for the stored job's kernel: its recorded operator identity (the caller that registered it), its proven operator wallet, or the gateway admin authority. The body's kernelId cannot choose the authorization target. Another identity gets 403; no credentials gets 401 before the job read; a job without a kernel gets 403 for a non-admin. Operator identity proof for operate is completed by WP-A (DECISIONS items 136 and 138). The node path finishes a job in two calls: submit its evidence (POST /api/operator/evidence, posted with the kernel's proven operator wallet authority, decide), and only if that receipt says stored: true for this jobId, set status completed here. HTTP 200 alone is not enough: the relay answers 200 with stored: false when it could not store the evidence (an unknown job, a storage failure); then set failed with the reason evidence_not_stored. On the current gateway, completed marks the job done and its timeline then says settled, but the escrow is not released yet (board G1). Do not call pcc_job_complete after this: it answers 409.
Parameters:
jobId(required) — stringkernelId(required) — stringstatus(required) — stringmetadata— object
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_submit_paid_jobFast-track paid job: one call from DHT discovery to funded escrow + active scope. Auto-negotiates, quotes, creates escrow with milestones, creates execution scope. Returns jobId, scopeId, escrowId, quote with pricing adjustments, contract terms. For testnet, escrow is mock-funded automatically.
Parameters:
kernelId(required) — string — Target kernel ID (from DHT query)capabilityType(required) — string — e.g. 'liquid-handler', 'fdm', 'cnc-3axis'userAgentId(required) — string — Your agent/user IDparameters— object — Job parameters (protocolType, volume, materials, etc.)paymentMethod— string — Payment method (testnet-mock for demo)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_job_completeComplete a job: gathers tool call audit trail from execution scopes, builds evidence bundle with SHA-256 hash, stores evidence, revokes scopes, and settles escrow (mock or real). This is how a job run through execution scopes is finished. A node that submitted its evidence and set status completed (operator_update_job_status) must not call it: it then answers 409 ("Job already completed or completion in progress").
Parameters:
jobId(required) — string — Job ID to completemessage— string — Completion message or notes
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_job_settlementread-onlyGet a job's settlement status from its own escrow records: status (settled only when a settlement read confirms the release; reported_released when the milestone record says released but nothing confirms it; simulated for a mock escrow; awaiting_settlement, no_settlement_record, unknown or unavailable otherwise), settled, payout, paidAmount (confirmed releases only), reportedReleasedAmount, quotedAmount, currency (recorded or null), escrow, milestones, the negotiation session, notices and asOf.
Parameters:
jobId(required) — string — Job ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_get_tool_manifestread-onlyGet the tool manifest for a kernel's device type. Lists all available tools with their safety classification (read, safe_control, scoped_write, privileged) and input schemas. Use to understand what tools are available before making tool calls.
Parameters:
kernelId(required) — string — Kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_relay_generic_tool_callRelay a tool call to any kernel's device executor via the generic relay (not OT-2 specific). Works with any device type. Safe tools (read/safe_control) don't need a scope. Scoped write tools require an active execution scope. Returns a call ID — poll pcc_get_tool_result for the response.
Parameters:
kernelId(required) — string — Target kernel IDtoolName(required) — string — Tool name from the device manifestargs— object — Tool argumentsscopeId— string — Execution scope ID (required for write operations)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_submit_requestSubmit a high-level capability request in natural language. The system automatically decomposes it into a capability DAG with dependencies, timelines, and budget allocation across fabrication, design, assembly, electronics, software, logistics, and verification nodes. Returns the request with full decomposed DAG. Example: 'Build a cute animatronic plush desk robot with servo-driven animations'.
Parameters:
title(required) — string — Short title for the requestdescription(required) — string — Full natural language description of what needs to be built or donebudget— number — Total budget in USDC (default: 1000)urgency— string — Urgency level — affects cost multipliers (emergency: 2x cost, 0.5x time)currency— string — Currency (default: USDC)deadline— string — ISO 8601 deadline (default: 7 days from now)requesterEmail— string — Requester email for notificationsrequesterWallet— string — Requester wallet address for payments
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_list_requestsread-onlyList all capability requests with optional filtering. Shows status, decomposed DAG summary, estimated costs, and timelines.
Parameters:
status— string — Filter by statusurgency— string — Filter by urgencyrequesterEmail— string — Filter by requester email
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_get_requestread-onlyGet a capability request by ID with the full decomposed DAG — all capability nodes, their dependencies, estimated costs/hours, assigned operators, and linked bounty IDs.
Parameters:
requestId(required) — string — Request ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_decompose_requestRe-trigger decomposition of an existing capability request. Overwrites the existing capability DAG with a fresh decomposition. Useful after updating the description or budget.
Parameters:
requestId(required) — string — Request ID to decompose
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_publish_requestPublish all pending capability nodes in a request as bounties. Each node becomes a bidding opportunity for operators. Returns the list of created bounty IDs linked to each capability node.
Parameters:
requestId(required) — string — Request ID to publish
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_get_request_dagread-onlyGet the capability DAG (directed acyclic graph) for a request as adjacency data — nodes with all fields plus explicit edges showing dependency relationships. Useful for visualization or workflow planning.
Parameters:
requestId(required) — string — Request ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_get_request_critical_pathread-onlyGet the critical path (longest dependency chain) for a capability request. The critical path determines the minimum calendar time to complete the request. Returns node IDs in order, the full node details, and total hours on the critical path.
Parameters:
requestId(required) — string — Request ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_assign_node_operatorAssign an operator to a specific capability node within a request. The node status changes to 'assigned'. Operators claim nodes to indicate they will execute that capability.
Parameters:
requestId(required) — string — Request IDnodeId(required) — string — Capability node IDoperatorId(required) — string — Operator kernel ID or wallet address
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_update_node_statusUpdate the status of a capability node within a request. Valid transitions: pending → bidding → assigned → in_progress → completed (or failed). When all nodes complete, the request automatically moves to completed.
Parameters:
requestId(required) — string — Request IDnodeId(required) — string — Capability node IDstatus(required) — string — New status for the node
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_update_requestUpdate a capability request's title, description, budget, deadline, urgency, or contact info. Does not re-decompose — call pcc_decompose_request afterwards if you want a fresh DAG.
Parameters:
requestId(required) — string — Request IDtitle— stringbudget— numberurgency— stringdeadline— stringdescription— stringrequesterEmail— stringrequesterWallet— string
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_cancel_requestdestructiveCancel a capability request. Cancelled requests cannot be updated, decomposed, or published. This is a soft delete — the request remains visible with status 'cancelled'.
Parameters:
requestId(required) — string — Request ID to cancel
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
pcc_oracle_statusread-onlyNot served by the PCC gateway: GET /api/oracle/health returns 404 there. PCC's verification oracle runs as a separate service, and this route answers only where a deployment fronts it. Agents never call the oracle to settle a job: settlement is the gateway's step after pcc_job_complete. Where it is served, it returns the oracle's EIP-712 signing address and chain ID.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_oracle_verifyNot served by the PCC gateway: POST /api/oracle/verify returns 404 there. PCC's verification oracle runs as a separate service, and this route answers only where a deployment fronts it. Agents never call it to settle a job: settlement is the gateway's step after pcc_job_complete. Where it is served, it checks that the evidence exists, its hash matches, tier requirements are met, there is no replay and the operator identity is valid, and it returns a signed EIP-712 attestation.
Parameters:
escrowAddress(required) — string — Escrow contract addressjobId(required) — string — PCC job IDkernelId(required) — string — Operator kernel IDevidenceHash(required) — string — SHA-256 hash of evidence bundleassuranceTier— integer — Evidence tier (0=none, 1=basic, 2=full, 3=ZK)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_protocol_feeread-onlyGet the current protocol fee rate (2.35%, immutable) and fee recipient address. The fee is hardcoded in the PCCProtocol smart contract — no admin, no governance, no upgrade can change it.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
create_capabilityRegister a capability instance for a kernel. Required before submitting jobs — the gateway needs at least one capability per kernel. Creates a liquid-handler, fdm, cnc-3axis, or other capability type.
Parameters:
kernelId(required) — string — Kernel ID to register capability fortype(required) — string — Capability type (e.g. liquid-handler, fdm, cnc-3axis, laser-cut, document-printing)name— string — Human-readable name for the capabilitydescription— string — Description of what this capability does
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
kernel_heartbeatSend a per-kernel heartbeat to keep the kernel marked online. Used by pcc-node daemons as an alternative to the operator relay heartbeat.
Parameters:
kernelId(required) — string — Kernel IDstatus— string — Kernel status (online/offline)capabilities— array — Optional capability announcements
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
kernel_announce_capabilitiesAnnounce capabilities for a kernel. NOTE: the gateway currently acknowledges this call but stores nothing, so it does not put any capability on the network. To publish a capability, use create_capability (POST /api/capabilities).
Parameters:
kernelId(required) — string — Kernel IDcapabilities(required) — array — Capability objects to announcedevices— array — Device IDs that back these capabilitiessignature— string — Ed25519 signature of the announcement
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
send_diagnosticsUpload an encrypted diagnostic bundle when the operator's node has problems. The bundle is encrypted client-side with a retrieval code the operator must share with support before logs can be read. Use this when the operator reports errors, crashes, or misbehavior. The pcc-node CLI runs `pcc-node logs --send` locally to collect+encrypt; prefer that path when available. This tool is for agent-driven uploads when the bundle is already prepared.
Parameters:
kernelId(required) — string — Kernel ID the diagnostics came fromencrypted(required) — object — Encrypted bundle payloadbundleHash— string — sha256 of plaintext bundlebundleSize— number — Size of encrypted payload in bytescollectedAt— string — ISO timestamp when bundle was collectedlogLineCount— number — How many log lines are in the bundlesystemPlatform— string — e.g. Linux-5.15, Darwin-23, Windows-10
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
send_support_messageSend an operator support message to the PCC team. Creates a new support thread or appends to the operator's existing open thread. Can optionally attach a diagnostic retrieval code (from send_diagnostics) so support staff can decrypt logs. Discord webhook fires on every new message, so expect fast response. Use this whenever the operator says something is broken, confusing, or not behaving as expected.
Parameters:
kernelId(required) — string — Operator's kernel IDmessage(required) — string — The support message text — describe the problem concretelysubject— string — Optional thread subject (auto-generated from message if omitted)kernelName— string — Human-readable kernel namesystemInfo— object — Optional system context (platform, nodeVersion, daemonRunning, gatewayReachable)retrievalCode— string — Optional diagnostic retrieval code to attach (from send_diagnostics)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
check_support_repliesread-onlyCheck for admin replies on the operator's support threads. Call this periodically or when the operator asks 'did they respond yet?'. Returns all threads for this kernel and a hasUnreadReplies boolean indicating new admin messages.
Parameters:
kernelId(required) — string — Operator's kernel ID
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
reply_to_support_threadReply to an existing support thread. Use when the operator wants to add information to a thread started earlier. Needs the threadId from check_support_replies or the original send_support_message response.
Parameters:
threadId(required) — string — Thread ID to reply tomessage(required) — string — Reply messageretrievalCode— string — Optional diagnostic retrieval code to attach
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_capture_challengeIssue a fresh block-anchored CaptureNonceChallenge for a job. The operator's device must render this nonce into the captured media (QR code, audio tone, etc.) before calling pcc_capture_upload. The nonce is derived from (challengeId, latest blockHash, workOutputRoot) so captures cannot be pre-computed. Returns challengeId, 64-char hex nonce, blockNumber, maxAgeSeconds (clamped to 120).
Parameters:
jobId(required) — string — PCC job ID the capture belongs todeclaredClass(required) — string — Capture class the operator plans to claim. Determines which gates the verifier will run.requestedTtlSeconds— integer — Requested challenge lifetime in seconds. Clamped to 120 server-side.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_capture_uploadUpload a capture (photo / video / audio / sensor clip) with its CaptureManifest for G1..G6 verification. Bytes are base64-encoded inline; optional base64 C2PA manifest bytes can be supplied for CC3+ claims. The server runs the 6-gate CaptureVerifier and persists a PASS/PARTIAL/FAIL verdict. Returns {verdictId, verdict, verifiedClass, gatesPassed, gatesFailed, warnings, anchorCandidate, captureHash, manifestHash}.
Parameters:
manifest(required) — object — CaptureManifest — ALCOA+-ready metadata: class, declaredAt (ISO-8601), deviceFingerprint, mediaHash (sha256:<hex>), optional challengeId. See CaptureManifestSchema in @pcc/spec.captureBytesBase64(required) — string — Base64-encoded capture bytes (image / video / audio / sensor clip). Hash must match manifest.mediaHash.jobId— string — Job ID for telemetry binding. Falls back to manifest.jobId if omitted.operatorId— string — Explicit operator ID. Falls back to the authenticated session userId.challengeId— string — Challenge UUID to re-bind to the in-memory challenge cache (G3 freshness gate).submittedAt— integer — Client-submitted timestamp (epoch ms). Used in drift detection.visualNonceEcho— string — The visual nonce value the operator rendered in-scene (QR payload, audio tone id, etc.).c2paManifestBase64— string — Optional base64-encoded C2PA manifest JUMBF bytes. Required when manifest.class >= CC3.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_capture_anchorAnchor a PASS + anchor-candidate capture verdict to CaptureClassRegistry on-chain (Base Sepolia by default). Rejects FAIL/PARTIAL verdicts. Idempotent — re-submitting the same verdictId returns the existing anchor row. Returns 202 {status:'deferred'} if CaptureClassRegistry is not yet deployed (CAPTURE_REGISTRY_ADDRESS unset).
Parameters:
verdictId(required) — string — The verdictId returned by pcc_capture_upload. Must be a PASS verdict with anchorCandidate=true.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_capture_statusread-onlyFetch the combined verdict + on-chain anchor view for a single capture. Mirrors the verifier's DB shape plus the anchor tx metadata (txHash, blockNumber, gasUsed, explorerUrl). Anchor is null if the verdict was never anchored.
Parameters:
verdictId(required) — string — Capture verdict UUID (from pcc_capture_upload).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_list_verdictsread-onlyList recent capture verdicts, newest first. Optionally filter by jobId. Default limit is 50, capped at 200 server-side. Returns {verdicts, count, limit, jobId}.
Parameters:
jobId— string — Filter by job ID. Omit for all verdicts across jobs.limit— integer — Maximum rows returned (default 50, hard cap 200).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_capture_class_registryread-onlyLook up a capture's on-chain anchor record in CaptureClassRegistry by its 32-byte captureHash. Returns the registry address, captureHash, and decoded anchor tuple (declaredClass, verifiedClass, manifestHash, submittedBy, jobId, challengeId, blockAnchor, capturedAt, attestationsRoot, attesterCount). onchain is null if the capture was never anchored. Returns 202 deferred when CaptureClassRegistry is not yet deployed.
Parameters:
captureHash(required) — string — Capture hash (32-byte). Accepts 0x-prefixed or unprefixed hex, or sha256:<hex> format. Padded server-side to bytes32.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_verifier_healthread-onlyReport CaptureVerifier health: which adapters are loaded (c2pa, webauthn, appattest, playintegrity), their staleness status, in-memory challenge cache size, whether CaptureClassRegistry is deployed, and the active PCC_NETWORK. Use this to diagnose why a capture class is being rejected or degraded.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_orchestrator_list_templatesread-onlyList the orchestrator templates the dashboard's chat console can drive. Each entry includes slug, display_name, description, produces_kind, capability_class (physical | digital), greeting, and api_base (the route prefix that serves the six session-driver routes for that template). Public — no auth required.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_orchestrator_match_capabilitiesHeuristic template matcher. Pass a free-text description of what you want to onboard (e.g. 'I run a CNC milling shop' or 'I have a Postgres database with a GraphQL endpoint') and the matcher returns all templates ranked by keyword score with a 'reason' string per match. Public — no auth required.
Parameters:
input(required) — string — Free-text description of what you want to onboard.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_startStart a new physical-operator onboarding session. Returns a session_id used by every subsequent /api/onboard/* call. Auth-required.
Parameters:
name(required) — string — Operator / company name (e.g. 'Oakland Titanium Mills').url— string — Optional company website. If supplied, the orchestrator scrapes it on the next /scrape call.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_scrapeScrape a URL into the running physical-operator onboarding session. Triggers a stealth fetch + structured extraction (machines, hours, services, certifications). Returns a small JSON summary; full extraction is appended to the session's running profile and visible via /live-data. Auth-required.
Parameters:
id(required) — string — Session id returned by pcc_onboard_session_start.url(required) — string — URL to scrape (e.g. company About page).
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_ingest_docsQueue documents (datasheets, SOPs, MOPs, certifications) for ingestion into a physical-operator onboarding session. Document URLs may be local:// for files dropped in the chat console or full https:// URLs. Auth-required.
Parameters:
id(required) — string — Session id returned by pcc_onboard_session_start.doc_urls(required) — array — URLs of documents to ingest. Mix of local:// and https:// is fine.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_build_agentFinalise a physical-operator onboarding session: registers the operator on PCC, mints a wallet, writes the SEO mirror, returns the publication payload (capabilities, operator_id, discovery_url). Idempotent — safe to retry inside the same session_id. Auth-required.
Parameters:
id(required) — string — Session id returned by pcc_onboard_session_start.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_statusread-onlyCoarse status snapshot for a physical-operator onboarding session: current state, 0-100 progress, scraped_count, ingested_count, last_event, publication payload (if built). Cheap — designed for polling from the chat header. Auth-required.
Parameters:
id(required) — string — Session id returned by pcc_onboard_session_start.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_onboard_session_live_dataread-onlyFull event log for a physical-operator onboarding session — feeds the chat console's activity sidebar. Supports incremental polling via ?since=<unix-millis>. Returns the next cursor on every response. Auth-required.
Parameters:
id(required) — string — Session id returned by pcc_onboard_session_start.since— number — Unix milliseconds cursor — returns only events with t > since. Use the 'cursor' field of the previous response for incremental polling.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_contributor_registerRegister a contributor profile binding a wallet address to a role and a published RateSchedule. Body: address (0x40hex), role (10 ContributorRole values from ADR-12 §2.1 + legacy 'designer'), scheduleHash (0x64hex of a previously published schedule), optional ipId, metadataUri, contributorNftTokenId. Returns the persisted profile (composite id is address:role:tail). Idempotent on the composite id — re-posting the same (address, role, contributorNftTokenId) replaces the prior profile.
Parameters:
address(required) — string — Wallet address (0x + 40 hex chars)role(required) — string — ContributorRole — 10 ADR-12 roles + deprecated 'designer'scheduleHash(required) — string — 0x + 64 hex sha256 of a published RateScheduleipId— string — Optional Story Protocol IP Asset IDmetadataUri— string — Optional ipfs:// or https:// URIcontributorNftTokenId— string — Optional ContributorNFT tokenId once minted on-chain
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_contributor_listread-onlyList all contributor profiles for an address across roles. Returns an array of {id, address, role, scheduleHash, ipId, contributorNftTokenId, metadataUri, registeredAt}. Returns empty array when no profiles exist for the address.
Parameters:
address(required) — string — Wallet address (0x + 40 hex chars)
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_schedule_publishPublish a sealed off-chain RateSchedule. Computes scheduleHash server-side via the canonical sha256-over-canonical-JSON algorithm (matching the on-chain RateScheduleRegistry.publish() invariant). Idempotent: re-publishing the same content returns alreadyPublished:true. Returns {scheduleHash, alreadyPublished}.
Parameters:
publishedBy(required) — string — Address that publishes (0x + 40 hex chars)schedule(required) — object — RateSchedule body — version, segments (constant/step/linear-decay/exponential-decay/adoption-indexed/piecewise-value), and optional notes
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_schedule_getread-onlyFetch a published RateSchedule by its content hash. Returns {schedule, publishedBy} with segments re-validated via Zod, or 404 if not found.
Parameters:
scheduleHash(required) — string — 0x + 64 hex sha256 of the schedule
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_schedule_evaluateEvaluate a published RateSchedule at a moment, returning the effective bps. Inputs: scheduleHash + now (unix seconds) + optional jobValueCents (piecewise-value) + optional jobsPerDay (adoption-indexed). Returns {scheduleHash, bps, segmentKind, segmentIndex}. segmentIndex=-1 + bps=0 when no segment covers the moment (silent gap).
Parameters:
scheduleHash(required) — string — 0x + 64 hex schedule hashnow(required) — integer — Unix seconds at evaluation momentjobsPerDay— number — Rolling 24h job count (adoption-indexed segments)jobValueCents— integer — Job value in cents (piecewise-value segments)
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_training_manifest_setSet (insert-or-replace) the TrainingManifest for a model IP — the dataset weight map the LicensingEngine walks when distributing payouts to a 'model-author' entry in a CompositionManifest. Dataset weightBps must sum to ≤ 10000 (gateway accepts partial mixes; on-chain enforces exact 10000). Returns {modelIpId, manifestHash}.
Parameters:
modelIpId(required) — string — Story IP Asset ID for the modeldatasetWeights(required) — array — DatasetIP entries with weightBps (sum ≤ 10000)baseModelIpId— string — Optional parent ModelNFT IP if this was fine-tunedmethodologyHash— string — Optional 0x + 64 hex reproducibility hash
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_training_manifest_getread-onlyFetch the TrainingManifest for a model IP. Returns the parsed datasets array + manifestHash + createdAt, or 404 if no manifest has been set.
Parameters:
modelIpId(required) — string — Story IP Asset ID for the model
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
pcc_trilobio_build_configGenerate a complete KERNEL_CONFIG JSON for a Trilobio (tcode-api) fleet controller. Wraps `buildTrilobioConfig()` from the @pcc/trilobio npm package. Returns a TrilobioKernelConfig with sensible defaults (pollIntervalMs=3000, maxScriptTimeoutSec=3600, allowArbitraryScripts=false). The result can be passed to `pcc-node start` via the KERNEL_CONFIG env var, or handed to setup_generate_config / setup_register_device for direct API-driven registration. Note: this is a TypeScript package helper (no HTTP call). For programmatic use, `import { buildTrilobioConfig } from "@pcc/trilobio"`.
Parameters:
url(required) — string — Fleet-controller URL on the LAN (host[:port], no trailing slash, no path) — e.g. http://192.168.1.50apiKey— string — Trilobio fleet-controller API key (from the trilobot admin UI). Either apiKey OR username+password is required unless mockMode=true.deviceId— string — Logical device ID within the kernel (default: trilobio-fleet-01)kernelId— string — Kernel ID this device belongs to (auto-generated as kernel_trilobio_<timestamp> if omitted)mockMode— boolean — Bypass real HTTP and simulate runs. Use for CI / floor demos. Default: false.password— string — Fleet-controller account password (basic-auth mode only)username— string — Fleet-controller account username (basic-auth mode only)pollIntervalMs— number — Poll interval in ms for run status (range 500-60000). Default: 3000.tcodeApiVersion— string — Pinned tcode-api version on the fleet controller. Format: 'latest' or semver (e.g. 1.25.1). Default: latest. Surfaces in evidence bundles for reproducibility.mockRunDurationMs— number — Mock-mode simulated run duration in ms. Default: 2000.maxScriptTimeoutSec— number — Maximum allowed wall-clock seconds for a single tcode script (range 30-86400). Default: 3600.allowArbitraryScripts— boolean — Permit customer-supplied tcode-api Python scripts (true) or only curated protocol IDs (false). Default: false. Set true only for trusted-counterparty deployments.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_trilobio_validate_optionsSanity-check operator-supplied Trilobio options before generating a KERNEL_CONFIG. Wraps `validateTrilobioOptions()` from @pcc/trilobio. Catches the common mistakes (malformed URL, missing creds, out-of-range timeouts, invalid tcodeApiVersion semver) before they hit the gateway or the device. Returns { valid: boolean, errors: string[], warnings?: string[] }. Note: this is a TypeScript package helper (no HTTP call); for programmatic use, `import { validateTrilobioOptions } from "@pcc/trilobio"`.
Parameters:
url— string — Fleet-controller URLapiKey— string — Fleet-controller API keydeviceId— stringkernelId— stringmockMode— booleanpassword— string — Basic-auth passwordusername— string — Basic-auth usernamepollIntervalMs— numbertcodeApiVersion— string — 'latest' or semver stringmockRunDurationMs— numbermaxScriptTimeoutSec— numberallowArbitraryScripts— boolean
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_trilobio_validate_scriptQuick lint of a tcode-api Python script before submission to a Trilobio fleet controller. Wraps `validateTcodeScript()` from @pcc/trilobio. Surface check only — NOT a sandbox or sanitizer. Looks for: imports of `tcode_api` (presence required), obviously dangerous statements (subprocess, os.system, eval, exec, __import__, socket, urllib, requests, file writes), empty scripts, and missing top-level tcode commands. Returns { valid: boolean, errors: string[], warnings?: string[] }. Operators with `allowArbitraryScripts=true` should treat results as a hint — the fleet controller is the source of truth on safety. Note: TypeScript package helper (no HTTP call); for programmatic use, `import { validateTcodeScript } from "@pcc/trilobio"`.
Parameters:
source(required) — string — Full Python source of the tcode-api script to lint
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_trilobio_capability_templateread-onlyReturn the `TRILOBIO_CAPABILITY` constant from @pcc/trilobio — a default capability template for a Trilobio fleet controller. Pass to POST /api/capabilities to publish a baseline liquid-handling capability for a kernel hosting a trilobot. Operators can extend the `materials` and `capabilities` arrays to advertise instrument-specific features (custom labware libraries, sample types). Notable: includes `tcode-script-execution` as an advertised capability, which is unique to Trilobio — operators who set `allowArbitraryScripts: true` can accept jobs that ship a full tcode-api Python script as the protocol payload. Note: TypeScript package helper (no HTTP call); for programmatic use, `import { TRILOBIO_CAPABILITY } from "@pcc/trilobio"`.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
attach_operator_channelAttach a notification/dispatch channel to an operator so PCC knows how to ping them when a job lands. The operator's onboarding agent calls this AFTER the conversation that produced the channel record. Transport is a small stable enum (webhook|email|sms|voice|push|mqtt|file|manual) — vendor specifics live in the free-form `describe` field, written by the operator's agent. PCC the substrate stays neutral. Returns the channel record with a generated id.
Parameters:
slug(required) — string — Operator slug (typically the operator's address or unique identifier).label(required) — string — Short human label shown to the operator and in admin UIs: 'Front counter printer', 'Owner's phone'.transport(required) — string — Which wire does the message go over. `manual` = no machine endpoint (dashboard-only).describe(required) — string — Plain-English instructions for how PCC should talk to whatever is on the other end. Written by the operator's onboarding agent. Required, ≥4 chars. Example: 'POST JSON with keys order_id, line_items[], deadline_iso. I will POST back {order_id, status} to your reply URL.'enabled— boolean — Whether the channel is live (defaults to true).endpoint— object — Transport-specific routing payload. webhook→{url}, email→{address}, sms/voice→{phoneE164}, push→{token,platform}, mqtt→{brokerUrl,topic}, file→{scheme,path}, manual→{}.direction— string — out=PCC pushes only; in-out=operator's system also replies; in=operator pushes unsolicited.credentialRef— string — Reference to a secret in the credential vault (not the secret itself). PCC resolves it at dispatch time.replyContract— string — Optional operator-authored contract describing how the operator's system will respond to evidence requests, status pings, etc.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
list_operator_channelsread-onlyList every channel attached to an operator. Returns the full channel records (id, transport, direction, endpoint, describe, enabled flags). Useful for an operator's onboarding agent to confirm what is wired up, and for status dashboards.
Parameters:
slug(required) — string — Operator slug.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
update_operator_channelUpdate an existing channel — toggle enabled, rewrite the describe contract, change the endpoint payload, etc. Merges into the existing record. The operator slug, id, and createdAt are immutable.
Parameters:
id(required) — string — Channel id (returned from attach_operator_channel).label— stringenabled— booleandescribe— stringendpoint— objectdirection— stringcredentialRef— stringreplyContract— string
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
delete_operator_channeldestructiveRemove a channel from an operator. Future jobs will not dispatch to it. Use update_operator_channel with enabled=false to silence temporarily without losing the recipe in `describe`.
Parameters:
id(required) — string — Channel id.
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
test_operator_channelsFire a synthetic job at every enabled channel for an operator so the onboarding agent (and the human watching) can confirm the integration end-to-end before a real job lands. Returns per-channel dispatch results (delivered, ref, warnings).
Parameters:
slug(required) — string — Operator slug.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
suggest_csd_templatesread-onlyBidirectional onboarding: the registry talks back. Describe in plain English what you are trying to set up — 'wood-fired pizza shop in SF', 'Opentrons OT-2 liquid handler', 'same-day SF courier' — and the registry returns N candidate Capability StructureDefinition (CSD) templates ranked by keyword-overlap relevance (name×3, tags×2, description×1; tie-break on usage). Empty query falls back to popularity-ordered top picks. After picking one, pass the chosen type to pcc-author-integration. Score-zero results are dropped.
Parameters:
q— string — Plain-English description of the capability the user is trying to set up. Optional — empty falls back to popularity.kind— string — Filter by CSD kind.limit— integer — Max results (1..20, default 5).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_popular_csd_templatesread-onlyReturn CSDs sorted by adoption (usage-count descending). Useful for first-time operators who want to see what kind of capabilities others are publishing. Each entry includes the CSD record plus usage attribution: count, recent adopters (deduped, capped at 50), and lastUsedAt.
Parameters:
limit— integer — Max results (1..50, default 10).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
get_operator_statusread-onlyFour-slot substrate view for an operator: kernels, capabilities (with sla + availability), notification channels, and the per-kernel A2A agent-card URLs. Returns totals and a `missing` list naming any of the four onboarding slots that are still empty. Use this from an onboarding agent's wrap-up step to confirm 'are all four slots wired before I go live?' status is `ready` | `partial` | `unconfigured`. Public — operator slug is non-secret and the response carries no credentials (channel `credentialRef` values are vault references, not secrets).
Parameters:
slug(required) — string — Operator slug — typically the operator's wallet address used as `operatorAddress` on their kernels.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
propose_compositionPropose a composition — a sequenced DAG of capability instances to satisfy a multi-step outcome under a budget + assurance tier. Accepts either a flat `steps` list or an outcome chain. Returns a candidate plan ranked by `optimizeFor` (price | speed | quality) with per-step assignments. The composition is persisted for ~30 minutes (proposed status) and can be executed once via execute_composition.
Parameters:
outcomeType(required) — string — High-level outcome label, ≤120 chars. Example: 'desk-robot-prototype'.budgetUSD(required) — number — Total budget the user is willing to spend across all steps.minAssuranceTier(required) — integer — Minimum acceptable assurance tier on every step.steps— array — Ordered list of capability types this composition needs (1..20). Use this OR `outcomeChain`.location— object — Geographic constraint (lat/lng + radius, or country, etc).requester— object — {agentId, did?} — the agent submitting the request.description— string — Free-form natural-language description (≤4000 chars).optimizeFor— string — Ranking objective (default `price`).outcomeChain— array — Alternative to `steps`: chain of named sub-outcomes. The planner expands each into capability types.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_compositionread-onlyRetrieve a previously-proposed composition by id. Returns 404 if unknown, 410 if the 30-minute proposal window has expired. Use this to inspect a plan before executing, or to recover a plan id after a restart.
Parameters:
id(required) — string — Composition id (returned from propose_composition).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
execute_compositionCommit a proposed composition: drives the DAG through the workflow engine, each step records a reputation outcome, the composition's reputation is finalized when the run ends. When `PCC_COMPOSE_EXECUTE_REAL=true` is set on the gateway, steps submit real jobs via JobFacade and the workflow run is durable (@pcc/workflow). When the flag is off, the NOOP runner returns synthetic success — useful in dev/test. Re-executing an already-run composition replays the stored result (idempotent — reputation deltas are applied exactly once).
Parameters:
id(required) — string — Composition id from propose_composition. Must be in `proposed` status and not expired.idempotencyKey— string — Optional caller-supplied key (≤120 chars) to dedupe execute calls.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_reportReport a bug, friction, or dead-end you hit while using PCC. Call this the moment you get stuck and cannot recover: a 5xx (its response carries a `report_hint` with pre-filled fields), a 4xx you cannot fix from its message, the same step failing twice, or a misleading tool/description. PUBLIC — works before you provision an API key (cold agents are exactly who this is for). Persisted durably and reviewed by the PCC team. Report each distinct failure ONCE; never include an API key, token, or wallet secret. Rate-limited per IP.
Parameters:
summary(required) — string — 1-line description of what you were doing and what went wrong. Example: 'POST /api/build/contract returned 500 with no hint about the missing field.'logs— array — Optional but valuable: your last few steps as SUMMARIES (never full request/response bodies) — the sequence that led to the failure. Secrets are never allowed in a note.type— string — bug = something is broken/wrong; friction = it works but was confusing/harder than it should be; idea = a suggestion or missing capability. Defaults to bug.detail— string — Multi-line context: the full error body, what you tried, what you expected. Optional but recommended.method— string — The HTTP method you used. From `report_hint.send.method`. Example: 'POST'.status— integer — The HTTP status you got. From `report_hint.send.status`. Example: 500.agentId— string — Which model/agent you are. Example: 'claude', 'gpt-4o', 'gemini'. Optional.traceId— string — Your journey ID — returned by provision_api_key and on every response as `x-pcc-trace-id` (also in a 5xx `report_hint.traceId`). Lets PCC replay your full run.endpoint— string — The route you were on when you got stuck. From a 5xx `report_hint.send.endpoint`. Example: '/api/build/contract'.severity— string — How badly this blocked you. Optional.errorCode— string — The machine error code from the response body, if any. From `report_hint.send.errorCode`.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
pcc_report_attemptReport one phase of an onboarding attempt, success or failure (attempt reporting contract v1). Send one report when each runbook phase ends, and a final report with phase "session" (with the `phases` roll-up), also when you stop early (outcome abandoned or budget_stop). Generate `sessionId` (UUID v4) once per attempt and increment `seq` with every report; a retried report with the same sessionId and seq is collapsed. Never guess: send null for what you do not know (tokens: source "unknown"). Redact keys, tokens, emails and wallet secrets before sending. Always include `summary`: contract v1 makes it optional, but until the gateway's attempt support lands it is the only field kept, and today's server refuses a report without it. The schema is contract v1: an unknown phase, outcome or harness name is accepted (the server stores it as other or unknown, with the raw value as a label), and budget-stop is a spelling of budget_stop. Never send a transcript; consent.transcript stays false until the operator decides. Unauthenticated.
Parameters:
kind(required) — stringsessionId(required) — string — UUID v4, generated once at the start of the attemptseq(required) — integer — Per-session report counterphase(required)outcome(required)env— ['object', 'null']ids— ['object', 'null'] — Only the ids known so far: each at most 200 characters of [A-Za-z0-9:._/-], or nulllogs— ['array', 'null'] — The phase's step timeline, summaries onlypack— ['object', 'null']detail— ['string', 'null']device— ['object', 'null']phases— ['array', 'null'] — Only on phase "session": the roll-uptokens— ['object', 'null'] — Never guess: send null with source "unknown"consent— ['object', 'null']harness— ['object', 'null']summary— ['string', 'null'] — One line, e.g. "register: failed, POST /api/kernels 400"traceId— ['string', 'null'] — x-pcc-trace-id of the last PCC callcontract— integerproposal— ['object', 'null'] — One improvement ideadurationMs— ['integer', 'null'] — The phase's wall time; on session, the whole attempt
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
save_dashboardSave a generated dashboard to the network so the user gets a live, shareable URL: https://capability.network/a/<slug>. Pass a `manifest` — a small declarative DashboardManifest (windows + live-data bindings + actions) conforming to the schema at https://capability.network/ui-kit/v1/manifest.schema.json; the shipped pcc-ui kit renders it identically everywhere (you compose the manifest, the kit renders it — never hand-rolled HTML). WHEN to call this: only when the task needs a surface to watch/approve/compare/reuse (a live job, a value chain, a settlement trail, a recurring order) — never for a one-line answer. RECALL FIRST: call search_dashboards before generating; reload or fork a match instead of duplicating. The manifest MUST NOT contain an API key (a shared artifact travels with its contents — the network rejects one that does). Returns the stored artifact incl. its slug. Defaults visibility to 'unlisted' (link-shareable, not listed).
Parameters:
name(required) — string — Short human name for the dashboard, e.g. 'Watch my pizza + courier'. Used to mint the slug.manifest(required) — object — The DashboardManifest (2-6KB JSON) conforming to https://capability.network/ui-kit/v1/manifest.schema.json. Required top-level keys: `csd` (must be 'pcc://artifacts/dashboard/v1'), `title`, and `sections[]` (each section has `windows[]`). Window kinds: note, metric, capability, list, form, run, approval, receipt, chain, actions. Bindings point at live routes you already use (/api/jobs/:id, /api/escrow/:id, /sse/stream/job/:id). No API key anywhere in the manifest.visibility— string — Who can load it. Default 'unlisted' (anyone with the link; not in listings). 'public' appears in search_dashboards; 'private' is owner-only.composeRefs— array — Optional pinned, re-plannable ComposeRequest objects (value chains). Pin the request, never a compositionId (those expire in 30 min).description— string — One-line description of what the dashboard shows.renderedCid— string — Optional CID of a rendered-HTML export saved via /api/storage.capabilityTypes— array — Capability types this dashboard is about, e.g. ['pizza.order','courier.dispatch']. This is the discovery join — it's how search_dashboards finds this artifact later.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
get_dashboardread-onlyRecall a saved dashboard by its id or slug. Returns the full artifact (manifest + metadata). Use this to reload a dashboard the user asks for again ('open my pizza dashboard') instead of regenerating it — a saved dashboard reloads with zero regeneration. Public for public/unlisted artifacts; owner-only for private ones. Increments the load counter (a popularity signal).
Parameters:
idOrSlug(required) — string — The artifact id (ua_...) or its slug (e.g. 'watch-my-pizza-8k3f', the tail of the /a/<slug> URL).
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
search_dashboardsread-onlyDiscover existing public dashboards before you generate a new one (recall-first — the library accrues; adopt > extend > build for UIs too). Filter by `capabilityType` (e.g. 'pizza.order'), free-text `q` over name/description/types, and `sort` by popularity or recency. Returns { entries, total, offset, limit }. Only public artifacts are listed; unlisted ones load by slug via get_dashboard but never appear here.
Parameters:
q— string — Free-text search over name, description, and capability types.sort— string — Ranking: 'popular' (by use+load+fork counts) or 'recent' (default).limit— integer — Max results (1..100, default 20).offset— integer — Pagination offset (default 0).capabilityType— string — Filter to dashboards tagged with this capability type, e.g. 'pizza.order'.
Hints: read-only yes · destructive no · idempotent not declared · open-world not declared
fork_dashboardFork an existing dashboard into a new artifact you own, preserving lineage back to the original (the social remix verb). Use this to adapt a popular dashboard rather than build from scratch — e.g. fork a 'watch pizza' dashboard and raise the budget or add a receipt window via update_dashboard. Increments the source's fork counter. You can fork any public/unlisted artifact, or a private one you own.
Parameters:
id(required) — string — The id (ua_...) of the artifact to fork.name— string — Optional name for the fork (defaults to '<original> (fork)').visibility— string — Visibility of the fork (default 'unlisted').
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
update_dashboardModify a dashboard you own (owner-only). Replace the manifest or any metadata field; the version increments. Use this to edit a saved surface meaningfully — 'raise budgetUSD to 40', 'add a receipt window', 'make it public'. A replaced manifest must still conform to the schema and must not contain an API key. Only send the fields you want to change.
Parameters:
id(required) — string — The id (ua_...) of the artifact to update.name— string — New name.manifest— object — Replacement DashboardManifest (must conform to the schema; no API key). Omit to leave the manifest unchanged.visibility— string — New visibility (e.g. flip 'unlisted' -> 'public' to list it).composeRefs— array — Replacement pinned ComposeRequest objects.description— string — New description.renderedCid— string — New rendered-HTML export CID.capabilityTypes— array — Replacement capability-type tags.
Hints: read-only no · destructive no · idempotent not declared · open-world not declared
render_pcc_dashboardread-onlyCompose a live PCC dashboard for a physical-capability task — pass a DashboardManifest (windows + live data bindings + actions) and it renders as an interactive MCP App.
Parameters:
csd(required) — The builtin CSD URI this manifest conforms to.title(required) — stringsections(required) — arraythemeapi_base— string — Gateway base URL. Default https://capability.network.description— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
render_pcc_dashboard_irread-onlyCompose a live PCC dashboard rendered through the closed, PCC-owned IR (read-only). Pass a DashboardManifest; it renders as an interactive MCP App via the audited closed-IR render path.
Parameters:
csd(required) — The builtin CSD URI this manifest conforms to.title(required) — stringsections(required) — arraythemeapi_base— string — Gateway base URL. Default https://capability.network.description— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
pcc.op.capability.request_quoteread-onlyPrice a configured PCC capability (typed operation). Returns the itemized quote for the given capability type + selections. Pure calculation — no funds move and nothing is created. Maps to POST /api/build/price.
Parameters:
type(required) — string — Capability type, e.g. 'fdm'.selections(required) — object — Parameter selections.profileId— stringcapabilityId— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.