Skip to content
English

快速开始

A2A(Agent2Agent)是 agent 之间的标准协议。草料提供了一个只读的 A2A 服务:给它一个草料码链接,它返回码背后物理实体的完整信息。

当调用方不是你配置的 MCP 客户端、而是一个走 A2A 协议的 agent 时用它。你不需要给对方接口文档,对方通过 Agent Card 就能知道草料能做什么、怎么调。它读到的数据与公开 MCP相同,差别在协议形态:MCP 面向工具调用,A2A 面向 agent 协作。

服务信息

协议版本A2A 0.3.0
服务地址https://a2a.objqr.com
Agent Cardhttps://a2a.objqr.com/.well-known/agent-card.json
调用端点POST https://a2a.objqr.com/a2a/jsonrpc
支持方法message/sendtasks/gettasks/cancel
鉴权不需要
能力3 个 skill,全部只读

注意:本服务不支持流式返回(streaming: false),也不支持推送通知。每次调用一问一答。

第一步:发现

bash
curl https://a2a.objqr.com/.well-known/agent-card.json

返回一张 Agent Card,里面写明了这个 agent 是谁、能做什么、调用地址在哪。字段逐个解释见 Agent Card 与发现

提示:草料的码域名 qr61.cnqr71.cn 上也放了同一张卡。也就是说,扫到一张草料码的 agent 可以直接从码所在域名发现草料的 A2A 服务,不需要事先知道 a2a.objqr.com

第二步:查一张码

把码的链接放进消息文本里发过去,服务会自己识别:

bash
curl -X POST https://a2a.objqr.com/a2a/jsonrpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "message/send",
    "params": {
      "message": {
        "kind": "message",
        "role": "user",
        "messageId": "m1",
        "parts": [
          { "kind": "text", "text": "这个二维码是什么?https://qr71.cn/okDISU/qssTnoy" }
        ]
      }
    }
  }'

返回一个已完成的 Task,结果放在 artifacts 里:

json
{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "kind": "task",
    "id": "9332c282-1fa7-4c42-96ac-58e4e2f88f4c",
    "contextId": "e9c10667-e79b-4c99-b05f-0cb237067127",
    "status": { "state": "completed", "timestamp": "2026-08-12T17:14:13.272Z" },
    "artifacts": [
      {
        "artifactId": "6915a6bd-d63c-42e6-b629-8aed3bb06236",
        "name": "entity",
        "parts": [
          { "kind": "data", "data": { "thing": { "name": "数控车床-A08-03-06" } } },
          { "kind": "text", "text": "数控车床-A08-03-06;建档组织:草料二维码;状态:设备运行状态=正常;账本 1 条;属性 7 项;可执行操作 2 个" }
        ]
      }
    ]
  }
}

每个 artifact 有两个部分:data 是结构化数据,给程序读;text 是一句话摘要,给人读或直接进对话。完整结构见 Task 与返回结构

第三步:换一个 skill

草料有 3 个 skill。上面的例子没有指定,默认走 get_entity。要明确指定,用结构化输入:

bash
curl -X POST https://a2a.objqr.com/a2a/jsonrpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "2",
    "method": "message/send",
    "params": {
      "message": {
        "kind": "message",
        "role": "user",
        "messageId": "m2",
        "parts": [
          {
            "kind": "data",
            "data": {
              "skill": "get_records",
              "url": "https://qr71.cn/okDISU/qssTnoy",
              "size": 2
            }
          }
        ]
      }
    }
  }'

返回的 artifact 名字变成 records,摘要是「共 1 条记录(账本合计 1 条)。」

三个 skill 各自能做什么,见 Skill 列表

关于意图识别

草料这一侧不做意图识别。收到消息后的路由规则是确定的:

  1. 先看有没有 data 部分,有就按里面的 skillurl
  2. 没有就从文本里正则匹配码链接,skill 默认 get_entity

也就是说,「用户想干什么」由调用方的 agent 判断,草料只负责按指令取数。Agent Card 里每个 skill 都写了描述和示例问句,用来引导调用方做这个判断。

下一步