Skip to main content
Glama

ethora-mcp-server

Server Details

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

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
dappros/ethora-mcp-server
GitHub Stars
6
Server Listing
Ethora MCP Server

TDQS

A3.6/5.0

Scored across 90 tools

Disambiguation2/5

Many tools are near-duplicates distinguished only by auth mode or blocking behavior (e.g. ethora-sources-docs-upload vs -upload-v2, ethora-sources-site-crawl-v2 vs -v2-wait, ethora-app-get-default-rooms vs -with-app-id). The legacy bot tools also overlap conceptually with the newer agents tools (ethora-bot-enable-v2 vs ethora-agents-activate-v2), so an agent can easily misselect despite the thorough descriptions.

Naming Consistency3/5

The ethora- prefix and resource-action ordering are consistent, but there are notable deviations: singular/plural mixing (ethora-agent-* vs ethora-agents-*), inconsistent v2 placement (ethora-wait-broadcast-job-v2 vs ethora-sources-site-crawl-v2-wait), and standalone unprefixed tools (search, fetch). Overall still readable and grouped by domain.

Tool Count1/5

90 tools is far beyond the well-scoped range, and many entries are auth-mode or blocking variants of the same underlying operation rather than distinct capabilities. Even for a broad platform, the surface is bloated and would be hard for an agent to navigate efficiently.

Completeness4/5

The tool surface is remarkably comprehensive across app lifecycle, agents, bot instances, RAG sources, chats, users, files, tokens, and auth. Minor gaps exist (no chat room update or all-rooms listing, no message deletion, limited wallet operations) but agents can work around them.

Available Tools

90 tools
ethora-agent-invite-to-chatInvite Agent to ChatAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoRequired in B2B mode unless already selected via ethora-app-select.
chatIdNoMongo Chat _id (preferred when invoking from admin).
chatJidNoRoom JID `${appId}_${chatId}` (optionally with `@conference.<host>`), exactly the `jid` returned by `ethora-app-create-chat`. Preferred over `chatId`.
agentIdOrAddressYesEither Mongo _id (24 hex chars) or EOA-style address.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description reveals important side effects: lazy creation of a per-App BotInstance user with isBot:true, live XMPP client spawning, and no required ai-service restart. This is exactly the kind of behavioral context an agent needs for a mutating, side-effectful operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the primary action, and every sentence earns its place by adding behavioral or usage detail. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Together with the fully described schema and annotations, the description provides enough context for an agent to invoke the tool correctly: the action, the per-agent call pattern, the lazy creation side effect, and the operational consequence. The lack of an output schema does not hurt this side-effect-focused operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter descriptions already carry the semantic weight. The tool description adds a useful 'once per agent' and 'per-App' framing, but it does not materially extend what the schema already states about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Invite') and resource ('Agent into a chat room'), immediately clarifying what the tool does. It further distinguishes the operation from sibling agent-CRUD tools by describing an invitation/membership action with multi-agent behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage context: call once per agent, multiple agents can coexist, and points to the quickstart prompt for the full multi-agent recipe. It does not explicitly name excluded alternatives, but the usage context is clear enough for an agent to decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-activate-v2Activate Agent for WidgetA
Idempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoApp to activate the agent for. Defaults to the app from `ethora-app-select`.
agentIdYesId (or address) of the agent to activate. Get it from `ethora-agents-list-v2` / `ethora-agents-create-v2`.
chatJidNoRoom JID `${appId}_${chatId}` (with or without `@conference...`) that becomes the widget chat. Required for API-created apps; omit only for dashboard-created apps that already have an AI Widget chat bound.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that this mutates app state, which route is used under user auth versus app-token fallback, required ownership, and likely 404/403 errors. It also surfaces the precondition that a bot instance must already exist, which is critical behavioral context the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficiently organized: main effect, required precondition, auth behavior, errors, and related tools. Every sentence adds actionable information with no filler, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating activation tool with no output schema, the description covers purpose, preconditions, auth, errors, and related follow-ups. It does not describe the response/return value, but for this tool the key information an agent needs before invoking it is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The schema already explains each parameter's default, source, and the API-created vs dashboard-created app distinction. The description adds some relational context (activating sets `App.defaultBotInstanceId`) but does not substantially extend what the schema already communicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Make an agent the app's ACTIVE widget bot' and names the exact effect (`App.defaultBotInstanceId`, `botStatus: on`). It clearly explains why this matters (`POST /v2/widget/sessions`) and distinguishes this activation action from general bot-enable or agent-update tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong context for when to use the tool: it is 'Required before an embedded widget can answer on an API-created app' and states the precondition to invite the agent first. It also lists related next steps (`ethora-widget-embed-snippet`, `ethora-bot-instances-list`). It does not explicitly state when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-clone-v2Clone AgentAInspect

Duplicate an existing saved agent into a new agent, optionally overriding its name/slug/summary (POST /v2/agents/:agentId/clone). The source agent is unchanged; the new clone becomes the session's current agent context. Auth: app-token mode (after ethora-app-select + ethora-auth-use-app). Errors: 401/403 wrong auth; 404 source agentId not found; 422 overridden slug collides.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the clone. Omit to inherit the source agent's name.
slugNoURL-safe unique slug for the clone. Omit to let the server derive one; must not collide with an existing agent.
agentIdYesId of the source agent to clone. Get it from `ethora-agents-list-v2`.
summaryNoSummary for the clone. Omit to inherit the source agent's summary.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey non-read-only and non-idempotent behavior, and the description adds valuable side effects: the source agent is unchanged and the new clone becomes the session's current agent context. It also discloses auth mode and specific error outcomes, going beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: action and route first, then side effects, auth prerequisite, and error cases. Every sentence carries useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-required-param mutation, the description supplies the route, side-effect behavior, auth prerequisite, and error semantics. Although there is no output schema, the information provided is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all four parameters at 100% coverage, so the baseline is 3. The description adds context that name/slug/summary are optional overrides and that the source agent remains unchanged, but it does not need to repeat parameter-level details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Duplicate an existing saved agent into a new agent' – a specific verb and resource, then adds optional overrides and the exact route. It clearly distinguishes cloning from creating or updating by noting the source agent is unchanged and the clone becomes the current agent context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Auth requirements are explicit ('app-token mode after ethora-app-select + ethora-auth-use-app'), and error conditions are mapped to 401/403/404/422. It does not explicitly compare against create/update alternatives, but the context makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-create-v2Create AgentAInspect

Create a reusable AI agent (POST /v2/apps/:appId/agents). Works in user auth mode (the normal hosted mode) or B2B mode; app-token mode is not accepted by the backend. Each agent is a persona — name, avatar, system prompt, LLM config, plus response-gate settings (responseMode, cooldownSec) that control when it speaks in a room. For multi-agent scenarios (two or more personas conversing in one chat) create each one separately, then ethora-agent-invite-to-chat them into the same room. See the ethora-agents-quickstart prompt for the end-to-end recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoShort display name. For multi-agent scenarios, prefer single-word names (e.g. 'Hannibal', 'Varro') — the @-mention matcher uses the exact display name with word-boundary matching.
slugNoURL-safe slug (auto-generated from name if omitted).
appIdNo24-char hex appId the agent belongs to (`POST /v2/apps/:appId/agents`). Defaults to the app selected with `ethora-app-select`. Pass it when you just created an app so the agent lands there rather than in the token's own app.
isRAGNoEnable retrieval-augmented generation from indexed sources.
promptNoSystem prompt — the agent's persona, role, style of speech, and behaviour rules. For multi-agent scenarios, instruct the agent to end every message with an @-mention of who speaks next; that's how turn-handoff works through the response gate.
ragTagsNoOptional RAG tag filter — restrict retrieval to sources matching these tags.
summaryNoShort bio shown in agent lists.
triggerNoLegacy trigger field. Prefer the newer `responseMode` for new agents.
llmModelNoLLM model override (e.g. 'gpt-4o-mini').
categoriesNoFree-form category tags for agent directory listings.
visibilityNo'private' (only invitable inside the owning app) or 'public' (cross-app invitable).
cooldownSecNoMinimum seconds between this agent's replies in a given room. Damped 2x for bot-to-bot. Set 0 for quick turn-taking in multi-agent scenarios.
isPublishedNoConvenience alias for setting visibility='public'.
llmProviderNoLLM provider override (e.g. 'openai'). Defaults to the app's configured provider.
botAvatarUrlNoURL of the avatar image shown next to bot messages.
responseModeNoWhen the agent decides to reply. 'always' = every room message; 'mentioned' = only when @-mentioned by display name or via /bot (recommended for multi-agent turn-taking); 'smart' = a mini LLM gate decides per-message; 'probability' = coin-flip per message using `responseProbability`.
botDisplayNameNoDisplay name used inside the chat UI. Defaults to `name`.
greetingMessageNoOptional message the agent posts when it first joins a room.
responseProbabilityNoIf responseMode='probability', odds (0-1) of replying to each message. Damped 0.6x for bot-to-bot messages.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false), and the description adds valuable behavioral details: auth mode restrictions, the response-gate mechanism, damping factors for cooldownSec and responseProbability, and the multi-agent turn-handoff pattern. These go beyond the annotations and schema, providing the agent with crucial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and endpoint, then key constraints, then multi-agent usage. Every sentence adds value with no fluff. The structure is logical and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 19 parameters and no output schema, the description covers the essential context: what the agent is, auth modes, the multi-agent recipe, and pointers to a quickstart. It doesn't list every parameter (that's the schema's role) but provides the high-level understanding an agent needs to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds extra meaning beyond the schema: it explains the multi-agent workflow, mentions the response-gate settings as a group, and clarifies auth mode limitations. It doesn't detail every parameter but adds meaningful usage context that isn't in the schema. This lifts it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Create a reusable AI agent' with the specific endpoint (POST /v2/apps/:appId/agents). It distinguishes from siblings like update, delete, clone, and invite-to-chat by explaining that this creates the persona, while others handle subsequent steps. The purpose is unambiguous and well-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool (create agents) and how to use it in multi-agent scenarios: create each agent separately then invite them to a chat. It also specifies auth mode constraints (user/B2B accepted, app-token not accepted) and points to a quickstart recipe. This is clear guidance on when and how to invoke the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-delete-v2Delete AgentA
DestructiveIdempotent
Inspect

Delete an Agent (DELETE /v2/agents/:idOrAddress). Destructive — removes the saved Agent and its BotInstances. Gated behind ETHORA_MCP_ENABLE_DANGEROUS_TOOLS.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdOrAddressYesMongo _id (24 hex chars) or EOA-style address.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds meaningful behavioral detail beyond that: it removes BotInstances as well as the Agent, and requires an environment variable gate. This gives an agent a clear picture of the side effects and invocation prerequisites. It does not contradict the annotations, and it enriches the safety profile with specific consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core action and endpoint lead, followed by the destructive consequence and the gating condition. Every sentence earns its place and the structure is easily scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter delete tool, the description is complete: it names the action, endpoint, affected resources, and enabling condition. The schema covers the parameter format, and annotations cover safety flags. No output schema exists, but explaining return values is not essential for a delete operation with this level of transparency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter 'agentIdOrAddress' is already well-documented in the schema as a Mongo _id or EOA-style address. The description adds no additional parameter-level meaning, but with full schema coverage the baseline score of 3 is appropriate. No extra clarification is necessary here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's action: 'Delete an Agent' with the exact endpoint. It also specifies the scope of destruction ('removes the saved Agent and its BotInstances'), which distinguishes it from other agent-related tools like update, activate, or clone. This is a specific verb+resource definition with no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides important usage context by warning that the tool is destructive and gated behind ETHORA_MCP_ENABLE_DANGEROUS_TOOLS. However, it does not explicitly guide an agent on when to choose this over alternatives, such as deactivating an agent rather than deleting it. The safe-use precondition is stated, but exclusionary or alternative guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agent-set-visibilitySet Agent VisibilityB
Idempotent
Inspect

Set an Agent's visibility (private | unlisted | public). Public agents can be invited cross-app by anyone who knows the address.

ParametersJSON Schema
NameRequiredDescriptionDefault
visibilityYes
agentIdOrAddressYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds one meaningful behavioral consequence: public agents can be invited cross-app by anyone who knows the address. It does not disclose effects of switching to private or unlisted, permissions required, or what happens to existing invites. Annotations already cover mutating, idempotent, and non-destructive traits, so the additional context is useful but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundant wording. The purpose is front-loaded in the first sentence, and the second sentence adds relevant behavioral context without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter with no output schema, the description covers the action and one meaningful consequence, but it omits the expected return value and how to obtain or specify the agent identifier. The description is adequate but leaves several operational details unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It clarifies the visibility parameter by listing its values and explaining the public option, but it leaves agentIdOrAddress effectively unexplained beyond the parameter name. The enum values are already present in the schema, so the description adds limited semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Set') and resource ('Agent's visibility'), and lists the three allowed values: private, unlisted, public. It does not explicitly compare against sibling agent tools, but the purpose is unambiguous and distinct from other agent-related operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives, nor does it mention when not to use it. The second sentence explains a consequence of public visibility, not usage context, leaving the agent to infer the tool's applicability from its name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-export-v2Export AgentA
Read-onlyIdempotent
Inspect

Export an Agent as a portable bundle (GET /v2/agents/:idOrAddress/export). format=json returns the bundle object directly; feed it back to ethora-agents-import-v2 to recreate the Agent in another App/tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoDefaults to json. Prefer json for MCP round-trips.
agentIdOrAddressYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context: `format=json` returns the bundle object directly, and the result is portable/restorable via the import tool. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core purpose and the most important usage detail (JSON round-trip with the import sibling) are front-loaded and immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read-only export tool with strong annotations, the description is nearly complete. It explains what the tool does, how the JSON format behaves, and how to use the output. The only notable gap is the lack of detail on the zip format's behavior, but this is minor for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and `agentIdOrAddress` has no schema description. The endpoint in the description implies it is the Agent's ID or address, but this is not explicitly explained. The `format` parameter benefits from both the schema description and the additional note about JSON round-trips, but the zip behavior is left unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Export an Agent as a portable bundle') and names the exact endpoint. It also explicitly connects the output to `ethora-agents-import-v2`, which distinguishes it from sibling read tools like `ethora-agents-get-v2`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly frames when to use export: to produce a portable bundle that can be fed back into the import tool to recreate an Agent in another App/tenant. It does not explicitly list exclusions or alternatives like clone/get, but the migration/backup context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-get-v2Get AgentA
Read-only
Inspect

Fetch one reusable saved agent's full config by id (GET /v2/agents/:agentId) — prompt, LLM, RAG settings, visibility. Also sets this agent as the session's current agent context (no server-side change). Auth: app-token mode (after ethora-app-select + ethora-auth-use-app). Errors: 401/403 wrong auth; 404 agentId not an agent of the current app. Related: get ids from ethora-agents-list-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesId of the saved agent to fetch. Get it from `ethora-agents-list-v2`.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so the description adds value by noting a side effect: 'Also sets this agent as the session's current agent context (no server-side change).' This is important behavioral context beyond the read-only claim. It also mentions auth requirements and error handling. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense. Every sentence adds value: the purpose, the side effect, auth prerequisites, error details, and a pointer to the sibling list tool. It is front-loaded with the main purpose and efficiently conveys all necessary guidance without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter get tool with read-only annotations, the description covers all aspects an agent needs: what it returns, the auth prerequisite, error semantics, and how to obtain the id. The output format isn't described, but since no output schema exists, the description's mention of the full config content suffices. No gaps are evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% and includes a description for agentId that points to the list tool. The description adds context that the id is for a 'saved agent' and that it must belong to the current app (via the 404 error). This reinforces the schema meaning and adds a constraint, so it exceeds the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch' and the resource 'one reusable saved agent's full config by id', and specifies the exact contents: prompt, LLM, RAG settings, visibility. It distinguishes itself from sibling tools like `ethora-agents-list-v2` by mentioning that it fetches full config for a single agent, whereas list retrieves ids. The technical path `GET /v2/agents/:agentId` adds precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the required auth mode ('app-token mode' after `ethora-app-select` + `ethora-auth-use-app`), and provides error conditions with 401/403 and 404 meanings. It also references how to get the agentId via `ethora-agents-list-v2`. This clearly guides when and how to use the tool, including prerequisites and where to obtain inputs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-import-v2Import AgentAInspect

Import an Agent from a bundle produced by ethora-agents-export-v2 (POST /v2/agents/import, application/json body IS the bundle). Optionally scope the new Agent to an owning App via ownerAppId.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleNoThe exported bundle object (the json export output).
ownerAppIdNoOwning App for the imported Agent (defaults server-side).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, so the description doesn't need to restate that this is a mutating operation. It adds valuable context about the endpoint and the bundle-as-body requirement. It does not describe side effects (e.g., what happens on duplicate IDs), but the annotations cover the basic safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, and the core purpose is front-loaded. It efficiently conveys the endpoint, the body requirement, and the optional scoping parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an import tool with no output schema, the description covers the essential input format and source. It doesn't mention error handling or return values, but given the annotations and the simplicity of the operation, it is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented. The description adds the critical detail that the bundle is the entire request body ('application/json body IS the bundle') and that ownerAppId defaults server-side. This goes beyond the schema's 'owning App' wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (import), the resource (Agent), and the source (bundle produced by ethora-agents-export-v2). It also specifies the exact endpoint and that the body is the bundle, making it unambiguous and distinct from create/clone siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly indicates that the input must come from ethora-agents-export-v2, which tells the agent when this tool is appropriate. It does not explicitly contrast with create-v2 or clone-v2, but the prerequisite is clear enough to route the agent correctly in most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-list-v2List AgentsA
Read-only
Inspect

List the reusable saved agents of an app (GET /v2/apps/:appId/agents, or GET /v2/agents for the token's own app) — a saved agent is a reusable bot definition. Returns an array of agents with ids, names, and config. Auth: app-token mode (after ethora-app-select + ethora-auth-use-app). Errors: 401/403 not in app-token mode or invalid appToken; empty list if the app has no saved agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId whose agents to list (`GET /v2/apps/:appId/agents`). Defaults to the app selected with `ethora-app-select`; without either, lists the agents of the token's own app.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavior beyond that: it specifies the auth mode, the 401/403 error conditions for invalid or missing app-token mode, the return array shape (ids, names, config), and the empty-list behavior. It does not mention pagination or rate limits, but for a simple list tool the provided context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: the core purpose appears first, followed by return format, auth requirements, and error cases. Every sentence carries useful information, and the endpoint paths are integrated without excessive digression. It is slightly longer than strictly necessary because some details duplicate the schema, but it remains focused and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter read-only list tool with no output schema, the description is self-sufficient. It tells the agent what the tool does, which endpoints are involved, how appId defaults, what auth mode is required, what errors can occur, and what the response contains. An agent can invoke it correctly without needing external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single appId parameter, including its 24-char hex format and default behavior. The description repeats these facts and adds the corresponding REST endpoint, but it does not contribute new semantic information about the parameter itself. With 100% schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'List the reusable saved agents of an app', and expands on it with concrete endpoints. It defines what a saved agent is, which distinguishes this tool from siblings like get, create, update, delete, or clone. The agent can clearly tell this is the collection-listing operation, not a single-agent retrieval or mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies clear usage context: it must run in app-token mode after ethora-app-select and ethora-auth-use-app, and it explains how the appId resolves when omitted. It also states the empty-list outcome when no agents exist. However, it does not explicitly name alternative tools like ethora-agents-get-v2 for single-agent retrieval, so the when-not guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agent-soul-appendAppend to Agent PromptAInspect

Append a fragment to an Agent's SOUL.MD (its evolving identity / private notes). Operator-driven; the Agent itself can also self-edit via the same endpoint when called by ai-service.

ParametersJSON Schema
NameRequiredDescriptionDefault
appendYes
agentIdOrAddressYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent operation. The description adds meaningful context beyond the annotations: the target is SOUL.MD, the content is the agent's evolving identity/private notes, and there is an operator vs. ai-service call distinction. This gives an agent useful behavioral understanding without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the main action before adding context. Every sentence earns its place, and the parenthetical explaining SOUL.MD is concise and valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool with annotations and no output schema, the description covers the core purpose, the resource being modified, and caller context. It does not describe return values, but this is a minor gap for an append operation where the primary behavior is clearly stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially does: 'append a fragment' strongly implies the append parameter, and 'an Agent's' implies agentIdOrAddress refers to the agent being modified. However, there is no explicit parameter-level guidance about identifier formats, content formatting, or constraints beyond what the schema's minLength already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action ('Append') and a specific resource (an Agent's SOUL.MD), and further clarifies that SOUL.MD is the agent's evolving identity/private notes. This distinguishes it from the sibling tool ethora-agent-soul-set, which presumably replaces rather than appends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is appropriate: when you want to append a fragment to an agent's SOUL.MD rather than replace it. It also provides caller context by noting that it is operator-driven and that the agent can self-edit when called by ai-service. However, it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agent-soul-setSet Agent PromptA
Idempotent
Inspect

Replace an Agent's SOUL.MD with the provided markdown. Operator-driven; alternative to -append.

ParametersJSON Schema
NameRequiredDescriptionDefault
soulMdYesReplace SOUL.MD contents. Pass empty string to clear.
agentIdOrAddressYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=true, which the description aligns with by stating 'Replace'. The description adds that it is 'Operator-driven', giving insight into intended use. It does not contradict the annotations. While it could disclose more about the overwrite behavior (e.g., irreversibility), the annotation coverage lowers the burden, and the description provides sufficient additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The core action is front-loaded, and the distinction from the append tool is included. Every word earns its place, making it highly scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple set operation with only two parameters and no output schema, the description covers the basic action and a hint about usage context (operator-driven, alternative to append). However, it omits any mention of expected behavior beyond replacement, such as what happens to the previous SOUL.MD, any prerequisites, or error handling. Given the simplicity, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: the soulMd parameter has a description, but agentIdOrAddress has none. The description does not compensate for the undocumented parameter—it provides no explanation of what 'agentIdOrAddress' refers to or its format. Since coverage is moderate and the description adds no parameter-level detail, it fails to help the agent correctly populate the undocumented field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Replace an Agent's SOUL.MD with the provided markdown.' It identifies the resource (Agent's SOUL.MD) and distinguishes itself from the sibling tool ethora-agent-soul-append by calling itself an 'alternative to -append'. This makes it easy for an agent to understand exactly what this tool does and how it differs from similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that this is 'Operator-driven' and positions it as an alternative to -append, which implies it is used when the entire SOUL.MD should be overwritten rather than appended to. However, it does not explicitly state when to use this tool versus the append variant beyond this single phrase, nor does it mention any preconditions or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-agents-update-v2Update AgentA
Idempotent
Inspect

Update a saved AI agent (PUT /v2/agents/:agentId). All fields are optional — only what you pass is updated. Common uses: tune the system prompt after a test run, switch responseMode to control turn-taking in multi-agent rooms, or adjust cooldownSec. See ethora-agents-quickstart prompt for the end-to-end recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew display name. For multi-agent scenarios prefer single-word names — the @-mention matcher uses exact display-name match with word-boundary.
slugNoURL-safe slug.
isRAGNoEnable RAG retrieval.
promptNoUpdated system prompt (persona + behaviour). For multi-agent rooms instruct the agent to end every message with an @-mention of the next speaker — that's how turn-handoff works through the response gate.
agentIdYesMongo _id (24 hex chars) of the agent to update.
ragTagsNoRAG tag filter.
summaryNoShort bio.
triggerNoLegacy trigger field. Prefer `responseMode`.
llmModelNoLLM model override.
categoriesNoCategory tags for directory listings.
visibilityNo'private' or 'public' (cross-app invitable).
cooldownSecNoMinimum seconds between this agent's replies in a given room. Damped 2x for bot-to-bot. Set 0 for quick turn-taking.
isPublishedNoConvenience alias for visibility='public'.
llmProviderNoLLM provider override.
botAvatarUrlNoAvatar image URL.
responseModeNoWhen the agent replies. 'always' = every message; 'mentioned' = only @-mention or /bot (best for multi-agent turn-taking); 'smart' = mini-LLM decides; 'probability' = coin-flip using `responseProbability`.
botDisplayNameNoDisplay name in chat UI.
greetingMessageNoMessage the agent posts when it first joins a new room.
responseProbabilityNoIf responseMode='probability', odds (0-1) of replying. Damped 0.6x for bot-to-bot.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds important behavioral context beyond annotations: despite being a PUT endpoint, it behaves as a partial update. It also explains practical effects of responseMode and cooldownSec. Annotations already cover idempotency and non-destructiveness, so the description supplements rather than repeats them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: operation/endpoint first, then update semantics, then common use cases and a recipe pointer. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The 19-parameter schema is fully documented and annotations cover idempotency/safety. The description adds operation semantics, typical workflows, and a quickstart reference. It does not describe response/error format, but the absence of an output schema makes that less critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds selection value by tying prompt, responseMode, and cooldownSec to concrete scenarios and clarifies that all fields except agentId are optional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update a saved AI agent' with the endpoint 'PUT /v2/agents/:agentId'. It is clearly distinguishable from sibling tools like ethora-agents-create-v2, ethora-agents-delete-v2, and ethora-agents-clone-v2.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains the partial-update semantics ('All fields are optional — only what you pass is updated') and gives concrete common uses: tuning the prompt after a test run, switching responseMode for turn-taking, and adjusting cooldownSec. It points to the quickstart recipe for the end-to-end flow, though it does not explicitly contrast with create/get tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-api-key-createCreate API KeyAInspect

Mint a long-lived, revocable API key for the currently logged-in user. The key is a user token: send it as Authorization: Bearer <key> to the hosted MCP endpoint (or set it in the stdio client) to skip ethora-user-login. Shown once. Auth: user auth (logged in). Errors: 401 not logged in; 404 on backends without API key support.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLabel to recognise the key later (e.g. `ci-runner`, `claude-desktop`).
ttlDaysNoLifetime in days. Server default applies when omitted.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that the key is long-lived, revocable, shown only once, and tied to the current user's session. It also documents auth requirements and error cases (401, 404 on unsupported backends), which materially helps an agent handle the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: action first, usage next, then one-time visibility and error/auth notes. Every sentence contributes a distinct operational fact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter creation tool with no output schema, it covers auth, errors, usage, and the one-time display caveat, which is enough to invoke it correctly. It does not specify the exact response shape, so an agent still has to infer how the returned key is surfaced, but the 'Shown once' note mitigates this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the parameter descriptions are already meaningful. The text does not add further parameter-level detail, so this dimension sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific action 'Mint a long-lived, revocable API key' and scopes it to the currently logged-in user. This clearly differentiates creation from the sibling list/revoke tools without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the prerequisite ('logged-in user') and the practical context: the key is a Bearer token that enables API access and bypasses ethora-user-login. It does not explicitly name list/revoke as alternatives or give when-not-to-use conditions, but the creation use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-api-key-listList API KeysA
Read-only
Inspect

List the current user's API keys (id, name, createdAt, expiresAt). Token values are never returned. Auth: user auth.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that token values are never returned and that user auth is required, which are behavioral traits not covered by annotations. This adds value without contradicting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero redundancy. Front-loaded with the resource and fields, then the crucial security note about token values never being returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description covers everything an agent needs: the resource, the returned fields, the auth requirement, and the key security caveat. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so schema coverage is trivially 100%. The description adds nothing about parameters (none exist), but the baseline for 0-param tools is 4, and the description appropriately focuses on return fields and auth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'List the current user's API keys'. Specifies exactly which fields are returned (id, name, createdAt, expiresAt). Distinct from siblings like ethora-api-key-create and ethora-api-key-revoke by the clear read-only action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage: for listing keys of the current user, and notes auth requirement. Does not explicitly contrast with create/revoke, but the action is unambiguous and the scope ('current user') is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-api-key-revokeRevoke API KeyA
DestructiveIdempotent
Inspect

Revoke one of the current user's API keys by id. Clients using that key stop working immediately. Auth: user auth. Errors: 404 unknown id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAPI key id as returned by `ethora-api-key-create` / `ethora-api-key-list`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and idempotent behavior. The description adds valuable context beyond annotations: clients using the key stop working immediately, authentication is required, and unknown ids return 404. This directly informs the agent of consequences and preconditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence is purposeful and information-dense: purpose, immediate consequence, auth requirement, and error case. The core action is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive action with annotations covering safety and idempotence, the description covers purpose, auth, error handling, and real-world effect. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the id source at 100% coverage. The description adds ownership meaning ('current user's API keys') and error behavior for unknown ids, going slightly beyond the schema while remaining relevant to using the parameter correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Revoke'), the resource ('API keys'), ownership scope ('current user's'), and the selection mechanism ('by id'). It is clearly distinct from the sibling create/list tools without needing to inspect them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is clear: revoke a specific API key belonging to the current user. It also provides useful contextual warnings (immediate effect) and error semantics, though it does not explicitly contrast with alternatives like app-token revocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-createCreate AppAInspect

Create a new Ethora app (tenant) owned by the currently logged-in user. Allocates a fresh 24-char hex appId and sets the caller as owner; counts against the owner's plan limit. Returns the new app object including appId. Auth: user-auth mode, active session (ethora-user-login first). Errors: 401 not logged in; 402/403 plan limit reached; 422 invalid displayName. Related: server-side provisioning uses ethora-b2b-app-create.

ParametersJSON Schema
NameRequiredDescriptionDefault
displayNameYesHuman-readable app name shown to users in the app picker and on the public landing page. Not required to be unique across accounts.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations mark readOnlyHint=false, the description adds meaningful side-effect context: a fresh appId is allocated, the caller becomes owner, and the action counts against the owner's plan limit. It also documents expected errors (401/402/403/422) and the return value, going well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: the first covers behavior and side effects, the second covers auth and errors, the third points to the related alternative. Every sentence adds information and the most important fact is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter creation tool with no output schema, the description covers purpose, auth prerequisite, side effects, error conditions, and the return value. It is fully sufficient for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage for displayName with a clear human-readable explanation. The tool description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create a new Ethora app (tenant) owned by the currently logged-in user.' It further clarifies the outcome by stating it allocates a fresh 24-char hex appId and sets the caller as owner, which clearly distinguishes this from related tools like ethora-b2b-app-create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the intended context: user-auth mode with an active session via ethora-user-login first. It also names the alternative for server-side provisioning, ethora-b2b-app-create, making the boundary between the two clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-create-chatCreate Chat RoomAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex ObjectId of the app to create the chat room in. Optional — defaults to the app most recently passed to `ethora-app-select`.
titleYesDisplay name for the new chat room. Visible to all members; not required to be unique within the app.
pinnedNoIf `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.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important side effects beyond the annotations: every created room is listed in defaultRooms, pinned=true only affects new users (existing users are not added), and the response includes the new room object with its JID. It also lists concrete auth and error conditions, which is substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: core action first, then side effects, return value, auth, and errors. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description covers prerequisites, side effects, return shape, and error codes. An agent has enough information to invoke it safely and understand the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parameter nuance: pinned=true does not add existing users, and rooms are placed in the app's defaultRooms. This goes slightly beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Create a new chat room (MUC room) inside an app the caller owns.' This clearly distinguishes the tool from siblings like ethora-app-delete-chat and chat-message tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when the tool is appropriate: the caller must own the app and have an active user-auth session. It explains pinned vs. non-pinned behavior for auto-join, though it does not explicitly name alternatives or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-deleteDelete AppA
DestructiveIdempotent
Inspect

Permanently delete an Ethora app the caller owns — removes its chat rooms, files, indexed RAG sources, and bot config; end users are immediately signed out. Irreversible; gated behind ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true. Auth: user-auth mode, active session; the caller must own the app. Errors: 401 not logged in; 403 not owner; 404 unknown appId. Related: to just deactivate the bot use ethora-app-update with botStatus: "off".

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYes24-char hex MongoDB ObjectId of the app to delete. Obtain from `ethora-app-list` or the response of `ethora-app-create`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes well beyond them by detailing what gets removed (chat rooms, files, indexed RAG sources, bot config), immediate user sign-out, irreversibility, the environment variable gate, and error conditions. This is rich behavioral context with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well organized: primary effect and consequences first, then safety gate, auth requirements, error semantics, and a related alternative. Every sentence adds operational value without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool, the description covers what the action does, what it destroys, who may call it, what can go wrong, and what safer alternative exists. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the appId parameter is already well documented with its format and how to obtain it. The description adds ownership and 404 context but does not substantially extend parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('permanently delete an Ethora app the caller owns') and lists concrete consequences. It clearly distinguishes itself from related operations like ethora-app-delete-chat and ethora-app-update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says the caller must own the app, requires user-auth active session, and names the safety gate ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true. It also points to an alternative for deactivating the bot via ethora-app-update with botStatus: 'off'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-delete-chatDelete Chat RoomA
DestructiveIdempotent
Inspect

Permanently delete a chat room from an app the caller owns — removes the MUC room, its message archive, and all member affiliations. Irreversible; gated behind ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true. Auth: user-auth mode, active session; the caller must own the app. Errors: 401 not logged in; 403 not owner; 404 chatJid not a room in the app.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex ObjectId of the app the chat room belongs to. Optional — defaults to the app most recently passed to `ethora-app-select`.
chatJidYesRoom 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`.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint/readOnlyHint annotations, the description discloses what is destroyed (MUC room, archive, affiliations), irreversibility, the configuration gate, authentication mode, and exact 401/403/404 failure semantics. This is rich behavioral context that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence carries operational value: effect, permanence, gate, auth, and errors. The most important fact (permanent deletion) is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter tool with no output schema, the description covers the outcome, prerequisites, configuration requirement, and all likely failure modes. Nothing essential for an agent to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents appId's default behavior and chatJid's format and source tools. The description adds no parameter-specific detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Permanently delete a chat room from an app the caller owns' and details the exact scope (removes MUC room, message archive, member affiliations). This clearly separates it from sibling tools like ethora-app-delete (app-level deletion) and ethora-app-create-chat (creation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear invocation context: user-auth mode with an active session, app ownership, and the ETHORA_MCP_ENABLE_DANGEROUS_TOOLS=true gate. It does not explicitly name alternatives or state when not to use it, but the prerequisites and error conditions effectively guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-export-v2Export AppA
Read-onlyIdempotent
Inspect

Export an App as a portable bundle (GET /v2/apps/:appId/export). format=json returns the bundle object directly. Use include to select sections (e.g. 'chats,users,sources,botInstances'). Feed the result to ethora-app-import-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoRequired in B2B mode unless already selected via ethora-app-select.
formatNo
includeNoComma-separated sections to include, e.g. 'chats,users,sources,botInstances'.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, idempotent, and non-destructive hints, lowering the bar. The description adds useful behavior: format=json returns the bundle object directly, include selects sections, and the result feeds import. It leaves format=zip behavior unspecified, but this is a minor gap given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences with the core purpose front-loaded, followed by format behavior and import workflow guidance. No filler, no restatement of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only export tool with rich annotations, the description covers the essentials: endpoint, format effect, include usage, and the downstream import step. The only missing items are the default include sections and what zip format returns, which would be useful given the absent output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema documents appId and include but leaves format with only an enum. The description adds real semantics by explaining that format=json returns the bundle object directly and by giving a concrete include example, compensating for the undocumented format behavior. appId's B2B-mode nuance remains in the schema, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Export'), a specific resource ('App'), and a concrete deliverable ('portable bundle'), along with the exact endpoint. The explicit reference to ethora-app-import-v2 distinguishes this from the import counterpart and other app-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear workflow context by directing the agent to feed the result to ethora-app-import-v2, establishing when this tool is needed. The schema adds appId context for B2B mode. However, it does not explicitly state when not to use it or contrast it with agent-level export tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-get-default-roomsGet Default RoomsA
Read-only
Inspect

List the default chat rooms (MUC rooms) of the currently selected Ethora app — every new user auto-joins these. Returns rooms with their JIDs and titles. Auth: user-auth mode, active session; operates against the app set via ethora-app-select. Errors: 400 no app currently selected; 401 not logged in. Related: ethora-app-get-default-rooms-with-app-id to pass appId explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds meaningful context beyond annotations: auth mode ('user-auth mode, active session'), the dependency on `ethora-app-select`, and specific error codes (400 no app selected, 401 not logged in). This is useful operational detail not present in the annotations. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient: a first sentence states the core action and outcome, a second sentence covers auth and errors, and the final line names the related tool. Every sentence earns its place, and the key purpose is front-loaded. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with no parameters and no output schema, the description covers all essentials: what it returns (rooms with JIDs and titles), the auth requirement, the dependency on a previously selected app, error conditions, and the alternative for explicit appId. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty (0 parameters), so there is nothing to document. The description correctly does not invent parameters. Baseline for 0 params is 4, and the description does not need to add anything about parameters. It effectively communicates that no parameters are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a specific resource ('default chat rooms (MUC rooms) of the currently selected Ethora app'), and clarifies the auto-join behavior. It also distinguishes itself from the sibling by naming the alternative that takes an explicit appId. This is a clear, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly references the sibling tool `ethora-app-get-default-rooms-with-app-id` and explains when to use it (to pass `appId` explicitly). It also states the prerequisite that an app must be selected via `ethora-app-select`. This gives clear when-to-use and when-not-to-use guidance, with an alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-get-default-rooms-with-app-idGet Default Rooms for AppA
Read-only
Inspect

List the default chat rooms of a specific Ethora app, passed via appId (or the currently selected app). Returns rooms with their JIDs and titles. Auth: user-auth mode, active session; the caller needs read access (ownership or room membership). Errors: 400 no appId and none selected; 401 not logged in; 403 no read access; 404 unknown appId.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-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`.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses authentication requirements ('user-auth mode, active session'), permission prerequisites ('read access: ownership or room membership'), and enumerates the relevant error cases (400, 401, 403, 404). This is substantial behavioral context that the annotations do not provide, and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action and return values appear first, followed by tightly packed auth and error information. Every clause earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema, the description is nearly complete: it covers return payload fields, default parameter behavior, auth requirements, and failure modes. The only material gap is the lack of explicit guidance distinguishing this tool from the similarly named ethora-app-get-default-rooms sibling, leaving the agent to infer the difference from the name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes appId, including that it is optional and defaults to the app most recently passed to ethora-app-select. The description only paraphrases this behavior and adds no new parameter format or usage semantics beyond the schema, so the 100% schema coverage baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List the default chat rooms of a specific Ethora app,' and it specifies the returned fields (JIDs and titles). However, it never references the near-identical sibling ethora-app-get-default-rooms, so differentiation must be inferred from the tool name rather than the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear invocation context: appId is optional and defaults to the currently selected app, and it states the required auth mode and read-access conditions. It does not explicitly explain when to choose this tool over ethora-app-get-default-rooms or other listing siblings, so alternatives are not named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-import-v2Import AppAInspect

Import an App from a bundle produced by ethora-app-export-v2 (POST /v2/apps/import, application/json body IS the bundle). B2B / tenant-actor auth. domainNameOverride renames the imported App's domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleNoThe exported bundle object (the json export output).
domainNameOverrideNoRename the imported App's domainName.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnly=false, idempotent=false, and destructive=false. The description adds useful behavioral context by specifying B2B/tenant-actor auth, that the JSON body is the bundle, and that domainNameOverride renames the imported domain. It does not detail side effects such as duplicate-import behavior, but the annotation set lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver the action, source, endpoint, body format, auth mode, and the override behavior. No filler or repetition of the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers auth, endpoint, bundle provenance, and the optional override, which is enough to make the call. It does not clarify the apparent optionality of bundle (required parameters are 0) or describe the success/error return shape, but those are secondary for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description enriches the bundle parameter by naming its producer (ethora-app-export-v2) and explaining the body transport semantics, going beyond the schema's 'exported bundle object' wording. domainNameOverride's effect is essentially restated, not expanded.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Import an App from a bundle produced by ethora-app-export-v2.' It also states the exact endpoint (POST /v2/apps/import), which separates it from create/update/export siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context: use this when you have a bundle produced by ethora-app-export-v2. It does not explicitly contrast with ethora-app-create or state when not to use it, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-listList AppsA
Read-only
Inspect

List all Ethora apps (tenants) owned by the currently logged-in user. Returns an array with appId (24-char hex), displayName, domainName, ownership and bot-status metadata. Auth: user-auth mode, active session (ethora-user-login first). Errors: 401 not logged in; empty list if the user owns no apps. Related: feed appId into ethora-app-update / ethora-app-select.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, and the description adds valuable behavioral detail: the exact return fields, the 401 error when not logged in, and the empty-list result when the user owns no apps. This fully informs an agent of expected behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-ordered: the core purpose comes first, followed by return shape, auth requirements, error behavior, and related tools. Every sentence contributes useful information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description properly explains what the tool returns (array with appId, displayName, domainName, ownership and bot-status metadata). Combined with annotations and the empty-parameter schema, nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and 100% schema coverage, so there is no parameter ambiguity. The baseline for a zero-parameter tool is 4; the description needs no further parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('all Ethora apps (tenants) owned by the currently logged-in user'). It distinguishes this tool from the many app-related siblings by emphasizing ownership scope and the current user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear prerequisites (user-auth mode, active session after ethora-user-login) and downstream use cases via the Related line. It does not explicitly contrast with alternatives, but no equivalent list sibling exists, so this is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-selectSelect AppA
Idempotent
Inspect

Set the current app context for this session so app-scoped tools can omit their appId argument. Stores currentAppId and, if given, appToken (which defaults the auth mode to app-token unless authMode overrides). Auth: none required to set the context. Errors: effectively none — a non-existent appId is not validated here; the first app-scoped API call surfaces the 404. Related: pairs with ethora-auth-use-app.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYes24-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.
appTokenNoPer-app appToken to store alongside the appId. If provided, the active auth mode switches to app-token (unless `authMode` says otherwise). Secret.
authModeNoAuth 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.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations include idempotentHint=true and destructiveHint=false, indicating a non-destructive, idempotent operation. The description adds valuable behavioral context: it stores `currentAppId` and possibly `appToken`, defaults the auth mode to app-token under conditions, and notes that errors are deferred to the first app-scoped API call. This goes beyond annotations by explaining the session state mutation and error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet informative, with key information front-loaded. It avoids redundancy and presents the most critical behavioral effects (storing context, auth mode defaults) early, followed by error handling and related tools. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema, no nested objects), the description is adequately complete. It covers all necessary aspects: purpose, parameters, auth, errors, and relation to siblings. The only minor omission is explicit mention of how to retrieve a valid `appId` (though the parameter description covers that), so it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters clearly. The description reinforces the semantics of `appToken` and `authMode` by explaining their interplay (e.g., appToken defaults auth mode to app-token unless overridden), but does not add new meaning beyond that. Since coverage is high, a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to set the current app context for the session, enabling app-scoped tools to omit their `appId` argument. It uses specific verbs ('set') and resource ('current app context'), and mentions the effects on `appId` and `appToken`. While the name and title are somewhat generic, the description adds precise detail about the session context and its implications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: to set the current app context, and pairs it with `ethora-auth-use-app` as related. It also clarifies that no authentication is required to set the context, and that a non-existent `appId` is not validated here. This provides clear guidance on prerequisites and when to use it versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-tokens-create-v2Create App TokenAInspect

Mint a new app token for an app. The secret token value is returned exactly once and cannot be retrieved again — capture it immediately. Returns the new token including its one-time secret value and tokenId. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode; 400 no appId and none selected; 404 unknown appId. Related: manage with ethora-app-tokens-list-v2 / -rotate-v2 / -revoke-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to mint the token for. Optional — defaults to the app set via `ethora-app-select`.
labelNoHuman-readable label to identify this token later (e.g. `staging`, `ci`). Shown in `ethora-app-tokens-list-v2`.
timeoutMsNoHTTP timeout for this request, in milliseconds. Default 10000.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond annotations by disclosing that the secret is returned exactly once and can never be retrieved again, instructing the agent to capture it immediately, and listing auth and error behavior. Annotations only signal readOnly=false, idempotent=false, destructive=false; the description adds critical operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: purpose, one-time-secret warning, return fields, auth, errors, and related tools. Every sentence earns its place, and the most critical warning is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only 3 optional parameters, no output schema, and no nested objects, the description covers what the agent needs: return shape, irrecoverable secret, auth prerequisites, error codes, and related tools. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents appId's default behavior, label's purpose, and timeoutMs default. The description does not materially add parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Mint a new app token for an app,' a specific verb and resource, and clarifies it returns the token plus tokenId. It also names related management tools, making the create-vs-manage distinction explicit and separating it from list/rotate/revoke siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Auth prerequisites (B2B mode + b2bToken) and common error cases are stated directly. Related tools are named, though it does not explicitly phrase 'use this when you need a new token' as an exclusionary guideline; still, the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-tokens-list-v2List App TokensA
Read-only
Inspect

List the app tokens issued for an app — metadata only (tokenId, label, created/rotated timestamps, status); the secret token values are never returned (only shown once at create/rotate time). Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode; 400 no appId and none selected; 404 unknown appId.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to list tokens for. Optional — defaults to the app set via `ethora-app-select`.
timeoutMsNoHTTP timeout for this request, in milliseconds. Default 10000.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the key behavioral detail that secret token values are never returned (only shown once at create/rotate time), which is crucial for agents to avoid expecting secrets in responses. It also discloses auth requirements and error codes, adding value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the core function and return details, the second covers auth and error codes. It is front-loaded with the primary purpose and wastes no words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with 2 optional parameters, the description covers the essential context: what it returns, the auth prerequisite, and error conditions. The absence of an output schema is mitigated by the description listing the returned metadata fields. It could mention pagination or result limits, but these are not critical for this tool given its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the parameters with descriptions for both appId and timeoutMs. The description itself does not add parameter-specific semantics, but since the schema is complete, the baseline of 3 is appropriate. No additional information is needed from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists app tokens and specifies the metadata fields returned (tokenId, label, timestamps, status), explicitly distinguishing it from token creation, rotation, and revocation siblings. The purpose is unambiguous and actionable for an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit auth requirement (B2B mode with ethora-auth-use-b2b and a configured b2bToken), which tells an agent when the tool is usable. It also lists error conditions (401/403, 400, 404) that clarify failure scenarios. However, it doesn't explicitly contrast with create/rotate/revoke alternatives, though the operation name and description make that obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-tokens-revoke-v2Revoke App TokenA
DestructiveIdempotent
Inspect

Permanently revoke an app token by tokenId — it stops working immediately; any client, SDK, or MCP session still using it gets auth failures. No replacement is issued. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode; 400 no appId and none selected; 404 unknown appId. Related: get tokenId from ethora-app-tokens-list-v2; ethora-app-tokens-rotate-v2 for revoke-and-replace.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId the token belongs to. Optional — defaults to the app set via `ethora-app-select`.
tokenIdYesId of the token to revoke. Get it from `ethora-app-tokens-list-v2`.
timeoutMsNoHTTP timeout for this request, in milliseconds. Default 10000.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and idempotent behavior, but the description adds crucial details: immediate invalidation, no replacement issued, and specific auth prerequisites. It also discloses expected error conditions, which is beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core action and effect, then efficiently covers auth, errors, and related tools in a second sentence. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation, it fully covers prerequisites (B2B), how to obtain the required tokenId, what to expect on success/failure, and alternatives. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already has a clear description. The description reinforces the source of tokenId and the default behavior of appId, but adds little new parameter-specific meaning beyond the schema. It earns a 4 for the useful cross-reference to list-v2.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('permanently revoke'), the resource ('app token'), and the identifier ('by tokenId'), and immediately conveys the consequence (stops working, auth failures). It distinguishes itself from sibling tools like rotate (revoke-and-replace) and list (source of tokenId).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit context: B2B mode requirement, error codes for common failure scenarios, and points to related tools (list for tokenId, rotate for revoke-and-replace). This gives the agent clear guidance on when to use this tool and what alternatives exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-tokens-rotate-v2Rotate App TokenA
DestructiveIdempotent
Inspect

Rotate an app token: revoke an existing token and issue a replacement in one step. The old tokenId is revoked immediately — anything using it stops working at once. The new secret value is returned exactly once — capture it immediately. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode; 400 no appId and none selected; 404 unknown appId or tokenId. Related: ethora-app-tokens-revoke-v2 to revoke without a replacement.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId the token belongs to. Optional — defaults to the app set via `ethora-app-select`.
labelNoLabel for the replacement token. Omit to inherit the old token's label.
tokenIdYesId of the token to revoke and replace. Get it from `ethora-app-tokens-list-v2`.
timeoutMsNoHTTP timeout for this request, in milliseconds. Default 10000.

TDQS

A3.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that the old token is revoked immediately and the new secret is returned exactly once, implying that repeating the call with the same `tokenId` would not yield the same secret again. This contradicts the annotation `idempotentHint: true`, which claims the operation is idempotent. Because the description contradicts a stated annotation, it earns a score of 1 and flags an annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose. It packs essential operational details (immediate revocation, one-time secret, auth requirements, error codes) into a concise block without unnecessary fluff. It earns a 4 rather than a 5 because it could be slightly more streamlined (e.g., the error list is a bit verbose), but it is still efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers operational consequences (immediate revocation, one-time secret), auth constraints, and likely error codes. Since there is no output schema, it explains the critical output ('new secret value is returned exactly once') adequately. However, it leaves some ambiguity about idempotency (a conflict with annotations) and does not describe the response format beyond the secret, so it is not fully complete. Given the tool's destructive nature and the absence of an output schema, a 4 is reasonable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all four parameters, so the schema already explains their meanings. The description adds a little extra context (e.g., that `tokenId` is the token to revoke, and that `appId` defaults to the selected app), but this is largely redundant with the schema. Baseline 3 is appropriate because the description does not significantly deepen parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Rotate an app token: revoke an existing token and issue a replacement in one step.' It names the resource and the verb, and it distinguishes itself from the sibling `ethora-app-tokens-revoke-v2` which revokes without a replacement. This makes the tool's purpose immediately obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: it mentions the required B2B auth mode and the prerequisite of having a `b2bToken`. It also explicitly names a related alternative (`ethora-app-tokens-revoke-v2`) and the condition for choosing it ('to revoke without a replacement'). This is clear, actionable guidance on when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-app-updateUpdate AppA
Idempotent
Inspect

Update mutable fields on an app the caller owns (displayName, domainName, appDescription, primaryColor, botStatus). Partial update — omitted fields are left unchanged. Auth: user-auth mode, active session; the caller must own the app. Errors: 401 not logged in; 403 not owner; 404 unknown appId; 422 validation (e.g. domainName taken, primaryColor not #RRGGBB).

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex ObjectId of the app to update. Optional — defaults to the app most recently passed to `ethora-app-select`.
botStatusNo`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.
domainNameNoSubdomain 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.
displayNameNoNew human-readable app name. Visible in the app picker and on the public landing page.
primaryColorNoPrimary brand color in hex `#RRGGBB` format (e.g. `#F54927`). Used throughout the app UI.
appDescriptionNoLong-form description shown on the public app landing page.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial value beyond the annotations: it discloses partial-update behavior (omitted fields unchanged), requires user-auth and ownership, and enumerates specific error conditions with status codes. This gives the agent a precise mental model of side effects and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose and field list first, then partial-update behavior, then auth and errors. Every sentence carries operational information, with no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema, the description covers the essential operational context: what fields change, partial-update semantics, auth requirements, ownership constraint, and all relevant error paths. An agent has enough information to call the tool correctly and interpret failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter thoroughly. The description still adds useful context by framing all listed fields as mutable app attributes and stating that omitted fields remain unchanged, which clarifies how the optional parameters behave collectively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update'), a clear resource ('an app the caller owns'), and enumerates the exact mutable fields. It also clarifies the partial-update semantics, making the tool's purpose unambiguous and easily distinguishable from app create/delete/select siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: the caller must own the app and have an active user-auth session, and only mutable fields are affected. It does not explicitly name alternative tools or state when not to use it, but the ownership and field-scope guidance is enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-auth-use-appUse App Token AuthA
Idempotent
Inspect

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, ETHORA_APP_TOKEN env, or ethora-app-select). Errors: returns an error if no appToken is configured. Related: use after ethora-app-select.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the annotations by explaining that the tool mutates the session's active auth mode, requires a pre-configured appToken, and errors if one is missing. Annotations already cover idempotency and non-destructiveness, so the description appropriately supplements them rather than repeating them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the primary action, then uses labeled 'Auth', 'Errors', and 'Related' sections to convey prerequisites, failure modes, and sequencing. Every sentence earns its place, and there is no redundant or irrelevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless session-state switch with no output schema, the description is complete: it states the effect, prerequisites, error condition, and recommended usage order. An agent has enough information to invoke it correctly and to understand the consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters, and the schema description coverage is 100%, so there are no parameter details to clarify. The description still adds useful context about the configured appToken that indirectly affects behavior, which is appropriate for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: it switches the session's active auth mode to app-token, which is specific and actionable. It does not explicitly name sibling auth tools like ethora-auth-use-b2b or ethora-auth-use-user, but the app-token scope makes the distinction reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete prerequisites and sequencing: appToken must already be configured via ethora-configure, ETHORA_APP_TOKEN, or ethora-app-select, and it recommends using this tool after ethora-app-select. It does not explicitly list when not to use it or mention alternative auth-mode tools, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-auth-use-b2bUse B2B AuthA
Idempotent
Inspect

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 (JWT with type=server) to already be configured (via ethora-configure or ETHORA_B2B_TOKEN env). Errors: returns an error if no b2bToken is configured. Related: server-side automation — pairs with ethora-b2b-app-create, ethora-users-batch-create-v2, ethora-app-tokens-*-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral detail beyond the annotations: it discloses the session-scoped side effect, the exact x-custom-token header mechanism, the required JWT type, how to configure it, and the error case when it is missing. These are precisely the operational details an agent needs to invoke this tool safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact, front-loaded sentences cover purpose, auth requirements, errors, and related tools. Every sentence contributes operational value and nothing is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter state-switching tool, the description thoroughly covers purpose, prerequisite, error behavior, and related tools. It omits an explicit comparison with app/user auth siblings and a success return value, but neither is essential given the provided context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no schema semantics to clarify. Given the zero-parameter baseline, the description does not need to compensate for any parameter documentation gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific action—switching the session's active auth mode to B2B—and states the concrete consequence: subsequent calls authenticate as a tenant actor via the x-custom-token header. The B2B scope and tenant-actor wording distinguish it clearly from the sibling auth-use-app and auth-use-user tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: server-side automation, paired with specific B2B tools. It also states the prerequisite (b2bToken configured via ethora-configure or ETHORA_B2B_TOKEN env) and the failure mode if it is absent. It does not explicitly call out auth-use-app or auth-use-user as alternatives, but the context is sufficient for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-auth-use-userUse User AuthA
Idempotent
Inspect

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-auth tools only work once ethora-user-login stores a user token (login also needs a configured appJwt). Errors: none on the switch; downstream tools return 401 until login succeeds. Related: follow with ethora-user-login.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses behavioral details beyond the annotations: it states the switch itself requires nothing and causes no errors, but downstream tools will return 401 until login succeeds. This gives agents accurate expectations about side effects and dependencies. It does not contradict any annotation and adds useful context about the required token.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences that are front-loaded with the core purpose, then add required context (auth requirements, errors, related tool) in a logical order. No extraneous words; every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and no output schema, the description covers the essential information: what it does, prerequisites, error behavior, and a related next step. It omits explicit mention of alternative auth modes, but those are visible in sibling names, so the description is complete enough for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema trivially covers 100% of them. The baseline for a zero-parameter tool is 4. The description adds no parameter information because none exists, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action: 'Switch this session's active auth mode to user-session' and the outcome: 'subsequent calls authenticate as a logged-in Ethora user.' This is not a tautology and distinguishes the user-session mode from other auth modes present in the sibling tools (ethora-auth-use-app, ethora-auth-use-b2b), though it does not explicitly name them. It is slightly under the top score because it could have explicitly contrasted with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: it states the prerequisite (login via ethora-user-login storing a user token), the error behavior (downstream 401 until login), and a related next step ('follow with ethora-user-login'). It does not explicitly say when to use this tool vs the app or b2b auth switches, but the provided flow is clear for the user-auth path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-b2b-app-bootstrap-aiBootstrap AI App (B2B)AInspect

One-call B2B orchestrator: create an app, set it as the current context, index RAG sources, then configure and enable its AI bot. Source ingest and bot activation are best-effort (the app is still created if a later step fails); crawl/embedding continues asynchronously after this returns. Returns a per-step log including the new appId. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken); internally switches to app-token mode for source-ingest steps. Errors: aborts with the partial step log if app creation fails; previous auth mode restored best-effort. Related: rooms+tokens variant is ethora-b2b-app-provision.

ParametersJSON Schema
NameRequiredDescriptionDefault
docsNoOptional docs to ingest (base64)
crawlUrlNoOptional website URL to crawl and index into the new app's RAG sources.
llmModelNoOptional generation model for the default AI bot (example: 'gpt-4o-mini').
enableBotNoIf true, enables botStatus=on (best-effort AI service activation)
botTriggerNoOptional bot trigger (e.g. '/bot' or 'any_message')
followLinkNoFor `crawlUrl`: also follow in-domain links (default true). Can ingest many pages.
agentPromptNoPhase 1: persona/instructions for the newly-created Agent.
displayNameYesDisplay name for the new app.
llmProviderNoOptional generation provider for the default AI bot (example: 'openai' or 'openai-compatible').
savedAgentIdNoOptional saved agent to bind as the active bot for the new app.
setAsCurrentNoIf 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.
agentVisibilityNoPhase 1: visibility for the newly-created Agent.
agentDisplayNameNoPhase 1: create a new Agent with this display name as part of bootstrap.
inviteToDefaultRoomNoPhase 1: if true (default), invite the newly-created Agent into the App's first default room.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations (which only indicate non-read-only, non-destructive, non-idempotent) by disclosing critical behaviors: best-effort source ingest and bot activation (app is still created if later steps fail), asynchronous crawl/embedding that continues after return, a per-step log including appId, internal auth mode switching, error handling with partial step log on app creation failure, and best-effort restoration of the previous auth mode. These details are essential for an agent to correctly interpret outcomes and handle failures, and they are not contradicted by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured logically: first the core purpose, then the best-effort and async caveats, then auth and error behavior, and finally the related variant. Every sentence delivers necessary information without redundancy or filler. The front-loaded purpose sentence immediately tells an agent what the tool does, and the subsequent details are packed but concise. It is appropriately sized for the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (14 parameters, multi-step orchestration, auth switching, async behavior), the description covers all essential aspects: the overall flow, failure semantics, async continuation, auth requirements, return value (per-step log with appId), and related tool. There is no output schema, but the description mentions the key return element. Nothing an agent needs to call this tool correctly is missing, and the description is sufficiently detailed for a high-complexity operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all 14 parameters (100% coverage), so the description does not need to repeat their definitions. The description does add some contextual meaning, such as noting that source ingest is best-effort and that crawl/embedding continues asynchronously, which affects how the `docs`, `crawlUrl`, and `followLink` parameters should be interpreted. However, this is supplementary; the schema already covers the parameter semantics adequately, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise, actionable statement: 'One-call B2B orchestrator: create an app, set it as the current context, index RAG sources, then configure and enable its AI bot.' It names the exact sequence of operations and the resources involved, and it distinguishes itself from a sibling by naming `ethora-b2b-app-provision` as the rooms+tokens variant. This leaves no ambiguity about what the tool does or how it differs from similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly mentions the related variant `ethora-b2b-app-provision` and frames this tool as the one-call orchestrator, implying it is the right choice when you want to perform all steps in a single invocation. It also states the auth prerequisite (B2B mode) and notes that source ingest and bot activation are best-effort, which influences whether this is appropriate for a given use case. However, it does not enumerate all possible alternatives (e.g., individual tools like ethora-app-create + ethora-sources-docs-upload), though that omission is acceptable given the tool's self-description as an orchestrator.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-b2b-app-createCreate App (B2B)AInspect

Create a new Ethora app (tenant) server-side using B2B auth — the partner/integrator equivalent of ethora-app-create. Allocates a fresh 24-char hex appId; does not create tokens, rooms, or a bot. Returns the new app object including appId. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode or invalid b2bToken; 422 invalid displayName. Related: all-in-one path is ethora-b2b-app-bootstrap-ai / ethora-b2b-app-provision.

ParametersJSON Schema
NameRequiredDescriptionDefault
displayNameYesHuman-readable app name shown to users in the app picker and on the public landing page.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing the side-effect scope: it allocates a fresh 24-char hex `appId`, does not create tokens/rooms/bot, and returns the app object. It also documents auth requirements (B2B mode + `b2bToken`) and specific error codes (401/403, 422), giving the agent a clear behavioral contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then efficiently covers scope exclusions, return value, auth, errors, and related tools in just a few sentences. No information is redundant or unnecessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a simple one-parameter create operation with no output schema, the description covers all necessary context: what the tool does, what it does not do, what it returns, auth prerequisites, error conditions, and related alternatives. Nothing critical is missing for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only one parameter and 100% schema description coverage, the schema already fully documents `displayName`. The description adds only marginal value by mentioning '422 invalid displayName' but does not provide additional semantic detail about the parameter beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Create a new Ethora app (tenant) server-side using B2B auth') and differentiates it from the similarly named `ethora-app-create` by identifying it as the partner/integrator equivalent. It also narrows the scope by explicitly listing what it does NOT do ('does not create tokens, rooms, or a bot'), making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use this tool: when operating in B2B mode, and it names the direct alternative `ethora-app-create` for the non-B2B path. It also points to `ethora-b2b-app-bootstrap-ai` / `ethora-b2b-app-provision` for an all-in-one flow, so an agent can decide between this minimal creation step and a more comprehensive operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-b2b-app-provisionProvision App (B2B)AInspect

One-call B2B orchestrator: create an app, mint one or more app tokens, provision default chat rooms, then configure and enable its AI bot. Later-step failures don't undo earlier steps. Returns a per-step log including appId and the created tokens (returned once — capture them). Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: aborts with the partial step log if app creation fails; previous auth mode restored best-effort. Related: ethora-b2b-app-bootstrap-ai does sources+bot but not tokens/rooms.

ParametersJSON Schema
NameRequiredDescriptionDefault
roomsNoDefault chat rooms to create in the new app. Up to 20.
llmModelNoLLM model id for the bot, e.g. `gpt-4o-mini`. Must be available for the chosen provider.
botPromptNoSystem prompt for the new app's bot.
enableBotNoIf true, enable the new app's bot using the first minted app token.
botTriggerNoBot trigger: `any_message` (every message) or `/bot` (only /bot-prefixed messages).
displayNameYesDisplay name for the new app.
llmProviderNoLLM provider for the bot, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend.
tokenLabelsNoLabels for the app tokens to mint, one token per label. Default: ['default']. 1–5 tokens.
savedAgentIdNoOptional id of an existing saved agent to bind as the new app's active bot, instead of setting prompt fields by hand.
botGreetingMessageNoGreeting message the bot posts when a conversation starts.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint false, openWorldHint true), the description discloses critical behaviors: later-step failures don't undo earlier steps, tokens are returned only once and must be captured, errors abort with a partial step log, and the previous auth mode is restored best-effort. This is rich, non-obvious behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose/steps, failure semantics, return behavior, auth requirement, error behavior, and sibling differentiation. It is dense but not bloated, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-step tool with no output schema, the description covers the full call sequence, return shape, failure semantics, auth prerequisite, and relationship to alternatives. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage across all 10 parameters, so the description does not need to restate parameter meanings. It adds no parameter-level detail beyond the schema, but the schema already carries that burden, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('One-call B2B orchestrator') and enumerates exactly what happens: create app, mint tokens, provision rooms, configure/enable bot. It also distinguishes itself from the closely related sibling ethora-b2b-app-bootstrap-ai, making the tool's scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the auth prerequisite explicitly ('B2B mode ... + configured b2bToken'), describes the orchestration use case, and names the alternative tool with a clear differentiator: bootstrap-ai does sources+bot but not tokens/rooms. This is strong routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-b2b-bot-enableEnable Legacy Bot (B2B)AInspect

Enable the LEGACY per-app aiBot (B2B auth). NOTE: apps created via the API/B2B no longer auto-provision a legacy aiBot, so this returns 422 BOT_NOT_INITIALIZED on a clean app. The forward path for B2B AI is the Agents API — use ethora-b2b-app-bootstrap-ai or ethora-agents-create-v2 + ethora-agent-invite-to-chat. This tool remains valid for apps that already have a legacy aiBot (e.g. admin-panel apps created with a default chat).

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId whose bot to enable. Optional — defaults to the app set via `ethora-app-select`.
botTriggerNoWhen the bot responds: `/bot` (only messages starting with /bot) or `any_message` (every message). Omit to leave the existing trigger unchanged.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a mutating operation (readOnlyHint=false) and the description adds meaningful behavioral context: the legacy status, the auto-provision change, and the 422 BOT_NOT_INITIALIZED failure mode. It doesn't contradict annotations, and it goes beyond the structured data by explaining when the operation will fail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then explains the error, the alternatives, and the valid use case. It's slightly dense but every sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the key operational details: when to use, when not to use, the failure mode, and the forward path. It doesn't discuss the effect of omitting botTrigger, but the schema covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (appId and botTrigger), each with clear descriptions. The tool description does not add extra parameter semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (enable a legacy per-app aiBot) with clear scope (B2B auth) and distinguishes it from the forward path (Agents API). It explicitly names alternative tools, making differentiation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: valid only for apps with a pre-existing legacy aiBot, and names the forward-path alternatives (ethora-b2b-app-bootstrap-ai or ethora-agents-create-v2 + ethora-agent-invite-to-chat). It also warns about the 422 error on clean apps, leaving no inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-disable-v2Disable Legacy BotA
Idempotent
Inspect

Turn the AI bot off for an app (sets bot status: "off") — it stops responding. The configured prompt/LLM/RAG and any activated agent are preserved, so re-enabling restores the same behavior. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId. Related: ethora-bot-enable-v2 to turn back on.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds beyond that by noting that 'the configured prompt/LLM/RAG and any activated agent are preserved, so re-enabling restores the same behavior,' which clarifies the non-destructive nature. It also discloses error codes. No contradiction with annotations; it reinforces them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each delivering a distinct piece of information: the core action, the preservation side effect, and auth/errors/related tool. It is front-loaded with the primary purpose and has no filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, annotations covering idempotency and non-destructiveness, and no output schema, the description covers the essential aspects: purpose, side effects, auth requirements, errors, and related tool. It does not describe the return value or success message, but that is minor given the simple nature and absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the appId parameter with 100% coverage ('24-char hex appId. Required in B2B mode unless already set via ethora-app-select; ignored in app-token mode.'). The description adds value by tying the parameter to the auth modes and explicitly stating when it is needed, reinforcing the conditional requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Turn the AI bot off for an app (sets bot status: "off") — it stops responding.' It names the specific resource (app) and the effect. It distinguishes itself from the sibling ethora-bot-enable-v2 by explicitly referencing it as the reverse operation, so an agent can immediately tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context by specifying auth modes ('app-token mode OR B2B mode with an explicit appId') and error conditions (401/403, 404). It also names the complementary tool ('Related: ethora-bot-enable-v2 to turn back on'). However, it does not explicitly state when NOT to use it (e.g., when deletion is preferred), leaving some implicit inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-enable-v2Enable Legacy BotA
Idempotent
Inspect

Enable the LEGACY per-app aiBot using app-token or B2B auth. NOTE: clean API/B2B-created apps have no legacy aiBot, so this returns 422 BOT_NOT_INITIALIZED there — use the Agents API (ethora-agents-create-v2 + ethora-agent-invite-to-chat, or ethora-b2b-app-bootstrap-ai) for B2B AI. Valid for apps that already have a legacy aiBot.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
triggerNoWhen the bot responds: `any_message` (every message) or `/bot` (only /bot-prefixed messages). Omit to leave the existing trigger unchanged.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses a key behavioral trait: it fails with 422 BOT_NOT_INITIALIZED on clean API/B2B-created apps. It also clarifies the legacy-only applicability, which helps an agent anticipate failure modes. The idempotentHint and destructiveHint annotations are not contradicted; the description adds useful error context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by a necessary error/alternative note and a validity statement. Each sentence contributes information an agent needs to decide whether to call this tool. It is slightly dense but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers the critical decision factors: what it operates on, which auth modes are valid, when it will fail, and what alternatives to use. It does not describe the success response or side effects beyond 'enable', but the annotations cover idempotency and non-destructiveness. Overall it is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both appId and trigger are already documented in the schema. The description mentions auth modes (app-token or B2B) that contextualize appId, but it does not add meaning beyond the schema. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Enable the LEGACY per-app aiBot using app-token or B2B auth.' It also distinguishes itself from the broader bot/B2B toolset by emphasizing 'legacy' and 'per-app' scope. This clearly separates it from siblings like ethora-b2b-bot-enable and ethora-agents-create-v2.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when not to use the tool: clean API/B2B-created apps have no legacy aiBot, so they would get a 422 BOT_NOT_INITIALIZED. It names concrete alternatives (ethora-agents-create-v2 + ethora-agent-invite-to-chat, or ethora-b2b-app-bootstrap-ai) and states the valid use case: apps that already have a legacy aiBot. This is explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-get-v2Get Legacy BotA
Read-only
Inspect

Read the current AI bot configuration for an app: status, trigger, prompt, greeting, LLM provider/model, RAG settings, widget config. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId. Related: change config with ethora-bot-update-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode (the token determines the app).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds useful behavioral context beyond annotations by explicitly stating auth requirements (app-token mode or B2B with appId) and likely errors (401/403, 404). It does not describe output shape, but for a single-resource config read, the listed fields provide sufficient expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states what the tool reads, then auth/error/related information follow in short, scannable sentences. Every sentence earns its place without filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one optional parameteramenities, the description covers function, auth modes, error conditions, and related mutation tool. No output schema exists, but the description enumerates expected response contents. An agent has everything necessary to invoke the tool correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents appId thoroughly, including format, mode-specific requirements, and the 'ignored in app-token mode' behavior. The description's Auth line largely repeats the schema's parameter semantics rather than adding new meaning. Since schema coverage is 100%, the baseline is 3, and no additional parameter detail is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and identifies the exact resource ('current AI bot configuration for an app'), then enumerates the key config fields: status, trigger, prompt, greeting, LLM provider/model, RAG settings, and widget config. It also distinguishes from the update sibling by naming ethora-bot-update-v2 as the related mutation tool, so an agent can immediately understand this is the read counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance on auth modes: app-token mode requires no appId, while B2B mode requires an explicit appId. It also points to ethora-bot-update-v2 when a configuration change is needed)Skip(). However, it does not explicitly contrast itself with other potentially similar read tools like ethora-agents-get-v2, so some ambiguity remains about when exactly to prefer this over related-but-different tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-instance-diagDiagnose Bot InstanceA
Read-onlyIdempotent
Inspect

Diagnose a specific BotInstance for an Agent (GET /v2/agents/:idOrAddress/bot-instances/:botInstanceId/diag). Returns live XMPP/ai-service status and recent activity for troubleshooting.

ParametersJSON Schema
NameRequiredDescriptionDefault
botInstanceIdYes
agentIdOrAddressYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral value by specifying the data is 'live' and includes 'recent activity', which is not implicit from the annotations. It gives enough context for a diagnostic read operation, though it doesn't discuss edge cases or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The endpoint and core behavior are front-loaded, and the purpose ('for troubleshooting') is tucked at the end. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, two-parameter diagnostic tool with no output schema, the description states what the call returns (live status and recent activity) and the endpoint. It covers the essentials. It could expand on what 'activity' includes, but given the simplicity and the annotations, this is sufficient for an agent to call and interpret the result at a high level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It includes the URI pattern with placeholder names (:idOrAddress, :botInstanceId) and the parameter names themselves are self-explanatory. However, the description does not explicitly define what counts as an agent ID/address or bot instance ID, leaving some interpretation to the agent. It adds some value but does not fully explain parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Diagnose') and resource ('BotInstance') and includes the endpoint, making the tool's purpose clear. It distinguishes itself from siblings like ethora-bot-instance-status by mentioning 'recent activity' and 'troubleshooting', so an agent can tell it apart even without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('for troubleshooting') and what it returns ('live XMPP/ai-service status and recent activity'). However, it does not explicitly name alternatives (e.g., ethora-bot-instance-status) or state when not to use it, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-instance-leave-chatRemove Bot from ChatA
DestructiveIdempotent
Inspect

Remove a BotInstance from a chat room (POST /v2/agents/:idOrAddress/bot-instances/:botInstanceId/leave-chat). The inverse of ethora-agent-invite-to-chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatJidYesFully-qualified room JID to leave.
botInstanceIdYes
agentIdOrAddressYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the safety profile is covered. The description adds little beyond the endpoint and inverse relation, such as side effects on message delivery or chat membership, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence packs in the action, resource, endpoint, and inverse relationship with no wasted words. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive operation, the description is adequate, especially with annotations carrying the safety profile. But it leaves parameter semantics thin, gives no postcondition information, and relies on the reader to infer usage from the inverse relationship.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, and the description adds no meaning for `agentIdOrAddress` or `botInstanceId`. The endpoint template gives partial clues, but the description does not compensate for the two undocumented parameters, and `chatJid` was already explained in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Remove a BotInstance from a chat room,' and includes the exact endpoint. It also names `ethora-agent-invite-to-chat` as the inverse, making the tool's purpose immediately clear and distinguishable from related sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The inverse relationship with `ethora-agent-invite-to-chat` gives clear context for when this tool applies: it undoes an invitation. However, it does not explicitly state when not to use it or compare it to other bot-manipulation siblings such as bot-disable or instance-status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-instances-listList Bot InstancesA
Read-onlyIdempotent
Inspect

List BotInstances. Filter by appId (caller's App by default) and/or agentId.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo
agentIdNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the operation is safe and non-mutating. The description adds the default behavior of appId (caller's App by default) which is valuable beyond annotations. It does not describe pagination or response format, but with annotations covering safety, the bar is lower and the provided detail is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise, direct, and front-loads the purpose ('List BotInstances') followed by the optional filtering. No filler words, making it efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two optional filters and no output schema, which lowers complexity. The description covers the purpose and the default for appId, which is essential. However, it lacks information about pagination, sorting, or any limits, which might be relevant for a listing tool. Given the simplicity and annotations, this seems adequate but not overly detailed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema defines two parameters (appId and agentId) with no descriptions, but their names are self-explanatory. The description mentions filtering by these fields, adding some semantic meaning beyond their names, but does not provide type, format, or behavior details. Since schema coverage is 0%, the description partially compensates but is not thorough – summing up to a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource ('BotInstances') and the action ('List'), with a brief scope. It mentions filters (appId and agentId), which helps distinguish it from sibling tools like 'ethora-agents-list-v2' that may list different resources (agents vs bot instances).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing bot instances with optional filters, and the context that appId defaults to caller's App is provided. However, it does not explicitly state when to use this tool versus alternatives like 'ethora-agents-list-v2' or 'ethora-bot-get-v2', but the naming and context make it relatively clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-instance-statusBot Instance StatusA
Read-onlyIdempotent
Inspect

Turn a specific BotInstance on or off. Off detaches it from XMPP; on re-spawns the XMPP client live.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
botInstanceIdYes

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation Contradiction: annotations declare readOnlyHint=true, but the description describes a state-changing operation: 'Off detaches it from XMPP; on re-spawns the XMPP client live.' This directly conflicts with a read-only semantic. Because the description contradicts the annotation, the score is 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the primary action is front-loaded. The effect of each status is immediately useful and compactly stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an enum, the description is nearly complete: it names the resource, the parameter role, and the behavioral effect. The main gaps are the lack of explicit return-value expectations and the fact that the misleading readOnlyHint annotation undermines trust in the surrounding metadata, but the description itself gives enough to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description carries the semantic burden. It maps botInstanceId to the target BotInstance and status to 'on' or 'off,' while also explaining the runtime consequence of each status. It does not detail the ID format, but the enum and mapping are sufficient for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Turn a specific BotInstance on or off.' It clarifies the action beyond the title by explaining that 'off detaches it from XMPP; on re-spawns the XMPP client live,' which distinguishes this from generic status or list operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: whenever a specific BotInstance needs to be enabled or disabled at the XMPP level. However, it does not explicitly mention alternatives or conditions where another sibling tool like ethora-bot-enable-v2 or ethora-bot-instance-diag would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-instance-test-messageSend Test Message to BotAInspect

Send a test message from a BotInstance (POST /v2/agents/:idOrAddress/bot-instances/:botInstanceId/test-message). Omit roomJid to fan out to every room the BotInstance is in. Requires the ai-service to be running.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoMessage body. Optional/empty is allowed.
roomJidNoTarget a specific room JID; omit to broadcast to all the bot's rooms.
botInstanceIdYes
agentIdOrAddressYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds real behavioral context beyond those: omitting roomJid triggers a fan-out side effect across every room, and the tool depends on the ai-service being live. This scope-expansion warning is exactly the kind of trait an agent needs and the annotations do not convey. No contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense clauses with zero waste: purpose+endpoint, the roomJid fan-out caveat, and the ai-service prerequisite. The verb and resource are front-loaded, and every sentence earns its place for a 4-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple flat 4-param tool with no output schema and no nested objects, the description covers the essentials: what it does, the key broadcast nuance, and a runtime prerequisite. The one notable gap is that it never states whether test messages are visible to real room participants or confined to diagnostics — important given the fan-out behavior can send messages into many rooms at once. Minor, but worth having.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% — text and roomJid carry descriptions, while botInstanceId and agentIdOrAddress are bare. The description partially compensates: the endpoint pattern (:idOrAddress, :botInstanceId) clarifies the roles of the two undocumented required params, and the fan-out statement reinforces roomJid's broadcast semantics. But it adds nothing about text and doesn't fully define the two bare params, so it meets the compensation bar only partially.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — "Send a test message from a BotInstance" — and pins it with the exact endpoint (POST /v2/agents/:idOrAddress/bot-instances/:botInstanceId/test-message). This clearly distinguishes it from sibling bot-instance tools (status, diag, leave-chat) and chat-message tools (ethora-chats-message-v2), so an agent can select it without opening any other schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable usage guidance: "Omit roomJid to fan out to every room the BotInstance is in" explains the targeted-vs-broadcast decision, and "Requires the ai-service to be running" states a prerequisite. However, it does not explicitly name alternatives or say when not to use this tool versus ethora-chats-message-v2 or other bot-instance tools, so it misses the top bar for explicit exclusion routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-update-v2Update Legacy BotA
Idempotent
Inspect

Configure the AI bot for an app — prompt, LLM, trigger, greeting, RAG behavior, identity, and public widget settings. Partial update — omitted fields are left unchanged. status: "on" activates the bot (best-effort; needs a prompt + LLM and a backend AI service). Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId; 422 validation (e.g. an llmProvider/llmModel not enabled). Related: ethora-bot-get-v2, ethora-agents-activate-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
isRAGNoIf true, the bot retrieves from the app's indexed RAG sources (see the `ethora-sources-*` tools) when answering.
chatIdNoRestrict the bot to a single chat by id. Omit to apply app-wide.
promptNoSystem prompt that defines the bot's persona and behavior.
statusNo`on` activates the bot, `off` deactivates it. Omit to leave the current status unchanged.
ragTagsNoRestrict RAG retrieval to sources tagged with these tags (see `ethora-sources-site-tags-update-v2` / `ethora-sources-docs-tags-update-v2`).
triggerNoWhen the bot responds: `any_message` (replies to every message) or `/bot` (only messages starting with /bot).
llmModelNoLLM model id, e.g. `gpt-4o-mini`. Must be available for the chosen `llmProvider`.
botLastNameNoBot's last name in its user profile.
llmProviderNoLLM provider, e.g. `openai` or `openai-compatible`. Must be enabled in your Ethora backend's AI service config.
botAvatarUrlNoPublic URL of the bot's avatar image.
botFirstNameNoBot's first name in its user profile.
savedAgentIdNoId of a saved agent whose config should back this bot. Alternative to setting prompt/LLM/RAG fields individually.
botDisplayNameNoBot's display name shown in chat.
greetingMessageNoMessage the bot posts when a conversation starts.
widgetPublicUrlNoPublic URL for the embeddable widget. Usually read via `ethora-bot-widget-v2` rather than set here.
widgetPublicEnabledNoIf true, expose the bot through a public embeddable chat widget.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (which already signal write/idempotent/non-destructive), the description discloses omitted fields are unchanged, activation is best-effort and depends on a prompt, LLM, and backend AI service, and enumerates auth/error behavior. This is unusually transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences front-load the purpose and partial-update behavior, then cover activation, auth/errors, and related tools. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-optional-param update tool with no output schema, the description plus schema gives everything needed to select and invoke it: purpose, update semantics, activation requirements, auth modes, failure modes, and related tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real cross-parameter meaning: omitted fields are left unchanged, `status:'on'` requires a prompt/LLM/backend service, and `appId` behaves differently by auth mode. It does not enumerate all 17 fields, but the schema already does that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and target ('Configure the AI bot for an app') and lists the setting categories, so an agent can tell it from read-only bot tools. It stays at 4 rather than 5 because it does not explicitly differentiate from ethora-agents-update-v2 or explain the legacy-bot vs agents distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear invocation context: partial update, when `status: 'on'` is viable, the two auth modes, and common error cases. It stops short of explicit when-to-use vs alternative tools, only naming related tools without conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-bot-widget-v2Get Legacy Bot WidgetA
Read-only
Inspect

LEGACY: read the per-app bot widget config (GET /v2/bot/widget); only apps that already have a legacy aiBot have one, API-created apps get 422. For the embeddable AI chat widget use ethora-widget-embed-snippet instead — the widget config and public widget URL metadata needed to embed the bot on a website. Auth: app-token mode (after ethora-app-select + ethora-auth-use-app). Errors: 401/403 not in app-token mode or invalid appToken. Related: enable/disable via widgetPublicEnabled in ethora-bot-update-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the `readOnlyHint` annotation, the description discloses important behavioral details: the legacy-only restriction, the 422 failure case for API-created apps, 401/403 error conditions, and the related enable/disable field `widgetPublicEnabled`. This gives the agent a realistic picture of edge cases and expected failures without needing to call the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured with clear labels (LEGACY, Auth, Errors, Related) and front-loads the critical scoping information. Every clause adds operational value: endpoint, legacy constraint, alternative, auth prerequisite, error cases, and related configuration. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is complete: it identifies the endpoint, the exact eligibility constraint, error codes, auth requirements, and the related update path. The agent has everything needed to invoke it correctly and anticipate failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% coverage, so there is nothing to document. The description still adds relevant invocation context by specifying the required auth mode. A 4 reflects the no-parameters baseline with useful surrounding setup information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('read the per-app bot widget config'), names the exact resource ('GET /v2/bot/widget'), and explicitly differentiates itself from the sibling tool `ethora-widget-embed-snippet`. The 'LEGACY' prefix immediately signals its scope, so an agent can distinguish it from the many bot and widget-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use conditions: only apps with a legacy aiBot have a config, and API-created apps get a 422. It also provides an explicit alternative (`ethora-widget-embed-snippet`) for the embeddable AI chat widget, plus the required auth sequence (`ethora-app-select` + `ethora-auth-use-app`). This leaves no ambiguity about when to invoke this tool versus its alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-chats-broadcast-job-v2Get Broadcast JobA
Read-only
Inspect

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/completed/failed). Auth: app-token mode OR B2B mode with an explicit appId — must match the auth used to enqueue the job. Errors: 401/403 wrong auth; 404 unknown jobId. Related: ethora-wait-broadcast-job-v2 for a blocking wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId the job belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
jobIdYesJob id returned by `ethora-chats-broadcast-v2`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds substantial behavioral context beyond that: it discloses the returned state values, the auth modes and the requirement to match the auth used to enqueue, and the error responses (401/403/404). This goes well beyond the minimal annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no fluff. It front-loads the core purpose, then packs auth and error info, and finally references the related tool. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-shot status fetch, the description covers what it returns (state), the auth constraints, the error cases, and how it relates to the wait tool. With no output schema, this is sufficient for an agent to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both jobId and appId, including their formats and conditions. The description adds no new parameter details beyond what the schema already provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches the status and per-room results of a broadcast job by jobId, explicitly calling out that it is one-shot and non-polling. It distinguishes itself from the wait variant by naming it as an alternative, so an agent can immediately tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'one-shot, no polling' and names the blocking wait tool as the related alternative, giving clear guidance on when to use this tool versus waiting. It also specifies auth mode requirements (app-token vs B2B with appId) and the error codes, leaving no ambiguity about prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-chats-broadcast-v2Broadcast MessageAInspect

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 is exclusive: allRooms, chatIds, or chatNames, not a mix. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 400 no target or conflicting targets; 404 unknown appId or room. Related: track with ethora-wait-broadcast-job-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesPlain-text message body to broadcast to the targeted rooms.
appIdNo24-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).
chatIdsNoExplicit list of chat ids to target. Mutually exclusive with `allRooms` and `chatNames`.
allRoomsNoIf true, broadcast to every room in the app. Mutually exclusive with `chatIds` and `chatNames`.
chatNamesNoExplicit list of chat JIDs or localparts to target. Mutually exclusive with `allRooms` and `chatIds`.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important runtime behavior: the job is enqueued asynchronously, it returns a jobId rather than sending immediately, and it specifies auth modes and likely error codes. This is substantial behavioral context that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the purpose and async behavior come first, followed by targeting rules, auth, errors, and the related tracking tool. Every sentence contributes useful operational information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers the necessary operational surface: what it does, what it returns, when it is not synchronous, how targeting is restricted, which auth modes are valid, likely errors, and how to track the job. This is sufficient for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents each parameter and its mutual exclusivity constraints. The description re-emphasizes the exclusive targeting rule and auth-mode behavior but does not add meaningful new semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Enqueue an asynchronous broadcast job'), the resource ('posting a message to one or more chat rooms of an app'), and the key output ('returns a jobId'). It also clarifies that messages are not sent synchronously, which distinguishes it from related chat-sending tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: asynchronous behavior, exclusive targeting modes, auth requirements, and error conditions. It explicitly points to ethora-wait-broadcast-job-v2 as the tracking tool, though it does not name an alternative for synchronous single-room messaging.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-chats-history-v2Get Chat HistoryA
Read-only
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId. Optional when `roomJid` carries it or an app is selected.
limitNoMaximum number of most-recent messages to return (default 100).
beforeNoPagination cursor: only messages older than this timestamp (ms), from a previous `nextBefore`.
chatIdNoBare chat id. Needs an app: pass `appId` or select one with `ethora-app-select`.
roomJidNoRoom JID `${appId}_${chatId}` (optionally with `@conference.<host>`). Either this or `chatId` is required.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond annotations (which only declare readOnlyHint and destructiveHint) by detailing error codes (401, 403, 404, 502), auth restrictions (user/B2B, not app-token), and the pagination cursor behavior (nextBefore for older pages). It also mentions the mamUnavailable flag for deployments without archives. This is a high level of behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph, but it is well-organized: purpose first, then output format, then identification, then auth, then errors. Every sentence adds value. It could be split into bullet points for readability, but it's not overly long and stays focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers all essential aspects: endpoint, response fields, pagination, room identification, auth modes, and error cases. Nothing an agent needs to successfully call this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it restates the roomJid format, the optional appId, and the either/or requirement. It does add the output fields and cursor, but that's not parameter-specific. Since the schema already explains parameters well, and the description merely echoes that info, a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Read'), resource ('archived messages of a chat room'), and explicitly gives the endpoint path. It distinguishes from sibling tools by focusing on reading history, unlike search or send. No ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides essential usage context: how to identify the room (via roomJid or chatId+app), supported auth modes, and what the response contains. It does not explicitly contrast with sibling tools (e.g., ethora-messages-search-v2), but the purpose is clear enough that an agent would not confuse it with sending or searching. A slight deduction for not stating when NOT to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-chats-message-v2Send Chat MessageAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesMessage body to post (1-4000 chars).
appIdNo24-char hex appId. Optional when `roomJid` carries it or an app is selected.
chatIdNoChat id: either the Mongo chat `_id` (as listed by the app's chat list) or the suffix after `${appId}_` in the room JID. Needs an app: pass `appId` or select one with `ethora-app-select`.
roomJidNoRoom JID `${appId}_${chatId}` (optionally with `@conference.<host>`), as returned by `ethora-app-create-chat`. Either this or `chatId` is required.
senderNameNoDisplay name shown as the message sender (defaults to the app's broadcast sender / app name).
waitForReplySecNoSeconds to wait for a reply from someone else in the room (an AI agent, typically). 0 (default) returns right after posting.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). The description adds rich behavioral details: the broadcast sender attribution, auth mode restrictions (user/B2B, not app-token), specific error codes (401/403/404/422), the MAM dependency for reply detection, and the meaning of `replies` and `historyUnavailable`. This far exceeds the annotation coverage and gives the agent precise expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: endpoint, attribution, usage example, wait option, reply handling, auth modes, errors, and MAM dependency. It is well-structured, front-loads the core purpose, and does not waste words despite its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, auth complexity, error conditions, and a dependency on MAM, the description covers all essential aspects: room identification, sender override, waiting behavior, auth constraints, error codes, and the reply-detection caveat. No critical information is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema: it explains the relationship between `roomJid` and `chatId`, notes the default for `senderName`, and clarifies the purpose of `waitForReplySec` relative to AI agents. It doesn't add new syntax for `appId`, but the schema already covers it. The addition is meaningful but not exhaustive; hence a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Post a message' into a chat room, specifies the exact endpoint, and explains the message attribution. It distinguishes itself from siblings by explicitly referencing the invite tool and the use case (seeding/testing a conversation). No ambiguity about what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: 'seed or test a conversation' and gives a concrete sequence ('right after ethora-agent-invite-to-chat'). Also explains when to wait for replies and mentions the alternative of not waiting. It even lists auth modes accepted and the error scenarios, which helps the agent decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-configureConfigure ConnectionA
Idempotent
Inspect

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 (ETHORA_API_URL / ETHORA_APP_JWT / ETHORA_APP_TOKEN / ETHORA_B2B_TOKEN). On a hosted server apiUrl is fixed and cannot be changed; credentials are per session. Auth: none required — this establishes auth material. Errors: only if a value is structurally invalid. Follow with an ethora-auth-use-* tool to pick the active mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiUrlNoFull 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 `/v1`.
appJwtNoEthora App JWT, used only to bootstrap login/register in user-auth mode. Usually starts with `JWT `. Secret — never commit it.
appTokenNoPer-app appToken for app-scoped flows (broadcast, sources, bot). Setting this makes app-token auth available via `ethora-auth-use-app`. Secret.
b2bTokenNoB2B server token for tenant-actor `x-custom-token` auth (a JWT with `type=server`). Required for B2B provisioning flows. Secret.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond annotations: values are stored in memory only, omitted fields are preserved across calls, credentials are per-session, `apiUrl` may be fixed on hosted servers, no auth is required to set auth material, and errors occur only for structural invalidity. This strongly complements the idempotentHint and non-read-only annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six compact sentences cover action, storage model, env-var alternative, platform constraint, auth requirement, error behavior, and next step. Every sentence earns its place, and the most important operational fact is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete enough for an optional-parameter configuration tool: it explains scope, merging, constraints, auth, error behavior, and the correct next tool. The only minor gap is that no success response/return value is described, though the error statement partially compensates since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has detailed descriptions including examples, secret warnings, and mode implications. The tool description adds relevant session-level semantics like merge-on-partial-call, but does not need to restate per-parameter meaning; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set the Ethora API URL and credentials for this MCP session.' It clearly differentiates itself from the auth-use siblings by framing configuration as establishing auth material that is later selected by an `ethora-auth-use-*` tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool versus env vars, notes the hosted-server constraint on `apiUrl`, and gives a direct follow-up instruction: 'Follow with an `ethora-auth-use-*` tool to pick the active mode.' This gives an agent actionable selection and sequencing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-doctorConnection DoctorA
Read-only
Inspect

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, ping, suggestions }. Auth: none required; report is tailored to whatever credentials are set. Errors: rarely throws — instead returns suggestions and a ping.ok: false block when the API is unreachable.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutMsNoHTTP timeout in milliseconds for the ping request. Defaults to 3000. Raise it on slow links, lower it to fail fast.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and non-destructive, and the description adds valuable behavioral context: return shape `{ state, checks, ping, suggestions }`, no auth required, and a rare-throw error model that returns `suggestions` and a `ping.ok: false` block. This exceeds what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: purpose and endpoint in the first, return shape in the second, auth/error behavior in the third. Every sentence carries distinct information, and the most important action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional, well-schema-documented parameter and no output schema, the description provides the return shape, auth requirements, error behavior, and a sensible default timeout note in the schema. No critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter `timeoutMs` is fully described in the schema with default, bounds, and usage guidance. The description does not add parameter-level detail, but schema coverage is 100%, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action (diagnose the session) and resource (session config plus Ethora API ping), and it specifies the endpoint `GET /v1/ping`. It is unambiguous enough to be distinguished from siblings like `ethora-status` by its config-validation and ping behavior, though it does not explicitly name or contrast an alternative sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied by 'Diagnose the session' and the explanation that it validates config consistency for the active auth mode and pings the API. However, there is no explicit guidance about when to prefer this over alternatives such as `ethora-status` or `ethora-help`, and no when-not-to-use conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-files-delete-v2Delete FileA
DestructiveIdempotent
Inspect

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-auth mode with an active user session. Errors: 401 not logged in; 403 not owned by the user; 404 unknown id. Related: get ids from ethora-files-get-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the file to delete. Get it from `ethora-files-get-v2`.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing that the record and stored content are removed, that the action is irreversible, that user-auth is required, and that specific HTTP errors occur. This is exactly the behavioral context an agent needs for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a clear one-sentence operation, followed by auth, error, and related-tool notes. Every sentence provides useful information and there is no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with no output schema, this description is complete: it covers action, irreversibility, authentication, error cases, and where to find the required id. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, id, already has a complete schema description including how to obtain it. The main description adds the endpoint context but not new semantics beyond the schema. With 100% schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Permanently delete'), a precise resource ('one of the authenticated user's files'), and the identifier mechanism ('by id'). It also includes the endpoint, making the operation unambiguous and clearly distinct from sibling file tools like upload and get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for use: deleting a user file by id, with required auth mode and expected error codes. It also points the agent to ethora-files-get-v2 for obtaining ids. It does not explicitly discuss when not to use the tool, but for a delete operation the guidance is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-files-get-v2Get FileA
Read-only
Inspect

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. Auth: user-auth mode with an active user session. Errors: 401 not logged in; 404 unknown id or not owned by the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFile id to fetch a single record. Omit to list all files owned by the logged-in user.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations: it specifies the required auth mode, the 401 and 404 error conditions, and the array-vs-single-object return shape. Since readOnlyHint and destructiveHint already cover safety, this extra context is valuable and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the primary action, and includes only essential operational details: return shape, auth requirement, and likely errors. No redundant phrasing or filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter, the description covers the core semantics, auth context, error behavior, and the two possible return shapes. With annotations supplying the read-only and openness hints, nothing essential is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the id parameter and its behavior. The description reinforces the omit-to-list vs. provide-to-get semantics, but does not add significantly new parameter-level information beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's dual behavior: list the authenticated user's files or fetch a single file's metadata by id. It uses a specific verb and resource ('List the authenticated user's files, or fetch one file's metadata by id') and is easily distinguishable from sibling file tools like upload and delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context by explaining when to omit vs. provide the id, which determines whether the tool lists all files or returns one record. It does not explicitly name alternative tools or exclusion criteria, but the optional-id behavior is sufficient for correct selection in most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-files-upload-v2Upload FileAInspect

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, 50MB max each. Auth: user-auth mode with an active user session (ethora-user-login first). Errors: 401 not logged in; 413 size limit exceeded; 422 unsupported mime type. Related: manage with ethora-files-get-v2 / ethora-files-delete-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYes1 to 5 files to upload in this call.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds substantial behavioral detail beyond the minimal annotations (readOnlyHint false, destructiveHint false): each upload is a new record (no overwrite), base64 encoding, 50MB size limit, and error conditions. It also discloses auth-state requirements, which is critical for correct use. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (three sentences) and front-loaded with the primary purpose and scope. Each sentence serves a distinct purpose: core behavior, auth requirement, errors, and related tools. No redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple files, base64, auth constraints), the description covers preconditions (auth), failure modes (401/413/422), size limits, and the non-overwrite semantics. It includes related tools for follow-up actions. Absence of an output schema is acceptable since the description doesn't need to describe returns, and the description is sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of the parameter `files`, including its sub-properties (name, mimeType, base64) with details like base64 prefix stripping and 50MB limit. The tool description adds no new parameter-specific guidance, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Upload'), resource ('files to the authenticated user's Ethora file storage'), and includes the exact endpoint (`POST /v2/files`). It clearly distinguishes from siblings by noting management via `ethora-files-get-v2` / `ethora-files-delete-v2`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: auth requirement (`ethora-user-login` first), specific error codes (401, 413, 422), and a note on related tools for management. Does not explicitly exclude alternate tools or give 'when not to use' guidance, but the context is sufficient for typical selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-generate-b2b-bootstrap-runbookGenerate B2B Bootstrap RunbookA
Read-only
Inspect

Generate a human-readable runbook listing this server's tool calls in the right order for a B2B bootstrap, with example payloads. Documentation only — does not write any file or execute any step. Auth: none required — pure text generator, no API calls. Errors: effectively none. Related: to actually run the sequence use ethora-run-recipe or ethora-b2b-app-bootstrap-ai.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiUrlNoEthora API base URL to show in the runbook's configure step. Omit to emit a placeholder.
crawlUrlNoWebsite URL to show in the runbook's source-ingest step. Omit to emit a placeholder.
displayNameNoApp display name to show in the runbook's create-app step. Omit to emit a placeholder.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes further by stating it does not write any file or execute any step, requires no auth, makes no API calls, and has effectively no errors. This adds valuable behavioral context beyond the annotations, making the tool's side-effect-free nature unmistakable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (three sentences) and front-loaded: it states the core purpose first, then side-effect constraints, then related tools. Every sentence carries useful information with no fluff, and the structure logically leads an agent through purpose, behavior, and alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, non-destructive tool with no required parameters and no output schema, the description fully covers what it does, its side effects, auth requirements, error behavior, and related tools. An agent has all information needed to call it correctly and understand the result (a human-readable runbook).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each of the three optional parameters (apiUrl, crawlUrl, displayName) described as values to show in specific runbook steps, omitting them yields placeholders. The description does not add any semantics beyond the schema, so the baseline of 3 is appropriate; the schema fully explains parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: generate a human-readable runbook with example payloads for a B2B bootstrap. It specifies the verb 'generate' and the resource 'runbook', and explicitly distinguishes itself from related tools by naming alternatives for actually running the sequence. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: use this for documentation only; to actually execute the sequence, use `ethora-run-recipe` or `ethora-b2b-app-bootstrap-ai`. It also notes it requires no auth and has effectively no errors, helping the agent decide if this is the right tool for a given task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-generate-chat-component-app-tsxGenerate Chat Component App.tsxA
Read-only
Inspect

Generate a ready-to-paste React App.tsx snippet that mounts @ethora/chat-component. Returns { filename: "App.tsx", snippet }; unpassed values are emitted as placeholders. Does not write any file. Auth: none required — pure code generator, no API calls. Errors: effectively none. Security note: the snippet includes appToken inline only as a quickstart convenience — do not ship hardcoded tokens to production.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiUrlNoEthora API base URL to embed in the snippet, e.g. `https://api.chat.ethora.com/v1`. Omit to emit a placeholder.
roomJidNoRoom JID to open on load. Omit to emit a commented-out placeholder.
appTokenNoappToken to embed in the snippet for quickstart testing. Omit to emit a placeholder. Do NOT hardcode real tokens in production source.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description explicitly states it does not write any file, requires no auth, makes no API calls, and has effectively no errors. It also discloses the security implication of embedding appToken inline, which is valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and front-loaded: purpose, return shape, side-effect behavior, auth, errors, and security note each earn their place. No redundant filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-required-parameter code generator with no output schema, the description covers the return value, placeholder behavior, side-effect absence, auth requirements, and error expectations. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has a clear description including example format and omission behavior. The description's placeholder statement adds no new meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate') and resource ('React App.tsx snippet that mounts @ethora/chat-component'), and specifies the exact return shape. It clearly distinguishes this from sibling generation tools like env examples or runbooks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case clear: it is a pure code generator with no API calls, so agents can use it when they need a ready-to-paste snippet without side effects. It does not explicitly list alternative tools or exclusion conditions, but the context is unambiguous enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-generate-env-examplesGenerate Env ExamplesA
Read-only
Inspect

Generate .env.example templates for the three common Ethora integration targets: the frontend chat component, the backend SDK, and this MCP server. Returns { target, template } when target is given, or { templates } with all three. Placeholder values only; does not write any file. Auth: none required — pure text generator, no API calls. Errors: effectively none.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoWhich 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.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds: 'does not write any file', 'no API calls', 'Auth: none required', and 'Errors: effectively none'. These are valuable behavioral disclosures beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero fluff, front-loaded purpose, then return format, then safety/auth. Efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple generator with one optional parameter, the description covers purpose, return format, side effects, auth, and errors. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a detailed enum description. The description adds the conditional return shape: `{ target, template }` when target given, or `{ templates }` with all three. This clarifies behavior based on parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (generate) and resource (.env.example templates) plus the three integration targets, distinguishing it from sibling generators like ethora-generate-chat-component-app-tsx and ethora-generate-b2b-bootstrap-runbook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context: it's for generating env templates for three integration targets. It doesn't explicitly name alternatives or exclusions, but the purpose is unambiguous and the return format conditional on the target parameter gives usage context. No explicit when-not-to-use, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-helpHelp and Next StepsA
Read-only
Inspect

Task-oriented orientation for this MCP server: explains the three Ethora auth modes (user / app-token / B2B) and recommends next tool calls + recipes based on current session state. Auth: none required — inspects state, no API calls. Errors: effectively none. Related: pass a recommended recipe id to ethora-run-recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoGoal hint to tailor the recommendations and recipe list. Omit or use `auto` to get recommendations inferred from the current session state.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive; the description adds important context beyond those annotations by stating that auth is not required, it inspects session state without making API calls, and errors are effectively none. This gives the agent strong confidence that calling this tool is safe and side-effect-free. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core orientation purpose comes first, followed by clearly labeled Auth, Errors, and Related notes. Each sentence contributes necessary information about scope, safety, or next steps, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter help/orientation tool with strong annotations, the description covers purpose, side-effect profile, error behavior, and the relationship to recipe execution. The absence of an output schema is not a significant gap because the description already tells the agent what the tool produces: recommendations for next calls and recipes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional `goal` parameter is fully documented in the schema with an enum and clear guidance to omit it or use `auto`, so schema coverage is effectively 100%. The description reinforces the parameter's purpose through session-state recommendation context but adds no new syntax, constraints, or semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource ('this MCP server') and a concrete outcome: explaining the three Ethora auth modes and recommending next tool calls/recipes based on session state. It does not merely restate the title, and no sibling tool claims this orientation/next-step role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied: call this when orientation or next-step recommendations are needed, and it even points to ethora-run-recipe for recipe execution. However, it never explicitly states when not to use it or names alternative introspection/status tools such as ethora-status or ethora-doctor, so selection guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-messages-context-v2Get Message ContextB
Read-onlyIdempotent
Inspect

Fetch the messages surrounding a target message (GET /v2/apps/:appId/chats/:chatId/messages/context). Provide either aroundStanzaId or aroundMessageId; radius controls how many messages before/after.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoRequired in B2B mode unless already selected via ethora-app-select.
chatIdYes
radiusNo
aroundStanzaIdNo
aroundMessageIdNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true), so the bar is lowered. The description adds the either/or selection rule between the two anchor parameters, which is useful behavioral context. It does not disclose what happens if both IDs are supplied, the default radius, or the shape of the returned context — but for a read-only fetch with strong annotation coverage, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads the purpose and endpoint, the second states the selection rule. Every word earns its place, and the most decision-relevant information (which anchor to use) comes immediately after the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and five parameters, the description covers the core call flow (anchor selection and radius) but omits edge behavior — what happens if both anchor IDs are passed, the default radius when omitted, and what the returned context actually contains. Annotations cover safety, so the remaining gaps are moderate rather than critical for a simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description carries meaningful weight. It adds semantics for three key parameters: aroundStanzaId/aroundMessageId (the either/or anchor choice) and radius (count of messages before/after). However, appId's B2B-mode requirement is left to the schema, and chatId gets no added context beyond the schema. The description partially compensates for the low coverage but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Fetch the messages surrounding a target message') and includes the exact endpoint path. The purpose is clearly distinct from siblings like ethora-messages-search-v2 (search) and ethora-chats-history-v2 (history), though it doesn't explicitly name those alternatives to draw the contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives invocation guidance — 'Provide either aroundStanzaId or aroundMessageId; radius controls how many messages before/after' — which tells the agent how to select parameters. However, it does not state when to prefer this tool over the sibling message/history/search tools, nor does it mention prerequisites like the app-select or B2B mode noted in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-messages-search-v2Search MessagesA
Read-onlyIdempotent
Inspect

Search an App's chat messages (GET /v2/apps/:appId/messages/search). B2B / tenant-actor auth. Filter by room (chatId), author (fromUserId), and time window.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query.
modeNo
sortNo
appIdNoRequired in B2B mode unless already selected via ethora-app-select.
limitNo
sinceNoISO date lower bound.
untilNoISO date upper bound.
chatIdNo
offsetNo
fromUserIdNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context beyond that: it identifies the endpoint as a GET, the required auth mode (B2B/tenant-actor), and the scope of filtering (room, author, time window). It does not discuss pagination defaults, rate limits, or response shape, but for a read-only search tool with strong annotations, this is reasonable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. It sets the purpose, exposes the endpoint, and lists the key filtering dimensions without waste. The information is front-loaded and directly useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description covers the core purpose, auth, endpoint, and high-level filter dimensions, but it leaves the semantics of search modes (substring vs fulltext), sort order, and pagination to the schema, which is only 40% covered. An agent could still derive most behavior from existing enum names and parameter names, but the description alone does not fully complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40% (4 of 10 params have schema descriptions). The description adds clarity by mapping chatId to 'room', fromUserId to 'author', and since/until to a 'time window,' which is valuable for the most important filters. However, it does not explain the mode, sort, limit, offset, or how they interact, so it only partially compensates for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Search an App's chat messages') and includes the exact REST endpoint, which makes the tool's purpose unambiguous. It also names the main filtering dimensions (room, author, time window), setting it apart from message-sending or history list tools like ethora-chats-message-v2 and ethora-chats-history-v2.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies when to use the tool ('Search an App's chat messages') and adds an important prerequisite (B2B / tenant-actor auth), but it does not explicitly contrast with sibling lookup tools such as ethora-messages-context-v2 or ethora-chats-history-v2. There is no 'use this instead of X' guidance or statement about when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-run-recipeRun RecipeAInspect

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). Use dryRun: true to preview resolved steps. Omit recipeId to list runnable recipes for a goal. Auth: depends on the recipe's steps — configure those first (see ethora-help). Errors: stops at the first failing step and returns the partial log; a missing required vars entry fails fast before any step runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoGoal scope used to look up recipes when `recipeId` is omitted. Defaults to `auto`.
varsNoKey/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 before any step executes.
dryRunNoIf true, resolve and return the step list with `vars` substituted but execute nothing. Use this to preview a recipe before running it for real.
recipeIdNoId of the recipe to run. Omit to instead list the runnable recipes for the selected `goal` (get ids from `ethora-help`).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavioral context beyond the annotations: auth depends on the recipe's steps, error semantics (stop at first failure, return partial log), and fail-fast behavior for missing vars. It also mentions the dry-run preview capability, all of which are not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences cover purpose, modes, and examples, then a compact 'Auth:' and 'Errors:' line add operational facts. No fluff or repetition; core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers execution semantics, auth prerequisites, and error behavior; dry-run and listing modes are described. Lacks explicit description of the success return payload (presumably the full log), and the list format when recipeId is omitted is unspecified, but overall this is nearly complete for a complex orchestrator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description then adds meaning by explaining recipeId omission triggers listing, dryRun previews resolved steps, and missing required vars fail the run. It also gives a non-exhaustive list of vars examples (appId, appToken, b2bToken).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Execute'), resource ('a built-in recipe'), and clarifies it is an ordered sequence of this server's own tool calls. It also differentiates itself by describing two operational modes (run by id, or list for a goal) and names example flows. No other sibling tool claims to orchestrate built-in recipe sequences, so it is distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains how to preview with dryRun and when to omit recipeId to list recipes for a goal, and points to ethora-help for prerequisite auth configuration. It gives clear context for selecting this tool (common flow / recipe rather than individual tool calls) though it does not enumerate explicit alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-deleteDelete Knowledge Document (Legacy)A
DestructiveIdempotent
Inspect

Remove a previously ingested document from an app's RAG sources by docId (legacy user-auth route). Deletes the document record and its embeddings; not reversible. Auth: user-auth mode, active session; the user must own the app. Errors: 401 not logged in; 403 not owner; 404 unknown docId. Related: get docId from ethora-sources-docs-list-v2; app-token/B2B uses ethora-sources-docs-delete-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId the document belongs to. Optional — defaults to the app set via `ethora-app-select`.
docIdYesId of the ingested document to delete. Get it from `ethora-sources-docs-list-v2`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses meaningful behavioral traits: deleting both the document record and its embeddings, irreversibility, authentication requirements, ownership requirement, and specific error statuses (401, 403, 404). This substantially helps an agent anticipate consequences and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: purpose first, then auth requirements, error codes, and related tools. Every sentence earns its place, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter delete operation with no output schema, the description is complete: it covers effect, danger, auth, ownership, errors, parameter source, and sibling alternatives. An agent has everything needed to invoke this tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for both parameters, including the default for `appId` and the source for `docId`. The description adds some relational context but largely relies on the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action—'Remove a previously ingested document from an app's RAG sources by docId'—and clearly identifies the resource and mechanism. It further specifies the effect ('Deletes the document record and its embeddings') and disambiguates this legacy user-auth route from the v2 sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: user-auth mode, active session, and app ownership are required. It names the alternative `ethora-sources-docs-delete-v2` for app-token/B2B and even tells the agent where to obtain `docId` via `ethora-sources-docs-list-v2`, leaving no ambiguity about when and how to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-delete-v2Delete Knowledge DocumentA
DestructiveIdempotent
Inspect

Remove a previously ingested document from an app's RAG sources by docId (app-token / B2B variant of ethora-sources-docs-delete). Deletes the document record and its embeddings; not reversible. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId or docId. Related: get docId from ethora-sources-docs-list-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId the document belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
docIdYesId of the ingested document to delete. Get it from `ethora-sources-docs-list-v2`.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds crucial context beyond annotations: 'Deletes the document record and its embeddings; not reversible' – explicitly stating irreversibility and what gets removed. It also lists auth errors (401/403, 404) which informs the agent of failure modes. This is valuable extra behavioral detail that is consistent with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no redundancy. It front-loads the core action and then appends auth/error/reference details in a logical flow. Every sentence serves a purpose: primary action, irreversibility, auth/errors, and related tool. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with 2 params and no output schema, the description covers the essential operational aspects: auth modes, error codes, irreversibility, and how to obtain the required `docId`. It doesn't describe the response format, but that's minor for a delete operation and not required given the annotations. The description is sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `appId` and `docId` are already documented in the schema. The description reinforces that `docId` is the key parameter and points to `ethora-sources-docs-list-v2` as its source, but it does not add new semantic meaning beyond the schema. The baseline of 3 is appropriate because the description adds only marginal value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove') and resource ('document from RAG sources') and explicitly identifies itself as the 'app-token / B2B variant of `ethora-sources-docs-delete`', which clearly distinguishes it from the sibling tool. The agent knows exactly what action it performs and how it differs from the non-v2 version.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies when to use this tool by detailing auth modes ('app-token mode OR B2B mode with an explicit `appId`') and notes it is a variant of `ethora-sources-docs-delete`. It also points to `ethora-sources-docs-list-v2` for obtaining the `docId`. However, it does not explicitly state when not to use this tool (e.g., for other source types) or mention alternative deletion tools, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-list-v2List Knowledge DocumentsA
Read-only
Inspect

List an app's ingested documents, including each document's id, name, and current RAG tags. Their ids feed ethora-sources-docs-tags-update-v2 and ethora-sources-docs-delete-v2. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId; empty list if nothing has been uploaded. Related: website-sources equivalent is ethora-sources-site-list-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to list documents for. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint/destructiveHint annotations, it discloses concrete runtime behavior: auth modes (app-token vs B2B with explicit appId), error codes (401/403 wrong auth, 404 unknown appId), the empty-list result when nothing has been uploaded, and the fact that existing docs carry RAG tags. This is exactly the kind of operational detail an agent needs that annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place: purpose+returns, downstream consumers, auth/error contract, and the sibling equivalent. Front-loaded with the core function and free of filler or duplicative title repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one optional parameter, high schema coverage, and no output schema, the description covers what an agent needs to operate it: what it returns (documents with id/name/RAG tags), how authentication determines whether appId is required, error/empty-list outcomes, and what to do with the results. There is no significant operational gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for appId (24-char hex, required in B2B unless set via ethora-app-select, ignored in app-token mode), so the schema carries the parameter burden. The description reinforces the auth-mode dependency of appId but adds no fundamentally new semantics, matching the baseline of 3 for complete schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: "List an app's ingested documents," and immediately specifies the returned fields (id, name, current RAG tags), so an agent knows exactly what comes back. It also differentiates this read-only docs listing tool from its downstream mutation siblings (tags-update, delete) and the website-source counterpart (ethora-sources-site-list-v2).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when the tool is useful – it is the source of document ids consumed by tags-update-v2 and delete-v2 – and names the website-sources alternative (ethora-sources-site-list-v2), routing an agent to the right sibling. Auth mode selection and behavior with/without appId are covered, though it never states an explicit 'use this instead of X when...' exclusion phrase.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-tags-update-v2Update Knowledge Document TagsA
Idempotent
Inspect

Set the RAG retrieval tags on an ingested document — replaces the document's tag set with the provided tags array (not additive; pass [] to clear all). Tags let the bot's ragTags narrow retrieval. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId or docId. Related: get docId from ethora-sources-docs-list-v2; website-source equivalent is ethora-sources-site-tags-update-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesThe complete desired tag set for this document (replaces any existing tags). Up to 50 tags; pass `[]` to clear all.
appIdNo24-char hex appId the document belongs to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
docIdYesId of the ingested document to tag. Get it from `ethora-sources-docs-list-v2`.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It adds meaningful behavior beyond the annotations: the replacement semantics ('not additive; pass `[]` to clear all'), the auth modes (app-token vs. B2B with `appId`), and the 401/403/404 error conditions. These context cues are not in the annotations, which only say readOnly=false and destructive=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-ordered: the operation, the replacement wrinkle, auth, errors, and directly relevant related tools. There is no filler, and the primary behavior is front-loaded so the agent can classify it quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description covers every operational prerequisite: how to obtain the resource (`docId`), which auth mode applies, what errors to expect, and which sibling tools are alternatives or needed to gather inputs. Nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains the meaning of each parameter, including `[]` to clear, B2B behavior of `appId`, and where to get `docId`. The tool description adds only that tags narrow the bot's `ragTags`, a small extra semantic. This does not elevate the score above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Set the RAG retrieval tags on an ingested document'. It also states the key distinguishing behavior — the tag set is replaced, not additive — and explicitly names the sibling for website sources, so an agent can tell it apart without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent where to get `docId` (`ethora-sources-docs-list-v2`) and that `ethora-sources-site-tags-update-v2` is the equivalent for website sources, effectively routing which tool to use for which kind of source. It also specifies auth modes and provides error-code semantics. It only fails to state the negative rule ('do not use on website sources') in so many words.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-uploadUpload Knowledge Document (Legacy)AInspect

Upload documents (1–5; PDF, text, etc.) into an app's RAG sources (legacy user-auth route). Async — content becomes queryable once indexing finishes; files passed as base64, 50MB max each. Auth: user-auth mode, active session; the user must own the app. Errors: 401 not logged in; 403 not owner; 413 too large; 422 unsupported document type. Related: app-token/B2B flows use ethora-sources-docs-upload-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to ingest into. Optional — defaults to the app set via `ethora-app-select`.
filesYes1 to 5 documents to ingest in this call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond annotations: async processing, eventual queryability after indexing, base64 encoding, 50MB per-file limit, and ownership/auth requirements. It also enumerates error responses (401/403/413/422), which is valuable operational context. This does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: four sentences with the core purpose first, followed by constraints, auth/errors, and the alternative tool. Every sentence adds operational value and no content is redundant with the schema beyond acceptable limits.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a document-upload tool with no output schema, the description covers the essential full picture: what it uploads, how many, size limits, async behavior, auth requirements, ownership, typical errors, and the correct alternative for other auth flows. Nothing critical is missing for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds beyond it: appId defaults to the app set via `ethora-app-select`, files are limited to 1–5, and error semantics clarify parameter validation (413/422). These extras help an agent correctly construct the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Upload documents (1–5; PDF, text, etc.) into an app's RAG sources'. It also distinguishes this from the v2 sibling by calling out the 'legacy user-auth route', so an agent can identify exactly what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names the alternative: 'app-token/B2B flows use ethora-sources-docs-upload-v2', and provides the auth context ('user-auth mode, active session; the user must own the app'). It also lists the relevant error codes, which helps the agent decide when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-docs-upload-v2Upload Knowledge DocumentAInspect

Upload documents (1–5; PDF, text, etc.) into an app's RAG sources (app-token / B2B variant of ethora-sources-docs-upload). Async — content becomes queryable once indexing finishes; files passed as base64, 50MB max each. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId; 413 too large; 422 unsupported document type. Related: ethora-sources-docs-list-v2, ethora-sources-docs-delete-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to ingest into. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.
filesYes1 to 5 documents to ingest in this call.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing async indexing, the 50MB per-file limit, base64 encoding requirement, auth-mode specifics, and expected error codes. This gives the agent a robust behavioral model of the tool without relying on the schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich, front-loading the core purpose before covering async behavior, limits, auth, and errors. Every sentence adds useful information, though the error-code list makes it slightly longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter upload tool with no output schema, this description covers the essential operational context: what to upload, count and size limits, encoding, auth requirements, async behavior, error outcomes, and related tools. The agent has what it needs to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds a helpful summary of auth modes and file constraints, but largely restates schema details rather than introducing new parameter-specific meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: uploading documents into an app's RAG sources. It also distinguishes itself as the app-token/B2B variant of `ethora-sources-docs-upload`, which helps differentiate it from the close sibling v1 tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: upload 1–5 documents, async behavior, auth modes, and the appId requirement. It names related list/delete tools, but does not explicitly state when to prefer this over site-crawl or other ingestion alternatives, so exclusions are implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-crawl-v2Crawl Website SourceAInspect

Crawl a website URL and ingest its content into an app's RAG sources (app-token / B2B variant of ethora-sources-site-crawl). Async — returns once the job is accepted; followLink: true follows in-domain links and can ingest many pages. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 400 malformed url; 404 unknown appId. Related: ethora-sources-site-crawl-v2-wait (block until done).

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

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses async accept-and-return behavior, auth-mode requirements, specific 400/401/403/404 error conditions, and the broad ingestion consequence of followLink:true. This adds meaningful behavioral context and does not contradict the readOnlyHint:false or openWorldHint:true annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and async behavior are front-loaded, and each following sentence adds distinct value: auth, errors, and the wait alternative. There is no filler or redundant material.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param external-ingest tool, the description covers auth, errors, async semantics, and the related wait tool. However, with no output schema, it never states what the accepted-job response contains, such as a job handle, so the agent may not know what to pass to the wait sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The prose restates some parameter context, such as absolute URL, appId mode behavior, and followLink breadth, but adds little meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Crawl a website URL and ingest its content into an app's RAG sources.' It also distinguishes this as the app-token/B2B variant and names the wait sibling, so the agent can tell it apart from nearby source-management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states that the operation is async, that followLink:true can ingest many pages, and it points to ethora-sources-site-crawl-v2-wait as the blocking alternative. It gives useful auth and error context, though it stops short of an explicit when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-crawl-v2-waitCrawl Website Source and WaitAInspect

Crawl a website URL and block until the server finishes — a single-call, long-timeout variant of ethora-sources-site-crawl-v2 (same crawl + embed effect). Returns { done: true, durationMs, result }. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 400 malformed url; 504/timeout if it takes longer than timeoutMs (the job may still complete server-side — check with ethora-sources-site-list-v2).

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

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: it explicitly states that the call blocks until the server finishes, that a 504 may still mean the job completes server-side, and that the user should verify with ethora-sources-site-list-v2. It also documents auth modes and expected error codes. This is far more than the annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then immediately distinguishes it from the sibling variant. The auth and error details are dense but each sentence adds needed information, and nothing is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters and no output schema, this description gives the return shape, timeout cap, auth requirements, and failure paths. The timeout fallback guidance is especially valuable for an agent deciding whether to retry or inspect results. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful extra context by explaining that appId is required in B2B mode unless already set via ethora-app-select and ignored in app-token mode, and by clarifying timeoutMs behavior in the error section. This exceeds schema-only information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Crawl a website URL and block until the server finishes.' It immediately identifies itself as a single-call, long-timeout variant of ethora-sources-site-crawl-v2 with the same crawl and embed effect, which clearly separates it from the base sibling and the listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this variant: when you want the crawl result synchronously and can accept a long timeout. It names the sibling base tool and the list tool for post-timeout verification. It does not include an explicit 'use the base version instead when...' exclusion, but the variant relationship is clear enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-delete-url-v2Delete Website Source URLA
DestructiveIdempotent
Inspect

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). Deletes the source record and its embeddings; not reversible. Matches on the exact stored URL string. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 url not a crawled source. Related: get the stored value from ethora-sources-site-list-v2; bulk-by-id is ethora-sources-site-delete-url-v2-batch.

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

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry destructiveHint=true, but the description goes further by specifying exactly what gets destroyed ('source record and its embeddings'), declaring irreversibility ('not reversible'), and clarifying exact-match behavior. It also documents auth requirements and error conditions, adding substantial context beyond the structured annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded: core action first, consequences second, then auth/errors/related tools in a compact block. The only weakness is minor redundancy — 'matched by its exact url string' appears in both the first and third sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-item delete with no output schema, the description is complete: it covers scope, irreversibility, exact-match requirement, auth modes, error codes, and sibling tool routing. An agent has everything it needs to call this tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both `url` and `appId` in detail, including the 24-char hex constraint, B2B requirement, and where to source the URL. The description's auth-mode sentence mostly restates the appId schema description rather than adding new parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Remove a single crawled URL from an app's RAG sources,' with exact-string matching semantics. It also distinguishes the tool from siblings by naming the B2B variant relationship and the batch tool (`ethora-sources-site-delete-url-v2-batch`), so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes the agent: get the stored URL from `ethora-sources-site-list-v2` before deleting, and use `ethora-sources-site-delete-url-v2-batch` for bulk-by-id deletion. It also specifies valid auth modes (app-token or B2B with explicit appId) and maps error codes (401/403/404) to causes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-delete-url-v2-batchDelete Website Source URLsA
DestructiveIdempotent
Inspect

Bulk-remove crawled website sources (1–100) from an app in one call, matched by their source record ids. Deletes each matching record and its embeddings; not reversible. Ids not present are skipped. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId. Related: matches on source ids (not URL strings) — get them from ethora-sources-site-list-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesSite source record ids to delete, 1–100 per call. Get them from `ethora-sources-site-list-v2`.
appIdNo24-char hex appId the sources belong to. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that deletion is not reversible, that embeddings are also deleted, and that missing ids are skipped. These go beyond the annotations' `destructiveHint: true` and `idempotentHint: true`, adding specific context about what is destroyed and how idempotency is handled. It also mentions auth errors (401/403/404). No contradiction with annotations; instead it enriches them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded. The first sentence gives the core purpose and constraints. The second adds irreversibility and idempotent behavior. The third covers auth and errors. The fourth provides a pointer to the list tool. Every sentence adds necessary information without fluff. The structure is logical and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive batch operation, the description covers the critical aspects: what is deleted, how many, how to obtain ids, auth requirements, error codes, irreversibility, and handling of missing ids. It does not mention the return value (e.g., count of deletions, errors), but for a deletion tool this may be acceptable. It also does not explicitly mention that the operation is asynchronous or synchronous, but given it's a batch call, it's likely synchronous. Overall, it's quite complete, with a minor gap on response details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters have descriptions). The description adds significant value by clarifying that `ids` are 'source record ids' (not URL strings) and instructing to retrieve them from the list tool. It also explains the `appId` parameter's role in B2B mode and that it is ignored in app-token mode. This goes well beyond the schema descriptions, which only state 'Site source record ids' and '24-char hex appId'. The description provides essential context for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Bulk-remove crawled website sources (1–100) from an app in one call, matched by their source record ids.' It specifies the verb, resource, and scope, and distinguishes itself from the sibling single-delete tool by emphasizing 'bulk' and the 1–100 range. This is a specific, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use this tool: for bulk deletion (1–100) as opposed to single deletion (implied by the sibling). It tells the agent how to get the ids from `ethora-sources-site-list-v2`, explains auth modes (app-token or B2B with explicit `appId`), and lists error codes. While it doesn't explicitly state 'use this instead of the non-batch version', the bulk/quantity distinction makes the usage context clear. It could have explicitly said 'for single deletion use ethora-sources-site-delete-url-v2', but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-list-v2List Website SourcesA
Read-only
Inspect

List an app's crawled website sources, including each source's id, URL, and current RAG tags. Their ids feed ethora-sources-site-tags-update-v2, ethora-sources-site-delete-url-v2-batch, and ethora-sources-site-reindex-v2. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId; empty list if nothing has been crawled.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo24-char hex appId to list sources for. Required in B2B mode unless already set via `ethora-app-select`; ignored in app-token mode.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive; the description adds valuable context by describing the returned fields, the auth modes, and behavior when nothing has been crawled ('empty list if nothing has been crawled'). This goes beyond what annotations and schema provide, even if pagination and return shape are not discussed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose and return fields, downstream consumers, then auth/error behavior. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool with no output schema, the description is sufficient: purpose, return contents, auth requirements, error conditions, and empty-list behavior are all covered. An agent can safely call it with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents appId at 100% coverage, and the description adds meaning: it clarifies when appId is required, when it is ignored, and how it interacts with 'ethora-app-select'. This satisfies the baseline and exceeds it with useful conditional behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List an app's crawled website sources' with concrete output details (id, URL, current RAG tags). Explicitly distinguishes itself by noting that these ids feed downstream source-management tools, so an agent can tell it apart from related site operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context on when to call it: app-token mode vs B2B mode requiring an explicit appId. Also covers expected error cases and empty-list behavior. It does not name alternative tools to avoid or compare against, but the auth-mode guidance is specific enough for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-reindex-v2Reindex Website SourceA
Idempotent
Inspect

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). Async — the existing source record is updated in place once indexing finishes. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId or urlId. Related: get urlId from ethora-sources-site-list-v2; ethora-sources-site-reindex-v2-wait blocks until done.

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

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover idempotency and non-destructive hints. The description adds async behavior, in-place update, auth requirements, and specific error codes (401/403/404), which are not in annotations. This adds useful behavioral context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly longer but well-structured: action first, then auth/errors, then related tools. Every sentence carries information; no fluff. It's appropriately sized for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 params, no output schema, and annotations covering safety, the description covers auth, errors, async behavior, and related tools. It's nearly complete; minor gaps like failure behavior during indexing are not critical. The description is sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context for both parameters: urlId should come from ethora-sources-site-list-v2, and appId is required in B2B mode but ignored in app-token mode. This clarifies conditions beyond the schema descriptions, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool re-crawls and re-embeds a previously crawled URL by its urlId, refreshing RAG content. It distinguishes itself from the non-v2 variant and the -wait sibling, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on auth modes (app-token vs B2B) and names related tools for getting the urlId and waiting for completion. It implies when to use this tool but doesn't explicitly state when not to use it or compare with alternatives beyond the variant mention. Clear enough for most agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-reindex-v2-waitReindex Website Source and WaitA
Idempotent
Inspect

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 (same refresh effect). Returns { done: true, durationMs, result }. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId or urlId; 504/timeout if it takes longer than timeoutMs (the job may still complete server-side). Related: get urlId from ethora-sources-site-list-v2.

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

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing the blocking behavior, the exact return shape (`{ done: true, durationMs, result }`), and specific error semantics including 401/403, 404, and 504/timeout. It also warns that the job may still complete server-side after a timeout, which is critical behavioral context. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but highly structured: it front-loads the main action and variant relationship, then covers return value, auth, errors, and related tool in separate concise sentences. Every sentence contributes necessary information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description sufficiently explains the return value, auth requirements, error cases, timeout behavior, and how to get the required `urlId`. It provides all the information an agent needs to select and invoke the tool correctly without additional lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds extra semantic value by clarifying the auth role of `appId` across modes and by explaining the timeout failure behavior (504/timeout, job may still complete server-side), which goes beyond the schema's simple 'how long to wait' wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Re-crawl and re-embed a previously crawled URL and block until the server finishes.' It also explicitly differentiates this tool from its sibling `ethora-sources-site-reindex-v2` by calling it a 'single-call, long-timeout variant' with the same refresh effect, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly positions this tool as the blocking/long-timeout alternative to `ethora-sources-site-reindex-v2`, making the when-to-use distinction explicit. It also provides auth-mode requirements ('app-token mode OR B2B mode with an explicit appId') and tells the agent where to obtain `urlId` via `ethora-sources-site-list-v2`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-sources-site-tags-update-v2Update Website Source TagsA
Idempotent
Inspect

Set the RAG retrieval tags on a crawled website source — replaces the source's tag set with the provided tags array (not additive; pass [] to clear all). Tags let the bot's ragTags narrow retrieval. Auth: app-token mode OR B2B mode with an explicit appId. Errors: 401/403 wrong auth; 404 unknown appId or sourceId. Related: get sourceId from ethora-sources-site-list-v2; doc equivalent is ethora-sources-docs-tags-update-v2.

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

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that the operation replaces the entire tag set, is not additive, supports clearing with [], and affects RAG retrieval via ragTags. It also states the two auth modes and the likely 401/403/404 error conditions, giving the agent useful behavioral expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The behavior is front-loaded in the first sentence, followed by tightly packed auth/error and sibling guidance. Every sentence earns its place and there is no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers behavior, replacement semantics, auth requirements, common errors, and how to resolve required IDs via sibling tools. An agent has enough context to invoke it correctly without further research.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds functional meaning not in the schema, notably the purpose of tags as RAG retrieval filters and their connection to the bot's ragTags, while the schema already documents the replace/clear semantics and appId auth behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Set the RAG retrieval tags on a crawled website source.' It clarifies the non-additive replacement behavior and explicitly names the associated list tool and the docs-tags-update sibling, so an agent can distinguish it from nearby sources tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It includes clear context on when to use it: for website sources, with sourceId from ethora-sources-site-list-v2. It names the doc equivalent ethora-sources-docs-tags-update-v2 as an alternative, but stops short of an explicit 'use this when X, otherwise use Y' exclusion rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-statusSession StatusA
Read-only
Inspect

Report the current Ethora MCP session state: configured API URL, active auth mode, which credentials are present (booleans like hasAppJwt — values never echoed), the selected appId/agentId, and hosted/sessionId on the hosted (Streamable HTTP) server. Auth: none required. Errors: effectively none. Related: ethora-doctor for an active connectivity check.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe, non-destructive operation. The description adds the important behavioral detail that credential values are never echoed, only their presence via booleans like hasAppJwt. This is critical for an agent to avoid expecting sensitive data in the output. It also notes that errors are 'effectively none' and that no authentication is required, which are not captured in annotations. This goes beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It front-loads the main purpose ('Report the current Ethora MCP session state') and then lists the specific items reported in a single sentence. The additional lines about auth, errors, and related tool are brief and to the point. Every sentence adds value, with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool, the description is quite complete. It covers what the tool returns, mentions that no auth is required, and anticipates that errors are negligible. It also suggests an alternative for connectivity issues. Given the simplicity of the tool, the only minor gap is that it doesn't explicitly describe the output format beyond the listed fields, but given there is no output schema, the description does a good job.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to explain parameter semantics. It does, however, mention the booleans (hasAppJwt) that will be present in the output, which indirectly informs the agent about the kind of data it can expect. Since there are no parameters, the description fulfills the requirement by clearly stating the tool's zero-input nature.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: reporting the current Ethora MCP session state. It enumerates the specific pieces of information returned (configured API URL, auth mode, credential presence, appId/agentId, hosted/sessionId). It also distinguishes itself from the sibling tool ethora-doctor, which is an active connectivity check, making it clear that this tool is for status reporting only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to inspect the current session state. It implicitly suggests it is a read-only diagnostic tool. It mentions a related tool, ethora-doctor, for active connectivity checks, which helps an agent choose between the two. However, it does not explicitly state when NOT to use this tool (e.g., when you need to modify configuration), but the distinction is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-unread-counts-v2Get Unread CountsA
Read-onlyIdempotent
Inspect

Batch per-room unread message counts for a set of users (POST /v2/apps/:appId/users/unread-counts). mode=count returns numbers (capped); mode=flag returns booleans. Requires Mongo message archiving enabled on the deployment.

ParametersJSON Schema
NameRequiredDescriptionDefault
capNo
modeNo
appIdNoRequired in B2B mode unless already selected via ethora-app-select.
userIdsYesuuid / Mongo _id / xmppUsername, 1..200.
concurrencyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context: mode=count returns capped numbers, mode=flag returns booleans, and Mongo message archiving must be enabled. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler: main purpose, endpoint, mode behavior, and deployment prerequisite. The essential information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only batch endpoint, the description, combined with annotations, covers the safety profile, endpoint, modes, and environment requirement. The absence of an output schema is partially mitigated by the explicit mode return types, though the exact response shape and keying are not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40% (appId and userIds are documented), so the description needs to compensate. It explains the mode semantics and hints at the cap behavior, but it leaves concurrency completely undocumented and does not clarify exactly what cap controls. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific and precise action: 'Batch per-room unread message counts for a set of users', and reinforces it with the endpoint. It clearly differentiates this from sibling tools like history or message-search by focusing on unread counts and explicitly defining the two output modes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the use case and states a hard prerequisite ('Requires Mongo message archiving enabled'), but it never names alternative tools or explains when not to use this one. The agent must infer the tool's scope from the name and the description rather than being given explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-user-loginLog InA
Idempotent
Inspect

Authenticate as an existing Ethora user with email + password. Stores the user session token in this MCP session and unlocks user-auth tools (ethora-app-list, ethora-files-*, ethora-wallet-*). Auth: user-auth mode (ethora-auth-use-user first) and a configured appJwt. Errors: 401/403 bad credentials; 404 email not registered; 429 per-IP rate limit — retry with backoff.

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

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint: false, idempotentHint: true, destructiveHint: false), the description discloses a key side effect: 'Stores the user session token in this MCP session and unlocks user-auth tools.' It also lists error codes (401/403, 404, 429) with rate-limit retry advice, which is valuable behavioral context that the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: three sentences cover the main purpose, session side effect, auth prerequisites, and error handling. It is front-loaded with the core action, and every sentence adds essential information with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a login tool, the description covers all necessary operational aspects: the credentials to use, the required auth context, the resulting session behavior, and error handling. There is no output schema, but because the session token is stored internally, a return value description is unnecessary. The context signals and sibling tools further make the place of this tool clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all five parameters, including details like format, purpose, and defaults. The tool description only repeats 'email + password' and adds no extra meaning beyond what the schema already documents. This meets the baseline of 3 as the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Authenticate as an existing Ethora user with email + password.' This clearly distinguishes it from sibling tools like ethora-user-register and the auth-mode selectors, making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the prerequisite 'user-auth mode (`ethora-auth-use-user` first) and a configured `appJwt`', which tells the agent when this tool can be used. It also notes that it 'unlocks user-auth tools', implicitly guiding the agent to choose login when those tools need to be accessed. It does not explicitly name alternatives for app or B2B auth, but the user vs. app distinction is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-user-registerRegister AccountAInspect

Create a new Ethora user account by email + first/last name, then log in and bind the session. A password is generated when omitted and returned once. By default also mints a long-lived API key so an agent can reconnect later with Authorization: Bearer <key> (no human step needed). Auth: user-auth mode and a configured appJwt (on a hosted server this is preset). Errors: 401 no appJwt; 422 email already registered or password shorter than 6 chars; 429 rate limited. Related: bulk provisioning uses ethora-users-batch-create-v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address for the new user. Must be RFC-5322 valid and not already registered within this app. No confirmation click is required to log in; the address is used for password reset.
lastNameYesLast name shown in the user's profile.
passwordNoPassword for the account (min 6 chars). Omit to have a strong random password generated and returned once in the result.
firstNameYesFirst name shown in the user's profile and message attributions across chat rooms and the app UI.
apiKeyNameNoLabel for the API key (default `mcp-signup`).
createApiKeyNoMint a long-lived API key right after signup and return it once. Default true. Set false if you only need this session.
apiKeyTtlDaysNoAPI key lifetime in days. Server default applies when omitted.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say this is not read-only and not destructive; the description carries the full behavioral burden. It covers password auto-generation, one-time return, API key minting by default, session binding, auth prerequisites, and specific error codes. It could still add more about the exact response shape, but given the constraints it is quite complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences plus an error list and sibling pointer. It is not bloated and front-loads the primary purpose before auth/errors. Minor redundancy with schema descriptions means it is not a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no output schema, and only basic annotations, this description still covers high-level behavior, errors, authentication, and the API-key reconnection flow. It does not detail a response schema, but while there is no output schema it may be incomplete in exact return shape, so this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Parameter schema already covers 100% of the properties, so baseline is 3. The description adds value by explaining the `appJwt` auth dependency, tying API key creation to reconnection, and summarizing which error conditions map to email/password validation, going beyond the raw schema texts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says clearly that this tool creates a new user, logs the session in, and can mint an API key. It explicitly names the related bulk alternative, `ethora-users-batch-create-v2`, so an agent can tell this tool apart from its sibling without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool (new account + session + optional API key) and names the bulk alternative. It does not explicitly tell the agent when not to use it (e.g., for an already-existing user, `ethora-user-login`), but the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-users-batch-create-v2Batch Create UsersAInspect

Provision many Ethora users (1–100) in one asynchronous batch job — the bulk equivalent of ethora-user-register. Enqueues a background job (HTTP 202); the job reports per-user conflicts rather than failing the whole batch. Returns { jobId, statusUrl }. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken). Errors: 401/403 not in B2B mode; 422 usersList validation. Related: track with ethora-wait-users-batch-job-v2.

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

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations are thin (only openWorldHint=true, idempotentHint=false), so the description carries the burden and meets it: it discloses the asynchronous HTTP 202 behavior, per-user conflict handling instead of whole-batch failure, the `{ jobId, statusUrl }` return shape, and the 401/403/422 error conditions. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, dense segments: behavior and batch size first, then response shape, then auth/errors/related tool. Every clause carries operational information with no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description itself supplies the return shape (`{ jobId, statusUrl }`), the async semantics, and the follow-up tracking tool. Combined with a fully-described input schema, nothing an agent needs to select and invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (usersList, timeoutMs, bypassEmailConfirmation) are already documented; the baseline is 3. The description adds little parameter-level value beyond tying 422 validation to `usersList` and noting per-user conflict reporting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific action ('Provision many Ethora users (1–100)') and a concrete resource, and immediately contrasts itself with the single-user sibling (`ethora-user-register`), so an agent can tell it apart from the large sibling list without opening the schema. The async-batch framing (HTTP 202) further pins down what this tool is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the near-sibling and the condition that selects between them: bulk (1–100) versus single-user registration. It also routes the follow-up step to `ethora-wait-users-batch-job-v2` and states the auth prerequisite (B2B mode via `ethora-auth-use-b2b` + `b2bToken`), so an agent knows exactly when and with what setup to call this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-users-batch-job-v2Get Users Batch JobA
Read-only
Inspect

Fetch the current status and per-user results of a users batch job by jobId (one-shot, no polling). Returns the job object with its state (pending/running/completed/failed) and per-user outcomes. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken) — must match the auth used to create the job. Errors: 401/403 not in B2B mode; 404 unknown jobId. Related: ethora-wait-users-batch-job-v2 for a blocking wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob id returned by `ethora-users-batch-create-v2`.
timeoutMsNoHTTP timeout for this status request, in milliseconds. Default 10000.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this read-only and non-destructive, and the description adds meaningful behavior: it returns a `state` with enumerated values, includes per-user outcomes, requires matching auth, and enumerates expected error codes. This goes well beyond the annotation metadata without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the primary purpose, and every sentence adds actionable detail: return payload, auth context, error behavior, and related tool. No filler or redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description supplies the necessary return semantics: job state values and per-user outcomes. It also covers auth prerequisites, error responses, and the relationship to the blocking variant, making the tool fully understandable without additional lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents `jobId` and `timeoutMs` clearly. The description reinforces that `jobId` identifies the batch job but adds little semantic detail beyond the schema. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') and resource ('current status and per-user results of a users batch job'), and clarifies the one-shot nature. It clearly distinguishes this from the related blocking wait tool by naming `ethora-wait-users-batch-job-v2`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states this is a one-shot status fetch with no polling, and points to `ethora-wait-users-batch-job-v2` as the alternative for blocking. It also gives concrete conditions about B2B auth requirements, which helps an agent decide when invocation is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-wait-broadcast-job-v2Wait for Broadcast JobA
Read-only
Inspect

Block until a broadcast job reaches a terminal state (completed or failed) or until timeoutMs — read-only polling wrapper around ethora-chats-broadcast-job-v2. Returns { done, state, job }, or { done: false, reason: "timeout" } on timeout. Auth: app-token mode OR B2B mode with an explicit appId — must match the auth used to enqueue the job. Errors: 401/403 wrong auth; 404 unknown jobId.

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

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses the blocking behavior, timeout semantics, exact return shape including the timeout case, auth requirements, and error codes. This fully informs the agent of the side-effect profile and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core blocking behavior and return shape first, then auth and error details. Every sentence earns its place with no redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers the essential return contract, timeout behavior, auth prerequisites, and failure codes. The polling interval parameter is fully documented in the schema, and the wrapper relationship provides enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents each param, so a baseline of 3 applies. The description adds extra semantic value by explaining that appId must match the auth used at enqueue time and that errors 401/403/404 map to auth and jobId issues, which goes beyond the parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Block'), a precise resource ('broadcast job'), and the terminal condition, and it explicitly names the underlying sibling it wraps. An agent can clearly distinguish this wait/polling tool from the raw job status tool and from other wait tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says this is a read-only polling wrapper to block until completion or timeout, and it notes the auth mode must match the one used to enqueue the job. It does not explicitly say 'use this instead of polling ethora-chats-broadcast-job-v2', but the wrapper framing and return-signal description make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-wait-users-batch-job-v2Wait for Users Batch JobA
Read-only
Inspect

Block until a users batch job reaches a terminal state (completed or failed) or timeoutMs — read-only polling wrapper around ethora-users-batch-job-v2. Returns { done, state, job }, or { done: false, reason: "timeout" } on timeout. Auth: B2B mode (ethora-auth-use-b2b + a configured b2bToken) — must match the auth used to create the job. Errors: 401/403 not in B2B mode; 404 unknown jobId.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob id returned by `ethora-users-batch-create-v2`.
timeoutMsNoMaximum time to wait, in milliseconds. Default 60000. Caps at 300000 (5 min).
intervalMsNoDelay between status checks, in milliseconds. Default 1000.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though readOnlyHint and destructiveHint already cover safety, the description adds substantial behavioral context: blocking semantics, B2B auth requirements, specific 401/403/404 error cases, and the exact shape of success and timeout returns. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose and blocking behavior first, then return shape, then auth and errors. Every sentence earns its place and there is no repetition of schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description explains the return contract (`done`, `state`, `job`, timeout case), terminal states, auth prerequisites, and error modes. The only minor omission, that the job continues after timeout, is reasonably inferable from 'read-only polling wrapper' and the timeout return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some useful semantic glue, such as timeoutMs being the wait cap and jobId coming from the create call, but it does not need to compensate for missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb ('Block until') and a specific resource ('users batch job') plus a clear terminal-state condition. It also explicitly identifies itself as a read-only polling wrapper around `ethora-users-batch-job-v2`, distinguishing it from one-shot status checks and from sibling wait tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly frames the use case: wait for a users batch job to finish after creation, and it warns that B2B auth must match the auth used to create the job. It does not explicitly name exclusions or alternatives like 'use ethora-users-batch-job-v2 for a single status check,' so it stops just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-wallet-get-balanceGet Wallet BalanceA
Read-only
Inspect

Read the authenticated user's on-chain ERC-20 wallet balance(s). Auth: user-auth (log in first). Errors: 401 not logged in; 503 wallet RPC unreachable — retry with backoff.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false; the description adds a user-auth prerequisite and specific HTTP errors (401, 503) plus retry backoff guidance. This materially enhances the safe-call context beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the action and resource, with auth and error behavior following. No filler or unnecessary repetition of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only call, the description covers what is read, the required login, failure modes, and retry policy. While there is no output schema, the call itself needs no further input context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is vacuous and baseline for this dimension is 4. The description appropriately reinforces a parameterless call by focusing on auth and error handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description names the specific operation 'Read' and the exact resource 'authenticated user's on-chain ERC-20 wallet balance(s)', making the tool's function unambiguous. It also distinguishes itself from the unrelated sibling tools by stating the wallet-scoped subject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the prerequisite auth: user-auth (log in first) and error conditions with retry advice. No explicit alternatives are named, but no sibling tool overlaps with wallet balance retrieval, so the practical use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ethora-widget-embed-snippetWidget Embed SnippetA
Read-onlyIdempotent
Inspect

Generate the tag that embeds the Ethora AI chat widget (the floating launcher + chat panel that website visitors use) for an app, plus the prerequisites that must hold before it answers. No API call; pure generator using this deployment's hosted widget URL and public API base. The widget answers with the app's ACTIVE bot: for API-created apps run ethora-agents-create-v2 -> ethora-agent-invite-to-chat -> ethora-agents-activate-v2 { agentId, chatJid } first, otherwise POST /v2/widget/sessions returns 422 and the widget stays silent. Auth: none required (uses the selected app when appId is omitted). Errors: effectively none; when no hosted widget is configured the snippet carries a <WIDGET_URL> placeholder. Related: ethora-agents-activate-v2, ethora-bot-widget-v2 (legacy per-app bot only).

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoApp the widget belongs to (24-char hex). Defaults to the app from `ethora-app-select`.
botIdNoLegacy `data-bot-id` (bot XMPP address); only for old embeds. Prefer `appId`: the backend picks the active agent from the app.
localeNoUI locale (`data-locale`), e.g. `en`, `fr`, `es`.
apiBaseNoOverride the public API base (`data-api-base`). Defaults to this deployment's public API URL.
botNameNoDisplay name shown in the widget header (`data-bot-name`), e.g. the agent's name.
greetingNoGreeting shown when the panel opens (`data-greeting-message`).
positionNoLauncher corner (`data-position`).
botAvatarNoAvatar image URL shown for the bot (`data-bot-avatar`).
widgetUrlNoOverride the widget bundle base URL (the script is `<widgetUrl>/assistant.js`).
primaryColorNoBrand colour for launcher and bubbles (`data-primary-color`), e.g. `#0052CC`.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, the description discloses that this is a pure generator with no API call, that auth is not required, that errors are effectively none, and that a `<WIDGET_URL>` placeholder appears when no hosted widget is configured. It also explains the silent-failure behavior when prerequisites are not met.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, prerequisites, auth, error behavior, and related tools. It is front-loaded with the main action and immediately gives the condition that determines successful use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter pure generator with no output schema, the description covers the essential operational context: prerequisites, auth, error mode, fallback placeholder behavior, and how to select the right app. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: `botId` is legacy and `appId` is preferred because the backend picks the active agent, and `widgetUrl` determines the script path `<widgetUrl>/assistant.js`. This helps an agent choose between `appId` and `botId` correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate the <script> tag'), names the exact resource (Ethora AI chat widget embed snippet), and explicitly distinguishes itself from the legacy `ethora-bot-widget-v2` sibling. It clearly identifies what the tool produces and what it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit prerequisites for correct use: run `ethora-agents-create-v2` -> `ethora-agent-invite-to-chat` -> `ethora-agents-activate-v2` first, otherwise the widget fails with a 422. It also names the relevant alternative (`ethora-agents-activate-v2`, legacy `ethora-bot-widget-v2`) and clarifies the legacy path is only for old embeds.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchFetch DocA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument id from a `search` result.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds two useful behavioral details: 'Auth: none required' and 'Errors: unknown id', which are not present in annotations. It also clarifies the return is 'full text'. This adds value beyond the structured metadata without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero redundancy. The first sentence front-loads the purpose and input source; the second adds auth and error details. Every clause earns its place. Ideal length for a simple fetch operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, no output schema, and comprehensive annotations, the description covers the essential operational details: what it does, how to get the id, auth requirements, and error behavior. The return content ('full text') is implied. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single 'id' parameter ('Document id from a search result'), so the baseline is 3. The description adds concrete examples of id formats ('tool:ethora-app-create', 'doc:auth-map#app-jwt', 'doc:hosted-guide') and explicitly states the id comes from 'search', reinforcing the schema. This extra context justifies a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), a specific resource ('the full text of a documentation section or tool reference entry'), and the source of the identifier ('by the id returned from search'). It clearly differentiates from sibling tools like 'search' by specifying it retrieves content by id, not listing/searching. Examples of id formats further clarify the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly ties usage to the output of 'search' ('by the id returned from search'), giving clear context on when to call this tool. It doesn't explicitly state alternatives or when not to use it, but the sibling relationship with 'search' and the clear input contract make usage straightforward. It could have been more explicit about the search→fetch workflow, but the guidance is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 90 tool updates
    • First observedethora-agent-invite-to-chat
    • First observedethora-agent-set-visibility
    • First observedethora-agent-soul-append
    • First observedethora-agent-soul-set
    • First observedethora-agents-activate-v2
    • First observedethora-agents-clone-v2
    • First observedethora-agents-create-v2
    • First observedethora-agents-delete-v2
    • First observedethora-agents-export-v2
    • First observedethora-agents-get-v2
    • First observedethora-agents-import-v2
    • First observedethora-agents-list-v2
    • First observedethora-agents-update-v2
    • First observedethora-api-key-create
    • First observedethora-api-key-list
    • First observedethora-api-key-revoke
    • First observedethora-app-create
    • First observedethora-app-create-chat
    • First observedethora-app-delete
    • First observedethora-app-delete-chat
    • First observedethora-app-export-v2
    • First observedethora-app-get-default-rooms
    • First observedethora-app-get-default-rooms-with-app-id
    • First observedethora-app-import-v2
    • First observedethora-app-list
    • First observedethora-app-select
    • First observedethora-app-tokens-create-v2
    • First observedethora-app-tokens-list-v2
    • First observedethora-app-tokens-revoke-v2
    • First observedethora-app-tokens-rotate-v2
    • First observedethora-app-update
    • First observedethora-auth-use-app
    • First observedethora-auth-use-b2b
    • First observedethora-auth-use-user
    • First observedethora-b2b-app-bootstrap-ai
    • First observedethora-b2b-app-create
    • First observedethora-b2b-app-provision
    • First observedethora-b2b-bot-enable
    • First observedethora-bot-disable-v2
    • First observedethora-bot-enable-v2
    • First observedethora-bot-get-v2
    • First observedethora-bot-instance-diag
    • First observedethora-bot-instance-leave-chat
    • First observedethora-bot-instance-status
    • First observedethora-bot-instance-test-message
    • First observedethora-bot-instances-list
    • First observedethora-bot-update-v2
    • First observedethora-bot-widget-v2
    • First observedethora-chats-broadcast-job-v2
    • First observedethora-chats-broadcast-v2
    • First observedethora-chats-history-v2
    • First observedethora-chats-message-v2
    • First observedethora-configure
    • First observedethora-doctor
    • First observedethora-files-delete-v2
    • First observedethora-files-get-v2
    • First observedethora-files-upload-v2
    • First observedethora-generate-b2b-bootstrap-runbook
    • First observedethora-generate-chat-component-app-tsx
    • First observedethora-generate-env-examples
    • First observedethora-help
    • First observedethora-messages-context-v2
    • First observedethora-messages-search-v2
    • First observedethora-run-recipe
    • First observedethora-sources-docs-delete
    • First observedethora-sources-docs-delete-v2
    • First observedethora-sources-docs-list-v2
    • First observedethora-sources-docs-tags-update-v2
    • First observedethora-sources-docs-upload
    • First observedethora-sources-docs-upload-v2
    • First observedethora-sources-site-crawl-v2
    • First observedethora-sources-site-crawl-v2-wait
    • First observedethora-sources-site-delete-url-v2
    • First observedethora-sources-site-delete-url-v2-batch
    • First observedethora-sources-site-list-v2
    • First observedethora-sources-site-reindex-v2
    • First observedethora-sources-site-reindex-v2-wait
    • First observedethora-sources-site-tags-update-v2
    • First observedethora-status
    • First observedethora-unread-counts-v2
    • First observedethora-user-login
    • First observedethora-user-register
    • First observedethora-users-batch-create-v2
    • First observedethora-users-batch-job-v2
    • First observedethora-wait-broadcast-job-v2
    • First observedethora-wait-users-batch-job-v2
    • First observedethora-wallet-get-balance
    • First observedethora-widget-embed-snippet
    • First observedfetch
    • First observedsearch

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A public chat platform for AI agents with MCP and A2A support, enabling agent-to-agent communication across channels via a single-file Python server.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to chat and exchange notes through simple HTTP GET requests, with support for signed identities, private rooms, and long-polling, all exposed as MCP tools.
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.