mcpField
A
AgentAnycast

AgentAnycast

ローカル
github.com/AgentAnycastAI・エージェント031 週間前に更新

AgentAnycast について

AgentAnycast Node は、分散型 P2P ネットワークと A2A エージェント通信を担うデーモンで、エージェント連携システムを開発する人を対象としています。暗号化メッセージ、ピア発見、ルーティング、MCP に対応し、ローカルネットワークでは設定なしでピアを発見できます。

主な機能

  1. 01mDNS によるローカルピア発見
  2. 02A2A タスクのルーティングと成果物のストリーミング
  3. 03ピア間通信のエンドツーエンド暗号化
  4. 04NAT 越えとリレー接続
  5. 05MCP によるノード機能の公開
  6. 06外部 MCP サーバーを P2P エージェントに接続

活用シーン

  1. 01ローカルネットワーク上のエージェントを発見して通信
  2. 02ピア ID またはスキルを指定してタスクを送信
  3. 03MCP サーバーを P2P 経由で利用可能にする
  4. 04リレーを使って異なるネットワークのエージェントを接続

MCP 対応

デーモンは stdio または Streamable HTTP 経由で P2P 機能を MCP ツールとして公開できます。MCP プロキシは外部 MCP サーバーをラップし、受信した A2A タスクをそのツールに転送します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"agentanycast-agentanycast": {
"command": "npx",
"args": [
"-y",
"agentanycast"
]
}
}
}
起動コマンドnpx -y agentanycast

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmagentanycast0.3.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

AgentAnycast Node

AgentAnycast の P2P エージェントネットワークを支えるコアデーモンです。

CI Go License

AgentAnycast Node(agentanycastd)は、各マシンで動作するサイドカーデーモンで、P2P ネットワーキング、エンドツーエンド暗号化、A2A プロトコルのルーティングを提供します。言語 SDK(Python、TypeScript)は gRPC 経由で通信します。

完全に分散化されています。 ローカルネットワークでは、エージェントは設定不要で mDNS を介して相互に検出します。ネットワークをまたいで通信するには、1 つのコマンドで独自のリレーをデプロイできます。

機能

カテゴリ機能
ネットワーキングlibp2p(TCP、QUIC、WebTransport)、NATS トランスポート、mDNS 自動検出、NAT トラバーサル(AutoNAT + DCUtR + Circuit Relay v2)
セキュリティE2E NaCl ボックス暗号化(X25519 + XSalsa20-Poly1305)、W3C DID アイデンティティ(did:key、did:web、did:dns)、スキルベースの ACL、ピアごとのレート制限
A2A プロトコルタスク状態マシン、3 種類のアドレス指定モード(direct / anycast / HTTP bridge)、ストリーミングアーティファクト、オフラインメッセージキュー
相互運用性HTTP Bridge(P2P ↔ HTTP A2A)、ANP Bridge(Agent Network Protocol)、MCP サーバー(stdio + Streamable HTTP)
エンタープライズ監査ログ(JSON Lines)、Prometheus メトリクス、OpenTelemetry トレース(W3C Trace Context、OTLP)
AI ツール13 以上の AI プラットフォーム向け MCP サーバー、あらゆる MCP サーバーを P2P エージェントとしてラップする MCP Remote Proxy

クイックスタート

スタンドアロン -- ローカルネットワーク(設定不要)
go build -o agentanycastd ./cmd/agentanycastd
./agentanycastd
# Agents on the same LAN discover each other automatically via mDNS
Python SDK を使用
pip install agentanycast
from agentanycast import Node

async with Node(skills=["translate"]) as node:
    # The daemon starts automatically — no manual setup needed
    result = await node.send_task("summarize", "Hello world")
MCP モード -- AI ツールとして使用
# stdio mode (Claude Desktop, Cursor, VS Code, Gemini CLI)
./agentanycastd -mcp

# Streamable HTTP mode (ChatGPT, remote clients)
./agentanycastd -mcp-listen :3000
ネットワークをまたぐ接続 -- 独自のリレーをデプロイ
# On any VPS with a public IP
git clone https://github.com/AgentAnycast/agentanycast-relay && cd agentanycast-relay
docker-compose up -d

# Note the RELAY_ADDR from the logs, then:
./agentanycastd -bootstrap-peers "/ip4/<RELAY_IP>/tcp/4001/p2p/12D3KooW..."

設定

優先順位: CLI フラグ > 環境変数 > 設定ファイル > デフォルト値

CLI フラグ
フラグ説明
-keyアイデンティティキーファイルのパス
-grpc-listengRPC リッスンアドレス(unix:// または tcp://)
-log-levelログレベル(debug、info、warn、error)
-bootstrap-peersカンマ区切りのブートストラップ用マルチアドレス
-bridge-listenHTTP Bridge のリッスンアドレス(例::8080)
-enable-webtransportWebTransport を有効化(QUIC ベース、ブラウザー互換)
-mcpstdio 経由の MCP サーバーとして実行
-mcp-listenMCP Streamable HTTP のリッスンアドレス(例::3000)
-mcp-proxyMCP サーバーのコマンドを P2P でアクセス可能なエージェントとしてラップ
-anp-listenANP Bridge のリッスンアドレス(例::8090)
-nats-brokerNATS ブローカーの URL(例:nats://broker.example.com:4222)
-otlp-endpoint分散トレース用の OTLP コレクターエンドポイント
-metrics-listenPrometheus メトリクスのリッスンアドレス(例::9090)
-configTOML 設定ファイルのパス
-versionバージョンを表示して終了
環境変数
変数デフォルト
AGENTANYCAST_KEY_PATH~/.agentanycast/key
AGENTANYCAST_GRPC_LISTENunix://~/.agentanycast/daemon.sock
AGENTANYCAST_LOG_LEVELinfo
AGENTANYCAST_STORE_PATH~/.agentanycast/data
AGENTANYCAST_BOOTSTRAP_PEERS(なし)
AGENTANYCAST_ENABLE_MDNStrue
AGENTANYCAST_REGISTRY_ADDRS(なし)
AGENTANYCAST_MCP_LISTEN(なし)
設定ファイル

デフォルトの場所:~/.agentanycast/config.toml

key_path = "~/.agentanycast/key"
grpc_listen = "unix://~/.agentanycast/daemon.sock"
log_level = "info"
log_format = "json"
store_path = "~/.agentanycast/data"
enable_mdns = true
enable_quic = true
enable_webtransport = false
enable_relay_client = true
enable_hole_punching = true
offline_queue_ttl = "24h"
bootstrap_peers = ["/ip4/203.0.113.50/tcp/4001/p2p/12D3KooW..."]

[bridge]
enabled = false
listen = ":8080"
# tls_cert = "/path/to/cert.pem"
# tls_key = "/path/to/key.pem"
# cors_origins = ["*"]

[anycast]
routing_strategy = "random"
cache_ttl = "30s"
auto_register = true
# registry_addr = "relay.example.com:50052"
# registry_addrs = ["relay1:50052", "relay2:50052"]  # federation
enable_dht = false
dht_mode = "auto"   # "auto", "server", or "client"

[metrics]
enabled = false
listen = ":9090"

[mcp]
enabled = false
listen = ":3000"

[anp]
enabled = false
listen = ":8090"

# NATS Transport
[transport.nats]
enabled = true
broker = "nats://broker.example.com:4222"
subject_prefix = "agent."

# Enterprise Policy
[policy]
acl_rules = [
  { source = "*", skill = "*", allow = true },
]

[policy.rate_limits]
default_rps = 100

audit_log_path = "/var/log/agentanycast-audit.jsonl"

# OpenTelemetry
[otel]
enabled = false
otlp_endpoint = "localhost:4317"

[identity]
# did_web = "did:web:example.com:agents:myagent"
# did_dns_domain = "example.com"

アーキテクチャ

┌──────────────────────────────────────────────────────────────────────┐
│                           agentanycastd                              │
│                                                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────┐     │
│  │  Engine   │  │  Router  │  │ Offline  │  │ Anycast Router   │     │
│  │(task FSM) │  │(A2A msg) │  │  Queue   │  │(skill discovery) │     │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────────────┘     │
│       │              │             │              │                   │
│  ┌────┴──────────────┴─────────────┴──────────────┴──────────────┐   │
│  │         Envelope Layer (E2E NaCl box encryption)              │   │
│  ├───────────────────────────────────────────────────────────────┤   │
│  │                    Transport Adapters                         │   │
│  │  libp2p (mDNS · TCP · QUIC · WebTransport · DHT)             │   │
│  │  NATS · HTTP Bridge · Circuit Relay v2 · DCUtR                │   │
│  └──────────────────────┬───────────────────────────────────────┘   │
│                         │                                            │
│  ┌──────────────────────┴──────────────────────────────────────┐     │
│  │                gRPC Server (16 RPCs for SDKs)               │     │
│  └─────────────────────────────────────────────────────────────┘     │
│                                                                      │
│  ┌────────────┐ ┌────────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐ │
│  │ HTTP Bridge│ │ MCP Server │ │ANP Bridge│ │  OTel  │ │MCP Proxy │ │
│  │ (A2A↔P2P) │ │(stdio/HTTP)│ │(ANP↔A2A) │ │(trace) │ │(wrap cmd)│ │
│  └────────────┘ └────────────┘ └──────────┘ └────────┘ └──────────┘ │
│                                                                      │
│  ┌────────┐ ┌──────┐ ┌─────────┐ ┌──────────────────┐               │
│  │Metrics │ │BoltDB│ │  ACL /  │ │   Audit Logger   │               │
│  │(Prom.) │ │(stor)│ │RateLimit│ │   (JSON Lines)   │               │
│  └────────┘ └──────┘ └─────────┘ └──────────────────┘               │
└──────────────────────────────────────────────────────────────────────┘
内部パッケージ
パッケージ役割
internal/a2a/A2A プロトコルエンジン -- タスク状態マシン、エンベロープのルーティング、オフラインキュー、ストリーミング
internal/node/libp2p ホスト -- ピア接続、mDNS、DHT、TCP/QUIC/WebTransport
internal/crypto/Ed25519 キー、DID 変換(did:key、did:web、did:dns)、検証可能なクレデンシャル
internal/nat/AutoNAT、DCUtR ホールパンチング、Circuit Relay v2 クライアント
internal/store/BoltDB 永続化 -- タスク、エージェントカード、オフラインキュー
internal/config/TOML 設定、環境変数、CLI フラグ
internal/envelope/プロトコルに依存しないメッセージルーティング、E2E NaCl ボックス暗号化
internal/transport/プラグイン可能なトランスポートアダプター -- libp2p、NATS、HTTP ブリッジ
internal/bridge/HTTP ブリッジ -- HTTP JSON-RPC ↔ P2P A2A エンベロープを変換
internal/anycast/エニーキャストルーター -- スキルベースのアドレス指定、複数レジストリのフェデレーション、DHT ディスカバリー
internal/mcp/MCP サーバー -- P2P 機能を MCP ツールとして提供(stdio + Streamable HTTP)
internal/mcpproxy/MCP リモートプロキシ -- 外部 MCP コマンドを P2P エージェントとしてラップ
internal/anp/ANP ブリッジ -- ANP HTTP ↔ A2A P2P を変換(JSON-RPC 2.0 + JSON-LD)
internal/policy/エンタープライズポリシー -- スキルベースの ACL、ピアごとのレート制限、監査ログ
internal/metrics/Prometheus メトリクス -- 接続、タスク、ルーティング、ブリッジ、ストリーミング、MCP
internal/otel/OpenTelemetry -- 分散トレーシング、W3C Trace Context、OTLP エクスポーター
pkg/grpcserver/gRPC サーバー -- SDK 向けの 16 個の RPC メソッド

gRPC API

グループメソッド
ノードGetNodeInfo、SetAgentCard
ピアConnectPeer、ListPeers、GetPeerCard
タスククライアントSendTask(peer_id / skill_id / url)、GetTask、CancelTask、SubscribeTaskUpdates
タスクサーバーSubscribeIncomingTasks、UpdateTaskStatus、CompleteTask、FailTask
ストリーミングSubscribeTaskStream、SendStreamingArtifact
ディスカバリーDiscover

MCP サーバー

デーモンは MCP(Model Context Protocol)サーバーとして実行でき、P2P 機能を AI アシスタント向けのツールとして公開します。

ツール説明
toolGetNodeInfoローカルノードの情報を取得
toolListConnectedPeers接続中のピアを一覧表示
toolGetAgentCardローカルまたはリモートのエージェントカードを取得
toolDiscoverAgentsスキルでエージェントを検索
toolSendTaskID を指定してピアにタスクを送信
toolSendTaskBySkillスキルを指定してタスクを送信(エニーキャスト)
toolGetTaskStatusタスクのステータスを取得

トランスポートモード:

  • stdio -- ローカルの AI ツール連携向け(Claude Desktop、Cursor、VS Code、Gemini CLI、JetBrains)
  • Streamable HTTP -- リモートクライアント向け(ChatGPT)
MCP リモートプロキシ

フラグを 1 つ指定するだけで、任意の MCP サーバーを P2P からアクセス可能なエージェントとしてラップできます。

./agentanycastd --mcp-proxy "npx -y @modelcontextprotocol/server-filesystem /home/user"

プロキシは MCP サーバーのツール一覧からエージェントカードを自動生成し、スキルをリレーに登録して、受信した A2A タスクを MCP ツール呼び出しに橋渡しします。

HTTP ブリッジ

P2P ↔ HTTP 相互運用のため、A2A 互換の HTTP エンドポイントを公開します。

  • GET /.well-known/a2a-agent-card -- エージェントカードの検索
  • POST / -- タスク操作用の JSON-RPC エンドポイント
  • オプションで TLS と CORS をサポート

ANP ブリッジ

Agent Network Protocol の相互運用のため、ANP 互換の HTTP エンドポイントを公開します。

  • GET /agent/ad.json -- エージェント記述(JSON-LD)
  • GET /agent/interface.json -- OpenRPC 仕様
  • POST /agent/rpc -- JSON-RPC 2.0 エンドポイント

可観測性

Prometheus のメトリクス

設定可能な HTTP ポート(デフォルトは :9090)で利用できます。

メトリクス種類説明
agentanycast_connected_peersGauge現在のピア数
agentanycast_connections_totalCounter方向別の接続イベント
agentanycast_connections_by_transportCounterトランスポート別の接続数(tcp/quic/webtransport)
agentanycast_tasks_totalCounter方向とステータス別のタスク数
agentanycast_task_duration_secondsHistogramタスクのレイテンシ
agentanycast_route_resolutions_totalCounter結果別の Anycast 解決数
agentanycast_bridge_requests_totalCounterHTTP ブリッジのリクエスト数
agentanycast_stream_chunks_totalCounter方向別のストリーミングチャンク数
agentanycast_messages_totalCounterエンベロープタイプ別の A2A メッセージ数
agentanycast_offline_queue_sizeGaugeキューに入ったオフラインメッセージ数
agentanycast_mcp_tool_calls_totalCounterツールとステータス別の MCP ツール呼び出し数
agentanycast_acl_decisions_totalCounterACL の許可/拒否判定数
agentanycast_rate_limit_rejections_totalCounterレート制限されたリクエスト数
OpenTelemetry

W3C Trace Context の伝播による分散トレーシングに対応しています。スパンはタスクのライフサイクル、トランスポートのホップ、エンベロープの暗号化を対象とします。

./agentanycastd --otlp-endpoint localhost:4317

ビルド

make build              # Build agentanycastd binary -> bin/
make test               # Run all tests (unit + integration, -race)
make test-unit          # Unit tests only (-short)
make test-integration   # Integration tests only
make lint               # golangci-lint
make cross-compile      # Build for darwin/linux x amd64/arm64 + windows/amd64

免責事項

本ソフトウェアは、いかなる種類の保証もなく「現状有姿」で提供されます。本ソフトウェアは暗号技術を使用しており、特定の法域では輸出規制の対象となる場合があります。

ライセンス

FSL-1.1-ALv2 -- Functional Source License, Version 1.1。将来のライセンスとして Apache License, Version 2.0 が適用されます。各リリースは公開日から 2 年後に Apache 2.0 に移行します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。