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-cli

NPM · @ETHORA/MCP-SERVER · SCANNED SEP 20

MCP server for the Ethora chat & messaging platform: chat ops, AI agents, RAG, automation.

Available components

+1 this week 77 Trust /100

Deprecated

This server is marked deprecated in the MCP registry. The registry records this reason: Renamed to io.github.dappros/ethora-mcp-server (npm @ethora/mcp-server); hosted server at https://mcp.chat.ethora.com/mcp.

Trust breakdown (7 categories)

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 → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 34 of 109 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency23
Schema Quality & AI Usability78
  • 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 Management90
  • Stability observed for 27 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
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ethora-run-recipe" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 77 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

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

io.github.dappros/ethora-mcp-cli runs locally as an npm package, launched with npx -y @ethora/mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @ethora/mcp-server

# add to Claude Code
claude mcp add dappros-ethora-mcp-cli -- npx -y @ethora/mcp-server
// .cursor/mcp.json
{
  "mcpServers": {
    "dappros-ethora-mcp-cli": {
      "command": "npx",
      "args": [
        "-y",
        "@ethora/mcp-server"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "dappros-ethora-mcp-cli": {
      "command": "npx",
      "args": [
        "-y",
        "@ethora/mcp-server"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add dappros-ethora-mcp-cli -- npx -y @ethora/mcp-server
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dappros-ethora-mcp-cli": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ethora/mcp-server"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dappros-ethora-mcp-cli --command npx --arg -y --arg @ethora/mcp-server
# ~/.hermes/config.yaml
mcp_servers:
  dappros-ethora-mcp-cli:
    command: "npx"
    args: ["-y", "@ethora/mcp-server"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "dappros-ethora-mcp-cli": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@ethora/mcp-server"
      ]
    }
  }
}
# add to Vellum
assistant mcp add dappros-ethora-mcp-cli -t stdio -c npx -a -y @ethora/mcp-server
// mcp.json
{
  "mcpServers": {
    "dappros-ethora-mcp-cli": {
      "command": "npx",
      "args": [
        "-y",
        "@ethora/mcp-server"
      ]
    }
  }
}
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.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
  • 15 Sept 26 +1
    • Security disclosure: fail → pass functional
  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 9 Sept 26 +1
    • Stability: 0.97 → pass security
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 20 Sept 2026 · Analysed npm/@ethora/mcp-server@26.5.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 109 packages
Packages resolved 109
Stale 34
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 76 exposed · ~21,040 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-sources-docs-upload ~290

Upload documents (PDF, text, etc.) into an app's RAG sources so the app's AI bot can answer from them (legacy user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: stores each document and starts a parse + embedding job; content becomes queryable RAG context once indexing finishes (not synchronous). Idempotent: no — re-uploading the same document creates another source record. Input design: files are base64 so the MCP server never reads your local filesystem. Client-side guardrail rejects any single file over 50MB; the server enforces its own limits too. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 413 if too large; 422 on an unsupported document type. Per-call limit: 1–5 files. Related: `ethora-sources-docs-delete` (remove), `ethora-sources-site-crawl` (ingest a URL instead). For app-token / B2B flows use `ethora-sources-docs-upload-v2`.

NameTypeReqDescription
appIdstring24-char hex appId to ingest into. Optional — defaults to the app set via `ethora-app-select`.
filesarrayyes1 to 5 documents to ingest in this call.

No output schema declared.

No examples provided.

ethora-sources-docs-upload-v2 ~317

Upload documents (PDF, text, etc.) into an app's RAG sources (app-token / B2B variant of `ethora-sources-docs-upload`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: stores each document and starts a parse + embedding job; content becomes queryable RAG context once indexing finishes (not synchronous). Idempotent: no — re-uploading the same document creates another source record. Input design: files are base64 so the MCP server never reads your local filesystem. Client-side guardrail rejects any single file over 50MB; the server enforces its own limits too. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` is invalid; 413 if too large; 422 on an unsupported document type. Per-call limit: 1–5 files. Related: `ethora-sources-docs-list-v2` (see results), `ethora-sources-docs-delete-v2` (remove), `ethora-sources-docs-tags-update-v2` (tag).

NameTypeReqDescription
appIdstring24-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-sources-site-crawl ~332

Crawl a website URL and ingest its content into an app's RAG sources, so the app's AI bot can answer from it (legacy user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: starts a crawl + embedding job on the server; pages become queryable RAG context once indexing finishes (not synchronous). With `followLink: true` the crawler also follows in-domain links, which can ingest many pages. Idempotent: no — re-crawling the same URL adds/updates source records; combined with `followLink` it can fan out broadly. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 400 if `url` is malformed; 404 if `appId` is invalid. Related: `ethora-sources-site-reindex` (refresh), `ethora-sources-site-delete-url` (remove), `ethora-sources-docs-upload` (ingest documents instead of a URL). For app-token / B2B flows use `ethora-sources-site-crawl-v2`.

NameTypeReqDescription
appIdstring24-char hex appId to ingest into. Optional — defaults to the app set via `ethora-app-select`.
followLinkbooleanIf true, also crawl in-domain links reachable from `url`. Can ingest many pages — use with care. Default false (single page).
urlstringyesAbsolute URL to crawl, e.g. `https://example.com/docs`.

No output schema declared.

No examples provided.

ethora-sources-site-crawl-v2 ~333

Crawl a website URL and ingest its content into an app's RAG sources (app-token / B2B variant of `ethora-sources-site-crawl`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: starts a crawl + embedding job; pages become queryable RAG context once indexing finishes (not synchronous — this returns once the job is accepted). With `followLink: true` the crawler also follows in-domain links and can ingest many pages. Idempotent: no — re-crawling adds/updates source records. Failure modes: 401/403 on missing/wrong auth; 400 if `url` is malformed; 404 if `appId` is invalid. Related: `ethora-sources-site-crawl-v2-wait` (block until done), `ethora-sources-site-list-v2` (see results), `ethora-sources-site-reindex-v2` (refresh), `ethora-sources-site-delete-url-v2` (remove).

NameTypeReqDescription
appIdstring24-char hex appId to ingest into. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
followLinkbooleanIf true, also crawl in-domain links reachable from `url`. Can ingest many pages — use with care.
urlstringyesAbsolute URL to crawl, e.g. `https://example.com/docs`.

No output schema declared.

No examples provided.

ethora-sources-site-crawl-v2-wait ~369

Crawl a website URL and block until the server finishes the request — a single-call, long-timeout variant of `ethora-sources-site-crawl-v2`. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: same as `ethora-sources-site-crawl-v2` (crawl + embed into RAG sources), but this MCP call blocks for up to `timeoutMs` waiting for the server's response instead of returning as soon as the job is accepted. Idempotent: no — re-crawling adds/updates source records. Failure modes: 401/403 on missing/wrong auth; 400 if `url` is malformed; 504/timeout if the crawl takes longer than `timeoutMs` (the job may still complete server-side — check with `ethora-sources-site-list-v2`). Returns: `{ done: true, durationMs, result }`. Use the non-wait `ethora-sources-site-crawl-v2` if you'd rather not block.

NameTypeReqDescription
appIdstring24-char hex appId to ingest into. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
followLinkbooleanIf true, also crawl in-domain links reachable from `url`. Can ingest many pages — use with care.
timeoutMsintegerHow long to wait for the crawl to finish, in milliseconds. Default 120000. Caps at 600000 (10 min).
urlstringyesAbsolute URL to crawl, e.g. `https://example.com/docs`.

No output schema declared.

No examples provided.

ethora-sources-site-delete-records-v1 ~247

Bulk-remove crawled URLs from an app's RAG sources in one call, matched by exact url strings (legacy owner/admin user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: deletes each matching source record and its embeddings. Not reversible. Idempotent: yes — URLs not present are skipped. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 404 if `appId` is invalid. Per-call limit: 1–100 URLs. When to use: cleaning up many pages at once. For the single-URL variant use `ethora-sources-site-delete-url`; for app-token / B2B flows use `ethora-sources-site-delete-url-v2-batch`.

NameTypeReqDescription
appIdstring24-char hex appId the URLs belong to. Optional — defaults to the app set via `ethora-app-select`.
urlsarrayyesExact crawled URL strings to remove, 1–100 per call. Get the stored values from `ethora-sources-site-list-v2`.

No output schema declared.

No examples provided.

ethora-sources-site-delete-url ~259

Remove a single crawled URL from an app's RAG sources, matched by its exact url string (legacy user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: deletes the source record and its embeddings; the app's bot can no longer answer from that page. Not reversible (re-add via `ethora-sources-site-crawl`). Idempotent: yes — deleting an already-removed URL is a no-op / 404. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 404 if the exact `url` string isn't a crawled source. Note: matches on the exact URL string — get the stored value from `ethora-sources-site-list-v2`. To delete several at once use `ethora-sources-site-delete-records-v1`.

NameTypeReqDescription
appIdstring24-char hex appId the URL belongs to. Optional — defaults to the app set via `ethora-app-select`.
urlstringyesExact crawled URL string to remove (must match what was stored — get it from `ethora-sources-site-list-v2`).

No output schema declared.

No examples provided.

ethora-sources-site-delete-url-v2 ~288

Remove a single crawled URL from an app's RAG sources, matched by its exact url string (app-token / B2B variant of `ethora-sources-site-delete-url`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: deletes the source record and its embeddings; the bot can no longer answer from that page. Not reversible (re-add via `ethora-sources-site-crawl-v2`). Idempotent: yes — deleting an already-removed URL is a no-op / 404. Failure modes: 401/403 on missing/wrong auth; 404 if the exact `url` isn't a crawled source. Matches on the exact URL string — get the stored value from `ethora-sources-site-list-v2`. To delete several by id use `ethora-sources-site-delete-url-v2-batch`.

NameTypeReqDescription
appIdstring24-char hex appId the URL belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
urlstringyesExact crawled URL string to remove (must match what was stored — get it from `ethora-sources-site-list-v2`).

No output schema declared.

No examples provided.

ethora-sources-site-list-v2 ~208

List an app's crawled website sources, including each source's id, URL, 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 crawled. Returns: site source records. Their ids feed `ethora-sources-site-tags-update-v2`, `ethora-sources-site-delete-url-v2-batch`, and `ethora-sources-site-reindex-v2` (`urlId`).

NameTypeReqDescription
appIdstring24-char hex appId to list sources 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-site-reindex ~261

Re-crawl and re-embed a previously crawled URL by its `urlId`, refreshing the RAG content for that page (legacy user-auth route). Auth: user-auth mode with an active user session; the user must own the app. Side effects: starts a refresh job on the server; the page's existing source record is updated in place once indexing finishes (not synchronous). Idempotent: effectively yes — re-running just refreshes the same record again. Failure modes: 401 if not logged in; 403 if the user doesn't own the app; 404 if `appId` or `urlId` is unknown. When to use: the source page changed and you want the bot to pick up the new content. Get `urlId` values from `ethora-sources-site-list-v2`. For app-token / B2B flows use `ethora-sources-site-reindex-v2`.

NameTypeReqDescription
appIdstring24-char hex appId the URL belongs to. Optional — defaults to the app set via `ethora-app-select`.
urlIdstringyesId of a previously crawled URL record. Get it from `ethora-sources-site-list-v2`.

No output schema declared.

No examples provided.

ethora-sources-site-reindex-v2 ~260

Re-crawl and re-embed a previously crawled URL by its `urlId`, refreshing its RAG content (app-token / B2B variant of `ethora-sources-site-reindex`). Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: starts a refresh job; the existing source record is updated in place once indexing finishes (not synchronous). Idempotent: effectively yes — re-running just refreshes again. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` or `urlId` is unknown. Get `urlId` values from `ethora-sources-site-list-v2`. Use `ethora-sources-site-reindex-v2-wait` to block until done.

NameTypeReqDescription
appIdstring24-char hex appId the URL belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
urlIdstringyesId of a previously crawled URL record. Get it from `ethora-sources-site-list-v2`.

No output schema declared.

No examples provided.

ethora-sources-site-reindex-v2-wait ~318

Re-crawl and re-embed a previously crawled URL and block until the server finishes — a single-call, long-timeout variant of `ethora-sources-site-reindex-v2`. Auth: app-token mode (after `ethora-app-select` + `ethora-auth-use-app`) OR B2B mode with an explicit `appId`. Side effects: same as `ethora-sources-site-reindex-v2` (refresh the source record's RAG content), but this MCP call blocks for up to `timeoutMs`. Idempotent: effectively yes. Failure modes: 401/403 on missing/wrong auth; 404 if `appId` or `urlId` is unknown; 504/timeout if it takes longer than `timeoutMs` (the job may still complete server-side). Returns: `{ done: true, durationMs, result }`. Get `urlId` values from `ethora-sources-site-list-v2`.

NameTypeReqDescription
appIdstring24-char hex appId the URL belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
timeoutMsintegerHow long to wait for the reindex to finish, in milliseconds. Default 120000. Caps at 600000 (10 min).
urlIdstringyesId of a previously crawled URL record. Get it from `ethora-sources-site-list-v2`.

No output schema declared.

No examples provided.

ethora-sources-site-tags-update-v2 ~301

Set the RAG retrieval tags on a crawled website source. 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 source'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 `sourceId` is unknown. Get `sourceId` values from `ethora-sources-site-list-v2`. The doc equivalent is `ethora-sources-docs-tags-update-v2`.

NameTypeReqDescription
appIdstring24-char hex appId the source belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
sourceIdstringyesId of the crawled site source to tag. Get it from `ethora-sources-site-list-v2`.
tagsarrayyesThe complete desired tag set for this source (replaces any existing tags). Up to 50 tags; pass `[]` to clear all.

No output schema declared.

No examples provided.

ethora-status ~136

Report the current Ethora MCP session state: configured API URL, active auth mode, which credentials are present, and the currently selected appId/agentId. Auth: none required. Side effects: none — read-only. Idempotent: yes. Failure modes: effectively none. Returns: a state object with booleans like `hasAppJwt` / `hasB2BToken` / `hasUserToken` (credential *values* are never echoed back). Use it to decide which `ethora-auth-use-*` tool to call next, or run `ethora-doctor` for an active connectivity check.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ethora-user-login ~254

Authenticate as an existing Ethora user with email + password. Auth: user-auth mode (call `ethora-auth-use-user` first) and a configured `appJwt` (env or `ethora-configure`). Side effects: stores the resulting user session token in this MCP session; unlocks user-auth tools (`ethora-app-list`, `ethora-app-create`, `ethora-files-*`, `ethora-wallet-*`). Idempotent: yes — safe to retry on transport failures. Failure modes: 401/403 on bad credentials; 404 if the email isn't registered; 429 if the Ethora server's per-IP login rate limit is hit (retry with backoff). Related: `ethora-user-register` (create account first), `ethora-auth-use-user` (switch mode), `ethora-status` (verify session).

NameTypeReqDescription
emailstringyesUser's registered email address (RFC 5322). Must match an account created via `ethora-user-register` and verified via the link sent to that address.
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 ~320

Register a new Ethora end-user account by email + first/last name. Auth: user-auth mode and a configured `appJwt` (env or `ethora-configure`) — the JWT tells the server which app the new user belongs to. Side effects: creates a pending user record on the Ethora server and triggers a verification email to the address; the user must click the link in that email before `ethora-user-login` will succeed. Idempotent: safe to retry on transport failures (server deduplicates by email within an app). Calling twice with a fresh email creates one account; calling with an already-registered email returns 422. Failure modes: 422 with a validation error if the email is already registered, if names violate server rules, or if the configured `appJwt` is invalid; 401 if no `appJwt` is configured. When to use: end-user self-serve sign-up flows. For bulk B2B user provisioning prefer `ethora-users-batch-create-v2`.

NameTypeReqDescription
emailstringyesEmail address for the new user. Must be RFC-5322 valid and not already registered within this app. The user will receive a verification link they must click before login works.
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. Required by the server; do not omit unless your Ethora deployment explicitly accepts empty strings.

No output schema declared.

No examples provided.

ethora-users-batch-create-v2 ~316

Provision many Ethora users in one asynchronous batch job — the bulk equivalent of `ethora-user-register`. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: enqueues a background job (server responds HTTP 202) — users are **not** created synchronously. Each user is created under the B2B tenant's app. With `bypassEmailConfirmation: true` users are usable immediately; otherwise each receives a verification email. Idempotent: no — re-running re-attempts creation; the job itself reports per-user conflicts (already-registered emails) rather than failing the whole batch. Failure modes: 401/403 if not in B2B mode; 422 if the `usersList` fails validation. Per-call limit: 1–100 users. Returns: `{ jobId, statusUrl }`. Track it with `ethora-users-batch-job-v2` (one-shot) or `ethora-wait-users-batch-job-v2` (poll to completion).

NameTypeReqDescription
bypassEmailConfirmationbooleanIf true, created users skip email verification and are immediately usable. If false/omitted, each user receives a verification link.
timeoutMsintegerHTTP timeout for the job-creation request (not the job itself), in milliseconds. Default 30000.
usersListarrayyesThe users to create, 1–100 per batch.

No output schema declared.

No examples provided.

ethora-users-batch-job-v2 ~215

Fetch the current status and per-user results of a users batch job by `jobId` (one-shot, no polling). Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`) — must match the auth used to create the job. Side effects: none — read-only. Idempotent: yes. Failure modes: 401/403 if not in B2B mode; 404 if the `jobId` is unknown. Returns: the job object including its `state` (`pending` / `running` / `completed` / `failed`) and per-user outcomes (created / conflict / error). For a blocking wait-until-done, use `ethora-wait-users-batch-job-v2`.

NameTypeReqDescription
jobIdstringyesJob id returned by `ethora-users-batch-create-v2`.
timeoutMsintegerHTTP timeout for this status request, in milliseconds. Default 10000.

No output schema declared.

No examples provided.

ethora-wait-broadcast-job-v2 ~315

Block until a broadcast job reaches a terminal state (`completed` or `failed`), or until a timeout — a convenience wrapper around repeated `ethora-chats-broadcast-job-v2` calls. Auth: app-token mode OR B2B mode with an explicit `appId` — must match the auth used to enqueue the job. Side effects: none server-side — read-only polling. Blocks this MCP call for up to `timeoutMs`. Idempotent: yes. Failure modes: 401/403 on missing/wrong auth; 404 if the `jobId` is unknown. Returns: `{ done: true, state, job }` when the job finished, or `{ done: false, reason: "timeout", job }` if `timeoutMs` elapsed first (the job may still finish later — re-check with `ethora-chats-broadcast-job-v2`).

NameTypeReqDescription
appIdstring24-char hex appId the job belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
intervalMsintegerDelay between status checks, in milliseconds. Default 1000. Lower = more responsive but more API calls.
jobIdstringyesJob id returned by `ethora-chats-broadcast-v2`.
timeoutMsintegerMaximum time to wait, in milliseconds. Default 60000. Caps at 300000 (5 min).

No output schema declared.

No examples provided.

ethora-wait-users-batch-job-v2 ~273

Block until a users batch job reaches a terminal state (`completed` or `failed`), or until a timeout — a convenience wrapper around repeated `ethora-users-batch-job-v2` calls. Auth: B2B mode (`ethora-auth-use-b2b` + a configured `b2bToken`) — must match the auth used to create the job. Side effects: none server-side — read-only polling. Blocks this MCP call for up to `timeoutMs`. Idempotent: yes. Failure modes: 401/403 if not in B2B mode; 404 if the `jobId` is unknown. Returns: `{ done: true, state, job }` when finished, or `{ done: false, reason: "timeout", job }` if `timeoutMs` elapsed first (the job may still finish later — re-check with `ethora-users-batch-job-v2`).

NameTypeReqDescription
intervalMsintegerDelay between status checks, in milliseconds. Default 1000.
jobIdstringyesJob id returned by `ethora-users-batch-create-v2`.
timeoutMsintegerMaximum time to wait, in milliseconds. Default 60000. Caps at 300000 (5 min).

No output schema declared.

No examples provided.

ethora-wallet-get-balance ~149

Read the on-chain wallet balance for the currently authenticated user, across the ERC-20 token(s) the Ethora backend tracks for them. Auth: user-auth mode and an active user session (call `ethora-user-login` first). Side effects: none — read-only, no gas consumed. Idempotent: yes — safe to call repeatedly. Failure modes: 401 if not logged in; 503 if the wallet RPC is temporarily unreachable (safe to retry on 503 with backoff). Returns: balances in the units the Ethora backend reports (typically whole-token integers — confirm with your deployment). Pair with `ethora-wallet-erc20-transfer` to spend.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ethora.b2b.app.bootstrap-ai ~463

Dot-namespaced alias for `ethora-b2b-app-bootstrap-ai` — one-call B2B orchestrator: create an app, index RAG sources, then configure and enable its AI bot. Auth: B2B mode (`ethora.b2b.auth.use` / `ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: runs multiple real operations in sequence (app create, source ingest, bot configure/enable); source ingestion and bot activation are best-effort, so the app is still created even if a later step fails. Not idempotent — each call creates a new app. Failure modes: aborts with the partial step log if app creation fails; previous auth mode restored best-effort on error. Returns: a per-step result log including the new `appId`. Provided for agents that prefer dotted names; behavior matches `ethora-b2b-app-bootstrap-ai`.

NameTypeReqDescription
botTriggerstringBot trigger: `/bot` or `any_message`.
crawlUrlstringOptional website URL to crawl and index into the new app's RAG sources.
displayNamestringyesDisplay name for the new app.
docsarrayOptional documents to ingest into the new app's RAG sources.
enableBotbooleanIf true, set the new app's bot to `status: on` (best-effort AI service activation).
followLinkbooleanFor `crawlUrl`: also follow in-domain links (default true). Can ingest many pages.
llmModelstringLLM model id for the bot, e.g. `gpt-4o-mini`. Must be available for the chosen provider.
llmProviderstringLLM provider for the bot, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend.
savedAgentIdstringOptional id of an existing saved agent to bind as the new app's active bot.
setAsCurrentbooleanIf true (default), set the new app as the session's current app and switch to app-token auth.

No output schema declared.

No examples provided.

ethora.b2b.app.create ~180

Dot-namespaced alias for `ethora-b2b-app-create` — create a new Ethora app server-side. Auth: B2B mode (`ethora.b2b.auth.use` / `ethora-auth-use-b2b` + a configured `b2bToken`). Side effects: provisions a new app record owned by the B2B tenant and allocates a fresh `appId`. Not idempotent — each call creates a new app. Failure modes: 401/403 if not in B2B mode; 422 on an invalid `displayName`. Provided for agents that prefer dotted names. Prefer `ethora-b2b-app-create` in new integrations.

NameTypeReqDescription
displayNamestringyesHuman-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.auth.use ~104

Dot-namespaced alias for `ethora-auth-use-b2b` — switches the session's active auth mode to B2B (`x-custom-token`). Auth: requires a `b2bToken` to already be configured. Side effects: session state only; no API call. Idempotent: yes. Provided to reduce auth-mode mistakes for agents that prefer dotted names; behavior is identical to `ethora-auth-use-b2b`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ethora.b2b.bot.enable ~267

Dot-namespaced alias for `ethora-b2b-bot-enable` — turn on the AI bot for an app (sets `botStatus: "on"`). Auth: B2B mode (`ethora.b2b.auth.use` / `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. The bot only responds if a prompt + LLM are configured and the backend has an AI service set up. Idempotent: yes — enabling an already-on 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. Provided for agents that prefer dotted names. Prefer `ethora-b2b-bot-enable` in new integrations.

NameTypeReqDescription
appIdstring24-char hex appId whose bot to enable. Optional — defaults to the app set via `ethora-app-select`.
botTriggerstringWhen the bot responds: `/bot` or `any_message`. Omit to leave the existing trigger unchanged.

No output schema declared.

No examples provided.

ethora.b2b.broadcast.wait ~263

Dot-namespaced sibling of `ethora-wait-broadcast-job-v2` — block until a broadcast job reaches a terminal state (`completed` / `failed`) or until a timeout. Auth: app-token mode (despite the `b2b` in the name, this variant uses app-token auth — `ethora-app-select` + `ethora-auth-use-app`). Use `ethora-wait-broadcast-job-v2` if you need the B2B-with-explicit-appId path. Side effects: none server-side — read-only polling. Blocks this MCP call for up to `timeoutMs`. Idempotent: yes. Failure modes: 401/403 if not in app-token mode; 404 if the `jobId` is unknown. Returns: `{ done: true, state, job }` when finished, or `{ done: false, reason: "timeout", job }` on timeout.

NameTypeReqDescription
intervalMsintegerDelay between status checks, in milliseconds. Default 1000.
jobIdstringyesJob id returned by `ethora-chats-broadcast-v2`.
timeoutMsintegerMaximum time to wait, in milliseconds. Default 60000.

No output schema declared.

No examples provided.

Common questions

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

io.github.dappros/ethora-mcp-cli is listed in the public MCP registry as io.github.dappros/ethora-mcp-cli. MCP server for the Ethora chat & messaging platform: chat ops, AI agents, RAG, automation. This page covers its npm package (@ethora/mcp-server).

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

io.github.dappros/ethora-mcp-cli scores 77 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. 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-cli server expose?

io.github.dappros/ethora-mcp-cli exposes 76 tools: ethora-configure, ethora-status, ethora-help, ethora-run-recipe, ethora-doctor, and 71 more. Their descriptions and schemas cost roughly 21,040 tokens of context every time the server is loaded.

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

io.github.dappros/ethora-mcp-cli is marked deprecated in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

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

io.github.dappros/ethora-mcp-cli declares the ISC licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.