Step by step
Get a key
In the Ethora web app open Account, AI Assistants and create an API key; the page shows a Cursor config with a copy button. Keys default to 90 days, max 365, value shown once. No account? Register or let the assistant call ethora-user-register on the open endpoint.
Cursor
Put the block in .cursor/mcp.json at the project root or ~/.cursor/mcp.json for every project; servers are managed from the Customize panel. Cursor asks for approval before using MCP tools by default. The same block works for Windsurf (~/.codeium/windsurf/mcp_config.json), Cline (cline_mcp_settings.json, opened from the MCP Servers icon) and Gemini CLI (~/.gemini/settings.json).
{
"mcpServers": {
"ethora": {
"url": "https://mcp.chat.ethora.com/mcp",
"headers": { "Authorization": "Bearer <your API key>" }
}
}
}VS Code and GitHub Copilot agent mode
Create .vscode/mcp.json; the top-level key is servers, not mcpServers, and remote servers declare "type": "http". The MCP: Add Server command fills the same fields at workspace or user level. Tools appear behind the Configure Tools button in the chat input, where you can toggle them; you may be asked to confirm each invocation.
{
"servers": {
"ethora": {
"type": "http",
"url": "https://mcp.chat.ethora.com/mcp",
"headers": { "Authorization": "Bearer <your API key>" }
}
}
}Or one-click install the stdio package
The GitHub README has Add to Cursor and Install in VS Code buttons that register npx -y @ethora/mcp-server as a local stdio server. Supply credentials through environment variables or ethora-configure at runtime for a quick test.
{ "mcpServers": { "ethora": { "command": "npx", "args": ["-y", "@ethora/mcp-server"] } } }
# credentials, if you run it by hand
ETHORA_API_URL=https://api.chat.ethora.com/v1 ETHORA_APP_JWT="JWT <your app jwt>" npx -y @ethora/mcp-serverTry it
Open the chat in agent mode and ask for a documentation lookup first (search and fetch need no login), then something real. ethora-status should report authMode: user; when unsure of the call order the assistant runs ethora-help.
Remote or stdio?
Remote when you want no local process, revocable keys and OAuth for shared setups. Stdio when the machine cannot hold a personal key (CI), when you point ETHORA_API_URL at a self-hosted Ethora API, or when you need ETHORA_B2B_TOKEN for server-side provisioning. Same tools; app deletion on stdio needs ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true.
The tools this uses
Names and descriptions come from the server’s own tool list. Read-only tools are safe to auto-approve; destructive ones make your client ask first. Full reference.
| Tool | Name | What it does | Access |
|---|---|---|---|
| Session Status | ethora-status | Report the current Ethora MCP session state: configured API URL, active auth mode, which credentials are present (booleans like hasAppJwt - values never echoed),... | read-only |
| Help and Next Steps | 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 current... | read-only |
| Register Account | ethora-user-register | Create a new Ethora user account by email + first/last name, then log in and bind the session. | write |
| Log In | ethora-user-login | Authenticate as an existing Ethora user with email + password. | write |
| Create API Key | ethora-api-key-create | Mint a long-lived, revocable API key for the currently logged-in user. | write |
| List API Keys | ethora-api-key-list | List the current user’s API keys (id, name, createdAt, expiresAt). | read-only |
| Revoke API Key | ethora-api-key-revoke | Revoke one of the current user’s API keys by id. | destructive |
| List Apps | ethora-app-list | List all Ethora apps (tenants) owned by the currently logged-in user. | read-only |
| Create App | ethora-app-create | Create a new Ethora app (tenant) owned by the currently logged-in user. | write |
| Widget Embed Snippet | ethora-widget-embed-snippet | Generate the <script> tag that embeds the Ethora AI chat widget (the floating launcher + chat panel that website visitors use) for an app, plus the prerequisites that... | read-only |
A worked example
“Create an Ethora app called Docs Helper, add a room called Q&A, crawl https://docs.example.com into its knowledge base, create an agent that answers from those docs, invite it to the room and give me the widget script tag for this site.”
ethora-app-create{ displayName: "Docs Helper" }ethora-app-select{ appId }ethora-app-create-chat{ title: "Q&A" }ethora-sources-site-crawl-v2-wait{ url: "https://docs.example.com", followLink: true }ethora-agents-create-v2{ name: "Docs Helper", prompt: "Answer from the indexed docs...", isRAG: true }ethora-agent-invite-to-chat{ agentIdOrAddress, chatJid }ethora-agents-activate-v2{ agentId, chatJid }ethora-widget-embed-snippet{ botName: "Docs Helper" }
An app with a crawled knowledge base, a RAG agent active as the default responder, and a script tag the editor can drop into the site.
Good to know
- Keys in
.cursor/mcp.jsonor.vscode/mcp.jsonend up in the repo if you commit them; keep personal keys in the global file or use the open endpoint and log in per session. - Cline documents
"type": "streamableHttp"for remote servers; the URL and header values are the same. - Windsurf documents
serverUrlfor remote servers withurlas an alternative; either points athttps://mcp.chat.ethora.com/mcp. - A 406 response means the client did not send both
application/jsonandtext/event-streamin Accept; update the editor.
