A2A Artifact Handoff
Compiles source-agent outputs into validated, receiver-ready handoff packages.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"a2a-artifact-handoff": {
"url": "https://a2a-artifact-handoff.onrender.com/mcp"
}
}
}Remote endpoints
https://a2a-artifact-handoff.onrender.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
🟢prepare_artifact(content, filename, media_type, target_modes, ttl_hours)
Prepare content for transfer to another agent or a human reviewer. `target_modes` accepts either a JSON list or an actual list of MIME types. The result includes expiring artifact URLs, SHA-256 hashes, a manifest, and a downloadable ZIP package.
Input Schema
{
"type": "object",
"properties": {
"content": {
"title": "Content",
"type": "string"
},
"filename": {
"default": "artifact.md",
"title": "Filename",
"type": "string"
},
"media_type": {
"default": "text/markdown",
"title": "Media Type",
"type": "string"
},
"target_modes": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Target Modes"
},
"ttl_hours": {
"default": 24,
"title": "Ttl Hours",
"type": "integer"
}
},
"required": [
"content"
],
"title": "prepare_artifactArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "prepare_artifactDictOutput"
}⚪compile_handoff(source_outputs, receiver_contract, handoff_context, ttl_hours)
Compile source-agent outputs into a receiver-ready handoff package. The input schema declares the exact source-output, receiver-contract, and handoff-context fields. The tool selects and validates required deliverables and returns either a portable package or actionable unmet requirements.
Input Schema
{
"type": "object",
"properties": {
"source_outputs": {
"items": {
"$ref": "#/$defs/SourceOutput"
},
"title": "Source Outputs",
"type": "array"
},
"receiver_contract": {
"$ref": "#/$defs/ReceiverContract"
},
"handoff_context": {
"$ref": "#/$defs/HandoffContext"
},
"ttl_hours": {
"default": 24,
"title": "Ttl Hours",
"type": "integer"
}
},
"required": [
"source_outputs",
"receiver_contract",
"handoff_context"
],
"$defs": {
"ContractConstraints": {
"examples": [
{
"maxFileBytes": 100000,
"requireSha256": true
}
],
"properties": {
"requireSha256": {
"default": true,
"description": "Require SHA-256 integrity metadata for delivered artifacts.",
"title": "Requiresha256",
"type": "boolean"
},
"maxFileBytes": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional maximum size in bytes for each delivered artifact.",
"title": "Maxfilebytes"
}
},
"title": "ContractConstraints",
"type": "object"
},
"HandoffContext": {
"properties": {
"objective": {
"maxLength": 2000,
"minLength": 1,
"title": "Objective",
"type": "string"
},
"status": {
"default": "completed",
"maxLength": 80,
"title": "Status",
"type": "string"
},
"sourceAgent": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sourceagent"
},
"destinationAgent": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Destinationagent"
},
"decisions": {
"items": {
"type": "string"
},
"title": "Decisions",
"type": "array"
},
"assumptions": {
"items": {
"type": "string"
},
"title": "Assumptions",
"type": "array"
},
"unresolvedIssues": {
"items": {
"type": "string"
},
"title": "Unresolvedissues",
"type": "array"
}
},
"required": [
"objective"
],
"title": "HandoffContext",
"type": "object"
},
"OutputRequirement": {
"description": "One deliverable expected by the receiving agent.",
"examples": [
{
"acceptedMediaTypes": [
"text/markdown"
],
"filename": "report.md",
"id": "report",
"required": true
},
{
"acceptedMediaTypes": [
"text/csv"
],
"filename": "evidence.csv",
"id": "evidence",
"required": true,
"requiredCsvColumns": [
"channel",
"score",
"evidence"
]
},
{
"acceptedMediaTypes": [
"application/json"
],
"filename": "summary.json",
"id": "summary",
"required": true,
"requiredJsonKeys": [
"recommendation",
"confidence"
]
}
],
"properties": {
"id": {
"description": "Stable requirement identifier. Use the matching source output id when known; use filename only for the delivered filename.",
"maxLength": 80,
"minLength": 1,
"title": "Id",
"type": "string"
},
"acceptedMediaTypes": {
"description": "Media types accepted for this deliverable, for example text/markdown, text/csv, or application/json.",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Acceptedmediatypes",
"type": "array"
},
"filename": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filename required by the receiving agent.",
"title": "Filename"
},
"required": {
"default": true,
"description": "Whether this deliverable is mandatory.",
"title": "Required",
"type": "boolean"
},
"description": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"requiredJsonKeys": {
"description": "Use only when acceptedMediaTypes contains application/json. Leave empty for Markdown, text, CSV, images, and other media types.",
"items": {
"type": "string"
},
"title": "Requiredjsonkeys",
"type": "array"
},
"requiredCsvColumns": {
"description": "Use only when acceptedMediaTypes contains text/csv. Leave empty for Markdown, text, JSON, images, and other media types.",
"items": {
"type": "string"
},
"title": "Requiredcsvcolumns",
"type": "array"
}
},
"required": [
"id",
"acceptedMediaTypes"
],
"title": "OutputRequirement",
"type": "object"
},
"ReceiverContract": {
"description": "Machine-readable input contract declared by the receiving agent.",
"properties": {
"contractVersion": {
"default": "0.1",
"title": "Contractversion",
"type": "string"
},
"destinationCapability": {
"maxLength": 200,
"minLength": 1,
"title": "Destinationcapability",
"type": "string"
},
"requiredOutputs": {
"items": {
"$ref": "#/$defs/OutputRequirement"
},
"minItems": 1,
"title": "Requiredoutputs",
"type": "array"
},
"constraints": {
"$ref": "#/$defs/ContractConstraints",
"description": "Runtime constraint values. Provide requireSha256 and optionally maxFileBytes; do not copy JSON Schema definitions into this field."
}
},
"required": [
"destinationCapability",
"requiredOutputs"
],
"title": "ReceiverContract",
"type": "object"
},
"SourceOutput": {
"description": "One output produced by the source agent.",
"properties": {
"id": {
"maxLength": 80,
"minLength": 1,
"title": "Id",
"type": "string"
},
"filename": {
"maxLength": 200,
"minLength": 1,
"title": "Filename",
"type": "string"
},
"mediaType": {
"maxLength": 120,
"minLength": 3,
"title": "Mediatype",
"type": "string"
},
"content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Content"
},
"contentBase64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contentbase64"
},
"role": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Role"
}
},
"required": [
"id",
"filename",
"mediaType"
],
"title": "SourceOutput",
"type": "object"
}
},
"title": "compile_handoffArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "compile_handoffDictOutput"
}🟢inspect_handoff(run_id)
Inspect a handoff package and return an acceptance decision. The tool recalculates deliverable hashes, checks expiry and contract satisfaction, and returns the receiving agent's next action.
Input Schema
{
"type": "object",
"properties": {
"run_id": {
"title": "Run Id",
"type": "string"
}
},
"required": [
"run_id"
],
"title": "inspect_handoffArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "inspect_handoffDictOutput"
}Community
Evidence