# @ethora/mcp-server

MCP server for the Ethora chat & messaging platform: login, manage apps and chat rooms, broadcast messages, and deploy AI agents / chatbots with RAG sources.

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 26.5.3
- **License:** ISC
- **npm:** @ethora/mcp-server
- **Source:** https://github.com/dappros/ethora-mcp-server
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 3 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-08-30T12:50:32.292Z
- **Version scanned:** 26.5.3
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `ethora-configure` — Set the Ethora API URL and credentials for this MCP session. Stores values in memory only; each call merges with omitted fields kept. Alternative to env vars (E
- `ethora-status` — Report the current Ethora MCP session state: configured API URL, active auth mode, which credentials are present (booleans like `hasAppJwt` — values never echoe
- `ethora-help` — 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 c
- `ethora-run-recipe` — 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)
- `ethora-doctor` — Diagnose the session: validate the config is internally consistent for the active auth mode and ping the Ethora API (`GET /v1/ping`). Returns `{ state, checks, 
- `ethora-auth-use-app` — 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
- `ethora-auth-use-user` — Switch this session's active auth mode to user-session, so subsequent calls authenticate as a logged-in Ethora user. Auth: the switch needs nothing, but user-au
- `ethora-auth-use-b2b` — 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` (
- `ethora-app-select` — Set the current app context for this session so app-scoped tools can omit their `appId` argument. Stores `currentAppId` and, if given, `appToken` (which default
- `ethora-agent-select` — Set the current saved-agent context for this session, so agent-scoped tools can omit their `agentId` argument. Stores `currentAgentId` in session state. Auth: n
- `ethora-chats-broadcast-v2` — Enqueue an asynchronous broadcast job posting a message to one or more chat rooms of an app — returns a `jobId`; messages are not sent synchronously. Targeting 
- `ethora-chats-broadcast-job-v2` — Fetch the current status and per-room results of a broadcast job by `jobId` (one-shot, no polling). Returns the job object with its `state` (pending/running/com
- `ethora-wait-broadcast-job-v2` — Block until a broadcast job reaches a terminal state (`completed` or `failed`) or until `timeoutMs` — read-only polling wrapper around `ethora-chats-broadcast-j
- `ethora-files-upload-v2` — Upload 1–5 files to the authenticated user's Ethora file storage (`POST /v2/files`). Each upload is a new record (no overwrite-by-name); files passed as base64,
- `ethora-files-get-v2` — List the authenticated user's files, or fetch one file's metadata by id (`GET /v2/files`). Returns an array when `id` is omitted, a single record when given. Au
- `ethora-files-delete-v2` — Permanently delete one of the authenticated user's files by id (`DELETE /v2/files/:id`). Removes the record and its stored content; not reversible. Auth: user-a
- `ethora-sources-site-crawl` — Crawl a website URL and ingest its content into an app's RAG sources (legacy user-auth route). Async — pages become queryable once indexing finishes; `followLin
- `ethora-sources-site-reindex` — Re-crawl and re-embed a previously crawled URL by its `urlId`, refreshing the RAG content for that page (legacy user-auth route). Async — the existing source re
- `ethora-sources-site-delete-url` — Remove a single crawled URL from an app's RAG sources, matched by its exact url string (legacy user-auth route). Deletes the source record and its embeddings; n
- `ethora-sources-site-delete-records-v1` — Bulk-remove crawled URLs (1–100) from an app's RAG sources in one call, matched by exact url strings (legacy owner/admin user-auth route). Deletes each matching
- `ethora-sources-docs-upload`
- `ethora-sources-docs-delete`
- `ethora-user-login`
- `ethora-user-register`
- `ethora-app-list`
- `ethora-app-create`
- `ethora-app-delete`
- `ethora-app-update`
- `ethora-app-get-default-rooms`
- `ethora-app-get-default-rooms-with-app-id`
- `ethora-app-create-chat`
- `ethora-app-delete-chat`
- `ethora-wallet-get-balance`
- `ethora-wallet-erc20-transfer`
- `ethora-b2b-app-create`
- `ethora-b2b-bot-enable`
- `ethora-bot-get-v2`
- `ethora-bot-update-v2`
- `ethora-agents-list-v2`
- `ethora-agents-get-v2`

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ethora/mcp-server\"\n      ],\n      \"env\": {\n        \"ETHORA_APP_JWT\": \"<YOUR_ETHORA_APP_JWT>\",\n        \"ETHORA_B2B_TOKEN\": \"<YOUR_ETHORA_B2B_TOKEN>\"\n      }\n    }\n  }\n}"
```
**Credentials it will ask for** (names only — Forge never holds a value):
- `ETHORA_APP_JWT` — Ethora App JWT (optional)
- `ETHORA_B2B_TOKEN` — Ethora B2b Token (optional)
Placeholders only. Forge never holds, brokers, or transmits a credential value — replace each <YOUR_NAME> in your own config file. Do not send a value back to Forge; no Forge endpoint accepts one.
- This entry needs 2 credentials (0 required). The generated config carries placeholders, so it will fail in the editor rather than at runtime if they are left unset.

## Blast radius

Critical blast radius — deletes data; holds an api key.
- Floor 60, ceiling 60 (tier: critical)
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40ethora%2Fmcp-server
- Install plan: https://forgeregistry.com/api/v1/packages/%40ethora%2Fmcp-server/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40ethora%2Fmcp-server
- HTML page: https://forgeregistry.com/registry/%40ethora%2Fmcp-server
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
