Pubnub MCP Server vs Ethora MCP Cli
A side-by-side look at the Pubnub MCP Server and Ethora MCP Cli MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Pubnub MCP Server for communication work as a local process; choose Ethora MCP Cli for communication as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Pubnub MCP Server when
- You need dedicated capabilities in the Communication domain.
- You prefer a local stdio subprocess transport.
- You have the keys it needs:
PUBNUB_API_KEY. - You want tools like
get_sdk_documentation, get_chat_sdk_documentation, get_sdk_migration_guide.
Choose Ethora MCP Cli when
- You need dedicated capabilities in the Communication domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: OAuth 2.0.
- You have the keys it needs:
ETHORA_API_URL, ETHORA_APP_JWT, ETHORA_B2B_TOKEN, ETHORA_MCP_TRANSPORT, ETHORA_MCP_AUTH_ISSUER. - You want tools like
ethora-status, ethora-help, ethora-app-select.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Communication | Communication |
| Quality signal | 65/100 · Great | 65/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | OAuth 2.0 |
| Pricing | Not declared | Free |
| Required env vars | PUBNUB_API_KEY | ETHORA_API_URLETHORA_APP_JWTETHORA_B2B_TOKENETHORA_MCP_TRANSPORTETHORA_MCP_AUTH_ISSUER |
| Verified owner | Community listing | Community listing |
| GitHub stars | 33 | 6 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 17 | 24 |
| Full listing | View Pubnub MCP Server | View Ethora MCP Cli |
Tools & capabilities
Pubnub MCP Server tools 17
get_sdk_documentationRetrieve Core SDK documentation for low-level real-time features. **When to use:** - Building NON-CHAT real-time apps (IoT, gaming state sync, live analytics, notifications) - Need fine-grained control over pub/sub, presence, storage, or access management - Implementing custom real-time patterns - Need API reference for specific SDK methods (publish, subscribe, history, etc.) - For Python SDK usage always request about sync or asyncio version of langauge. **Do NOT use for:** - Chat/messaging apps → use "get_chat_sdk_documentation" instead - Conceptual guides → use "how_to" Returns code examples, API references, and implementation guides for the specified language/feature combination.get_chat_sdk_documentationRetrieve Chat SDK documentation for building chat/messaging applications. **When to use:** - Building ANY chat or messaging application (1:1, group, channels) - Need typing indicators, read receipts, @mentions, unread counts - Want message threads, reactions, pinned messages, moderation - Need user/channel management with chat-specific features - Prefer rapid development with intuitive methods like sendText(), startTyping(), join() **Do NOT use for:** - Non-chat real-time apps (IoT, gaming state, analytics) → use "get_sdk_documentation" - Conceptual guides → use "how_to" **Example features:** - messages-send-receive, messages-threads, messages-reactions - channels-create, channels-join, channels-typing-indicator - users-mentions, users-presence Returns code examples and API references for the specified language/feature.get_sdk_migration_guideRetrieve SDK migration guides for upgrading between PubNub SDK versions. **When to use:** - Upgrading a PubNub SDK to a newer major version - Need step-by-step instructions for migrating breaking changes - Refactoring a codebase after a PubNub SDK version bump **Do NOT use for:** - General SDK documentation → use "get_sdk_documentation" - Chat SDK documentation → use "get_chat_sdk_documentation" Returns the migration guide content for the specified language and target version.get_general_migration_guideRetrieve general migration guides for cross-cutting PubNub platform changes. **When to use:** - Migrating to a new encryption standard (e.g. 256-bit encryption) - Upgrading push notification setup (e.g. APNs HTTP/2, FCM v1) - Migrating to new API versions (e.g. Access Manager v3, Objects v2) - Replacing deprecated features (e.g. legacy webhooks) **Do NOT use for:** - SDK version upgrades (e.g. JavaScript v7→v8) → use "get_sdk_migration_guide" - General SDK documentation → use "get_sdk_documentation" Returns the migration guide content for the specified slug.how_toRetrieve conceptual guides for specific PubNub use cases and integrations. **When to use:** - Learning how to implement a specific use case (gaming, healthcare, IoT) - Need step-by-step integration guide for a platform (Unity, Unreal etc) - Understanding PubNub features in context (presence, push notifications, functions) **Do NOT use for:** - API reference or code samples of a specific PubNub features → use `get_sdk_documentation` or `get_chat_sdk_documentation` - General best practices → use `write_pubnub_app`write_pubnub_appRetrieve PubNub best practices guide covering: 1) Architecture & project setup (environments, payload sizes), 2) Security (Access Manager tokens, least privilege, PII hygiene), 3) Channel & data modeling (naming conventions, message schemas), 4) Publish/Subscribe patterns, 5) History usage, 6) Client reliability (reconnect, idempotency, ordering), 7) Functions/edge logic, 8) Presence & state, 9) App Context, 10) Mobile specifics (push notifications, caching), 11) Web specifics (tab lifecycle, Service Workers), 12) Observability & ops, 13) Performance & cost optimization. Call this tool when building PubNub applications to ensure robust, scalable, and secure implementations.manage_appsManages PubNub apps with operations: list, create, update. - 'list': List all apps on your account. - 'create': Create a new app. User must provide data.name. - 'update': Update an existing app name. User must provide data.id and data.name.manage_keysetsManages PubNub keysets with operations: get, list, create, update. - 'get': Get a specific keyset information, including its current config (message persistence, App Context, files, presence including presence rules, etc.). User needs to provide the keyset id. - 'list': List all keysets for your account or a specific app. - 'create': Create a new keyset. New keyset is created with Message Persistence, App Context, Files, and Presence enabled by default; the user must provide name, production, and config with nested objects (messagePersistence, appContext, files, presence), and if any required parameter is missing, you must ask the user to provide it. - 'update': Update an existing keyset. User needs to provide the keyset id and the config to update. Only provided fields are changed. presence.rules replaces the stored rules entirely: before changing rules, call 'get' and send the full list including the existing rules to keep. If 'get' returns presence.rules as "UNREADABLE", the existing rules cannot be read back; tell the user that sending rules will overwrite them and ask before proceeding.get_usage_metricsFetches usage metrics from the PubNub Admin API for an account, app, or keyset. **Parameters:** - entityType: 'account', 'app', or 'keyset' - entityId: The ID of the entity - from: Start date (inclusive) in YYYY-MM-DD format - to: End date (exclusive) in YYYY-MM-DD format - metrics: Array of metric names to retrieve **Available Metric Categories:** - Core transactions: txn_total, mtd_txn_total, replicated, signals, edge - MAU/UUID: mtd_uuid, uuid, pn_uuid - Messages: msgs_total, publish, subscribe_msgs, history_msgs, files_msgs, push_msgs - Storage: bytes_stored, bytes_stored_messages, bytes_stored_files, etc. - Access Manager: accessmanager_grants_transactions, accessmanager_audits_transactions - Functions: executions, kv_read_transactions, kv_write_transactions - History: history_transactions, history_with_actions_transactions - Message Actions: message_actions_add_transactions, message_actions_get_transactions - Objects/App Context: objects_create_user_transactions, objects_get_user_transactions, etc. - Presence: presence_herenow_transactions, presence_wherenow_transactions - Push Notifications: apns_sent_transactions, gcm_sent_transactions - Subscribe: subscribe_transactions, subscribe_heartbeats_transactions - Publish: publish_transactions, publish_bytes - Signal: signal_transactions - Files: files_publish_transactions, files_get_file_transactionsmanage_app_contextManages PubNub App Context (Objects API) for users, channels, and memberships. Supports CRUD operations including get, set, remove, and getAll. Use this tool to manage user profiles, channel metadata, and membership relationships in your PubNub application.send_pubnub_messageSend a message or signal to a PubNub channel in real-time. Supports both regular messages and lightweight signals. Plain strings are automatically wrapped in a 'text' field. Requires publish and subscribe keys from your PubNub keyset.get_pubnub_presenceRetrieves real-time presence information. Use 'channels'/'channelGroups' for HereNow (occupancy/users in channel) and/or 'uuid' for WhereNow (channels a user is in). Returns presence data in JSON format. Requires publish and subscribe keys from your PubNub keyset.- +5 more on the listing page
Ethora MCP Cli tools 24
ethora-statusReport the current Ethora MCP session state: configured API URL, active auth mode, which credentials are present (booleans like `hasAppJwt` — values never echoed), the selected appId/agentId, and `hosted`/`sessionId` on the hosted (Streamable HTTP) server. Auth: none required. Errors: effectively none. Related: `ethora-doctor` for an active connectivity check.ethora-helpTask-oriented orientation for this MCP server: explains the three Ethora auth modes (user / app-token / B2B) and recommends next tool calls + recipes based on current session state. Auth: none required — inspects state, no API calls. Errors: effectively none. Related: pass a recommended recipe id to `ethora-recipe-run`.ethora-app-selectSet the current app context for this session so app-scoped tools can omit their `appId` argument. Stores `currentAppId` and, if given, `appToken` (which defaults the auth mode to app-token unless `authMode` overrides). Auth: none required to set the context. Errors: effectively none — a non-existent `appId` is not validated here; the first app-scoped API call surfaces the 404. Related: pairs with `ethora-auth-mode-set`.ethora-source-site-crawl-waitCrawl a website URL and wait for the crawl to finish: enqueues the job, then polls it until it reports `completed` or `failed`. Returns `{ done, status, jobId, polls, durationMs, result }`; `done: false` with a `note` means the budget ran out while the job was still running (it usually finishes server-side anyway). Requires: a selected app (`ethora-app-select`) or an explicit `appId`. Auth: app-token mode OR B2B mode with an explicit `appId`. Errors: 401/403 wrong auth; 400 malformed `url`; 504/timeout if it takes longer than `timeoutMs` (the job may still complete server-side — check with `ethora-source-site-list`).ethora-source-doc-uploadUpload documents (1–5; PDF, text, etc.) into an app's RAG sources (app-token / B2B variant of `ethora-source-doc-upload-legacy`). Async — content becomes queryable once indexing finishes; files passed as base64, 50MB max each. Requires: a selected app (`ethora-app-select`) or an explicit `appId`. Auth: app-token mode OR B2B mode with an explicit `appId`. Errors: 401/403 wrong auth; 404 unknown `appId`; 413 too large; 422 unsupported document type. Related: `ethora-source-doc-list`, `ethora-source-doc-delete`.ethora-user-loginAuthenticate as an existing Ethora user with email + password. Stores the user session token in this MCP session and unlocks user-auth tools (`ethora-app-list`, `ethora-files-*`, `ethora-wallet-*`). Auth: user-auth mode (`ethora-auth-mode-set` first) and a configured `appJwt`. Errors: 401/403 bad credentials; 404 email not registered; 429 per-IP rate limit — retry with backoff.ethora-user-registerCreate a new Ethora user account by email + first/last name, then log in and bind the session. A password is generated when omitted and returned once. By default also mints a long-lived API key so an agent can reconnect later with `Authorization: Bearer <key>` (no human step needed). Auth: user-auth mode and a configured `appJwt` (on a hosted server this is preset). Errors: 401 no `appJwt`; 422 email already registered or password shorter than 6 chars; 429 rate limited. Related: bulk provisioning uses `ethora-user-batch-create`.ethora-api-key-createMint a long-lived, revocable API key for the currently logged-in user. The key is a user token: send it as `Authorization: Bearer <key>` to the hosted MCP endpoint (or set it in the stdio client) to skip `ethora-user-login`. Shown once. Auth: user auth (logged in). Errors: 401 not logged in; 404 on backends without API key support.ethora-feedback-submitSend feedback about Ethora to the Ethora team: something that does not work, behaves differently from what the tool description promised, is missing, or is badly documented. It reaches the team directly, so prefer it over guessing or silently giving up when a tool fails. Recent failures in this session (tool, error code, request id) are attached automatically when `includeRecentErrors` is true, which is what makes a report from here more useful than a web form: the team can join it to the server-side log. Works whether or not you are signed in, so a problem that blocks sign-up can still be reported. Do not put credentials, API keys or end-user personal data in `message`; credential-shaped values in the attached context are redacted before sending. Requires: nothing. Auth: none. Works anonymously; when the session is authenticated the report is attributed to that account. Errors: 422 if `message` is shorter than 5 characters or looks like spam; 429 if too many reports were sent from this address.ethora-widget-snippet-getGenerate the <script> tag that embeds the Ethora AI chat widget (the floating launcher + chat panel that website visitors use) for an app, plus the prerequisites that must hold before it answers. No API call; pure generator using this deployment's hosted widget URL and public API base. The widget answers with the app's ACTIVE bot: for API-created apps run `ethora-agent-create` -> `ethora-agent-invite` -> `ethora-agent-activate { agentId, chatJid }` first, otherwise `POST /v2/widget/sessions` returns 422 and the widget stays silent. Requires: an activated agent on the app (`ethora-agent-activate`); without it the widget opens but never answers. Auth: none required (uses the selected app when `appId` is omitted). Errors: effectively none; when no hosted widget is configured the snippet carries a `<WIDGET_URL>` placeholder. Related: `ethora-agent-activate`, `ethora-bot-widget-get` (legacy per-app bot only).ethora-app-listList all Ethora apps (tenants) owned by the currently logged-in user. Returns an array with `appId` (24-char hex), `displayName`, `domainName`, ownership and bot-status metadata. Credential fields (appSecret, tenantSecret, appToken, passwords) are redacted in the result; call `ethora-app-credentials-reveal { appId, confirm: true }` to reveal an app's appToken. Auth: user-auth mode, active session (`ethora-user-login` first). Errors: 401 not logged in; empty list if the user owns no apps. Related: feed `appId` into `ethora-app-update` / `ethora-app-select`.ethora-app-createCreate a new Ethora app (tenant) owned by the currently logged-in user. Allocates a fresh 24-char hex `appId` and sets the caller as owner; counts against the owner's plan limit. Returns the new app object including `appId`. The returned app has its credential fields redacted; call `ethora-app-credentials-reveal { appId, confirm: true }` when a snippet needs the appToken. Auth: user-auth mode, active session (`ethora-user-login` first). Errors: 401 not logged in; 402/403 plan limit reached; 422 invalid `displayName`. Related: server-side provisioning uses `ethora-b2b-app-create`.- +12 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Pubnub MCP Server
{
"mcpServers": {
"mcp-server-152": {
"command": "npx",
"args": [
"-y",
"@pubnub/mcp@latest"
],
"env": {
"PUBNUB_API_KEY": "YOUR_PUBNUB_API_KEY_HERE"
}
}
}
}
Ethora MCP Cli
{
"mcpServers": {
"ethora-mcp-cli": {
"command": "npx",
"args": [
"-y",
"@ethora/mcp-server"
],
"env": {
"ETHORA_API_URL": "YOUR_ETHORA_API_URL_HERE",
"ETHORA_APP_JWT": "YOUR_ETHORA_APP_JWT_HERE",
"ETHORA_B2B_TOKEN": "YOUR_ETHORA_B2B_TOKEN_HERE",
"ETHORA_MCP_TRANSPORT": "YOUR_ETHORA_MCP_TRANSPORT_HERE",
"ETHORA_MCP_AUTH_ISSUER": "YOUR_ETHORA_MCP_AUTH_ISSUER_HERE"
}
}
}
}
Frequently asked questions
Pubnub MCP Server is categorized under Communication and uses a local stdio subprocess. Ethora MCP Cli belongs to Communication and uses a local stdio subprocess. Pick Pubnub MCP Server for communication work and Ethora MCP Cli for communication.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Pubnub MCP Server has no declared pricing — check the project's own site. Ethora MCP Cli is listed as free. Auth: oauth 2.0. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add mcp-server-152 and ethora-mcp-cli as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Pubnub MCP Server has a quality signal of 65/100 (Great) with 0 views, 0 installs and 33 GitHub stars. Ethora MCP Cli has 65/100 (Great) with 2 views, 0 installs and 6 GitHub stars.