io.github.dappros/ethora-mcp-cli
NPM · @ETHORA/MCP-SERVER · SCANNED AUG 3
MCP server for the Ethora chat & messaging platform: chat ops, AI agents, RAG, automation.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security87
- No malware found by supply-chain analysis.Pass
- Only part of the dependency tree could be resolved (108 of 109), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (108 of 109), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (ISC).Pass
- Actively maintained (last published 80 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability77
- 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 21110 tokens (~263/item across 80 items; 76 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 Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · @ethora/mcp-server
claude mcp add dappros-ethora-mcp-cli -- npx -y @ethora/mcp-server
codex mcp add dappros-ethora-mcp-cli -- npx -y @ethora/mcp-server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dappros-ethora-mcp-cli": {
"type": "local",
"command": [
"npx",
"-y",
"@ethora/mcp-server"
],
"enabled": true
}
}
} openclaw mcp add dappros-ethora-mcp-cli --command npx --arg -y --arg @ethora/mcp-server
mcp_servers:
dappros-ethora-mcp-cli:
command: "npx"
args: ["-y", "@ethora/mcp-server"] {
"mcpServers": {
"dappros-ethora-mcp-cli": {
"command": "npx",
"args": [
"-y",
"@ethora/mcp-server"
]
}
}
} 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.
- 3 Aug 26 +4
- Stability: unverified → 0.27 ▲ functional
- 2 Aug 26 −4
No change was recorded against any check on this day. Supply Chain Security went from 98 to 87.
- 1 Aug 26 +64
- Provenance: unverified → fail ▼ security
- Malware scan: unverified → pass ▲ security
- Install scripts: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- License: unverified → pass ▲ functional
- Schema quality: unverified → 100 ▲ functional
- Dependency health: unverified → partial ▲ functional
- Maintenance: unverified → pass ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Licence: ISC functional
- 31 Jul 26 −4
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 −70
- Provenance: fail → unverified ▼ security
- Install scripts: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Known CVEs: partial → unverified ▼ security
- License: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Maintenance: pass → unverified ▼ functional
- Licence: ISC functional
- 27 Jul 26 +42
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 32
First indexed and scored.
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 3 Aug 2026 · Analysed npm/@ethora/[email protected]
Provenance none
Ecosystem: npm · Outcome: none
Dependencies 108 packages
108 packages in the resolved dependency tree · 108 deprecated · 32 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
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.
ethora-agents-activate-v2 ~238
Bind a saved agent as the active AI bot for the current app — copies the agent's config onto the app's bot (`POST /v2/agents/:agentId/activate`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: the app's live bot now uses this agent's prompt/LLM/RAG/identity. Replaces whatever bot config was there before. Also sets this agent as the session's current agent context. Does not by itself set `status: "on"` if the bot was off — pair with `ethora-bot-enable-v2` if needed. Idempotent: yes — activating the already-active agent is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `agentId` is not an agent of the current app. Verify with `ethora-bot-get-v2` afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | Id of the saved agent to activate as the app's bot. Get it from `ethora-agents-list-v2`. |
No output schema declared.
No examples provided.
ethora-agents-clone-v2 ~277
Duplicate an existing saved agent into a new agent, optionally overriding its name/slug/summary (`POST /v2/agents/:agentId/clone`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: creates a new agent record copying the source agent's config; also sets the new agent as the session's current agent context. The source agent is unchanged. Idempotent: no — calling twice creates two clones. Failure modes: 401/403 on missing/wrong auth; 404 if the source `agentId` doesn't exist; 422 if an overridden `slug` collides. When to use: branch a working agent before experimenting, instead of mutating the original with `ethora-agents-update-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | Id of the source agent to clone. Get it from `ethora-agents-list-v2`. |
| name | string | — | Name for the clone. Omit to inherit the source agent's name. |
| slug | string | — | URL-safe unique slug for the clone. Omit to let the server derive one; must not collide with an existing agent. |
| summary | string | — | Summary for the clone. Omit to inherit the source agent's summary. |
No output schema declared.
No examples provided.
ethora-agents-create-v2 ~514
Create a new reusable saved agent — a named, reusable bot definition (prompt + LLM + RAG settings + identity) that can later be activated onto any app (`POST /v2/agents`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: creates an agent record owned by the current app; also sets it as the session's current agent context. Creating an agent does **not** activate it on the app — call `ethora-agents-activate-v2` for that. Idempotent: no — calling twice creates two agents. Failure modes: 401/403 on missing/wrong auth; 422 on field validation failure (e.g. duplicate `slug`, unsupported `llmProvider`/`llmModel`). Returns: the created agent including its id.
| Name | Type | Req | Description |
|---|---|---|---|
| botAvatarUrl | string | — | Public URL of the agent's avatar image. |
| botDisplayName | string | — | Display name shown in chat when this agent is the active bot. |
| categories | array | — | Catalogue categories for a public agent. |
| greetingMessage | string | — | Message the agent posts when a conversation starts. |
| isPublished | boolean | — | If true and visibility is public, the agent is listed in the public catalogue. |
| isRAG | boolean | — | If true, the agent retrieves from the app's indexed RAG sources when answering. |
| llmModel | string | — | LLM model id, e.g. `gpt-4o-mini`. Must be available for the chosen provider. |
| llmProvider | string | — | LLM provider, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend. |
| name | string | — | Human-readable agent name. |
| prompt | string | — | System prompt defining the agent's persona and behavior. |
| ragTags | array | — | Restrict RAG retrieval to sources carrying these tags. |
| slug | string | — | URL-safe unique identifier for the agent within the app. Lower-case alphanumerics and dashes. |
| summary | string | — | Short description of what the agent does. |
| trigger | string | — | When the agent responds: `any_message` (every message) or `/bot` (only /bot-prefixed messages). |
| visibility | string | — | `private` (only this app) or `public` (discoverable in the shared agent catalogue). |
No output schema declared.
No examples provided.
ethora-agents-get-v2 ~181
Fetch one reusable saved agent's full config by id (`GET /v2/agents/:agentId`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: also sets this agent as the current agent context for the session (so later agent tools can omit `agentId`). No server-side change. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 404 if `agentId` is not an agent of the current app. Returns: the agent object (prompt, LLM, RAG settings, visibility, etc.). Get ids from `ethora-agents-list-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | Id of the saved agent to fetch. Get it from `ethora-agents-list-v2`. |
No output schema declared.
No examples provided.
ethora-agents-list-v2 ~167
List the reusable saved agents owned by the current app (`GET /v2/agents`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 if not in app-token mode or the appToken is invalid; returns an empty list if the app has no saved agents. Returns: an array of agents with their ids, names, and config. A saved agent is a reusable bot definition — use the ids with `ethora-agents-get-v2`, `ethora-agents-update-v2`, `ethora-agents-clone-v2`, or `ethora-agents-activate-v2`.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-agents-update-v2 ~523
Update fields on an existing reusable saved agent (`PUT /v2/agents/:agentId`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: **partial update** — only the fields you pass change; omitted fields keep their values. Also sets this agent as the session's current agent context. If the agent is currently activated on the app, changes take effect on the live bot. Idempotent: yes — re-sending the same values is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `agentId` is not an agent of the current app; 422 on field validation failure. Get `agentId` from `ethora-agents-list-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | Id of the saved agent to update. Get it from `ethora-agents-list-v2`. |
| botAvatarUrl | string | — | Public URL of the agent's avatar image. |
| botDisplayName | string | — | Display name shown in chat when this agent is the active bot. |
| categories | array | — | Catalogue categories for a public agent. |
| greetingMessage | string | — | Message the agent posts when a conversation starts. |
| isPublished | boolean | — | If true and visibility is public, the agent is listed in the public catalogue. |
| isRAG | boolean | — | If true, the agent retrieves from the app's indexed RAG sources when answering. |
| llmModel | string | — | LLM model id, e.g. `gpt-4o-mini`. Must be available for the chosen provider. |
| llmProvider | string | — | LLM provider, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend. |
| name | string | — | Human-readable agent name. |
| prompt | string | — | System prompt defining the agent's persona and behavior. |
| ragTags | array | — | Restrict RAG retrieval to sources carrying these tags. |
| slug | string | — | URL-safe unique identifier within the app. Lower-case alphanumerics and dashes. |
| summary | string | — | Short description of what the agent does. |
| trigger | string | — | When the agent responds: `any_message` (every message) or `/bot` (only /bot-prefixed messages). |
| visibility | string | — | `private` (only this app) or `public` (discoverable in the shared agent catalogue). |
No output schema declared.
No examples provided.
ethora-app-create ~275
Create a new Ethora app (tenant) owned by the currently logged-in user. Auth: user-auth mode and an active user session (call `ethora-user-login` first). Side effects: provisions a new app record on the server, allocates a fresh 24-char hex `appId`, sets the caller as owner. Each app counts against the owner's plan limit. Idempotent: no — calling twice creates two apps. Use `ethora-app-list` first if you want to reuse an existing app. Failure modes: 401 if not logged in; 402/403 if the owner's plan limit is reached; 422 if `displayName` violates server rules. Returns: the new app object including `appId`. Pass it to `ethora-app-update` (set domainName/colors/bot), `ethora-app-select` (switch into app-token flows), or `ethora-app-delete` (remove). When to use: interactive setup by a logged-in user. For server-to-server provisioning prefer `ethora-b2b-app-create` or the one-call orchestrator `ethora-b2b-app-bootstrap-ai`.
| Name | Type | Req | Description |
|---|---|---|---|
| displayName | string | yes | Human-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-create-chat ~337
Create a new chat room (MUC room) inside an Ethora app the caller owns. Auth: user-auth mode and an active user session; the caller must own the app. Side effects: provisions a new MUC room with the given `title`. If `pinned: true` the room is added to the app's default rooms list — every new user of the app will auto-join it from that point on. Existing users are **not** auto-added; for that, see the chat membership v2 endpoints. Idempotent: no — calling twice with the same title creates two distinct rooms with different JIDs. Failure modes: 401 if not logged in; 403 if the caller does not own the app; 404 if `appId` is invalid; 422 if `title` is empty or violates server rules. Returns: the new room object including its JID. Use the JID with `ethora-chats-broadcast-v2` to send messages or `ethora-app-delete-chat` to remove.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 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`. |
| pinned | boolean | yes | 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. |
| title | string | yes | Display 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-app-delete-chat ~279
Permanently delete a chat room from an Ethora app the caller owns. **Destructive and irreversible.** Gated behind `ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true`; the tool refuses to register otherwise. Auth: user-auth mode and an active user session; the caller must own the app. Side effects: removes the MUC room, its message archive, and all member affiliations. Participants will see "room destroyed" on their next reconnect. Idempotent: yes after success — subsequent calls return 404. Failure modes: 401 if not logged in; 403 if not the owner; 404 if `chatJid` is not a room in the app. When to use: explicit room tear-down. To remove only from the default rooms list (without destroying the room) update the default-rooms config rather than deleting.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex ObjectId of the app the chat room belongs to. Optional — defaults to the app most recently passed to `ethora-app-select`. |
| chatJid | string | yes | Room JID (XMPP address) of the chat to delete, e.g. `<roomId>@conference.<host>`. Obtain from `ethora-app-get-default-rooms` or the response of `ethora-app-create-chat`. |
No output schema declared.
No examples provided.
ethora-app-get-default-rooms ~178
List the default chat rooms (MUC rooms) of the currently selected Ethora app — every new user of the app auto-joins these. Auth: user-auth mode and an active user session. Operates against the currently selected app — call `ethora-app-select` first, or use `ethora-app-get-default-rooms-with-app-id` to pass `appId` explicitly. Side effects: none — read-only. Idempotent: yes. Failure modes: 400 if no app is currently selected in this MCP session; 401 if not logged in. Returns: array of rooms with their JIDs and titles. Use the JIDs with `ethora-chats-broadcast-v2`, `ethora-app-create-chat` (add more), or `ethora-app-delete-chat` (remove).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-app-get-default-rooms-with-app-id ~211
List the default chat rooms of a specific Ethora app, passed via `appId` (or defaulted to the currently selected app). Auth: user-auth mode and an active user session. The caller must have read access to the app — either ownership, or membership of at least one of its rooms. Side effects: none — read-only. Idempotent: yes. Failure modes: 400 if neither `appId` is passed nor an app is currently selected; 401 if not logged in; 403 if the caller lacks read access; 404 if `appId` does not exist. Returns: array of rooms with their JIDs and titles. Use `ethora-app-get-default-rooms` for the simpler "current app only" variant.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex ObjectId of the app whose default rooms you want to read. Optional — defaults to the app most recently passed to `ethora-app-select`. |
No output schema declared.
No examples provided.
ethora-app-list ~162
List all Ethora apps (tenants) owned by the currently logged-in user. Auth: user-auth mode and an active user session (call `ethora-user-login` first). Side effects: none — read-only. Idempotent: yes — repeated calls return the same set unless an app is created/deleted in between. Failure modes: 401 if not logged in; returns an empty list if the user owns no apps. Returns: an array where each entry includes `appId` (24-char hex ObjectId), `displayName`, `domainName`, ownership and bot-status metadata. Pass `appId` into `ethora-app-update`, `ethora-app-delete`, or `ethora-app-select` for app-scoped flows.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-app-select ~312
Set the current app context for this session so app-scoped tools can omit their `appId` argument. Auth: none required to set the context; the tools you then call still need their own auth mode. Side effects: session state only — stores `currentAppId` and, if given, `appToken`. If `appToken` is supplied the active auth mode defaults to app-token unless `authMode` overrides it. No API call, no server-side change. Idempotent: yes — calling again just overwrites the selection. Failure modes: effectively none; passing an `appId` that doesn't exist is not validated here — the first app-scoped API call will surface the 404. When to use: once per app you're working with, before broadcast/sources/bot/agents tools. Pairs with `ethora-auth-use-app`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | yes | 24-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. |
| appToken | string | — | Per-app appToken to store alongside the appId. If provided, the active auth mode switches to app-token (unless `authMode` says otherwise). Secret. |
| authMode | string | — | 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-tokens-create-v2 ~298
Mint a new app token for an app. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: creates a new app token server-side. **The secret token value is returned exactly once in this response and cannot be retrieved again** — capture it immediately (e.g. store it, or pass it to `ethora-app-select`). Idempotent: no — each call mints a distinct token. Failure modes: 401/403 if not in B2B mode; 400 if no `appId` is given and none is selected; 404 if `appId` is invalid. Returns: the new token including its one-time secret value and its `tokenId`. Manage it later with `ethora-app-tokens-list-v2`, `ethora-app-tokens-rotate-v2`, `ethora-app-tokens-revoke-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId to mint the token for. Optional — defaults to the app set via `ethora-app-select`. |
| label | string | — | Human-readable label to identify this token later (e.g. `staging`, `ci`). Shown in `ethora-app-tokens-list-v2`. |
| timeoutMs | integer | — | HTTP timeout for this request, in milliseconds. Default 10000. |
No output schema declared.
No examples provided.
ethora-app-tokens-list-v2 ~224
List the app tokens issued for an app — **metadata only**, the secret token values are never returned. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 if not in B2B mode; 400 if no `appId` is given and none is selected; 404 if `appId` is invalid. Returns: token records with `tokenId`, label, created/rotated timestamps, and status. The actual token strings are only ever shown once, at create/rotate time (`ethora-app-tokens-create-v2`, `ethora-app-tokens-rotate-v2`).
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId to list tokens for. Optional — defaults to the app set via `ethora-app-select`. |
| timeoutMs | integer | — | HTTP timeout for this request, in milliseconds. Default 10000. |
No output schema declared.
No examples provided.
ethora-app-tokens-revoke-v2 ~260
Permanently revoke an app token by `tokenId`. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: the token stops working **immediately** — any client, SDK, or MCP session still using it will start getting auth failures. No replacement is issued (use `ethora-app-tokens-rotate-v2` for revoke-and-replace). Idempotent: yes — revoking an already-revoked token succeeds as a no-op. Failure modes: 401/403 if not in B2B mode; 404 if `appId` is unknown; 400 if no `appId` is given and none is selected. Get `tokenId` values from `ethora-app-tokens-list-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the token belongs to. Optional — defaults to the app set via `ethora-app-select`. |
| timeoutMs | integer | — | HTTP timeout for this request, in milliseconds. Default 10000. |
| tokenId | string | yes | Id of the token to revoke. Get it from `ethora-app-tokens-list-v2`. |
No output schema declared.
No examples provided.
ethora-app-tokens-rotate-v2 ~306
Rotate an app token: revoke an existing token and issue a replacement in one step. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: the old `tokenId` is revoked **immediately** — anything still using it stops working at once — and a new token is created. **The new secret value is returned exactly once** — capture it immediately. Idempotent: no — each call revokes and re-issues. Failure modes: 401/403 if not in B2B mode; 404 if `appId` or `tokenId` is unknown; 400 if no `appId` is given and none is selected. Returns: the new token including its one-time secret value and `tokenId`. Use `ethora-app-tokens-revoke-v2` if you only want to revoke without a replacement.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the token belongs to. Optional — defaults to the app set via `ethora-app-select`. |
| label | string | — | Label for the replacement token. Omit to inherit the old token's label. |
| timeoutMs | integer | — | HTTP timeout for this request, in milliseconds. Default 10000. |
| tokenId | string | yes | Id of the token to revoke and replace. Get it from `ethora-app-tokens-list-v2`. |
No output schema declared.
No examples provided.
ethora-app-update ~466
Update mutable fields on an existing Ethora app the caller owns (displayName, domainName, appDescription, primaryColor, botStatus). Auth: user-auth mode and an active user session; the caller must own the app. Side effects: **partial update** — only the fields you pass are changed; omitted fields keep their previous values. `domainName` changes affect the public URL (`<domain>.ethora.com`) immediately. `botStatus: "on"` enables the bot only if the app has a configured prompt (use `ethora-bot-update-v2` / `ethora-bot-enable-v2` for the AI bot lifecycle). Idempotent: yes — repeating an update with the same values is a no-op. Failure modes: 401 if not logged in; 403 if not the owner; 404 if `appId` is invalid; 422 on field validation failure (e.g. `domainName` already taken, `primaryColor` not in `#RRGGBB` format). When to use: change branding, route the web app under a custom subdomain, or quickly toggle the bot on/off without re-running setup.
| Name | Type | Req | Description |
|---|---|---|---|
| appDescription | string | — | Long-form description shown on the public app landing page. |
| appId | string | — | 24-char hex ObjectId of the app to update. Optional — defaults to the app most recently passed to `ethora-app-select`. |
| botStatus | string | — | `on` enables the AI bot for new conversations (requires a configured prompt — see `ethora-bot-update-v2`); `off` disables it. Does not change the bot's configured prompt or sources. |
| displayName | string | — | New human-readable app name. Visible in the app picker and on the public landing page. |
| domainName | string | — | 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. |
| primaryColor | string | — | Primary brand color in hex `#RRGGBB` format (e.g. `#F54927`). Used throughout the app UI. |
No output schema declared.
No examples provided.
ethora-auth-use-app ~174
Switch this session's active auth mode to app-token, so subsequent app-scoped calls authenticate with the configured `appToken`. Auth: requires an `appToken` to already be configured (via `ethora-configure`, the ETHORA_APP_TOKEN env var, or `ethora-app-select` with an `appToken`). Side effects: changes session state only (the active auth mode); no API call, no server-side change. Idempotent: yes. Failure modes: returns an error if no `appToken` is configured — set one first. When to use: after `ethora-app-select` when you want app-scoped convenience routes (`/v2/...` resolved against the selected app). For explicit tenant-actor routes use `ethora-auth-use-b2b` instead.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-auth-use-b2b ~209
Switch this session's active auth mode to B2B, so subsequent calls authenticate as a tenant actor via the `x-custom-token` header. Auth: requires a `b2bToken` to already be configured (via `ethora-configure` or the ETHORA_B2B_TOKEN env var) — a JWT with `type=server`. Side effects: changes session state only; no API call, no server-side change. Idempotent: yes. Failure modes: returns an error if no `b2bToken` is configured — set one first. When to use: server-side automation and partner provisioning. B2B tools take an explicit `appId` (or use the one from `ethora-app-select`). Pairs with `ethora-b2b-app-create`, `ethora-b2b-app-bootstrap-ai`, `ethora-users-batch-create-v2`, and the `ethora-app-tokens-*-v2` tools.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-auth-use-user ~156
Switch this session's active auth mode to user-session, so subsequent calls authenticate as a logged-in Ethora user. Auth: switching the mode itself needs nothing, but user-auth tools only work once `ethora-user-login` has stored a user token. Login also requires a configured `appJwt`. Side effects: changes session state only; no API call, no server-side change. Idempotent: yes. Failure modes: none on the switch itself; downstream user-auth tools return 401 until `ethora-user-login` succeeds. When to use: first-time local/manual use — switch to this mode, then call `ethora-user-login`. For repeatable automation prefer `ethora-auth-use-b2b`.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-b2b-app-bootstrap-ai ~588
One-call B2B orchestrator: create an app, set it as the current context, index RAG sources, then configure and enable its AI bot. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Internally switches into app-token mode for the source-ingest steps and (if `setAsCurrent`) leaves the session pointed at the new app. Side effects: runs multiple real operations in sequence — `appCreate` (B2B), set current app, `/v2/sources/*` ingest (app-token), bot configure/enable. Source ingestion and bot activation are **best-effort**: the app is still created even if a later step fails. The crawl/embedding work continues asynchronously after this returns. Idempotent: no — each call creates a brand-new app. Failure modes: aborts and returns the partial step log if app creation fails; on a later-step failure the previous auth mode is restored best-effort. Bot activation needs an AI service configured on your Ethora backend. Returns: a per-step result log including the new `appId`. For the rooms+tokens variant use `ethora-b2b-app-provision`; for full manual control wire `ethora-b2b-app-create` + `ethora-sources-*-v2` + `ethora-bot-update-v2` yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| botTrigger | string | — | Bot trigger: `/bot` (only /bot-prefixed messages) or `any_message` (every message). |
| crawlUrl | string | — | Optional website URL to crawl and index into the new app's RAG sources. |
| displayName | string | yes | Display name for the new app. |
| docs | array | — | Optional documents to ingest into the new app's RAG sources. |
| enableBot | boolean | — | If true, set the new app's bot to `status: on` (best-effort AI service activation). |
| followLink | boolean | — | For `crawlUrl`: also follow in-domain links (default true). Can ingest many pages. |
| llmModel | string | — | LLM model id for the bot, e.g. `gpt-4o-mini`. Must be available for the chosen provider. |
| llmProvider | string | — | LLM provider for the bot, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend. |
| savedAgentId | string | — | Optional id of an existing saved agent to bind as the new app's active bot, instead of configuring prompt/LLM by hand. |
| setAsCurrent | boolean | — | If true (default), set the new app as the session's current app and switch to app-token auth so follow-up tools can omit appId. |
No output schema declared.
No examples provided.
ethora-b2b-app-create ~262
Create a new Ethora app (tenant) server-side using B2B auth — the partner/integrator equivalent of `ethora-app-create`. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: provisions a new app record owned by the B2B tenant and allocates a fresh 24-char hex `appId`. Does not create tokens, rooms, or a bot. Idempotent: no — calling twice creates two apps. Failure modes: 401/403 if not in B2B mode or the `b2bToken` is invalid; 422 if `displayName` violates server rules. Returns: the new app object including `appId`. Next steps: `ethora-app-tokens-create-v2` (mint an appToken), `ethora-app-select` (set context), `ethora-bot-update-v2` (configure the bot). For the all-in-one path use `ethora-b2b-app-bootstrap-ai` or `ethora-b2b-app-provision`.
| Name | Type | Req | Description |
|---|---|---|---|
| displayName | string | yes | Human-readable app name shown to users in the app picker and on the public landing page. |
No output schema declared.
No examples provided.
ethora-b2b-app-provision ~503
One-call B2B orchestrator: create an app, mint one or more app tokens, provision default chat rooms, then configure and enable its AI bot. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Internally uses the first minted app token for the bot/room steps. Side effects: runs several real operations in sequence — `appCreate` (B2B), `app-tokens-create` (×N), room creation (×N), bot configure/enable. Returns a per-step log; later-step failures don't undo earlier steps (the app and any tokens already exist). Idempotent: no — each call creates a new app, new tokens, and new rooms. Failure modes: aborts with the partial step log if app creation fails; the previous auth mode is restored best-effort on error. Returns: a per-step result log including `appId` and the created tokens (tokens are returned **once** — capture them). Sibling orchestrator `ethora-b2b-app-bootstrap-ai` does sources+bot but not tokens/rooms.
| Name | Type | Req | Description |
|---|---|---|---|
| botGreetingMessage | string | — | Greeting message the bot posts when a conversation starts. |
| botPrompt | string | — | System prompt for the new app's bot. |
| botTrigger | string | — | Bot trigger: `any_message` (every message) or `/bot` (only /bot-prefixed messages). |
| displayName | string | yes | Display name for the new app. |
| enableBot | boolean | — | If true, enable the new app's bot using the first minted app token. |
| llmModel | string | — | LLM model id for the bot, e.g. `gpt-4o-mini`. Must be available for the chosen provider. |
| llmProvider | string | — | LLM provider for the bot, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend. |
| rooms | array | — | Default chat rooms to create in the new app. Up to 20. |
| savedAgentId | string | — | Optional id of an existing saved agent to bind as the new app's active bot, instead of setting prompt fields by hand. |
| tokenLabels | array | — | Labels for the app tokens to mint, one token per label. Default: ['default']. 1–5 tokens. |
No output schema declared.
No examples provided.
ethora-b2b-bot-enable ~319
Turn on the AI bot for an app via B2B auth (sets `botStatus: "on"` on the app record). Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: flips the app's bot status to on; the backend then makes a **best-effort** activation against the configured AI service. The bot only actually responds if the app already has a prompt + LLM configured (see `ethora-bot-update-v2`) and the Ethora backend has AI service URL/secret set. Idempotent: yes — enabling an already-enabled bot is a no-op. Failure modes: 401/403 if not in B2B mode; 404 if `appId` is invalid; 400 if no `appId` is given and none is selected. Note: this is a thin convenience over `ethora-app-update`. For full bot configuration (prompt, LLM, RAG, greeting) use `ethora-bot-update-v2`; `ethora-bot-enable-v2` is the app-token-friendly equivalent.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId whose bot to enable. Optional — defaults to the app set via `ethora-app-select`. |
| botTrigger | string | — | When the bot responds: `/bot` (only messages starting with /bot) or `any_message` (every message). Omit to leave the existing trigger unchanged. |
No output schema declared.
No examples provided.
ethora-bot-disable-v2 ~210
Turn the AI bot off for an app (sets bot `status: "off"`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: deactivates the bot — it stops responding to messages. The bot's configured prompt/LLM/RAG and any activated agent are preserved, so re-enabling later restores the same behavior. Idempotent: yes — disabling an already-off bot is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid. Thin convenience over `ethora-bot-update-v2`. Pair with `ethora-bot-enable-v2` to turn it back on.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
No output schema declared.
No examples provided.
ethora-bot-enable-v2 ~279
Turn the AI bot on for an app (sets bot `status: "on"`), optionally setting its trigger at the same time. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: activates the bot. It only actually responds if a prompt + LLM are configured (see `ethora-bot-update-v2` or `ethora-agents-activate-v2`) and the Ethora backend has an AI service configured. Idempotent: yes — enabling an already-on bot is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid. Thin convenience over `ethora-bot-update-v2` for the common "just turn it on" case. Pair with `ethora-bot-disable-v2` to turn it off.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
| trigger | string | — | When the bot responds: `any_message` (every message) or `/bot` (only /bot-prefixed messages). Omit to leave the existing trigger unchanged. |
No output schema declared.
No examples provided.
ethora-bot-get-v2 ~196
Read the current AI bot configuration for an app: status, trigger, prompt, greeting, LLM provider/model, RAG settings, widget config. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid. Returns: the bot settings object. Use it to inspect before changing things with `ethora-bot-update-v2`, or to confirm an `ethora-agents-activate-v2` took effect.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode (the token determines the app). |
No output schema declared.
No examples provided.
ethora-bot-history-v2 ~241
Compatibility alias for `ethora-chats-history-v2` — identical behavior, kept for clients that expect a `bot-`prefixed name. Read the persisted message history of a chat automation session. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 400 if the `mode`/`nickname`/`roomJid` combination is incomplete. Prefer `ethora-chats-history-v2` in new integrations.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Maximum number of most-recent messages to return. 1–100. |
| mode | string | — | `private` = 1:1 automation session keyed by `nickname`; `group` = a room identified by `roomJid`. |
| nickname | string | — | Participant nickname for the private automation session. Required when `mode` is `private`. |
| roomJid | string | — | Room JID to read history from. Required when `mode` is `group`. |
No output schema declared.
No examples provided.
ethora-bot-message-v2 ~250
Compatibility alias for `ethora-chats-message-v2` — identical behavior, kept for clients that expect a `bot-`prefixed name. Send a message through the app's chat/bot automation surface. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: posts a real message into the app; the enabled bot will react to it. Not idempotent — each call posts another message. Failure modes: 401/403 on missing/wrong auth; 400 if the `mode`/`nickname`/`roomJid` combination is incomplete. Prefer `ethora-chats-message-v2` in new integrations.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | — | `private` = 1:1 automation session keyed by `nickname`; `group` = a room identified by `roomJid`. |
| nickname | string | — | Sender/participant nickname for the private automation session. Required when `mode` is `private`. |
| roomJid | string | — | Room JID to post into. Required when `mode` is `group`. |
| text | string | yes | Message body to send. |
No output schema declared.
No examples provided.
ethora-bot-update-v2 ~730
Configure the AI bot for an app — its prompt, LLM, trigger, greeting, RAG behavior, identity, and public widget settings. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: **partial update** — only the fields you pass are changed; omitted fields keep their values. Setting `status: "on"` activates the bot (best-effort against the configured AI service — needs a prompt + LLM and a backend AI service configured). Idempotent: yes — re-sending the same values is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid; 422 on field validation failure (e.g. an `llmProvider`/`llmModel` your backend doesn't have enabled). Related: `ethora-bot-get-v2` (inspect first), `ethora-bot-enable-v2` / `ethora-bot-disable-v2` (just toggle status), `ethora-agents-activate-v2` (apply a saved agent's config instead of setting fields by hand).
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
| botAvatarUrl | string | — | Public URL of the bot's avatar image. |
| botDisplayName | string | — | Bot's display name shown in chat. |
| botFirstName | string | — | Bot's first name in its user profile. |
| botLastName | string | — | Bot's last name in its user profile. |
| chatId | string | — | Restrict the bot to a single chat by id. Omit to apply app-wide. |
| greetingMessage | string | — | Message the bot posts when a conversation starts. |
| isRAG | boolean | — | If true, the bot retrieves from the app's indexed RAG sources (see the `ethora-sources-*` tools) when answering. |
| llmModel | string | — | LLM model id, e.g. `gpt-4o-mini`. Must be available for the chosen `llmProvider`. |
| llmProvider | string | — | LLM provider, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend's AI service config. |
| prompt | string | — | System prompt that defines the bot's persona and behavior. |
| ragTags | array | — | Restrict RAG retrieval to sources tagged with these tags (see `ethora-sources-site-tags-update-v2` / `ethora-sources-docs-tags-update-v2`). |
| savedAgentId | string | — | Id of a saved agent whose config should back this bot. Alternative to setting prompt/LLM/RAG fields individually. |
| status | string | — | `on` activates the bot, `off` deactivates it. Omit to leave the current status unchanged. |
| trigger | string | — | When the bot responds: `any_message` (replies to every message) or `/bot` (only messages starting with /bot). |
| widgetPublicEnabled | boolean | — | If true, expose the bot through a public embeddable chat widget. |
| widgetPublicUrl | string | — | Public URL for the embeddable widget. Usually read via `ethora-bot-widget-v2` rather than set here. |
No output schema declared.
No examples provided.
ethora-bot-widget-v2 ~140
Read the public chat-widget / embed configuration for the current app's bot (`GET /v2/bot/widget`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 if not in app-token mode or the appToken is invalid. Returns: the widget config and the public widget URL metadata — what you need to embed the bot on a website. To enable/disable the public widget, set `widgetPublicEnabled` via `ethora-bot-update-v2`.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ethora-chats-broadcast-job-v2 ~224
Fetch the current status and results of a broadcast job by `jobId` (one-shot, no polling). Auth: app-token mode OR B2B mode with an explicit `appId` — must match the auth used to enqueue the job. Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 404 if the `jobId` is unknown for this app. Returns: the job object including its `state` (`pending` / `running` / `completed` / `failed`) and per-room results. For a blocking wait-until-done, use `ethora-wait-broadcast-job-v2` instead of polling this yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the job belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
| jobId | string | yes | Job id returned by `ethora-chats-broadcast-v2`. |
No output schema declared.
No examples provided.
ethora-chats-broadcast-v2 ~384
Enqueue an asynchronous broadcast job that posts a message to one or more chat rooms of an app. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: creates a background job on the server and returns immediately with a `jobId` — the messages are **not** sent synchronously. Targeting is exclusive: pass `allRooms: true`, or a `chatIds` list, or a `chatNames` list — not a mix. Idempotent: no — each call enqueues a new job; calling twice broadcasts twice. Failure modes: 401/403 on missing/wrong auth; 400 if no target is specified or targets conflict; 404 if `appId` or a target room doesn't exist. Returns: `{ jobId, ... }`. Track it with `ethora-chats-broadcast-job-v2` (one-shot status) or `ethora-wait-broadcast-job-v2` (poll to completion).
| Name | Type | Req | Description |
|---|---|---|---|
| allRooms | boolean | — | If true, broadcast to every room in the app. Mutually exclusive with `chatIds` and `chatNames`. |
| appId | string | — | 24-char hex appId to broadcast in. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode (the token determines the app). |
| chatIds | array | — | Explicit list of chat ids to target. Mutually exclusive with `allRooms` and `chatNames`. |
| chatNames | array | — | Explicit list of chat JIDs or localparts to target. Mutually exclusive with `allRooms` and `chatIds`. |
| text | string | yes | Plain-text message body to broadcast to the targeted rooms. |
No output schema declared.
No examples provided.
ethora-chats-history-v2 ~273
Read the persisted message history of a chat automation session — the conversation produced by `ethora-chats-message-v2` and the bot's replies. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 400 if the `mode`/`nickname`/`roomJid` combination is incomplete; 404 if the room/session doesn't exist. Returns: the most recent messages (up to `limit`) for the identified session. `ethora-bot-history-v2` is an identical alias.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Maximum number of most-recent messages to return. 1–100. Defaults to the backend's default page size. |
| mode | string | — | `private` = 1:1 automation session keyed by `nickname`; `group` = a room identified by `roomJid`. Should match what was used to send. |
| nickname | string | — | Participant nickname for the private automation session. Required when `mode` is `private`. |
| roomJid | string | — | Room JID to read history from. Required when `mode` is `group`. |
No output schema declared.
No examples provided.
ethora-chats-message-v2 ~340
Send a message through the app's chat/bot automation surface — useful for testing the bot or driving automated conversations. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`). Your Ethora backend must expose the chat automation surface on the same API host. Side effects: posts a real message into the app — in `private` mode to a 1:1 automation session keyed by `nickname`, in `group` mode into the room identified by `roomJid`. If the app's bot is enabled it will react to the message. Idempotent: no — each call posts another message. Failure modes: 401/403 on missing/wrong auth; 400 if `mode` is `group` but no `roomJid` is given (or `private` but no `nickname`); 404 if `roomJid` doesn't exist. Read back the resulting conversation with `ethora-chats-history-v2`. `ethora-bot-message-v2` is an identical alias.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | — | `private` = 1:1 automation session keyed by `nickname`; `group` = a room identified by `roomJid`. Defaults to the backend's default mode. |
| nickname | string | — | Sender/participant nickname for the private automation session. Required when `mode` is `private`. |
| roomJid | string | — | Room JID to post into. Required when `mode` is `group`. Get it from `ethora-app-get-default-rooms`. |
| text | string | yes | Message body to send. |
No output schema declared.
No examples provided.
ethora-configure ~368
Set the Ethora API URL and credentials for this MCP session. Auth: none required — this is the tool that establishes auth material. Side effects: stores values **in memory only**, scoped to this MCP process; nothing is written to disk and the values reset when the server restarts. Each call merges — fields you omit keep their previous value. An alternative to setting the same values via env vars (ETHORA_API_URL / ETHORA_APP_JWT / ETHORA_APP_TOKEN / ETHORA_B2B_TOKEN). Idempotent: yes. Failure modes: rarely fails; returns an error only if a value is structurally invalid. Returns: the resulting (redacted) client state. Follow with `ethora-status` to confirm, `ethora-doctor` to test connectivity, then an `ethora-auth-use-*` tool to pick the active mode.
| Name | Type | Req | Description |
|---|---|---|---|
| apiUrl | string | — | Full Ethora API URL including the version path, e.g. `https://api.chat.ethora.com/v1` or `http://localhost:8080/v1`. If you only have the host, set ETHORA_BASE_URL env instead and the server appends… |
| appJwt | string | — | Ethora App JWT, used only to bootstrap login/register in user-auth mode. Usually starts with `JWT `. Secret — never commit it. |
| appToken | string | — | Per-app appToken for app-scoped flows (broadcast, sources, bot). Setting this makes app-token auth available via `ethora-auth-use-app`. Secret. |
| b2bToken | string | — | B2B server token for tenant-actor `x-custom-token` auth (a JWT with `type=server`). Required for B2B provisioning flows. Secret. |
No output schema declared.
No examples provided.
ethora-doctor ~194
Diagnose the session: validate that the config is internally consistent for the active auth mode and actively ping the Ethora API. Auth: none required, but the report is tailored to whatever auth mode/credentials are currently set. Side effects: makes one real network call — `GET /v1/ping` against the configured API URL. No state is changed. Idempotent: yes. Failure modes: the tool itself rarely throws; instead it returns `suggestions` for misconfigurations and a `ping.ok: false` block (with the error) when the API is unreachable. Returns: `{ state, checks, ping, suggestions }`. Run this after `ethora-configure` to confirm everything is wired up before attempting real operations.
| Name | Type | Req | Description |
|---|---|---|---|
| timeoutMs | integer | — | HTTP timeout in milliseconds for the ping request. Defaults to 3000. Raise it on slow links, lower it to fail fast. |
No output schema declared.
No examples provided.
ethora-files-delete-v2 ~142
Permanently delete one of the authenticated user's files by id (`DELETE /v2/files/:id`). Auth: user-auth mode with an active user session. Side effects: removes the file record and its stored content. Not reversible. Idempotent: yes after success — a second call returns 404. Failure modes: 401 if not logged in; 403 if the file is not owned by the user; 404 if the `id` does not exist. Get ids from `ethora-files-get-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Id of the file to delete. Get it from `ethora-files-get-v2`. |
No output schema declared.
No examples provided.
ethora-files-get-v2 ~153
List the authenticated user's files, or fetch one file's metadata by id (`GET /v2/files`). Auth: user-auth mode with an active user session. Side effects: none — read-only. Idempotent: yes. Failure modes: 401 if not logged in; 404 if a specific `id` is given but not found / not owned by the user. Returns: an array of file records when `id` is omitted, or a single record when `id` is given. Use the ids with `ethora-files-delete-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | — | File id to fetch a single record. Omit to list all files owned by the logged-in user. |
No output schema declared.
No examples provided.
ethora-files-upload-v2 ~223
Upload one or more files to the authenticated user's Ethora file storage (`POST /v2/files`). Auth: user-auth mode with an active user session (`ethora-user-login` first). Side effects: creates file records server-side owned by the logged-in user; each upload is a new record (no overwrite-by-name). Idempotent: no — re-uploading creates duplicate records. Input design: files are passed as base64 so the MCP server never touches your local filesystem. Client-side guardrail rejects any single file over 50MB before upload; the Ethora server enforces its own limits too. Failure modes: 401 if not logged in; 413 if the server's size limit is exceeded; 422 on an unsupported mime type. Per-call limit: 1–5 files. Returns: the created file records (with ids). Manage them with `ethora-files-get-v2` and `ethora-files-delete-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | 1 to 5 files to upload in this call. |
No output schema declared.
No examples provided.
ethora-generate-b2b-bootstrap-runbook ~244
Generate a human-readable runbook listing this server's tool calls in the right order for a B2B bootstrap, with example payloads. Auth: none required — pure text generator, makes no API calls and runs nothing. Side effects: none — returns the runbook as text; **does not write any file or execute any step**. Idempotent: yes. Failure modes: effectively none. Returns: the runbook text with your supplied values substituted into the example payloads. This is documentation only — to actually run the sequence use `ethora-run-recipe`, or the one-call orchestrators `ethora-b2b-app-bootstrap-ai` / `ethora-b2b-app-provision`.
| Name | Type | Req | Description |
|---|---|---|---|
| apiUrl | string | — | Ethora API base URL to show in the runbook's configure step. Omit to emit a placeholder. |
| crawlUrl | string | — | Website URL to show in the runbook's source-ingest step. Omit to emit a placeholder. |
| displayName | string | — | App display name to show in the runbook's create-app step. Omit to emit a placeholder. |
No output schema declared.
No examples provided.
ethora-generate-chat-component-app-tsx ~254
Generate a ready-to-paste React `App.tsx` snippet that mounts `@ethora/chat-component`. Auth: none required — this is a pure code generator, makes no API calls. Side effects: none — returns the snippet as text; **does not write any file**. Idempotent: yes — same inputs produce the same snippet. Failure modes: effectively none. Returns: `{ filename: "App.tsx", snippet }`. Any values you don't pass are emitted as clearly-marked placeholders. Security note: the snippet includes `appToken` inline only as a quickstart convenience — do not ship hardcoded tokens to production; have your backend issue short-lived credentials instead.
| Name | Type | Req | Description |
|---|---|---|---|
| apiUrl | string | — | Ethora API base URL to embed in the snippet, e.g. `https://api.chat.ethora.com/v1`. Omit to emit a placeholder. |
| appToken | string | — | appToken to embed in the snippet for quickstart testing. Omit to emit a placeholder. Do NOT hardcode real tokens in production source. |
| roomJid | string | — | Room JID to open on load. Omit to emit a commented-out placeholder. |
No output schema declared.
No examples provided.
ethora-generate-env-examples ~179
Generate `.env.example` templates for the three common Ethora integration targets: the frontend chat component, the backend SDK, and this MCP server. Auth: none required — pure text generator, makes no API calls. Side effects: none — returns templates as text; **does not write any file**. Idempotent: yes. Failure modes: effectively none. Returns: a single `{ target, template }` when `target` is given, or `{ templates }` with all three when omitted. Templates contain placeholder values and inline security notes only — never real credentials.
| Name | Type | Req | Description |
|---|---|---|---|
| target | string | — | Which template to return: `frontend-chat-component` (Vite env), `backend-sdk` (@ethora/sdk-backend env), or `mcp` (this server's env). Omit to return all three. |
No output schema declared.
No examples provided.
ethora-help ~166
Task-oriented orientation for this MCP server: explains the three Ethora auth modes (user / app-token / B2B) and recommends the next tool calls + one-click recipes based on the current session state. Auth: none required — inspects state, makes no API calls. Side effects: none — read-only. Idempotent: yes; recommendations change only as the session state changes. Failure modes: effectively none. When to use: call this first if you're unsure which auth mode or tool sequence fits your goal. To then run a recommended sequence, pass its recipe id to `ethora-run-recipe`.
| Name | Type | Req | Description |
|---|---|---|---|
| goal | string | — | Goal hint to tailor the recommendations and recipe list. Omit or use `auto` to get recommendations inferred from the current session state. |
No output schema declared.
No examples provided.
ethora-run-recipe ~394
Execute a built-in recipe — an ordered sequence of this server's own tool calls — by id. Recipes capture common flows (B2B bootstrap, broadcast, sources ingest, etc.). Auth: depends on the recipe's steps; each step uses whatever auth mode/credentials it needs, so configure those first (see `ethora-help` for the right recipe + prerequisites). Side effects: runs entirely in-process — **no shell, no file writes**. Real side effects come only from the underlying tool steps (which may create apps, send messages, etc.). Use `dryRun: true` to preview the resolved steps without executing any of them. Idempotent: only as idempotent as the steps it runs — a recipe that calls `ethora-app-create` is not idempotent. Failure modes: stops at the first failing step and returns what completed plus the error; a missing required `vars` entry fails fast before any step runs. Returns: per-step results. Omit `recipeId` to list the runnable recipes for the given `goal` (or `goal: "auto"`).
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | — | If true, resolve and return the step list with `vars` substituted but execute nothing. Use this to preview a recipe before running it for real. |
| goal | string | — | Goal scope used to look up recipes when `recipeId` is omitted. Defaults to `auto`. |
| recipeId | string | — | Id of the recipe to run. Omit to instead list the runnable recipes for the selected `goal` (get ids from `ethora-help`). |
| vars | object | — | Key/value substitutions injected into recipe steps (e.g. appId, appToken, b2bToken, appJwt, email, password, apiUrl). A recipe declares which vars it requires; missing required vars fail the run befo… |
No output schema declared.
No examples provided.
ethora-sources-docs-delete ~238
Remove a previously ingested document from an app's RAG sources by `docId` (legacy user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: deletes the document record and its embeddings; the app's bot can no longer answer from it. Not reversible (re-add via `ethora-sources-docs-upload`). Idempotent: yes after success — a second call returns 404. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 404 if `docId` is unknown. Get `docId` values from `ethora-sources-docs-list-v2`. For app-token / B2B flows use `ethora-sources-docs-delete-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the document belongs to. Optional — defaults to the app set via `ethora-app-select`. |
| docId | string | yes | Id of the ingested document to delete. Get it from `ethora-sources-docs-list-v2`. |
No output schema declared.
No examples provided.
ethora-sources-docs-delete-v2 ~254
Remove a previously ingested document from an app's RAG sources by `docId` (app-token / B2B variant of `ethora-sources-docs-delete`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: deletes the document record and its embeddings; the bot can no longer answer from it. Not reversible (re-add via `ethora-sources-docs-upload-v2`). Idempotent: yes after success — a second call returns 404. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` or `docId` is unknown. Get `docId` values from `ethora-sources-docs-list-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the document belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
| docId | string | yes | Id of the ingested document to delete. Get it from `ethora-sources-docs-list-v2`. |
No output schema declared.
No examples provided.
ethora-sources-docs-list-v2 ~205
List an app's ingested documents, including each document's id, name, and current RAG tags. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid; returns an empty list if nothing has been uploaded. Returns: document records. Their ids feed `ethora-sources-docs-tags-update-v2` and `ethora-sources-docs-delete-v2`. The website-sources equivalent is `ethora-sources-site-list-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId to list documents for. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
No output schema declared.
No examples provided.
ethora-sources-docs-tags-update-v2 ~302
Set the RAG retrieval tags on an ingested document. Tags let the bot's `ragTags` setting narrow which sources it retrieves from. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: **replaces** the document's tag set with the provided `tags` array (it is not additive — pass the full desired set, or an empty array to clear all tags). Idempotent: yes — re-sending the same tags is a no-op. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` or `docId` is unknown. Get `docId` values from `ethora-sources-docs-list-v2`. The website-source equivalent is `ethora-sources-site-tags-update-v2`.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | — | 24-char hex appId the document belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode. |
| docId | string | yes | Id of the ingested document to tag. Get it from `ethora-sources-docs-list-v2`. |
| tags | array | yes | The complete desired tag set for this document (replaces any existing tags). Up to 50 tags; pass `[]` to clear all. |
No output schema declared.
No examples provided.