{
  "markdown": "# oddsockets\n\n[![npm version](https://img.shields.io/npm/v/oddsockets.svg)](https://www.npmjs.com/package/oddsockets)\n[![Real-time](https://img.shields.io/badge/pub%2Fsub-presence%20%2B%20history-f97316)](#see-it-live)\n[![Zero deps](https://img.shields.io/badge/dependencies-0-3fb950)](#install)\n[![MCP](https://img.shields.io/badge/MCP-12_tools-blue)](#mcp-server-remote)\n\n**Real-time messaging for coding agents — pub/sub, presence and history your agent provisions itself, from the command line.**\n\n> **Prototype in one command. Ship the same channels to production — no rewrite.**\n\nYour agent can write the app but can't give it a real-time backbone without you stopping to wire up a messaging service. `oddsockets` is the CLI the agent runs itself: one install, and it signs up, mints its own key, and starts publishing and subscribing to live channels — the same channels that carry your production traffic. Zero dependencies.\n\n**Works with:** Claude Code · Cursor · Cline · Windsurf · Aider · Codex · any terminal\n\n[![oddsockets demo — signup to your first real-time message in 60 seconds](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/signup-demo.gif)](https://oddsockets.com/#demo)\n\n*Signup to your first real-time message in 60 seconds — [watch the full demo](https://oddsockets.com/#demo).*\n\n## See it live\n\nEach demo below is a **real CLI session** — a throwaway account, a real key, real messages over the live cluster — stitched to the **developer dashboard** showing that same traffic. Click any tab for the full-res video.\n\n| Signup → first message | Live pub/sub | Who's online | Agent integration |\n|---|---|---|---|\n| [![Signup to first real-time message](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/signup-demo.gif)](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/signup-demo.mp4) | [![Live pub/sub on one channel](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/pubsub-demo.gif)](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/pubsub-demo.mp4) | [![Presence — who is online now](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/presence-demo.gif)](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/presence-demo.mp4) | [![One-line agent integration + history](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/agent-demo.gif)](https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/demo/agent-demo.mp4) |\n| Fresh app, first message in seconds | One channel, two messages, instant | Live member list | `publish` + `history` in one line |\n\n*[Watch the full set on oddsockets.com →](https://oddsockets.com/#demo)*\n\n## Install\n\n```bash\nnpm install -g oddsockets\n```\n\n## Quick Start\n\n```bash\n# 1. Sign up (instant API key, no email verification)\noddsockets signup my-app --local\n\n# 2. Publish a message\noddsockets publish my-channel \"Hello from the CLI!\"\n\n# 3. Subscribe (live tail)\noddsockets subscribe my-channel\n\n# 4. Check who's online\noddsockets presence my-channel\n```\n\n## Pub/sub — one channel, real-time\n\nThe core primitive: publish to a channel, subscribe to tail it live. Every subscriber gets every message the instant it lands — no polling, no queue to run.\n\n```bash\noddsockets subscribe room-42 &                     # live tail in the background\noddsockets publish room-42 \"hello from the CLI\"    # arrives on the tail instantly\noddsockets publish room-42 --file payload.json     # publish structured data from a file\n```\n\n## Presence — who's online, right now\n\nAsk any channel who's connected. Presence is tracked server-side and updates in real time as clients join and leave.\n\n```bash\noddsockets subscribe lobby &     # join the channel\noddsockets presence lobby        # live member list\n```\n\n## History — replay what you missed\n\nChannels keep a rolling message history, so a client that connects late (or your agent after a context reset) can catch up.\n\n```bash\noddsockets history agent-bus --limit 10\n```\n\n## Agent Integration\n\nAdd to your `CLAUDE.md`, `.cursorrules`, `.clinerules`, or `.windsurfrules`:\n\n```markdown\n## OddSockets\nUse the `oddsockets` CLI for real-time messaging.\nKey is in .oddsockets/config.json (auto-loaded).\n\noddsockets status                           # cluster health\noddsockets publish my-channel \"message\"     # send message\noddsockets subscribe my-channel             # live tail\noddsockets presence my-channel              # who's online\noddsockets keys                             # list API keys\n```\n\n## MCP Server (remote)\n\nPrefer tools over a CLI? No install needed — point Claude Web, Claude Desktop, Cursor, Cline, Windsurf, Raycast, or any MCP client at our hosted server and your agent gets **12 native tools**: publish, history, presence, channels and API-key management.\n\n```\nURL:  https://mcp.oddsockets.ai/sse\nAuth: Authorization: Bearer YOUR_API_KEY\n```\n\nNo key yet? Connect keyless and call `oddsockets_get_started`, then `oddsockets_signup` to self-provision an app and mint your own key — then reconnect with the `Bearer` header to unlock every tool. Same account, same channels as the CLI.\n\n## Commands\n\n### Setup\n| Command | Description |\n|---------|-------------|\n| `oddsockets signup <app> [--email x] [--local]` | Sign up, get instant API key |\n| `oddsockets login --key KEY [--local]` | Save existing API key |\n| `oddsockets logout [--local]` | Clear config |\n| `oddsockets me` | Account info + plan |\n| `oddsockets status` | Cluster health + platform stats |\n\n### Messaging\n| Command | Description |\n|---------|-------------|\n| `oddsockets publish <channel> \"message\"` | Publish message |\n| `oddsockets publish <channel> --file data.json` | Publish from file |\n| `oddsockets subscribe <channel>` | Live tail (Ctrl+C to stop) |\n| `oddsockets history <channel> [--limit 10]` | Message history |\n| `oddsockets presence <channel>` | Channel members |\n\n### Channels\n| Command | Description |\n|---------|-------------|\n| `oddsockets channels` | List channels |\n| `oddsockets channel create <name>` | Create channel |\n| `oddsockets channel delete <name>` | Delete channel |\n\n### API Keys\n| Command | Description |\n|---------|-------------|\n| `oddsockets keys` | List API keys |\n| `oddsockets key create \"name\"` | Create new key |\n| `oddsockets key revoke <id>` | Revoke key |\n\n### Admin (superadmin)\nOperator commands for running the whole platform from the CLI — fleet monitoring, tenant/key provisioning, session and security management. Credentials span three planes; save them once with `oddsockets admin login` (manager analytics key, worker dashboard basic-auth, and the tenant superadmin key). Every command supports `--json` for scripting, and the live monitors support `--watch`.\n\n| Command | Description |\n|---------|-------------|\n| `oddsockets admin login [--key K] [--tenant-key T] [--worker-url U --dashboard-pass P]` | Save credentials for any plane |\n| `oddsockets admin config` | Show configured planes (redacted) |\n| `oddsockets admin fleet [--watch] [--interval N]` | Fleet health + per-worker traffic table |\n| `oddsockets admin telemetry [--watch]` | Live fleet telemetry (no key needed) |\n| `oddsockets admin worker <id> [--watch]` | Per-worker deep metrics (dashboard plane) |\n| `oddsockets admin worker <id> <section>` | One worker dashboard panel (`all` for every panel) |\n| `oddsockets admin worker drain <id> --confirm` | Deregister/drain a worker from the LB |\n| `oddsockets admin worker redis-toggle <id> --confirm` | Flip a worker's redis adapter |\n| `oddsockets admin disk [--watch]` | Manager disk cards (summary/usage/io) |\n| `oddsockets admin cache [--watch]` | Manager apikey cache hit-rate stats |\n| `oddsockets admin analytics [mau\\|dau] [<apiKeyId>] [--watch]` | MAU/DAU top tenants + per-key rollups |\n| `oddsockets admin analytics history <apiKeyId>` | 30-day MAU/DAU trend (dashboard charts) |\n| `oddsockets admin session stats [--watch]` | Sticky-session stats + per-worker counts |\n| `oddsockets admin session get <id>` | Inspect one session |\n| `oddsockets admin session reassign <id> --confirm` | Move a session off its worker |\n| `oddsockets admin session cleanup --confirm` | Purge stale sessions |\n| `oddsockets admin apikey mint <name> [--plan P]` | Provision a connectable tenant key |\n| `oddsockets admin users [--worker URL] [--status S]` | Live connected users (worker plane) |\n| `oddsockets admin security status` | Blocked + whitelisted IPs |\n| `oddsockets admin security whitelist <ip>` | Whitelist an IP (also unblocks it) |\n| `oddsockets admin security block <ip> --confirm` | Block an IP at the manager edge |\n| `oddsockets admin security clear --confirm` | Clear all blocked IPs |\n\nWorker dashboard sections (`admin worker <id> <section>`): `stats`, `channels`, `connections`, `telemetry`, `messages`, `recent`, `threads`, `dms`, `notifications`, `reactions`, `files`, `presence`, `receipts`, `disk`, `redis`, or `all`.\n\n## Flags\n\n- `--json` — Machine-readable JSON output (every command)\n- `--key KEY` — Override API key for one command\n- `--local` — Use project-local config (`.oddsockets/`)\n- `--watch` — Live-refresh admin monitors (fleet/worker/session/analytics)\n- `--interval N` — Refresh interval in seconds for `--watch` (default 5)\n- `--confirm` — Required for destructive admin ops (drain, block, cleanup, …)\n- `--help` — Help\n\n## Config Priority\n\n1. `--key` flag\n2. `ODDSOCKETS_API_KEY` environment variable\n3. `.oddsockets/config.json` in project directory\n4. `~/.oddsockets/config.json` in home directory\n\n## Pricing\n\n**7-day free trial on every plan.** Card required (secure Stripe checkout), nothing charged during the trial — cancel before it ends and you pay nothing. Agents and the CLI get a **48-hour keyless window** to prototype before a key is needed. Plans from $29/mo. [Details](https://oddsockets.com/#pricing).\n\n## SDKs\n\nPrefer to build it into your app? OddSockets ships a native SDK for every major language and runtime — same real-time channels, pub/sub, and presence, idiomatic to each stack. Each card links to its maintained repo; for a 60-second install + connect snippet in your language, see [`examples/`](examples/).\n\n<table>\n<tr>\n<td align=\"center\" width=\"20%\"><a href=\"https://github.com/jyswee/oddsockets-nodejs-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_nodejs.png\" width=\"44\" height=\"44\" alt=\"Node.js\"><br>Node.js</a></td>\n<td align=\"center\" width=\"20%\"><a href=\"https://github.com/jyswee/oddsockets-javascript-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_javascript.png\" width=\"44\" height=\"44\" alt=\"JavaScript\"><br>JavaScript</a></td>\n<td align=\"center\" width=\"20%\"><a href=\"https://github.com/jyswee/oddsockets-svelte-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_svelte.png\" width=\"44\" height=\"44\" alt=\"Svelte\"><br>Svelte</a></td>\n<td align=\"center\" width=\"20%\"><a href=\"https://github.com/jyswee/oddsockets-react-native-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_react.png\" width=\"44\" height=\"44\" alt=\"React Native\"><br>React Native</a></td>\n<td align=\"center\" width=\"20%\"><a href=\"https://github.com/jyswee/oddsockets-flutter-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_flutter.png\" width=\"44\" height=\"44\" alt=\"Flutter\"><br>Flutter</a></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-python-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_python.png\" width=\"44\" height=\"44\" alt=\"Python\"><br>Python</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-go-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_go.png\" width=\"44\" height=\"44\" alt=\"Go\"><br>Go</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-rust-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_rust.png\" width=\"44\" height=\"44\" alt=\"Rust\"><br>Rust</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-java-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_java.png\" width=\"44\" height=\"44\" alt=\"Java\"><br>Java</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-kotlin-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_kotlin.png\" width=\"44\" height=\"44\" alt=\"Kotlin\"><br>Kotlin</a></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-csharp-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_csharp.png\" width=\"44\" height=\"44\" alt=\"C#\"><br>C# / .NET</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-cpp-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_cpp.png\" width=\"44\" height=\"44\" alt=\"C++\"><br>C++</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-c-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_c.png\" width=\"44\" height=\"44\" alt=\"C\"><br>C</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-php-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_php.png\" width=\"44\" height=\"44\" alt=\"PHP\"><br>PHP</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-ruby-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_ruby.png\" width=\"44\" height=\"44\" alt=\"Ruby\"><br>Ruby</a></td>\n</tr>\n<tr>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-swift-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_swift.png\" width=\"44\" height=\"44\" alt=\"Swift\"><br>Swift</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-elixir-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_elixir.png\" width=\"44\" height=\"44\" alt=\"Elixir\"><br>Elixir</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-unity-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_unity.png\" width=\"44\" height=\"44\" alt=\"Unity\"><br>Unity</a></td>\n<td align=\"center\"><a href=\"https://github.com/jyswee/oddsockets-unrealengine-sdk\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/oddsockets.com/platform_unrealengine.png\" width=\"44\" height=\"44\" alt=\"Unreal Engine\"><br>Unreal Engine</a></td>\n<td align=\"center\"></td>\n</tr>\n</table>\n\n<details>\n<summary><strong>Full SDK list with highlights</strong></summary>\n\n| Language / Runtime | Repo | Highlights |\n|--------------------|------|------------|\n| Node.js | [oddsockets-nodejs-sdk](https://github.com/jyswee/oddsockets-nodejs-sdk) | Server-side, npm |\n| JavaScript | [oddsockets-javascript-sdk](https://github.com/jyswee/oddsockets-javascript-sdk) | Browser + Node.js |\n| TypeScript / Svelte | [oddsockets-svelte-sdk](https://github.com/jyswee/oddsockets-svelte-sdk) | Reactive stores |\n| React Native | [oddsockets-react-native-sdk](https://github.com/jyswee/oddsockets-react-native-sdk) | Mobile |\n| Flutter / Dart | [oddsockets-flutter-sdk](https://github.com/jyswee/oddsockets-flutter-sdk) | Cross-platform mobile |\n| Python | [oddsockets-python-sdk](https://github.com/jyswee/oddsockets-python-sdk) | AsyncIO |\n| Go | [oddsockets-go-sdk](https://github.com/jyswee/oddsockets-go-sdk) | Goroutine-safe |\n| Rust | [oddsockets-rust-sdk](https://github.com/jyswee/oddsockets-rust-sdk) | Tokio async |\n| Java | [oddsockets-java-sdk](https://github.com/jyswee/oddsockets-java-sdk) | Maven |\n| Kotlin | [oddsockets-kotlin-sdk](https://github.com/jyswee/oddsockets-kotlin-sdk) | Coroutines |\n| C# / .NET | [oddsockets-csharp-sdk](https://github.com/jyswee/oddsockets-csharp-sdk) | NuGet |\n| C++ | [oddsockets-cpp-sdk](https://github.com/jyswee/oddsockets-cpp-sdk) | C++17 |\n| C | [oddsockets-c-sdk](https://github.com/jyswee/oddsockets-c-sdk) | Embedded / IoT |\n| PHP | [oddsockets-php-sdk](https://github.com/jyswee/oddsockets-php-sdk) | Composer |\n| Ruby | [oddsockets-ruby-sdk](https://github.com/jyswee/oddsockets-ruby-sdk) | Gem |\n| Swift | [oddsockets-swift-sdk](https://github.com/jyswee/oddsockets-swift-sdk) | SPM + Combine |\n| Elixir | [oddsockets-elixir-sdk](https://github.com/jyswee/oddsockets-elixir-sdk) | GenServer / OTP |\n| Unity | [oddsockets-unity-sdk](https://github.com/jyswee/oddsockets-unity-sdk) | MonoBehaviour |\n| Unreal Engine | [oddsockets-unrealengine-sdk](https://github.com/jyswee/oddsockets-unrealengine-sdk) | UE5 |\n\n</details>\n\n## Get Accredited\n\n<a href=\"https://tyga.games/accreditation\"><img src=\"https://prodmedia.tyga.host/public/tyga.cloud/landing/tyga.games/tygagames-black-words.svg\" alt=\"tyga.games accreditation\" height=\"44\"></a>\n\nProve you can build and operate real-time features on OddSockets — channels, presence, pub/sub, delivery guarantees and production liveops — on the stack itself. Three tiers (**TCU / TCA / TCP**), certified through **tyga.games** and delivered on ClassaaS.\n\n[**Get accredited on tyga.games →**](https://tyga.games/accreditation)\n\n## Links\n\n- [Documentation](https://docs.oddsockets.com)\n- [Dashboard](https://oddsockets.com/developer-dashboard)\n- [GitHub](https://github.com/jyswee)\n",
  "bytes": 17538,
  "sha": "af806ada546962269cf27db81db96495dabddaab682782adcc19797b437ab91b",
  "repo_slug": "jyswee/oddsockets",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_oddsockets_remote_mcp_2b6c693e/readme"
}