Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.dappros/ethora-mcp-server

REMOTE · MCP.CHAT.ETHORA.COM · 3 COMPONENTS

Ethora chat platform MCP: apps, users, rooms, AI agents, chat widgets. Hosted or stdio.

0 this week 79 Trust /100

Last scanned (1 hour ago)

Scores higher than 79% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Communication

Recent critical change

Authorization (2 Oct 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9187 tokens (~328/item across 28 items; 24 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • Stability: 0.97 → pass security
  • 4 Nov 26 0
    • Stability: pass → 0.97 functional
  • 3 Nov 26 0
    • Server version: 26.10.2 → 26.11.0 functional
  • 24 Oct 26 +12
    • Stability: fail → pass ▲ security
  • 16 Oct 26 0
    • Tool “ethora-source-site-crawl-wait” is now declared destructive security
    • Server version: 26.10.0 → 26.10.2 functional
  • 14 Oct 26 +1
    • “ethora-agent-create” reworded the description of “llmModel” cosmetic
    • “ethora-agent-create” reworded the description of “llmProvider” cosmetic

    2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.

  • 12 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 0 to 2.

  • 2 Oct 26 0
    • Authorization: partial → fail ▼ critical
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “ethora-source-site-crawl-wait” rewrote its description, which is the text the model reads security
    • Tool “ethora-agent-update” rewrote its description, which is the text the model reads security
    • Tool “ethora-tools-enable” rewrote its description, which is the text the model reads security
    • Tool “ethora-app-update” rewrote its description, which is the text the model reads security
    • Tool “ethora-app-select” rewrote its description, which is the text the model reads security
    • Tool “ethora-app-update” is now declared destructive security
    • Tool “ethora-agent-update” is now declared destructive security
    • Server version: 26.9.5 → 26.10.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://mcp.chat.ethora.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_256_GCM_SHA384 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.chat.ethora.com CN=YE2,O=Let's Encrypt,C=US 15 Sept 2026 14 Dec 2026 ECDSA 256 ECDSA-SHA384 618f0ebd601f360fb42066d97d6b7a7f882
SANs: mcp.chat.ethora.com
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.chat.ethora.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
ethora.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.chat.ethora.com/mcp Verified 200
http (plaintext) http://mcp.chat.ethora.com/mcp HTTPS enforced 301 https://mcp.chat.ethora.com/mcp
MCP tools · 24 exposed · ~8,331 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ethora-agent-activate ~378

Make an agent the app's ACTIVE widget bot: sets `App.defaultBotInstanceId` (and `botStatus: on`), which is what `POST /v2/widget/sessions` uses to decide who answers website visitors. Required before an embedded widget can answer on an API-created app. Preconditions: the agent was invited into a room of this app with `ethora-agent-invite` (that creates its bot instance). Works in user auth (app update route); falls back to the app-token `/v2/agents/:id/activate` route when an appToken is stored. Requires: an agent already invited into a room of the selected app (`ethora-agent-create` -> `ethora-chat-create` -> `ethora-agent-invite`); the invite creates the bot instance this tool binds as the app's default responder. Auth: user session (owner of the app). Errors: 404 no bot instance for this agent in the app (invite first); 403 not the app owner. Related: `ethora-widget-snippet-get` next, `ethora-bot-instance-list` to inspect.

NameTypeReqDescription
agentIdstring–Id (or address) of the agent to activate. Get it from `ethora-agent-list` / `ethora-agent-create`.
agentIdOrAddressstring–Alias for `agentId` - either name is accepted, pass whichever you have.
appIdstring–App to activate the agent for. Defaults to the app from `ethora-app-select`.
chatJidstring–Room JID `${appId}_${chatId}` (with or without `@conference...`) that becomes the widget chat. Required for API-created apps; omit only for dashboard-created apps that already have an AI Widget chat…

No output schema declared.

No examples provided.

ethora-agent-create ~1,060

Create a reusable AI agent (POST /v2/apps/:appId/agents). Works in user auth mode (the normal hosted mode) or B2B mode; app-token mode is not accepted by the backend. Each agent is a persona - name, avatar, system prompt, LLM config, plus response-gate settings (responseMode, cooldownSec) that control when it speaks in a room. For multi-agent scenarios (two or more personas conversing in one chat) create each one separately, then `ethora-agent-invite` them into the same room. See the `ethora-agents-quickstart` prompt for the end-to-end recipe. To start from a ready-made public agent instead, `ethora-agent-list { visibility: "public" }` then `ethora-agent-clone`. Requires: a selected app (`ethora-app-select`) or an explicit `appId`. The agent belongs to your account (only you can change it) and is homed in that app; it can still be used in your other apps.

NameTypeReqDescription
appIdstring–24-char hex appId the agent belongs to (`POST /v2/apps/:appId/agents`). Defaults to the app selected with `ethora-app-select`. Pass it when you just created an app so the agent lands there rather tha…
botAvatarUrlstring–URL of the avatar image shown next to bot messages.
botDisplayNamestring–Display name used inside the chat UI. Defaults to `name`.
categoriesarray–Directory categories, any of: `customer-support` (customer-facing assistants), `persona` (a character or historical figure), `entertainment` (quizzes, games, scenarios), `worker` (internal work). Use…
cooldownSecinteger–Minimum seconds between this agent's replies in a given room. Damped 2x for bot-to-bot. Set 0 for quick turn-taking in multi-agent scenarios.
flowsYamlstring–Deterministic scripted conversation for this agent, as YAML. Drives the agent through a fixed sequence (opening menu, appointment request, intake questionnaire, survey) instead of leaving every turn…
greetingMessagestring–Optional message the agent posts when it first joins a room.
isPublishedboolean–Convenience alias for setting visibility='public'.
isRAGboolean–Enable retrieval-augmented generation from indexed sources.
llmModelstring–Model id served by this deployment's AI endpoint; omit for the platform default. `ethora-agent-model-list` returns the supported ids; an unsupported id is rejected with LLM_MODEL_UNSUPPORTED and that…
llmProviderstring–Leave empty. The deployment has one AI endpoint (OpenAI-compatible); `openai` and `openai-compatible` are accepted as synonyms, anything else is rejected with LLM_PROVIDER_UNSUPPORTED.
namestring–Short display name. For multi-agent scenarios, prefer single-word names (e.g. 'Hannibal', 'Varro') — the @-mention matcher uses the exact display name with word-boundary matching.
promptstring–System prompt — the agent's persona, role, style of speech, and behaviour rules. For multi-agent scenarios, instruct the agent to end every message with an @-mention of who speaks next; that's how tu…
ragTagsarray–Optional RAG tag filter — restrict retrieval to sources matching these tags.
responseModestring–When the agent decides to reply. 'always' = every room message; 'mentioned' = only when @-mentioned by display name or via /bot (recommended for multi-agent turn-taking); 'smart' = a mini LLM gate de…
responseProbabilitynumber–If responseMode='probability', odds (0-1) of replying to each message. Damped 0.6x for bot-to-bot messages.
slugstring–URL-safe slug (auto-generated from name if omitted).
summarystring–Short bio shown in agent lists.
triggerstring–Legacy trigger field. Prefer the newer `responseMode` for new agents.
visibilitystring–'private' (only invitable inside the owning app) or 'public' (cross-app invitable).

No output schema declared.

No examples provided.

ethora-agent-invite ~270

Invite an Agent into a chat room. Multiple agents can coexist in the same room — call this tool once per agent and they will all appear as members able to converse. Lazily creates a per-App BotInstance (an Ethora user with isBot:true) if one does not already exist for (agent, app). Spawns the XMPP client live; no ai-service restart required. For the full multi-agent recipe see the `ethora-agents-quickstart` prompt. Requires: an agent (`ethora-agent-create`) and a room (`ethora-chat-create`) in the selected app.

NameTypeReqDescription
agentIdstring–Alias for `agentIdOrAddress` - either name is accepted, pass whichever you have.
agentIdOrAddressstring–Either Mongo _id (24 hex chars) or EOA-style address.
appIdstring–Required in B2B mode unless already selected via ethora-app-select.
chatIdstring–Mongo Chat _id (preferred when invoking from admin).
chatJidstring–Room JID `${appId}_${chatId}` (optionally with `@conference.<host>`), exactly the `jid` returned by `ethora-chat-create`. Preferred over `chatId`.

No output schema declared.

No examples provided.

ethora-agent-list ~303

List AI agents (`GET /v2/agents`): by default your own agents plus the public ones. Pass `appId` to list only the agents homed in that app (`GET /v2/apps/:appId/agents`, which needs you to manage the app; B2B tokens always use this form). Agents belong to your account, not to one app, so the same agent can answer in several of your apps. Public agents (e.g. the platform's Support Agent, sample personas) can be tried with `ethora-agent-try` and copied with `ethora-agent-clone`, not edited. Returns agents with ids, names, owner, visibility, categories and config. Auth: user session or B2B token. Errors: 401/403 wrong auth; empty list when nothing matches.

NameTypeReqDescription
appIdstring–Only agents whose home app is this 24-char hex appId. In user auth the selected app is NOT applied by default (agents are account-level); with a B2B token the selected app is used.
categorystring–Only agents tagged with this category.
limitinteger–Page size (max 200).
offsetinteger–Number of agents to skip, for paging.
visibilitystring–`mine` = only your own agents, `public` = only public agents (the directory to clone from). Omit for both.

No output schema declared.

No examples provided.

ethora-agent-update ~832

Overwrites the fields you pass; previous values are not kept and cannot be restored from the API, so confirm changes to the prompt, name or settings with the user first. Update a saved AI agent (PUT /v2/agents/:agentId). All fields are optional - only what you pass is updated. Common uses: tune the system `prompt` after a test run, switch `responseMode` to control turn-taking in multi-agent rooms, or adjust `cooldownSec`. See `ethora-agents-quickstart` prompt for the end-to-end recipe. Requires: an agent id or address from `ethora-agent-list` or `ethora-agent-create`. Only the agent's owner can update it: a public agent from someone else, including the platform's Support Agent, answers 403, so `ethora-agent-clone` it and update the copy.

NameTypeReqDescription
agentIdstring–Mongo _id (24 hex chars) of the agent to update.
agentIdOrAddressstring–Alias for `agentId` - either name is accepted, pass whichever you have.
botAvatarUrlstring–Avatar image URL.
botDisplayNamestring–Display name in chat UI.
categoriesarray–Directory categories, any of: `customer-support` (customer-facing assistants), `persona` (a character or historical figure), `entertainment` (quizzes, games, scenarios), `worker` (internal work). Use…
cooldownSecinteger–Minimum seconds between this agent's replies in a given room. Damped 2x for bot-to-bot. Set 0 for quick turn-taking.
flowsYamlstring–Deterministic scripted conversation for this agent, as YAML. Drives the agent through a fixed sequence (opening menu, appointment request, intake questionnaire, survey) instead of leaving every turn…
greetingMessagestring–Message the agent posts when it first joins a new room.
isPublishedboolean–Convenience alias for visibility='public'.
isRAGboolean–Enable RAG retrieval.
llmModelstring–LLM model override.
llmProviderstring–LLM provider override.
namestring–New display name. For multi-agent scenarios prefer single-word names — the @-mention matcher uses exact display-name match with word-boundary.
promptstring–Updated system prompt (persona + behaviour). For multi-agent rooms instruct the agent to end every message with an @-mention of the next speaker — that's how turn-handoff works through the response g…
ragTagsarray–RAG tag filter.
responseModestring–When the agent replies. 'always' = every message; 'mentioned' = only @-mention or /bot (best for multi-agent turn-taking); 'smart' = mini-LLM decides; 'probability' = coin-flip using `responseProbabi…
responseProbabilitynumber–If responseMode='probability', odds (0-1) of replying. Damped 0.6x for bot-to-bot.
slugstring–URL-safe slug.
summarystring–Short bio.
triggerstring–Legacy trigger field. Prefer `responseMode`.
visibilitystring–'private' or 'public' (cross-app invitable).

No output schema declared.

No examples provided.

ethora-api-key-create ~143

Mint 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.

NameTypeReqDescription
namestring–Label to recognise the key later (e.g. `ci-runner`, `claude-desktop`).
ttlDaysinteger–Lifetime in days. Server default applies when omitted.

No output schema declared.

No examples provided.

ethora-app-create ~186

Create 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`.

NameTypeReqDescription
displayNamestringyesHuman-readable app name shown to users in the app picker and on the public landing page. Not required to be unique across accounts.

No output schema declared.

No examples provided.

ethora-app-list ~155

List 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`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ethora-app-select ~321

Session-only: remembers which app later calls refer to. Changes nothing on the server and can be called again at any time to switch. Set the current app context for this session so app-scoped tools can omit their `appId` argument. On the hosted server the selection is remembered for the signed-in account (24 hours), so a client that opens a new session per call keeps it; `ethora-app-create` selects the new app by itself, and an account with exactly one app has it selected automatically. 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`.

NameTypeReqDescription
appIdstringyes24-char hex Ethora appId to set as the current context. Get it from `ethora-app-list`, `ethora-app-create`, or a B2B create/provision response.
appTokenstring–Per-app appToken to store alongside the appId. If provided, the active auth mode switches to app-token (unless `authMode` says otherwise). Secret.
authModestring–Auth mode to keep after selecting the app. Omit to let the mode default to app-token when an `appToken` is given, or stay unchanged otherwise.

No output schema declared.

No examples provided.

ethora-app-update ~406

Overwrites the fields you pass; previous values are not kept and cannot be restored from the API, so confirm changes to the prompt, name or settings with the user first. Update mutable fields on an app the caller owns (displayName, domainName, appTagline, primaryColor, botStatus). Partial update - omitted fields are left unchanged. Requires: an `appId` from `ethora-app-list` or `ethora-app-create`. Auth: user-auth mode, active session; the caller must own the app. Errors: 401 not logged in; 403 not owner; 404 unknown `appId`; 422 validation (e.g. `domainName` taken, `primaryColor` not `#RRGGBB`).

NameTypeReqDescription
appDescriptionstring–Deprecated alias for `appTagline`, kept so older callers keep working. Prefer `appTagline`.
appIdstring–24-char hex ObjectId of the app to update. Optional — defaults to the app most recently passed to `ethora-app-select`.
appTaglinestring–Short tagline shown on the public app landing page.
botStatusstring–`on` enables the AI bot for new conversations (requires a configured prompt — see `ethora-bot-update`); `off` disables it. Does not change the bot's configured prompt or sources.
displayNamestring–New human-readable app name. Visible in the app picker and on the public landing page.
domainNamestring–Subdomain to host the web app at. Setting `abcd` makes the web app available at `abcd.ethora.com`. Must be unique across all Ethora apps; lower-case alphanumerics and dashes only.
primaryColorstring–Primary brand color in hex `#RRGGBB` format (e.g. `#F54927`). Used throughout the app UI.

No output schema declared.

No examples provided.

ethora-chat-create ~263

Create a new chat room (MUC room) inside an app the caller owns. Every room created this way is listed in the app's rooms (`defaultRooms`); `pinned: true` additionally makes new users auto-join it (existing users are not added), `pinned: false` (default) keeps it opt-in. Returns the new room object including its JID. Requires: a selected app (`ethora-app-select`) or an explicit `appId`. Auth: user-auth mode, active session; the caller must own the app. Errors: 401 not logged in; 403 not owner; 404 unknown `appId`; 422 invalid `title`.

NameTypeReqDescription
appIdstring–24-char hex ObjectId of the app to create the chat room in. Optional — defaults to the app most recently passed to `ethora-app-select`.
pinnedboolean–If `true`, the room is added to the app's default rooms list — every new user of the app auto-joins it. If `false`, the room exists but users must be added explicitly.
titlestringyesDisplay name for the new chat room. Visible to all members; not required to be unique within the app.

No output schema declared.

No examples provided.

ethora-chat-history ~321

Read the archived messages of a chat room (GET /v2/apps/:appId/chats/:chatId/messages, newest last). Returns `results` with `from`, `nick`, `body`, `ts` (ms) plus a `nextBefore` cursor for older pages. Identify the room by `roomJid` (`${appId}_${chatId}`) or bare `chatId` plus the selected app. Requires: a room in the selected app (`ethora-chat-create`). Auth: user auth (default on the hosted server) or B2B; app-token mode is not accepted. Errors: 401 not logged in; 403 not the app owner; 404 unknown app/room; 502 MAM_READ_FAILED or `mamUnavailable: true` when the deployment has no message archive.

NameTypeReqDescription
appIdstring–24-char hex appId. Optional when `roomJid` carries it or an app is selected.
beforeinteger–Pagination cursor: only messages older than this timestamp (ms), from a previous `nextBefore`.
chatIdstring–Bare chat id. Needs an app: pass `appId` or select one with `ethora-app-select`.
limitinteger–Maximum number of most-recent messages to return (default 100).
roomJidstring–Room JID `${appId}_${chatId}` (optionally with `@conference.<host>`). Either this or `chatId` is required.

No output schema declared.

No examples provided.

ethora-feedback-submit ~403

Send 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.

NameTypeReqDescription
categorystring–What kind of report this is: `bug` (something is broken), `unexpected` (it works but not as described), `feature` (a request), `docs` (a description or guide is wrong or missing), `other`. Defaults t…
emailstring–Reply address. Only useful when the session is not signed in; an authenticated report already carries the account, so leave this out unless the user offers an address.
includeRecentErrorsboolean–Attach this session's last few tool failures (tool name, error code, request id) so the team can trace them. Default true; set false if the report is unrelated to a failure.
messagestringyesWhat happened, in the user's own words where possible: what was attempted, what was expected, what occurred instead. No credentials or end-user personal data.

No output schema declared.

No examples provided.

ethora-help ~224

Task-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`.

NameTypeReqDescription
goalstring–What you are trying to do: `new-app` (a new chat app: create, brand, rooms, users, where it lives), `in-app-chat` (chat inside your existing product with your own UI and users), `multi-agent-room` (s…

No output schema declared.

No examples provided.

ethora-message-send ~490

Post a message into a chat room of an app (POST /v2/apps/:appId/chats/broadcast targeting one room). The message is attributed to the app's broadcast sender (override the shown name with `senderName`). Use it to seed or test a conversation, e.g. right after `ethora-agent-invite`, and set `waitForReplySec` (up to 60) to wait for an AI agent's answer; replies are returned in `replies`. Identify the room by `roomJid` (`${appId}_${chatId}`, exactly what `ethora-chat-create` returns as `jid`) or by the bare `chatId` plus the selected app. Requires: a room in the selected app (`ethora-chat-create`); for `replies`, an agent invited into it (`ethora-agent-invite`). Auth: user auth (the default on the hosted server) or B2B; app-token mode is not accepted by this route. Errors: 401 not logged in; 403 not the app owner; 404 unknown app/room; 422 empty text. Reply detection needs the message archive (MAM) on the deployment; when it is unavailable `replies` is null and `historyUnavailable` is true.

NameTypeReqDescription
appIdstring–24-char hex appId. Optional when `roomJid` carries it or an app is selected.
chatIdstring–Chat id: either the Mongo chat `_id` (as listed by the app's chat list) or the suffix after `${appId}_` in the room JID. Needs an app: pass `appId` or select one with `ethora-app-select`.
roomJidstring–Room JID `${appId}_${chatId}` (optionally with `@conference.<host>`), as returned by `ethora-chat-create`. Either this or `chatId` is required.
senderNamestring–Display name shown as the message sender (defaults to the app's broadcast sender / app name).
textstringyesMessage body to post (1-4000 chars).
waitForReplySecinteger–Seconds to wait for a reply from someone else in the room (an AI agent, typically). 0 (default) returns right after posting.

No output schema declared.

No examples provided.

ethora-source-doc-upload ~327

Upload documents (1–5; PDF, text, etc.) into an agent's knowledge base (the one named by `agentId`, else the app's default agent) (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`.

NameTypeReqDescription
agentIdstring–Agent whose knowledge base gets the content (24-char hex, from `ethora-agent-list` / `ethora-agent-create`). Must be your own agent or one of this app's. Omit to file it under the app's default agent…
agentIdOrAddressstring–Alias for `agentId` - either name is accepted, pass whichever you have.
appIdstring–24-char hex appId to ingest into. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
filesarrayyes1 to 5 documents to ingest in this call.

No output schema declared.

No examples provided.

ethora-source-site-crawl-wait ~571

Adds the crawled pages to an agent's knowledge base (the one named by `agentId`, else the app's default agent); existing documents are kept and nothing is deleted. A URL that is already indexed is refused with 409 unless `force: true` re-crawls it. Crawl 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 (403 `AGENT_NOT_WRITABLE` when `agentId` is someone else's agent); 400 malformed `url`; 409 already indexed; 504/timeout if it takes longer than `timeoutMs` (the job may still complete server-side - check with `ethora-source-site-list`, or stop it with `ethora-source-site-crawl-cancel`). Related: `ethora-agent-knowledge-get` shows what the agent can search afterwards.

NameTypeReqDescription
agentIdstring–Agent whose knowledge base gets the content (24-char hex, from `ethora-agent-list` / `ethora-agent-create`). Must be your own agent or one of this app's. Omit to file it under the app's default agent…
agentIdOrAddressstring–Alias for `agentId` - either name is accepted, pass whichever you have.
appIdstring–24-char hex appId to ingest into. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
followLinkboolean–If true, also crawl in-domain links reachable from `url`. Can ingest many pages — use with care.
forceboolean–Re-crawl a URL that is already indexed and overwrite the stored copy. Without it an already-indexed URL is refused with 409.
timeoutMsinteger–How long to poll for the crawl to finish, in milliseconds. Default 45000, chosen to stay under the ~60s request timeout most MCP clients enforce. Caps at 600000 (10 min) for clients that allow longer…
urlstringyesAbsolute URL to crawl, e.g. `https://example.com/docs`.

No output schema declared.

No examples provided.

ethora-status ~97

Report 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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ethora-tools-enable ~198

Session-only: changes which tools this connection lists. Touches no account data. Only the core tools are listed by default. Call this to enable another group for this session; the tool list refreshes automatically (tools/list_changed). On the hosted server the enabled groups are remembered for the signed-in account, so a client that opens a new session per call keeps them. Without `group` it returns the catalogue: each group's summary, tool count and whether it is enabled. Groups: keys, session, apps-admin, rooms, agents-admin, sources, widget, users-files, legacy-bot, b2b, wallet; `all` enables everything. Hidden tools are still described by `search` / `fetch`, and each doc names its group. Auth: none. Errors: UNKNOWN_GROUP for a name outside the list.

NameTypeReqDescription
groupstring–Group to enable, or `all`. Omit to list the groups.

No output schema declared.

No examples provided.

ethora-user-login ~280

Authenticate 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.

NameTypeReqDescription
apiKeyNamestring–Label for the API key when `createApiKey` is true (e.g. `claude-code-laptop`).
apiKeyTtlDaysinteger–Lifetime of the API key in days when `createApiKey` is true. Server default applies when omitted.
createApiKeyboolean–When true, also mint a long-lived API key for this user and return it once, so headless clients / agents can reconnect with `Authorization: Bearer <key>` instead of logging in again. Default false.
emailstringyesUser's registered email address (RFC 5322). Must match an account created via `ethora-user-register`.
passwordstringyesPlain-text password the user set during registration. Sent over TLS to the Ethora API; never echoed back or logged.

No output schema declared.

No examples provided.

ethora-user-register ~331

Create 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`.

NameTypeReqDescription
apiKeyNamestring–Label for the API key (default `mcp-signup`).
apiKeyTtlDaysinteger–API key lifetime in days. Server default applies when omitted.
createApiKeyboolean–Mint a long-lived API key right after signup and return it once. Default true. Set false if you only need this session.
emailstringyesEmail address for the new user. Must be RFC-5322 valid and not already registered within this app. No confirmation click is required to log in; the address is used for password reset.
firstNamestringyesFirst name shown in the user's profile and message attributions across chat rooms and the app UI.
lastNamestringyesLast name shown in the user's profile.
passwordstring–Password for the account (min 6 chars). Omit to have a strong random password generated and returned once in the result.

No output schema declared.

No examples provided.

ethora-widget-snippet-get ~557

Generate 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. The widget's look (colours, texts, launcher) is saved on the app with `ethora-widget-appearance-set` and loads on every embed by itself, so the snippet only needs `data-app-id`; the cosmetic parameters here write attributes into the tag, which then win over the saved look on that site. Related: `ethora-agent-activate`, `ethora-widget-appearance-set`, `ethora-bot-widget-get` (legacy per-app bot only).

NameTypeReqDescription
apiBasestring–Override the public API base (`data-api-base`). Defaults to this deployment's public API URL.
appIdstring–App the widget belongs to (24-char hex). Defaults to the app from `ethora-app-select`.
botAvatarstring–Avatar image URL shown for the bot (`data-bot-avatar`).
botIdstring–Legacy `data-bot-id` (bot XMPP address); only for old embeds. Prefer `appId`: the backend picks the active agent from the app.
botNamestring–Display name shown in the widget header (`data-bot-name`). Usually leave it out: the widget shows the active agent's name.
greetingstring–Greeting shown when the panel opens (`data-greeting-message`).
localestring–UI locale (`data-locale`), e.g. `en`, `fr`, `es`.
positionstring–Launcher corner (`data-position`).
primaryColorstring–Brand colour for launcher and bubbles (`data-primary-color`), e.g. `#0052CC`.
widgetUrlstring–Override the widget bundle base URL (the script is `<widgetUrl>/assistant.js`).

No output schema declared.

No examples provided.

fetch ~82

Fetch the full text of a documentation section or tool reference entry by the id returned from `search` (e.g. `tool:ethora-app-create`, `doc:auth-map#app-jwt`, `doc:hosted-guide`). Auth: none required. Errors: unknown id.

NameTypeReqDescription
idstringyesDocument id from a `search` result.

No output schema declared.

No examples provided.

search ~133

Search the Ethora documentation and tool reference: auth model (app JWT vs app token vs B2B token vs API keys), hosted-server getting started, chat-component and backend SDK quickstarts, recipes, and a reference entry for every tool with its inputs. Use it for any "how do I ..." question about Ethora before guessing; then call `fetch` with a result id to read the full text. Auth: none required.

NameTypeReqDescription
querystringyesFree-text query, e.g. 'create an app', 'invite agent to chat', 'api key bearer header'. Empty returns the getting-started guides.

No output schema declared.

No examples provided.

Install

How do I install the io.github.dappros/ethora-mcp-server server?

io.github.dappros/ethora-mcp-server is a hosted endpoint at https://mcp.chat.ethora.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.chat.ethora.com

# add to Claude Code
claude mcp add --transport http dappros-ethora-mcp-server 'https://mcp.chat.ethora.com/mcp'
Common questions

What is the io.github.dappros/ethora-mcp-server server?

io.github.dappros/ethora-mcp-server is listed in the public MCP registry as io.github.dappros/ethora-mcp-server. Ethora chat platform MCP: apps, users, rooms, AI agents, chat widgets. Hosted or stdio. This page covers its hosted endpoint (https://mcp.chat.ethora.com/mcp).

Is the io.github.dappros/ethora-mcp-server server safe to use?

io.github.dappros/ethora-mcp-server scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.dappros/ethora-mcp-server server expose?

io.github.dappros/ethora-mcp-server exposes 24 tools: ethora-status, ethora-help, ethora-app-select, ethora-source-site-crawl-wait, ethora-source-doc-upload, and 19 more. Their descriptions and schemas cost roughly 8,331 tokens of context every time the server is loaded.

Does the io.github.dappros/ethora-mcp-server server require authentication?

No. We connected to io.github.dappros/ethora-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.dappros/ethora-mcp-server server still maintained?

io.github.dappros/ethora-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.