コンテンツにスキップ

REST API

a2ald は既定で http://127.0.0.1:2121 を待ち受けます(--api-addr または config.toml で変更できます)。

api_token を設定した場合、ローカル以外からのリクエストは Authorization: Bearer <token> が必要です。ローカルからのリクエストは既定で免除されますが、require_local_token = true の場合は必要になります。token を空にするとアクセスは開放されます(意図された既定値です)。書き込みリクエストには Content-Type: application/json が必要です。

  • 管理 API の JSON ボディは 1 MiB を上限とします。
  • fetch のレスポンスは 4 MiB を上限とし、超えた場合は truncated: true を返します。
  • POST /agents/{aid}/cas はストリーミングアップロードのため、JSON の上限は適用されません。
  • GET /agents/{aid}/export はローカルからのみ利用できます。
  • GET /aid/… のゲートウェイは管理 token を使わず、その AID の ACL に従います。
メソッドパス説明
GET/health{"status":"ok"}
GET/statusノードの AID、公開時刻、pending の一覧
GET PATCH/configGET は api_token をマスクします。PATCH は下記参照
GET/config/schema設定の JSON Schema
GET/update/status現在のチェック結果と前回の適用結果
POST/update/applyボディは無視されます。202 と {message} を返し、非管理サービスでは warning が付くことがあります

PATCH /config が受け付けるのは listen_addr、quic_listen_addr、bootstrap、disable_upnp、fallback_host、min_observed_peers、api_addr、api_token、key_dir、log_format、log_level、auto_publish、turn_servers、disable_relay のみです。{ok, restart_required:[…]} を返します。それ以外の TOML キーはファイルを編集して再起動してください。

メソッドパス説明
POST/identity/generateEd25519 マスター鍵 + 操作鍵 + 委任証明。マスター鍵は一度だけ返ります
POST/agents/generate{"chain":"ethereum"|"paralism"}
POST/agents/ethereum/delegation-message署名対象のメッセージを生成します
POST/agents/ethereum/registerウォレットの personal_sign 後に登録します
POST/agents/ethereum/proofローカルの Ethereum 秘密鍵から直接証明を生成します(自動化向け)
POST/agents/paralism/proof同上。フィールドは paralism_private_key_hex
POST/agents登録またはインポート:operational_private_key_hex、delegation_proof_hex、任意で service_tcp
GET/agentsすべて一覧表示(pending を含む)
GET/agents/{aid}単一の agent
GET/agents/{aid}/export操作資格情報をエクスポート(平文 JSON)。ローカル限定。CLI の --password でファイルを暗号化できます
PATCH/agents/{aid}service_tcp を変更(文字列、または空文字で解除)。任意で operational_private_key_hex
DELETE/agents/{aid}ボディは {}
GET/agents/{aid}/probeTCP + DHT の到達性
POST/agents/{aid}/heartbeat任意。他の書き込みはすでにハートビートとして扱われます
POST/agents/{aid}/publish端点レコードを即時公開します
POST/agents/{aid}/recordsカスタム RecType 0x02〜0x0f:rec_type、payload_base64、ttl
POST DELETE/agents/{aid}/profile名刺。下記参照

POST /identity/generate は aid、master_private_key_hex、operational_private_key_hex、delegation_proof_hex を返します。マスター鍵は、Web UI の「新しいアイデンティティを追加 → マスター秘密鍵から作成」(ブラウザ内で署名)で復元できます。コマンドラインからは、エクスポートしたファイルまたは POST /agents で再インポートします。

名刺のフィールド(すべて任意):name、brief、protocols、skills(最大 3 件)、modalities、card_hash、meta。DELETE で上書き値を削除します。

POST /agents/{aid}/services
{"services":["lang.translate"],"name":"…","protocols":["http"],"tags":["legal"],"brief":"…","ttl":3600}
DELETE /agents/{aid}/services/lang.translate
{}
POST /discover
{"services":["lang.translate"],"filter":{"protocols":["mcp"],"tags":["legal"]}}

命名、カテゴリ、判定順序についてはサービス命名を参照してください。

POST /resolve/{aid}
GET /resolve/{aid}/records?type=0
POST /fetch/{aid}
{"method":"GET","path":"/.well-known/agent.json","local_aid":"…","access_token":"…","headers":{},"body_base64":""}
# → {status, headers, body(base64), truncated} ボディは 4 MiB まで
POST /connect/{aid}
{"local_aid":"…","access_token":"…","disable_relay":false}
# → {"tunnel":"127.0.0.1:PORT"} 単一の TCP セッション
POST /tunnel/{aid}
{"local_aid":"…","access_token":"…","local_port":18080,"idle_timeout_sec":90,"disable_relay":false}
# → {id, listen, remote_aid, is_relayed}
# 同じ (ローカル AID, 相手 AID, ポート) は再利用されます。ポートが使用中なら 409、中継が必要でも無効なら 412
GET /tunnel
GET /tunnel/{id}
DELETE /tunnel/{id}
POST /tunnel/{id}/reset

idle_timeout_sec を省略または 0 にすると既定の 6 分、-1 はアイドルで切断しない設定です。

POST /agents/{aid}/mailbox/send
{"recipient":"…","msg_type":1,"body_base64":"…"}
GET /agents/{aid}/mailbox
# → {"messages":[{"message_id","sender","msg_type","body_base64"},…]}
# 参照:消費しない、ハートビートしない
POST /agents/{aid}/mailbox/poll
{}
# → 同じ messages[]。受け取り(返した分を削除);ハートビート

msg_type:CLI の既定は 1、アプリケーションのテキスト便箋は通常 3、ルーム招待は 0x10(daemon が group_invite 時に書き込みます)。対話の招待はメールボックスを経由しません。pending.mailbox → list で見る、poll で受け取る。

メソッドパスボディ
POST/agents/{aid}/chat/request{"peer","note?"}
POST/agents/{aid}/chat/accept{"peer"}
POST/agents/{aid}/chat/refuse{"peer"}
POST/agents/{aid}/chat/remove{"peer"}
POST/agents/{aid}/chat/block{"peer"}
POST/agents/{aid}/chat/send{"peer","text?"} と path または object_id(同時指定は不可)
POST/agents/{aid}/chat/mark-read{"peer","scanned_to?"}
GET/agents/{aid}/chat/contactsfriends / out_pending / in_pending
GET/agents/{aid}/chat/peers/{peer}?after_seq &limit → {entries, scanned_to, has_more, read_cursor, unread_count}

招待なしで送信すると not_friends を返します。

読み取り専用の確認(ハートビートには数えられません):

メソッドパス説明
GET/agents/{aid}/groups{groups:[…]}。ローカルに複製があるもののみ
GET/agents/{aid}/groups/{group_id}ヘッドとカウンタ
GET/agents/{aid}/groups/{group_id}/entries?after_seq &limit(既定・上限とも 50)

書き込みは MCP の group_* ツールか POST /mcp/call(CLI の a2al group)を経由します。メンバーの自主退室は POST /agents/{aid}/groups/{group_id}/leave(作成者は退室できません)。

POST /agents/{aid}/cas?name=file.bin
Content-Type: application/octet-stream
<bytes>
# files_root が必要 → {object_id, size, name, url}
GET|HEAD /aid/{holder}/cas/{object_id}

/aid/ 配下の読み取りは保持者の ACL に従います。書き込みはローカル限定です(API token が必要)。group_object_put に path を渡し、そのファイルが a2ald から見える場合は、コピーせずにその場でハッシュ化します。

ACL(その AID の HTTP / オブジェクト)

Section titled “ACL(その AID の HTTP / オブジェクト)”
GET /agents/{aid}/acl
PATCH /agents/{aid}/acl {"default":"public"|"deny"}
POST /agents/{aid}/acl/allow {"aid":"…"} または {"secret":"…"}
POST /agents/{aid}/acl/deny {"aid":"…"}
DELETE /agents/{aid}/acl/allow/{id}
DELETE /agents/{aid}/acl/deny/{id}

便箋、DHT、対話には作用しません。

  • HTTP:GET /agents/{aid}/events(SSE)。再開には ?last_event_id=N または Last-Event-ID を使います。カーソルなしではリアルタイムのイベントのみを受け取ります。この URL に after_seq を渡すと 400 を返します。?types=chat.unread,mailbox.received で絞り込めます。ノード単位は GET /events です。
  • ポーリング:MCP の a2al_events_poll(after_seq を使用)または POST /mcp/call。

購読時に、まず id を持たない event: pending を受け取ることがあります(ローカルのカウンタで、例えば {"<aid>":{"mailbox":1,"chat_invites":0,"chat_unread":2}})。ログイベントには mailbox.received、group.unread、group.mentioned、group.appended(自分の書き込み)、chat.invites(count + peers)、chat.unread、chat.received があります。イベントはあくまで通知であり、実体はメールボックス、対話レコード、ルームレコードを参照してください。

ノード:遠隔管理、アドレス帳、AID ゲートウェイ

Section titled “ノード:遠隔管理、アドレス帳、AID ゲートウェイ”
メソッドパス説明
GET PATCH/node/remote-adminPATCH は {"enabled":true}
POST/node/remote-admin/allow / deny{"aid"}。allow は {"secret"} も受け付けます
DELETE/node/remote-admin/allow/{id} / deny/{id}
GET PUT/node/address-book{aliases:{aid:label}, favorites:[{id,aid,skill,protocols,addedAt}]}
GET/aid/{AID}/{path}CONNECT 以外の任意メソッド。ノードのアイデンティティを使い、access_token は付けません。制限のある相手には POST /fetch を使います
GET/debug/identity /debug/routing /debug/store /debug/stats /debug/hostDHT / NAT / バインド情報
POST/mcp/call{"tool":"group_create","args":{…}} → ツールの JSON。ツールエラーは 422 を返します
/mcp/Streamable HTTP MCP

HTTP エンドポイントは http://127.0.0.1:2121/mcp/ です。stdio には a2ald --mcp-stdio を使います(稼働中の daemon があればそれをプロキシし、なければそのプロセス自身がノードとなり、REST と Web UI は提供しません)。成功した結果には pending が付くことがあります。ルーム招待は mailbox、対話の招待は chat_invites に計上されます。MCP は ACL、遠隔管理、アドレス帳、名刺を提供しません。以下の表で 太字は必須パラメータで、chat_* / group_* の aid は常にローカルのアイデンティティです。

ツールパラメータ
a2al_identity_generateなし——マスター鍵を保存してください
a2al_agents_list / a2al_status / a2al_tunnel_listなし
a2al_agents_generate_ethereumなし
a2al_ethereum_delegation_messageagent、issued_at、expires_at、scope?。operational_public_key_hex と operational_private_key_seed_hex のいずれか一方
a2al_ethereum_registeragent、タイムスタンプ、eth_signature_hex、service_tcp?、操作秘密鍵またはシード
a2al_ethereum_proofethereum_private_key_hex、タイムスタンプ、scope?、任意で操作鍵
a2al_agent_registeroperational_private_key_hex、delegation_proof_hex、service_tcp?
a2al_agent_get / _probe / _publish / _heartbeat / _deleteaid
a2al_agent_patchaid、service_tcp、operational_private_key_hex?
a2al_agent_publish_recordaid、rec_type、payload_base64、ttl?
a2al_resolveaid
a2al_resolve_recordsaid、type(0 = すべて)
a2al_discoverservices[]、filter.protocols?、filter.tags?
a2al_service_registeraid、services[]、name、protocols[]、tags[]、brief、meta、ttl
a2al_service_unregisteraid、service
a2al_fetchremote_aid、path、method?、headers?、body_base64?、local_aid?、access_token?
a2al_connectremote_aid、local_aid?、access_token?(このツールに disable_relay はありません)
a2al_tunnel_openremote_aid、local_aid?、access_token?、local_port?、idle_timeout_sec?
a2al_tunnel_closetunnel_id
a2al_mailbox_sendaid、recipient、msg_type、body_base64
a2al_mailbox_listaid — 見るだけ(消費しない)
a2al_mailbox_pollaid — 受け取る(削除)
a2al_events_pollaid、after_seq(0 = バッファの先頭から)

a2al_events_poll は {events, last_seq, oldest_seq, truncated} を返します。次回の呼び出しでは after_seq = last_seq を渡し、truncated が真なら 0 に戻してください。

ツールその他のパラメータ
chat_requestpeer、note?
chat_accept / chat_refuse / chat_remove / chat_blockpeer
chat_sendpeer、text?、path または object_id
chat_readpeer、after_seq、limit? → scanned_to でページング
chat_mark_readpeer、scanned_to(0 または省略でログ内のすべて)
chat_contactsaid のみ
ツールその他のパラメータ
group_createtitle? → {group_id, link}
group_listローカルに複製があるもののみ
group_invitegroup_id、target_aid
group_joinlink または(group_id + creator_aid)。peer_aid?、inviter_aid?、member_hints[]?、title?
group_get_link / group_head / group_membersgroup_id
group_appendgroup_id、kind?(既定 msg)、body?(base64、デコード後 2 KiB 以内)、ref?、reply_to?、to[]?
group_readgroup_id、after_seq?、limit?(既定 50)、kind / author / since_ts / until_ts / to / reply_to。ページングは scanned_to_seq、after_seq を省略すると最古から
group_mark_readgroup_id、seq(0 = 何もマークしない)
group_retractgroup_id、entry_id
group_object_putpath または body_base64(+ name?。files_root が必要)
group_object_locateobject_id、hint_aid? — 状態確認のみ、ダウンロードしない
group_object_getobject_id、dest?、hint_aid?、register?、force?、access_token?
group_syncgroup_id、peer_aid——診断用

グローバルオプション:--api、--token、--json、--quiet。環境変数 A2AL_API、A2AL_TOKEN。chat / group は POST /mcp/call を経由します。

コマンド主な引数
status / doctor / version
register[--ethereum --eth-key 0x…] [--service-tcp host:port] [--save-master FILE] [--no-publish]
identity new / new-eth鍵を表示するのみで登録はしません
publish<能力名> [--from URL] [--name] [--brief] [--url] [--aid] [--ttl] [--protocol] [--tag] [-y]
unpublish / search<能力名> [--aid]。search は --filter-protocol、--filter-tag も取ります
info / resolve<aid>
get / post--header K:V --local-aid --access-token。post -d JSON
inbound bind--addr host:port [--aid]——daemon の api_addr は指定しないでください
connect / tunneltunnel open|close|reset|status。--local-aid --access-token --local-port --idle-timeout
notesend <local> <remote> <body-base64> [--msg-type] / list <local> / poll <local>
chat / groupメッセージの送受信とルーム(マルチパーティ協業)を参照
agentsnew new-eth get update --service-tcp del publish heartbeat export [-o] [--password] import topic add|del acl*
configget [key] · set <key> <value>(PATCH が受け付けるキーのみ)
adminon off password <secret>|off allow deny del allow|deny <id>
update[--check] [--confirm]

--data-dir、--config、--listen、--api-addr、--fallback-host、--bootstrap(カンマ区切りの host:port)、--mcp-stdio、--no-open-browser。

既定のデータディレクトリは os.UserConfigDir()/a2al です。Windows は %APPDATA%\a2al、macOS は ~/Library/Application Support/a2al、Linux は ~/.config/a2al になります。

サブコマンド:mcp add|print、update [--check]。Windows / macOS では加えて service install|uninstall|start|stop|status(-data-dir。-user は Windows のみ)。

目的ページ
言語に依存しないクイックスタートREST API クイックスタート
MCP ホストの設定MCP 設定
設定項目の一覧設定
プロトコルとワイヤ形式プロトコル仕様