For A2A Developers
AgentCard with All Four Extensions
Section titled “AgentCard with All Four Extensions”All four protocols use the standard A2A capabilities.extensions
mechanism. An agent that supports all four declares them in a single
array:
{ "name": "service-provider-agent", "version": "1.0", "capabilities": { "extensions": [ { "uri": "https://ravikiran438.github.io/agent-consent-protocol/v1", "description": "ACAP: usage-policy consent and per-action adherence.", "required": true }, { "uri": "https://ravikiran438.github.io/phala-protocol/v1", "description": "Phala: principal-declared welfare feedback.", "required": false }, { "uri": "https://ravikiran438.github.io/pratyahara-nerve/v1", "description": "NERVE: behavioral integrity monitoring.", "required": true }, { "uri": "https://ravikiran438.github.io/sauvidya-pace/v1", "description": "PACE: principal accessibility and capacity.", "required": true } ] }}Why some are required: true
Section titled “Why some are required: true”| Protocol | Default | Reason |
|---|---|---|
| ACAP | true | Callee wants callers to accept usage policy before invoking skills |
| Phala | false | Welfare feedback is advisory (BU-3: agents MAY ignore BeliefUpdates) |
| NERVE | true | Security layer: callee expects callers to participate in the trust envelope |
| PACE | true | Agents serving principals with registered PCPs MUST adapt interaction |
Agents that support fewer protocols
Section titled “Agents that support fewer protocols”An agent can declare any subset. A deployment that only needs consent:
{ "capabilities": { "extensions": [ { "uri": "https://ravikiran438.github.io/agent-consent-protocol/v1", "description": "ACAP: usage-policy consent and per-action adherence.", "required": true } ] }}Agents that do not understand an extension ignore the entry. No error, no failure, no negotiation. The extensions are additive.
Advertising Protocol Support in an MCP Handshake
Section titled “Advertising Protocol Support in an MCP Handshake”For MCP tool servers whose agent supports one or more of the four
protocols, each protocol registers as a custom server capability in
the serverCapabilities object during the initialize handshake,
keyed by the same extension URI used on the A2A AgentCard:
{ "serverCapabilities": { "tools": {}, "https://ravikiran438.github.io/pratyahara-nerve/v1": { "neuron_type": "processing", "behavioral_fingerprint": "sha256:...", "trust_score": 0.88 }, "https://ravikiran438.github.io/sauvidya-pace/v1": { "supported_modalities": ["voice", "text"], "supported_languages": ["en", "te", "hi"] } }}MCP Reference Servers
Section titled “MCP Reference Servers”Each protocol ships a reference Model Context Protocol server that exposes its validators as MCP tools. All four use stdio transport and work with any MCP-compatible client; the configuration below uses VSCode’s native MCP settings, and the same console script binds to any stdio-capable host. The pattern is identical across repos; each stays independently installable with no shared package.
| Protocol | Console script | Tools exposed | Purpose |
|---|---|---|---|
| ACAP | acap-mcp | 9 | Core validators + one primary entry point per extension (governance tiering, category preferences, regulatory context, audit projection), plus validate_usage_policy_ref for AgentCard payload validation. |
| Phala | phala-mcp | 12 | Six Core validators (five primitives + BU-Privacy) plus five welfare_detectors extension validators: TypedBeliefUpdate structural check, WD-1 typed composition, WD-2 arbitration, WD-3 horizon, WD-4 provenance. Plus validate_phala_service_ref for AgentCard payload validation. BU-2 (per-agent uniqueness) and BU-4 (TTL expiry) are runtime-enforced and not exposed via MCP — they require state (a set of updates) or wall-clock time that an MCP tool boundary doesn’t naturally carry. |
| NERVE | nerve-mcp | 13 | Seven Core safety invariants (N-1, N-3, N-4, N-5, N-9, N-14, N-15) plus three Yathartha extension invariants (N-16, N-17, N-18) for capability-surface integrity. Plus three AgentCard / wire validators: validate_neural_posture_ref, validate_nerve_envelope, validate_behavioral_fingerprint. |
| PACE | pace-mcp | 16 | Seven Core validators: PCP structural check plus six named accessibility invariants (IM-1, IM-2, CCC-1, CCC-2, AIC-1, AIC-2). Plus four augmentation_profile extension validators (AUG-1 reversibility, AUG-3 identity, AUG-4 skill maintenance, AUG-5 emergency boundary). Plus five wire validators introduced in PACE v3: validate_accessibility_service_ref, validate_active_challenge, validate_pace_consent_annotation, validate_pace_violation_notice, compute_ccc_trend. AUG-2 is omitted because audit decomposition is enforced at type construction by the Mediation enum, leaving no separate runtime check to expose. |
Install
Section titled “Install”Two paths depending on whether you are consuming or contributing.
For end users (no clone, ephemeral with uvx):
uvx --from 'acap[mcp] @ git+https://github.com/ravikiran438/agent-consent-protocol.git@v0.1.0' acap-mcpuvx --from 'phala[mcp] @ git+https://github.com/ravikiran438/phala-protocol.git@v0.1.0' phala-mcpuvx --from 'nerve[mcp] @ git+https://github.com/ravikiran438/pratyahara-nerve.git@v0.1.0' nerve-mcpuvx --from 'pace[mcp] @ git+https://github.com/ravikiran438/sauvidya-pace.git@v0.1.0' pace-mcpFor end users (persistent, into an existing venv):
pip install 'acap[mcp] @ git+https://github.com/ravikiran438/agent-consent-protocol.git@v0.1.0'# substitute phala/nerve/pace as neededFor contributors (clone + editable install):
git clone https://github.com/ravikiran438/agent-consent-protocol.gitcd agent-consent-protocolpip install -e '.[mcp]'Any of the three paths registers the appropriate <name>-mcp console
script in the active Python environment.
VSCode MCP config
Section titled “VSCode MCP config”Add this to .vscode/mcp.json at your workspace root (or configure
globally via your VSCode user settings, under the MCP section). Only
include the servers you need.
Option A — uvx from git URLs (no persistent install required):
{ "servers": { "acap": { "type": "stdio", "command": "uvx", "args": [ "--from", "acap[mcp] @ git+https://github.com/ravikiran438/agent-consent-protocol.git@v0.1.0", "acap-mcp" ] }, "phala": { "type": "stdio", "command": "uvx", "args": [ "--from", "phala[mcp] @ git+https://github.com/ravikiran438/phala-protocol.git@v0.1.0", "phala-mcp" ] }, "nerve": { "type": "stdio", "command": "uvx", "args": [ "--from", "nerve[mcp] @ git+https://github.com/ravikiran438/pratyahara-nerve.git@v0.1.0", "nerve-mcp" ] }, "pace": { "type": "stdio", "command": "uvx", "args": [ "--from", "pace[mcp] @ git+https://github.com/ravikiran438/sauvidya-pace.git@v0.1.0", "pace-mcp" ] } }}Option B — absolute paths to pre-installed binaries:
{ "servers": { "acap": { "type": "stdio", "command": "/absolute/path/to/agent-consent-protocol/.venv/bin/acap-mcp" }, "phala": { "type": "stdio", "command": "/absolute/path/to/phala-protocol/.venv/bin/phala-mcp" }, "nerve": { "type": "stdio", "command": "/absolute/path/to/pratyahara-nerve/.venv/bin/nerve-mcp" }, "pace": { "type": "stdio", "command": "/absolute/path/to/sauvidya-pace/.venv/bin/pace-mcp" } }}Reload the workspace. The tools appear in any MCP-aware VSCode extension grouped by server name. Other MCP hosts accept the same console-script paths under their own configuration conventions.
Tool-naming convention
Section titled “Tool-naming convention”Every tool is named validate_<invariant> and takes a JSON payload
of the primitive(s) it operates on. Output is a JSON object with
{"ok": true, ...} on success or {"ok": false, "error": "..."} on
invariant failure. A malformed input (not a structural invariant
failure) surfaces as an MCP protocol error rather than an ok=false
response.
See each server’s src/<package>/mcp_server/README.md for the full
tool schema and per-tool examples.
Companion Repositories
Section titled “Companion Repositories”| Protocol | Package | Tests | TLA+ |
|---|---|---|---|
| ACAP | agent-consent-protocol | 128 (Core + 4 extensions + MCP) | Full state machine |
| Phala | phala-protocol | 68 (Core + welfare_detectors + MCP) | Core skeleton + welfare_detectors spec |
| NERVE | pratyahara-nerve | 94 (Core + Yathartha + MCP) | Full state machine (Core + Yathartha) |
| PACE | sauvidya-pace | 96 (Core + augmentation_profile + MCP) | Full state machine + augmentation_profile spec |
Total: 386 tests across the stack.
Papers
Section titled “Papers”| Protocol | DOI |
|---|---|
| Anumati / ACAP | arXiv:2604.16524 · Zenodo 10.5281/zenodo.19606339 |
| Phala | 10.5281/zenodo.19625612 |
| Pratyahara / NERVE | 10.5281/zenodo.19628589 |
| Sauvidya / PACE | 10.5281/zenodo.19633139 |
| Yathartha (NERVE extension) | 10.5281/zenodo.19659633 |