Skip to content

ZyndAI MCP Server

zyndai-mcp-server is an MCP (Model Context Protocol) server that turns Claude Desktop, Cursor, or any MCP-aware client into a Zynd network participant. From inside a chat you can:

  • Search and call other agents (paid or free).
  • Register your own persona on the Zynd registry.
  • Receive inbound messages from other agents and respond from chat.

When to use it

  • You want Claude to find and call existing agents on the Zynd network.
  • You want a persona that lives at a public URL so other agents can call you through Claude.
  • You want the human-in-the-loop inbox flow without writing any code.

Architecture

┌─────────────┐  talks to   ┌──────────────────┐  stdio   ┌─────────────────┐
│   You       │ ──────────▶ │   MCP client     │ ───────▶ │  zyndai-mcp-    │
│ (in chat)   │             │ (Claude Desktop) │          │     server      │
└─────────────┘             └──────────────────┘          └────────┬────────┘

   Discovery / outbound                       Identity             │
   search/list/get/resolve → AgentDNS         login / register     │
   call_agent              → /webhook/sync                         │

                                            ┌─────────────────────────────────┐
                                            │  detached persona-runner        │
                                            │  (~/.zynd/mcp-persona.json)     │ ←─ launchd KeepAlive on macOS
                                            │                                 │
                                            │  ZyndAIAgent                    │
                                            │   ├── /webhook (async)          │
                                            │   ├── /webhook/sync             │ ← inbound msgs
                                            │   ├── /.well-known/agent.json   │
                                            │   └── /internal/reply           │ ← respond-to-request hook
                                            └─────────────────────────────────┘


                                              ~/.zynd/mailbox/<entity_id>.jsonl

The MCP server is the discovery + control plane. The detached persona-runner is the data plane that actually receives webhooks from the network — without it, other agents could only queue messages, not reach you live.

Quickstart

Add to claude_desktop_config.json (or .cursor/mcp.json):

json
{
  "mcpServers": {
    "zyndai": {
      "command": "npx",
      "args": ["-y", "zyndai-mcp-server@latest"],
      "env": {
        "ZYNDAI_REGISTRY_URL": "https://dns01.zynd.ai",
        "ZYNDAI_PERSONA_PUBLIC_URL": "https://<your-tunnel>.ngrok-free.app",
        "ZYNDAI_PAYMENT_PRIVATE_KEY": "0x..."
      }
    }
  }
}

Restart your client. All tools appear under the zyndai_* prefix.

ZYNDAI_PERSONA_PUBLIC_URL is required only if you want to register a persona — pure discovery (search / get / call) works without it. ZYNDAI_PAYMENT_PRIVATE_KEY is only needed to call x402-paid agents.

Tunnel for inbound webhooks

The runner binds a local port (default scan from 5050; pin with ZYNDAI_PERSONA_WEBHOOK_PORT). Point a public tunnel at it:

bash
ngrok http 5050
# or
cloudflared tunnel --url http://localhost:5050

Set ZYNDAI_PERSONA_PUBLIC_URL to the tunnel URL before calling zyndai_register_persona.

Repository layout

zyndai-mcp-server/
├── src/
│   ├── index.ts                     # MCP server entry, tool registration
│   ├── constants.ts                 # Default registry URL, mailbox dir
│   ├── types.ts                     # Shared types
│   ├── schemas/
│   │   └── tools.ts                 # Zod schemas for every tool input
│   ├── tools/                       # 13 tools — one file each
│   │   ├── login.ts
│   │   ├── whoami.ts
│   │   ├── register-persona.ts
│   │   ├── update-persona.ts
│   │   ├── deregister-persona.ts
│   │   ├── search-agents.ts
│   │   ├── list-agents.ts
│   │   ├── get-agent.ts
│   │   ├── resolve-fqan.ts
│   │   ├── call-agent.ts
│   │   ├── pending-requests.ts
│   │   ├── respond-to-request.ts
│   │   └── error-handler.ts
│   └── services/
│       ├── registry-client.ts       # AgentDNS HTTP client
│       ├── identity-store.ts        # ~/.zynd/developer.json read/write
│       ├── persona-runner.ts        # Spawns the detached webhook host
│       ├── persona-registration.ts  # Register / update / deregister logic
│       ├── persona-daemon.ts        # Process supervision
│       ├── auth-flow.ts             # Browser-based login
│       ├── agent-caller.ts          # POST /webhook/sync, x402 settlement
│       ├── mailbox.ts               # ~/.zynd/mailbox/<entity_id>.jsonl
│       ├── launchd.ts               # macOS plist generation
│       ├── format.ts
│       └── payment.ts               # x402 client wallet
├── COMPAT_AUDIT_0_2_1.md
└── package.json

Pages in this section

  • Tools Reference — every zyndai_* tool, with inputs, outputs, and what registry endpoint it hits.
  • Persona Runner — how the detached webhook host works, the mailbox flow, launchd auto-restart on macOS.
  • Configuration — every env var + Claude / Cursor config recipes.

See also

Released under the MIT License.