Jarvis SDK supports Google's Agent-to-Agent (A2A) protocol for cross-agent discovery and task delegation. Your agent discovers our capabilities, sends tasks, and receives structured results — all via standard HTTP.
The Agent-to-Agent Protocol (A2A) is Google's open standard for agent interoperability. Unlike MCP (which connects models to tools), A2A connects agents to agents — enabling delegation, discovery, and structured task handoff between autonomous systems.
Fetch our Agent Card to discover Jarvis SDK's capabilities. This is the starting point for any A2A interaction:
curl https://jarvissdk.com/.well-known/agent.json | jq .
{
"name": "Jarvis SDK",
"description": "Agent-native module marketplace with 700+ trust-scored modules",
"url": "https://jarvissdk.com",
"version": "1.0.0",
"protocol_version": "0.2.0",
"capabilities": {
"streaming": false,
"pushNotifications": true,
"stateTransitionHistory": true
},
"authentication": {
"schemes": ["apiKey"],
"credentials": {
"apiKey": { "in": "header", "name": "x-api-key" }
}
},
"skills": [
{
"id": "module-discovery",
"name": "Module Discovery",
"description": "Search and browse 700+ modules with trust scoring",
"inputModes": ["application/json"],
"outputModes": ["application/json"]
},
{
"id": "module-execution",
"name": "Module Execution",
"description": "Install and execute module actions with telemetry",
"inputModes": ["application/json"],
"outputModes": ["application/json"]
},
{
"id": "trust-scoring",
"name": "Trust Scoring",
"description": "Query trust scores — error rate, uptime, peer ratings"
},
{
"id": "self-equip",
"name": "Self-Equip (Armory)",
"description": "Describe your mission and receive a curated toolkit"
},
{
"id": "billing-usage",
"name": "Billing & Usage",
"description": "Track execution usage and manage subscriptions"
}
]
}Your agent fetches /.well-known/agent.json to learn our capabilities. No auth required.
Register via POST /api/v1/auth/register or use an existing API key. Pass it as x-api-key header.
Pick from the skills list in the Agent Card. Each skill has input/output modes documented.
POST a task to /api/v1/a2a with the skill ID and input parameters.
Get structured output with state transition history. Use task_id to check status on long-running tasks.
Send a task to Jarvis SDK using the A2A task endpoint. Each task targets one skill from the Agent Card.
curl -X POST https://jarvissdk.com/api/v1/a2a \
-H "x-api-key: jsk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"skill": "module-execution",
"input": {
"module": "text-toolkit",
"action": "slugify",
"params": { "text": "Hello World from A2A" }
}
}'{
"task_id": "task_a1b2c3d4",
"status": "completed",
"output": {
"result": { "slug": "hello-world-from-a2a" }
},
"history": [
{ "state": "submitted", "timestamp": "2026-03-21T10:00:00Z" },
{ "state": "working", "timestamp": "2026-03-21T10:00:00Z" },
{ "state": "completed", "timestamp": "2026-03-21T10:00:01Z" }
]
}Use the self-equip skill to let Jarvis SDK recommend a toolkit based on your agent's mission:
curl -X POST https://jarvissdk.com/api/v1/a2a \
-H "x-api-key: jsk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"skill": "self-equip",
"input": {
"mission": "I need to process customer emails, extract key data, and update our CRM",
"constraints": ["no paid modules", "max 5 tools"]
}
}'A2A tasks follow a defined state machine. Every task includes a history array showing state transitions.
submitted → working → completed
↘ failed
↘ cancelled| State | Meaning |
|---|---|
| submitted | Task received, queued for processing |
| working | Jarvis SDK is executing the requested skill |
| completed | Task finished successfully — output available |
| failed | Task failed — error details in output |
| cancelled | Task was cancelled by the caller |
Jarvis SDK supports both protocols. Here's how to choose:
| Aspect | MCP | A2A |
|---|---|---|
| Best for | Tool use within a single agent session | Agent-to-agent delegation across systems |
| Model | Tools (function calling) | Skills (task-oriented) |
| Discovery | tools/list (session-scoped) | .well-known/agent.json (global) |
| Transport | JSON-RPC 2.0 over HTTP | REST / HTTP |
| State | Stateless per call | Task lifecycle with history |
| Use case | Claude/Cursor calling text-toolkit | Your orchestrator delegating email processing to us |
| Auth | x-api-key header | x-api-key header |
Rule of thumb: Use MCP if your agent is an LLM that picks tools during conversation. Use A2A if your agent is a backend service that delegates specific tasks to other agents programmatically. Both protocols authenticate the same way and access the same modules.
const JARVIS_URL = "https://jarvissdk.com";
const API_KEY = "jsk_your_api_key";
// Step 1: Discover capabilities
const agentCard = await fetch(`${JARVIS_URL}/.well-known/agent.json`).then(r => r.json());
console.log(`Skills: ${agentCard.skills.map(s => s.name).join(", ")}`);
// Step 2: Send a task
const task = await fetch(`${JARVIS_URL}/api/v1/a2a`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY,
},
body: JSON.stringify({
skill: "module-execution",
input: {
module: "json-toolkit",
action: "validate",
params: { json: '{"name": "test", "version": 1}' },
},
}),
}).then(r => r.json());
console.log(task.status); // "completed"
console.log(task.output); // { result: { valid: true, ... } }import httpx
JARVIS_URL = "https://jarvissdk.com"
API_KEY = "jsk_your_api_key"
# Step 1: Discover capabilities
agent_card = httpx.get(f"{JARVIS_URL}/.well-known/agent.json").json()
print(f"Skills: {[s['name'] for s in agent_card['skills']]}")
# Step 2: Send a task
task = httpx.post(
f"{JARVIS_URL}/api/v1/a2a",
headers={"x-api-key": API_KEY},
json={
"skill": "module-execution",
"input": {
"module": "hash-toolkit",
"action": "sha256",
"params": {"text": "hello from python"},
},
},
).json()
print(f"Status: {task['status']}")
print(f"Hash: {task['output']['result']['hash']}")