A2A Artifact Handoff

Compiles source-agent outputs into validated, receiver-ready handoff packages.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
75%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,500Tokens (tool definitions)
~5.6 KBTypical response size
Moderate attention impact (1.17% of 128k context)

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-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools
verifiedversion not recorded3 tools