mcpField
A
AgentAnycast

AgentAnycast

本地服务
github.com/AgentAnycastAI 与智能体031 周前更新

关于 AgentAnycast

AgentAnycast Node 是用于去中心化 P2P 网络和 A2A Agent 通信的守护进程,面向构建互联 Agent 系统的开发者。它整合加密消息、节点发现、路由和 MCP 支持,并可免配置发现本地网络中的节点。

主要功能

  1. 01通过 mDNS 发现本地节点
  2. 02路由 A2A 任务并流式传输产物
  3. 03端到端加密节点间通信
  4. 04穿越 NAT 并使用中继连接
  5. 05通过 MCP 暴露节点能力
  6. 06将外部 MCP 服务桥接为 P2P Agent

适用场景

  1. 01发现并联系本地网络中的 Agent
  2. 02按节点 ID 或技能发送任务
  3. 03通过 P2P 访问 MCP 服务
  4. 04借助中继连接不同网络中的 Agent

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 Agent 网络提供支持的核心守护进程。

CI Go License

AgentAnycast Node(agentanycastd)是一个在每台机器上运行的边车守护进程,提供 P2P 网络、端到端加密和 A2A 协议路由。语言 SDK(Python、TypeScript)通过 gRPC 与其通信。

完全去中心化。 在本地网络中,Agent 可通过 mDNS 自动发现彼此,无需任何配置。跨网络通信时,只需一条命令即可部署自己的中继。

功能特性

类别能力
网络libp2p(TCP、QUIC、WebTransport)、NATS 传输、mDNS 自动发现、NAT 穿透(AutoNAT + DCUtR + Circuit Relay v2)
安全端到端 NaCl box 加密(X25519 + XSalsa20-Poly1305)、W3C DID 身份(did:key、did:web、did:dns)、基于技能的 ACL、按对等节点限速
A2A 协议任务状态机、3 种寻址模式(直接 / 任播 / HTTP 桥接)、流式工件、离线消息队列
互操作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 Agent 的 MCP 远程代理

快速开始

独立运行——本地网络(无需配置)
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以逗号分隔的引导 multiaddr
-bridge-listenHTTP bridge 监听地址(例如,:8080)
-enable-webtransport启用 WebTransport(基于 QUIC,兼容浏览器)
-mcp通过 stdio 作为 MCP 服务运行
-mcp-listenMCP Streamable HTTP 监听地址(例如,:3000)
-mcp-proxy将 MCP 服务命令封装为可通过 P2P 访问的 Agent
-anp-listenANP bridge 监听地址(例如,:8090)
-nats-brokerNATS broker 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 持久化——任务、Agent 卡片、离线队列
internal/config/TOML 配置、环境变量、CLI 标志
internal/envelope/协议无关的消息路由、端到端 NaCl box 加密
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 Agent
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获取本地或远程 Agent 卡片
toolDiscoverAgents按技能发现 Agent
toolSendTask按 ID 向对等节点发送任务
toolSendTaskBySkill按技能发送任务(任播)
toolGetTaskStatus获取任务状态

传输模式:

  • stdio——用于本地 AI 工具集成(Claude Desktop、Cursor、VS Code、Gemini CLI、JetBrains)
  • Streamable HTTP——用于远程客户端(ChatGPT)
MCP 远程代理

只需一个标志,即可将任意 MCP 服务封装为可通过 P2P 访问的 Agent:

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

该代理会根据 MCP 服务的工具列表自动生成 Agent 卡片,向中继注册技能,并将传入的 A2A 任务桥接为 MCP 工具调用。

HTTP 桥接

提供兼容 A2A 的 HTTP 端点,以实现 P2P 与 HTTP 互操作:

  • GET /.well-known/a2a-agent-card——Agent 卡片发现
  • POST /——用于任务操作的 JSON-RPC 端点
  • 可选支持 TLS 和 CORS

ANP 桥接

提供兼容 ANP 的 HTTP 端点,以实现 Agent Network Protocol 互操作:

  • GET /agent/ad.json——Agent 描述(JSON-LD)
  • GET /agent/interface.json——OpenRPC 规范
  • POST /agent/rpc——JSON-RPC 2.0 端点

可观测性

Prometheus 指标

可通过可配置的 HTTP 端口使用(默认 :9090):

指标类型描述
agentanycast_connected_peers仪表当前对等节点数
agentanycast_connections_total计数器按方向统计的连接事件
agentanycast_connections_by_transport计数器按传输方式统计的连接(tcp/quic/webtransport)
agentanycast_tasks_total计数器按方向和状态统计的任务
agentanycast_task_duration_seconds直方图任务延迟
agentanycast_route_resolutions_total计数器按结果统计的 Anycast 解析
agentanycast_bridge_requests_total计数器HTTP 桥接请求
agentanycast_stream_chunks_total计数器按方向统计的流式数据块
agentanycast_messages_total计数器按信封类型统计的 A2A 消息
agentanycast_offline_queue_size仪表排队中的离线消息
agentanycast_mcp_tool_calls_total计数器按工具和状态统计的 MCP 工具调用
agentanycast_acl_decisions_total计数器ACL 允许/拒绝决策
agentanycast_rate_limit_rejections_total计数器被限流的请求
OpenTelemetry

通过 W3C Trace Context 传播实现分布式追踪。Span 涵盖任务生命周期、传输跳转和信封加密。

./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。每个版本自发布日期起两年后转换为 Apache 2.0。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。