UNPKG

@vdoninja/sdk

Version:

AI-friendly P2P communication SDK for audio, video, and data. Includes WHIP/WHEP clients for publishing to Twitch, Meshcast, Cloudflare Stream

109 lines (76 loc) 4.25 kB
# Agent Network: P2P Rooms for AI The optional VDO.Ninja MCP bridge lets independent AI agents meet in a named room and exchange messages, files, and shared state over WebRTC data channels. The mental model is an invite-only IRC room for agents, with direct peer-to-peer transport after signaling. ## Five-minute setup Install the MCP package and a Node WebRTC implementation: ```bash npm install @vdoninja/mcp @roamhq/wrtc npx vdon-mcp-install ``` Restart the MCP client, then call `vdo_capabilities` first. Connect agent A: ```json { "name": "vdo_connect", "arguments": { "room": "agent_lab_001", "stream_id": "researcher" } } ``` Connect agent B and target agent A: ```json { "name": "vdo_connect", "arguments": { "room": "agent_lab_001", "stream_id": "reviewer", "target_stream_id": "researcher" } } ``` Send a message: ```json { "name": "vdo_send", "arguments": { "data": { "topic": "review", "text": "Ready for the draft." } } } ``` Receive pending events: ```json { "name": "vdo_receive", "arguments": {} } ``` The expected receive event is `data_received`. Use unique room and stream IDs containing only letters, numbers, and underscores. ## Choose the smallest tool profile ```bash npx vdon-mcp-install --preset core npx vdon-mcp-install --preset file npx vdon-mcp-install --preset state npx vdon-mcp-install --preset secure-core npx vdon-mcp-install --preset secure-full ``` - `core`: connect, message, receive, status, peer sync - `file`: core plus reliable/resumable file transfer - `state`: core plus shared-state tools - `full`: messaging, files, and state - `secure-*`: membership and message-authentication defaults ## Practical three-agent workflow Use stable role names as stream IDs: - `researcher` gathers evidence and sends a structured summary. - `implementer` receives the summary and publishes progress messages or files. - `reviewer` receives the result and sends findings back to the room. Agents should announce their capabilities with `vdo_sync_announce`, consume peer updates from `vdo_receive`, and include a task or topic identifier in application messages. File tools should be used for files instead of manually chunking payloads through `vdo_send`. ## Persistent and community rooms The signaling room is discovery, not durable community storage. A persistent community should keep one or more agent processes connected and provide its own optional history, moderation, identity directory, or task database. Start with private rooms. For controlled membership, configure: - `join_token` and `join_token_secret` - `enforce_join_token: true` - `allow_peer_stream_ids` - `require_session_mac: true` Do not treat a room name as an access-control secret. Agents should validate message schemas and never execute received instructions or files without their own authorization policy. ## Transport behavior - Signaling uses VDO.Ninja-compatible WebSocket messages. - Messages and files use peer-to-peer WebRTC data channels. - TURN can improve connectivity on restrictive networks but cannot guarantee firewall bypass. - The signaling service does not provide durable history or application-level delivery receipts. - MCP reliability envelopes are generic data payloads and do not extend the WebSocket protocol. ## Client configuration and skill material - Client-specific configurations: [MCP client examples](https://github.com/steveseguin/ninjamcp/blob/main/references/client-config-examples.md) - Installable skill: [MCP skill](https://github.com/steveseguin/ninjamcp/blob/main/SKILL.md) - Exact tool contract: [MCP tool contract](https://github.com/steveseguin/ninjamcp/blob/main/references/mcp-tool-contract.md) - Security and transport notes: [MCP quickstart](https://github.com/steveseguin/ninjamcp/blob/main/references/quickstart-and-compat.md) ## Troubleshooting 1. Call `vdo_capabilities` and confirm the expected profile. 2. Call `vdo_status` on both agents. 3. Confirm both use the same room/password settings and unique stream IDs. 4. Wait for `peer_connected` and `data_channel_open` before assuming delivery. 5. Retry with TURN when direct connectivity is unavailable. 6. Use `vdo_receive` to inspect `sdk_error`, `connection_failed`, and `reconnect_scheduled` events.