Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

P2P runtime for A2A protocol. Encrypted agent communication with zero-config NAT traversal.

README.md

AgentAnycast Node

The core daemon powering AgentAnycast's P2P agent network.

![CI](https://github.com/AgentAnycast/agentanycast-node/actions/workflows/ci.yml) ![Go](https://go.dev) ![License](LICENSE)

AgentAnycast Node (agentanycastd) is a sidecar daemon that runs on each machine, providing P2P networking, end-to-end encryption, and A2A protocol routing. Language SDKs (Python, TypeScript) communicate with it over gRPC.

Fully decentralized. On a local network, agents discover each other via mDNS with zero configuration. For cross-network communication, deploy your own relay with a single command.

Features

| Category | Capabilities | |---|---| | Networking | libp2p (TCP, QUIC, WebTransport), NATS transport, mDNS auto-discovery, NAT traversal (AutoNAT + DCUtR + Circuit Relay v2) | | Security | E2E NaCl box encryption (X25519 + XSalsa20-Poly1305), W3C DID identity (did:key, did:web, did:dns), skill-based ACL, per-peer rate limiting | | A2A Protocol | Task state machine, 3 addressing modes (direct / anycast / HTTP bridge), streaming artifacts, offline message queue | | Interop | HTTP Bridge (P2P ↔ HTTP A2A), ANP Bridge (Agent Network Protocol), MCP Server (stdio + Streamable HTTP) | | Enterprise | Audit logging (JSON Lines), Prometheus metrics, OpenTelemetry tracing (W3C Trace Context, OTLP) | | AI Tools | MCP Server for 13+ AI platforms, MCP Remote Proxy to wrap any MCP Server as a P2P agent |

Quick Start

Standalone -- local network (zero configuration)

go build -o agentanycastd ./cmd/agentanycastd
./agentanycastd
# Agents on the same LAN discover each other automatically via mDNS

With 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 mode -- use as an AI tool

# stdio mode (Claude Desktop, Cursor, VS Code, Gemini CLI)
./agentanycastd -mcp

# Streamable HTTP mode (ChatGPT, remote clients)
./agentanycastd -mcp-listen :3000

Cross-network -- deploy your own relay

# 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..."

Configuration

Priority: CLI flags > environment variables > config file > defaults

CLI Flags

| Flag | Description | |---|---| | -key | Path to identity key file | | -grpc-listen | gRPC listen address (unix:// or tcp://) | | -log-level | Log level (debug, info, warn, error) | | -bootstrap-peers | Comma-separated bootstrap multiaddrs | | -bridge-listen | HTTP bridge listen address (e.g., :8080) | | -enable-webtransport | Enable WebTransport (QUIC-based, browser-compatible) | | -mcp | Run as MCP server over stdio | | -mcp-listen | MCP Streamable HTTP listen address (e.g., :3000) | | -mcp-proxy | Wrap an MCP Server command as a P2P-accessible agent | | -anp-listen | ANP bridge listen address (e.g., :8090) | | -nats-broker | NATS broker URL (e.g., nats://broker.example.com:4222) | | -otlp-endpoint | OTLP collector endpoint for distributed tracing | | -metrics-listen | Prometheus metrics listen address (e.g., :9090) | | -config | Path to TOML config file | | -version | Print version and exit |

Environment Variables

| Variable | Default | |---|---| | AGENTANYCAST_KEY_PATH | ~/.agentanycast/key | | AGENTANYCAST_GRPC_LISTEN | unix://~/.agentanycast/daemon.sock | | AGENTANYCAST_LOG_LEVEL | info | | AGENTANYCAST_STORE_PATH | ~/.agentanycast/data | | AGENTANYCAST_BOOTSTRAP_PEERS | (none) | | AGENTANYCAST_ENABLE_MDNS | true | | AGENTANYCAST_REGISTRY_ADDRS | (none) | | AGENTANYCAST_MCP_LISTEN | (none) |

Config File

Default location: ~/.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"

Architecture

┌──────────────────────────────────────────────────────────────────────┐
│                           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 Packages

| Package | Responsibility | |---|---| | internal/a2a/ | A2A protocol engine -- task state machine, envelope routing, offline queue, streaming | | internal/node/ | libp2p host -- peer connections, mDNS, DHT, TCP/QUIC/WebTransport | | internal/crypto/ | Ed25519 keys, DID conversion (did:key, did:web, did:dns), Verifiable Credentials | | internal/nat/ | AutoNAT, DCUtR hole punching, Circuit Relay v2 client | | internal/store/ | BoltDB persistence -- tasks, agent cards, offline queue | | internal/config/ | TOML config, environment variables, CLI flags | | internal/envelope/ | Protocol-neutral message routing, E2E NaCl box encryption | | internal/transport/ | Pluggable transport adapters -- libp2p, NATS, HTTP bridge | | internal/bridge/ | HTTP Bridge -- translates HTTP JSON-RPC ↔ P2P A2A envelopes | | internal/anycast/ | Anycast router -- skill-based addressing, multi-registry federation, DHT discovery | | internal/mcp/ | MCP Server -- P2P capabilities as MCP tools (stdio + Streamable HTTP) | | internal/mcpproxy/ | MCP Remote Proxy -- wraps external MCP commands as P2P agents | | internal/anp/ | ANP Bridge -- translates ANP HTTP ↔ A2A P2P (JSON-RPC 2.0 + JSON-LD) | | internal/policy/ | Enterprise policy -- skill-based ACL, per-peer rate limiting, audit logging | | internal/metrics/ | Prometheus metrics -- connections, tasks, routing, bridge, streaming, MCP | | internal/otel/ | OpenTelemetry -- distributed tracing, W3C Trace Context, OTLP exporter | | pkg/grpcserver/ | gRPC server -- 16 RPC methods for SDKs |

gRPC API

| Group | Methods | |---|---| | Node | GetNodeInfo, SetAgentCard | | Peers | ConnectPeer, ListPeers, GetPeerCard | | Task Client | SendTask (peer_id / skill_id / url), GetTask, CancelTask, SubscribeTaskUpdates | | Task Server | SubscribeIncomingTasks, UpdateTaskStatus, CompleteTask, FailTask | | Streaming | SubscribeTaskStream, SendStreamingArtifact | | Discovery | Discover |

MCP Server

The daemon can run as an MCP (Model Context Protocol) server, exposing P2P capabilities as tools for AI assistants.

| Tool | Description | |---|---| | toolGetNodeInfo | Get local node information | | toolListConnectedPeers | List connected peers | | toolGetAgentCard | Get local or remote agent card | | toolDiscoverAgents | Discover agents by skill | | toolSendTask | Send task to peer by ID | | toolSendTaskBySkill | Send task by skill (anycast) | | toolGetTaskStatus | Get task status |

Transport modes:

  • stdio -- for local AI tool integration (Claude Desktop, Cursor, VS Code, Gemini CLI, JetBrains)
  • Streamable HTTP -- for remote clients (ChatGPT)

MCP Remote Proxy

Wrap any MCP Server as a P2P-accessible agent with a single flag:

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

The proxy auto-generates an Agent Card from the MCP server's tool list, registers skills with the relay, and bridges incoming A2A tasks to MCP tool calls.

HTTP Bridge

Exposes an A2A-compatible HTTP endpoint for P2P ↔ HTTP interop:

  • GET /.well-known/a2a-agent-card -- Agent Card discovery
  • POST / -- JSON-RPC endpoint for task operations
  • Optional TLS and CORS support

ANP Bridge

Exposes an ANP-compatible HTTP endpoint for Agent Network Protocol interop:

  • GET /agent/ad.json -- Agent Description (JSON-LD)
  • GET /agent/interface.json -- OpenRPC specification
  • POST /agent/rpc -- JSON-RPC 2.0 endpoint

Observability

Prometheus Metrics

Available on a configurable HTTP port (default :9090):

| Metric | Type | Description | |---|---|---| | agentanycast_connected_peers | Gauge | Current peer count | | agentanycast_connections_total | Counter | Connection events by direction | | agentanycast_connections_by_transport | Counter | Connections by transport (tcp/quic/webtransport) | | agentanycast_tasks_total | Counter | Tasks by direction and status | | agentanycast_task_duration_seconds | Histogram | Task latency | | agentanycast_route_resolutions_total | Counter | Anycast resolution by result | | agentanycast_bridge_requests_total | Counter | HTTP bridge requests | | agentanycast_stream_chunks_total | Counter | Streaming chunks by direction | | agentanycast_messages_total | Counter | A2A messages by envelope type | | agentanycast_offline_queue_size | Gauge | Queued offline messages | | agentanycast_mcp_tool_calls_total | Counter | MCP tool calls by tool and status | | agentanycast_acl_decisions_total | Counter | ACL allow/deny decisions | | agentanycast_rate_limit_rejections_total | Counter | Rate-limited requests |

OpenTelemetry

Distributed tracing with W3C Trace Context propagation. Spans cover task lifecycle, transport hops, and envelope encryption.

./agentanycastd --otlp-endpoint localhost:4317

Building

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

Disclaimer

This software is provided "as is", without warranty of any kind. This software uses cryptography and may be subject to export controls in certain jurisdictions.

License

FSL-1.1-ALv2 -- Functional Source License, Version 1.1, with Apache License, Version 2.0 as the future license. Each release converts to Apache 2.0 two years after its publication date.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Other servers.