快速开始
A2A(Agent2Agent)是 agent 之间的标准协议。草料提供了一个只读的 A2A 服务:给它一个草料码链接,它返回码背后物理实体的完整信息。
当调用方不是你配置的 MCP 客户端、而是一个走 A2A 协议的 agent 时用它。你不需要给对方接口文档,对方通过 Agent Card 就能知道草料能做什么、怎么调。它读到的数据与公开 MCP相同,差别在协议形态:MCP 面向工具调用,A2A 面向 agent 协作。
服务信息
| 项 | 值 |
|---|---|
| 协议版本 | A2A 0.3.0 |
| 服务地址 | https://a2a.objqr.com |
| Agent Card | https://a2a.objqr.com/.well-known/agent-card.json |
| 调用端点 | POST https://a2a.objqr.com/a2a/jsonrpc |
| 支持方法 | message/send、tasks/get、tasks/cancel |
| 鉴权 | 不需要 |
| 能力 | 3 个 skill,全部只读 |
注意:本服务不支持流式返回(
streaming: false),也不支持推送通知。每次调用一问一答。
第一步:发现
curl https://a2a.objqr.com/.well-known/agent-card.json返回一张 Agent Card,里面写明了这个 agent 是谁、能做什么、调用地址在哪。字段逐个解释见 Agent Card 与发现。
提示:草料的码域名
qr61.cn和qr71.cn上也放了同一张卡。也就是说,扫到一张草料码的 agent 可以直接从码所在域名发现草料的 A2A 服务,不需要事先知道a2a.objqr.com。
第二步:查一张码
把码的链接放进消息文本里发过去,服务会自己识别:
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 里:
{
"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。要明确指定,用结构化输入:
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 列表。
关于意图识别
草料这一侧不做意图识别。收到消息后的路由规则是确定的:
- 先看有没有
data部分,有就按里面的skill和url走 - 没有就从文本里正则匹配码链接,
skill默认get_entity
也就是说,「用户想干什么」由调用方的 agent 判断,草料只负责按指令取数。Agent Card 里每个 skill 都写了描述和示例问句,用来引导调用方做这个判断。