Skip to main content
Glama

Elfa MCP

Model Context Protocol server for the Elfa API — API v3 events, positions and rankings across crypto and equities, Auto, a condition engine that watches the market and fires an action when your conditions are met, plus crypto social intelligence from X and Telegram.

Works with any MCP client, either signed in to the hosted server or running locally with an API key.

Install

Hosted, sign in with Elfa

Add https://mcp.elfa.ai/mcp as a remote MCP server in your client and approve it in your browser with your dev.elfa.ai account. No key to copy, nothing to install. If your client cannot sign in, run the server locally instead. Setup steps are in the MCP guide.

Local, API key

Get an API key at dev.elfa.ai. No install step — npx fetches the server on demand.

One click

Add to Cursor Add to VS Code

Claude Desktop

Download elfa-mcp-<version>.mcpb from the latest release and open it. Claude Desktop installs it, prompts for your API key, and keeps it updated. Nothing else to configure.

Claude Code

claude mcp add elfa --env ELFA_API_KEY=your-key -- npx -y @elfa-ai/mcp

Cursor, VS Code, Claude Desktop, and other clients

{
  "mcpServers": {
    "elfa": {
      "command": "npx",
      "args": ["-y", "@elfa-ai/mcp"],
      "env": {
        "ELFA_API_KEY": "your-key"
      }
    }
  }
}

VS Code uses "servers" instead of "mcpServers". Everything else is the same.

Ask "what's trending in crypto right now?" to confirm it works.

Related MCP server: onchain-safety-mcp

Configuration

Variable

Required

Purpose

ELFA_API_KEY

yes

Authenticates every request

ELFA_TIMEOUT

no

Request timeout in ms, default 120000

ELFA_RETRIES

no

Retries on failure, default 0

ELFA_MCP_MAX_RESPONSE_CHARS

no

Response size ceiling, default 60000

ELFA_EXTRA_HEADERS

no

JSON object of extra headers to send upstream, for proxies and non-production environments

Upstream requests identify themselves as User-Agent: elfa-mcp/<version> (<transport>; client=<app>). On stdio, <app> is the MCP client's name and version from the handshake; over HTTP, it is the connecting client's own User-Agent header. Set User-Agent in ELFA_EXTRA_HEADERS to send your own instead.

The timeout is high and retries are off on purpose. The interpretation endpoints are LLM-backed and can take over a minute, and they cost credits per attempt, so a silent retry would bill you again for a call you never saw. Raise ELFA_RETRIES only if you are calling the cheap measurement endpoints.

Some MCP clients apply their own timeout, often around 60 seconds. narratives and market_chat can exceed that; the request still completes and is still charged, even if the client gives up first.

Tools

16 tools, mapped to every documented /v2 and /v3 operation.

Tool

Mode

Cost

What it does

api_status

read

Free

Check API key tier, credit usage and remaining requests, and historyFrom, how far back events, market and calls read. Also confirms the API is reachable.

entities

read

Free on PAYG and Grow until 31 Oct 2026

Resolve a ticker, $cashtag, name, @handle, contract address, CoinGecko id, FIGI or CIK to the entity id that events and calls take. Matches exactly, it is not a search.

events

read

Free on PAYG and Grow until 31 Oct 2026

What is happening in crypto and equity markets. level=events for what happened and how prices reacted, level=storylines for one development threaded over days, level=arcs for storylines grouped into a larger movement. Searchable by topic.

market

read

Free on PAYG and Grow until 31 Oct 2026

Whole-market views for crypto or equities. view=mindshare ranks assets by share of attention, view=call_book is the crowd's long/short lean hour by hour, view=trending_contracts ranks contract addresses by how many posts pasted them.

calls

read

Free on PAYG and Grow until 31 Oct 2026

Positions accounts take in posts. level=calls for each post that takes or changes a position, level=episodes for each position from open to close with the author's track record, level=positioning for open longs and shorts on one asset now.

top_accounts

read

Free on PAYG and Grow until 31 Oct 2026

X accounts ranked by standing (how much other accounts engage with them) or, with metric, by their track record as callers (alphaScore, hitRate, avgReturn).

auto_build

read

1 plus LLM usage

Turn a plain-language monitoring request into an EQL query. Returns a draft to validate and activate, it does not activate anything itself.

auto_validate

read

Free

Check EQL syntax and get a cost estimate before activating, or check that a symbol has market data on a venue.

auto_query

read

Free

Read side of Auto: list queries, poll one query, and read its executions and LLM sessions.

auto_query_write

write

5 plus LLM usage to create, free to cancel or delete

Activate, cancel or delete an Auto query. Activated queries run unattended and fire their action when conditions are met.

auto_draft

write

Free, except convert which costs the same as creating a query

Manage inactive Auto drafts. Drafts do not evaluate until converted into an active query.

mentions

read

1 per call

Social mentions from X and Telegram. mode=top ranks a ticker's mentions by engagement, mode=search filters by keyword or account, mode=news returns the token news feed, which is X posts from accounts tagged as news sources rather than articles from news outlets.

trending

read

1 per call

What is gaining social attention. scope=tokens for tickers, scope=contracts_twitter or scope=contracts_telegram for contract addresses.

narratives

read

5 per call

Written narrative analysis with source links. scope=market extracts market-wide narratives, scope=keywords summarises events for specific keywords.

account_stats

read

1 per call

Smart follower and engagement stats for an X account. Legacy: it still works, but will be removed on 28 October 2026.

market_chat

read

Varies by speed

Ask for written market analysis. Supports conversational chat, macro overview, quick summary, token intro, token analysis and account analysis.

Not exposed as tools:

  • chat-stream-v2 — A tool call returns one result, so streaming adds nothing. market_chat covers the same analysis.

  • auto-stream-queries-v2 — Long lived streams have no tool equivalent. Poll with auto_query.

  • auto-stream-query-v2 — Long lived streams have no tool equivalent. Poll with auto_query.

Some tools depend on the plan: today market_chat and the API v3 tools, which need a higher-tier plan than the free one. At startup (stdio) or per request (HTTP, cached for a minute per key), the server reads the key's scopes from /v2/key-status. A tool the plan doesn't include stays listed, but its description says it needs a higher-tier plan, and calling it returns the upgrade link without calling the API or spending credits. If the scopes can't be read within 3 seconds, every tool is listed as usual and the API decides.

Streaming endpoints stay available through the SDKs for applications that can consume SSE.

API v3

entities, events, market, calls and top_accounts read API v3: events, storylines and arcs; call books, mindshare and trending contracts; calls, call episodes and positioning; ranked accounts. They cover crypto and equities, are free on Pay-as-you-go and Grow plans until 31 October 2026, and are open to Enterprise keys.

  • Filters take entity ids, not tickers. Resolve an asset with entities first and reuse the id.

  • Times are unix seconds. Milliseconds are refused.

  • How far back a key reads depends on its plan. api_status returns it as historyFrom.

Where this differs from the raw API

The tools deliberately do not inherit every API default, because an agent pays for verbosity in context.

API

Here

Why

pageSize

10 to 50 depending on endpoint, max 100

10

Page through rather than pull everything

limit on v3 tools

10 or 50 depending on endpoint, max 30 or 200

10

Page with cursor rather than pull everything

speed on chat

expert

fast

Cheaper by default, ask for expert when depth matters

Mention fields

full record

high signal fields

Pass verbosity: "detailed" for the rest

Large responses

returned whole

trimmed to fit, with a note

Keeps one call from filling the context window

Every value is still settable per call: pageSize accepts up to 100, and limit up to the endpoint's maximum.

Auto

Auto queries run unattended. Once armed, a query keeps evaluating and fires its action without asking again.

The flow is three steps:

  1. auto_build — describe what to watch in plain language, get EQL back

  2. auto_validate — check the syntax and get the credit cost

  3. auto_query_write — activate it

Actions can notify you, call a webhook, message a Telegram bot, or run an LLM analysis.

There is no push channel over MCP. Poll auto_query with method=get, and wait for the returned pollAfterSeconds between calls.

Remote server

The same server runs over Streamable HTTP for hosted deployments:

ELFA_MCP_TRANSPORT=http ELFA_MCP_PORT=3000 npx -y @elfa-ai/mcp

It is stateless — no sessions, one server instance per request, safe behind a load balancer. Credentials come from the x-elfa-api-key request header, falling back to the environment, or from an OAuth sign-in (see below).

DNS rebinding protection is on by default. The server accepts only the loopback names it binds — localhost:PORT and 127.0.0.1:PORT — which covers the local run above and nothing else. Any deployment that answers on a different Host must list the values it serves:

ELFA_MCP_ALLOWED_HOSTS=mcp.example.com

That includes a public domain, a reverse proxy, and a container that maps the port to a different one than the server binds. A Host the list does not cover is rejected with 403.

Variable

Required

Purpose

ELFA_MCP_TRANSPORT

no

http to serve over Streamable HTTP, default stdio

ELFA_MCP_HOST

no

Bind address, default 127.0.0.1

ELFA_MCP_PORT

no

Bind port, default 3000

ELFA_MCP_ALLOWED_HOSTS

no

Comma separated Host allowlist, defaults to the loopback names bound

ELFA_MCP_ALLOWED_ORIGINS

no

Comma separated Origin allowlist

ELFA_MCP_OPENAI_APPS_CHALLENGE

no

Domain-verification token from OpenAI's plugin portal, served as plain text at /.well-known/openai-apps-challenge

Set ELFA_MCP_ALLOWED_ORIGINS as well when browsers call the server directly. It complements the host allowlist rather than replacing it: a rebound request is same origin, so it carries no Origin header for that list to check, and the Host header is the only one still naming the attacker's domain.

OAuth sign-in

A hosted server can let clients sign in through a browser instead of sending an API key. Set ELFA_MCP_AUTH=oauth and the server becomes an OAuth resource server under the MCP authorization spec:

  1. A request with no credential gets 401 and a WWW-Authenticate challenge.

  2. The challenge points the client to the protected-resource metadata at /.well-known/oauth-protected-resource/mcp.

  3. That metadata names the authorization server, where the user signs in.

  4. The client then sends Authorization: Bearer <token>.

  5. The server checks the token against the authorization server's introspection endpoint. The endpoint answers with the Elfa API key the request runs as, so the token never reaches the Elfa API.

ELFA_MCP_TRANSPORT=http \
ELFA_MCP_AUTH=oauth \
ELFA_MCP_RESOURCE_URL=https://mcp.example.com/mcp \
ELFA_OAUTH_ISSUER=https://auth.example.com \
ELFA_OAUTH_INTROSPECTION_URL=https://auth.example.com/introspect \
ELFA_OAUTH_INTROSPECTION_TOKEN=... \
ELFA_MCP_ALLOWED_HOSTS=mcp.example.com \
npx -y @elfa-ai/mcp

Variable

Required in OAuth mode

Purpose

ELFA_MCP_AUTH

yes

oauth to enable, default apikey

ELFA_MCP_RESOURCE_URL

yes

Canonical URL of this endpoint. Tokens must be issued for exactly this value

ELFA_OAUTH_ISSUER

yes

Authorization server listed in the metadata

ELFA_OAUTH_INTROSPECTION_URL

yes

Where tokens are checked

ELFA_OAUTH_INTROSPECTION_TOKEN

yes

Bearer sent to the introspection endpoint

ELFA_OAUTH_SCOPES

no

Comma separated scopes to advertise, default elfa

Notes:

  • An x-elfa-api-key header still works in OAuth mode.

  • ELFA_API_KEY is ignored in OAuth mode, so a caller with no credential never runs as the server's own key.

  • Valid tokens are cached for up to a minute, which bounds how long a revoked token keeps working.

Safety

api_status is the fastest way to tell an auth problem from a credit problem.

Mentions, news and narratives return third-party social text that anyone can write, events are written up from it, and the v3 tools carry third-party asset, account and channel names. The server marks it as untrusted in every response, and the server instructions tell the model to treat it as data. Keep that in mind before letting an agent chain from that content into auto_query_write.

Development

npm install
npm run build
npm run verify

npm run verify runs typecheck, tests, the spec drift check, and the docs check.

manifest.json maps every documented API operation to the tool that covers it. npm run check:drift fails if the API grows an operation the server does not handle. The tool table above is generated from the same file with npm run docs:tools.

License

MIT

Available Tools

16 tools
account_statsAccount statsA
Read-onlyIdempotent

Smart follower and engagement stats for an X account. 1 credit per call. Use it to judge whether an account's reach is real before weighting what it posts. Returns raw metrics, not a reputation score, so the signal is in the ratios. Legacy: it still works today and keeps working until 28 October 2026, when it will be removed, and it is not being extended before then. Build new work on mentions with mode=search, which returns the posting account alongside each post's engagement metrics.

NameRequiredDescriptionDefault
usernameYesX username, with or without the @.

Output Schema

NameRequiredDescription
usernameYes
followersYes
averageReachYes
smartFollowersYes
smartFollowingYes
averageEngagementYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive/open-world, and the description layers on context annotations cannot express: 1 credit per call, deprecation on 28 October 2026 with no extension, and the fact that output is raw metrics whose signal lies in ratios. That is exactly the value-add the dimension rewards.

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?

Front-loaded with purpose, then cost, then interpretation guidance, then the migration path. The deprecation clause ('still works today and keeps working until 28 October 2026, when it will be removed, and it is not being extended before then') is slightly redundant but each clause carries actionable information.

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 an output schema present, return-value documentation is unnecessary, and the description still covers cost, lifetime, output nature, and the recommended replacement. An agent has everything needed to decide whether to call it and how to 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?

There is a single parameter at 100% schema description coverage, and the schema already explains that the username may include or omit '@'. The description adds no format or syntax 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?

States a specific resource (follower and engagement stats for an X account) and clarifies what it is not ('raw metrics, not a reputation score'), which lets an agent distinguish it from scoring or reputation tools among the many siblings. The verb/resource pairing is 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?

Explicitly gives the use case ('judge whether an account's reach is real before weighting what it posts') and names the preferred alternative for new work ('mentions with mode=search'), plus the legacy status. When-to-use, when-not-to-start-new-work, and the alternative are all present.

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

api_statusAPI key statusA
Read-onlyIdempotent

Check the Elfa API key tier, credit usage and remaining requests, and confirm the API is reachable. Free. Call this first when a request fails with an auth or credit error. historyFrom is the earliest time, in unix seconds, the events, market and calls tools read on this plan.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
keyYes
problemYes
reachableYes
historyFromYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new context: the call is 'Free' (no credit cost), it is a reachability probe, and it is the first diagnostic to run on auth/credit failures. It doesn't describe latency or failure modes, keeping it below 5.

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?

Three tight sentences, front-loaded with the core purpose, then cost, then the trigger condition. The trailing historyFrom sentence is useful plan context but is the least essential and is slightly ambiguous in a zero-parameter 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?

An output schema exists so return values need not be explained. Given a parameterless, read-only diagnostic, the description covers purpose, cost, trigger, and the plan-scoped data limits an agent needs to interpret 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?

The tool takes zero parameters, so the baseline is 4 and the schema (empty object, 100% coverage) carries the full burden. The mention of historyFrom is not a parameter but a plan-limit detail, which adds context about what the returned tier implies, though it reads slightly as if it were an input.

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 with three named resources: checks API key tier, credit usage/remaining requests, and reachability. This is unmistakably a diagnostics tool and cannot be confused with any sibling such as market, calls, or events.

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 an explicit trigger: 'Call this first when a request fails with an auth or credit error.' That is a clear usage condition. It lacks any when-not guidance (e.g., don't call it alongside every request), so it falls just short of the top bar.

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

auto_buildAuto query builderA
Read-only

Turn a plain-language monitoring request into an EQL query. Costs 1 credit plus LLM usage. This only drafts the query, nothing starts running until you activate it with auto_query_write. Say what to watch, the threshold, and what should happen when it fires. It drafts tweet conditions only for accounts in Elfa's real-time set (included); for any other X account, write the condition yourself and check it with auto_validate.

NameRequiredDescriptionDefault
speedNofast is cheaper, expert reasons more deeply about the query.fast
messageYesWhat to monitor, in plain language, for example "tell me on Telegram when BTC funding on Binance goes negative".
sessionIdNoContinue refining a query from an earlier reply.

Output Schema

NameRequiredDescription
titleYes
planIdsYes
responseYes
reasoningYes
sessionIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Adds substantive context beyond the annotations: a concrete cost ('1 credit plus LLM usage'), the non-destructive draft semantics ('nothing starts running until you activate it'), and a real capability boundary around Elfa's real-time account set. readOnlyHint=true is consistent with the draft-only behavior, and openWorldHint=true matches the LLM-driven generation.

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 carrying a distinct payload: purpose, cost, activation path, and coverage limit. Purpose is front-loaded and nothing repeats 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 3-parameter drafting tool with full schema coverage, annotations, and an output schema, the description covers everything an agent needs: what it produces, that it costs credits, that it is inert until activated, and where it will refuse to generate conditions.

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 earns an increment by telling the agent what content to put in 'message' (what to watch, threshold, firing action) rather than just pointing at the schema example. It says nothing about 'speed' or 'sessionId', which the schema already covers.

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 ('Turn a plain-language monitoring request into an EQL query') and immediately bounds the output ('only drafts the query'). It also carves out its coverage limit (tweet conditions only for accounts in Elfa's real-time set), which separates it from auto_draft and auto_query.

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?

Explicit handoff chain: this tool drafts, auto_query_write activates, auto_validate checks anything written by hand. It also gives a negative condition ('for any other X account, write the condition yourself') and input advice ('say what to watch, the threshold, and what should happen when it fires').

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

auto_draftAuto draftsA
Destructive

Park an Auto query without activating it. Drafts never evaluate and never fire. Free, except method=convert which activates the draft and costs the same as creating a query. Use drafts when the user is still deciding.

NameRequiredDescriptionDefault
limitNoPage size.
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused.
titleNoTitle carried into the live query.
methodYesupsert creates or updates a draft. convert activates it as a live query.
offsetNoPagination offset.
searchNoFree text filter for method=list.
statusNoFilter for method=list.
draftIdNoRequired for get, delete and convert. Optional on upsert to update.
descriptionNoDescription carried into the live query.

Output Schema

NameRequiredDescription
dataNo
methodYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-readonly, destructive, non-idempotent, open-world behavior. The description adds genuinely non-obvious context beyond that: drafts never evaluate and never fire, and the cost model where everything is free except method=convert, which costs the same as creating a query. It does not mention that delete irreversibly removes a draft or the credential-refusal rule (which the schema covers).

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, zero filler, and the most decision-relevant fact (never fires, free unless converting) is front-loaded before the when-to-use cue. 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?

With an output schema present, return values need no explanation, and all 9 parameters are fully documented in the schema. The description supplies the missing behavioral/cost layer for a multi-method mutation tool; nothing critical to invoking it correctly is absent.

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 value by quantifying the cost of method=convert relative to creating a query, which the schema only describes functionally. The other enum values (list/get/upsert/delete) are left entirely to the schema.

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+resource ('Park an Auto query without activating it') and clearly delineates drafts from live queries, which separates it from auto_query and auto_query_write. However, it frames the tool solely around creating/parking a draft and never hints that the same tool also lists, gets, and deletes drafts, so the full purpose surface is under-described.

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?

'Use drafts when the user is still deciding' gives a clear, actionable when-to-use condition tied to user state. It implies the alternative (a live query) without naming auto_query or auto_query_write explicitly, so the routing is inferable rather than spelled out.

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

auto_queryRead Auto queriesA
Read-onlyIdempotent

Read side of Auto. Free. method=list browses queries, method=get polls one query and returns its latest evaluation, plus failure when it failed with a recorded reason, method=executions and method=execution show what fired, method=sessions and method=session return the LLM analysis attached to a query. There is no push channel here, poll with method=get and respect pollAfterSeconds.

NameRequiredDescriptionDefault
typeNoFilter executions by type.
limitNoPage size for list style methods.
methodYesWhich read to perform.
offsetNoPagination offset.
searchNoFree text filter for method=list.
statusNoFilter by status.
queryIdNoRequired for get, sessions and session.
sessionIdNoRequired for method=session.
executionIdNoRequired for method=execution.

Output Schema

NameRequiredDescription
dataNo
methodYes
pollAfterSecondsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuinely non-obvious behavior: the endpoint is free, there is no push/subscription channel so the agent must poll, and get surfaces a failure plus a recorded reason when a query failed. It stops short of stating rate limits or pagination semantics beyond pollAfterSeconds.

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?

Dense but nearly waste-free: every clause conveys method behavior (list/get/executions/sessions) or operational guidance (no push, poll, pollAfterSeconds). It is one long run-on sentence rather than cleanly front-loaded bullets, which slightly hurts scannability but not information density.

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?

An output schema exists, so return shapes need not be described. The description covers all six methods, the polling model, cost, and failure surfacing, which is close to complete for a 9-parameter dispatch tool. It omits any mention of auth requirements or what 'Free' implies about rate limits.

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 description coverage is 100% (baseline 3), and the description rises above it by giving meaning to each method enum value rather than leaving 'Which read to perform.' It explains what the outputs of the different reads represent and confirms which identifier goes with which method, adding real value over the terse 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?

It states a specific verb+resource ('Read side of Auto') and then enumerates exactly what each read does: list browses queries, get polls one query's latest evaluation, executions show what fired, sessions return the attached LLM analysis. This lets an agent distinguish it from the write-side sibling (auto_query_write) and from the other Auto tools without opening a 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?

It gives clear selection guidance: use method=get to poll and respect pollAfterSeconds because there is no push channel, and it clarifies condition-specific methods (execution requires executionId, session requires sessionId). It never explicitly names the write alternative, but the 'read side' framing plus 'no push channel' tells the agent what to do instead of waiting.

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

auto_query_writeWrite Auto queriesA
Destructive

Activate, cancel or delete an Auto query. Creating costs 5 credits plus LLM usage, cancel and delete are free. An activated query runs unattended and fires its action without asking again, so validate it with auto_validate and confirm the cost, including any per-post X accounts, and the action with the user before calling this.

NameRequiredDescriptionDefault
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused.
titleNoShort title shown in the notification when this fires.
methodYescreate activates a new query. cancel stops an active one. delete removes one that has already finished.
queryIdNoRequired for cancel and delete.
descriptionNoWhy this was set up, shown alongside the title.

Output Schema

NameRequiredDescription
dataNo
methodYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool destructive, open-world, non-idempotent, and not read-only. The description adds important context beyond annotations: credit cost, LLM usage, unattended firing behavior, and the need for user confirmation.

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 written sentences, front-loaded with the core write operations, followed by cost and safety guidance. No wasted language.

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?

Complete for a destructive, open-world write tool: it covers operations, costs, unattended side effects, validation prerequisites, and user confirmation. Output schema exists, so return values need not be explained.

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 method, query, queryId, title, and description are already documented in the schema. The description adds operational guidance but little additional parameter-level semantics beyond what the schema 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?

States specific write operations (activate/create, cancel, delete) on the Auto query resource, clearly distinguishing this tool from read/query siblings like auto_query and validation sibling auto_validate.

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?

Gives explicit when-to-use guidance, requires validation with auto_validate first, and instructs the agent to confirm cost and action with the user before calling. It also notes cancel and delete are free.

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

auto_validateValidate Auto queryA
Read-onlyIdempotent

Check EQL syntax and get a cost estimate before anything is activated. Free. Always run this before auto_query_write, and show the estimated cost to the user. tweetAccounts lists the X account behind each tweet condition: billing=per_post accounts cost creditsPerPost for every post from the account (not replies or reposts), matched or not, while the query runs, on top of estimatedCredits, so state that too. Pass either an inline query or a draftId. method=symbol instead checks that a symbol has market data on a venue, before you build price or ta conditions around it.

NameRequiredDescriptionDefault
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused.
titleNoTitle to validate with the query.
methodNoquery validates EQL, symbol checks symbol support.query
symbolNoRequired for method=symbol, for example "BTC".
draftIdNoValidate a stored draft instead of an inline query.
exchangeNoRequired for method=symbol.
descriptionNoDescription to validate with the query.

Output Schema

NameRequiredDescription
validYes
errorsYes
warningsYes
tweetAccountsYes
estimatedCreditsYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely non-obvious behavioral context: the call is free, it returns an estimated cost that must be surfaced, and it explains per_post billing (creditsPerPost charged per post from the account, excluding replies and reposts, matched or not, on top of estimatedCredits). That billing model is unavailable in 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.

Conciseness4/5

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

Front-loaded with the core action and the mandate to run it before auto_query_write, and every sentence carries information. The middle sentence on tweetAccounts billing is long and dense, packing several caveats (not replies, not reposts, matched or not) into one clause chain, which slightly hurts readability.

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 an output schema present, return values need no explanation, and the description covers the remaining gaps an agent needs: validation modes, cost semantics, the pre-write sequencing requirement, and the user-facing disclosure obligation.

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 parameters are already documented; the description adds only light framing ('Pass either an inline query or a draftId') plus mode semantics for method=symbol. The tweetAccounts/billing text is more behavioral than parameter-level, so this sits modestly above the high-coverage 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?

Opens with a specific verb+resource ('Check EQL syntax and get a cost estimate') and explicitly positions itself as a pre-flight step ahead of auto_query_write. It also carves out the method=symbol variant, so the agent can distinguish both modes from siblings like auto_build and auto_query_write.

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?

States an explicit mandate ('Always run this before auto_query_write'), a required downstream action ('show the estimated cost to the user'), and a conditional alternative mode ('method=symbol instead checks that a symbol has market data... before you build price or ta conditions'). When-to-use and the alternative path are both spelled out.

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

callsCallsA
Read-onlyIdempotent

What accounts are doing: positions taken in posts on X and Telegram.. level=calls: each post that opened, added to, trimmed, reaffirmed, reversed, closed or stopped out of a position. level=episodes: each position from open to close, with entry and exit prices and the author's track record. level=positioning: open longs and shorts on one asset right now. level=episodes with status=open and from set to now reads what every matching account holds right now. Not returned: post text or a recommendation.

NameRequiredDescriptionDefault
toNoEnd of the range, unix seconds. Defaults to now.
idsNolevel=calls or episodes. Fetch up to 30 call or episode ids you already hold. No from needed.
fromNolevel=calls or episodes. Start of the range, unix seconds, not milliseconds. Required unless you fetch by ids. Episodes match a position open at any point in the range.
levelNoWhich level to read.calls
limitNoItems per page, up to 30. Keep it small and page with cursor rather than asking for everything at once.
orderNodesc (default) or asc.
cursorNonextCursor from the previous reply. Change any argument but limit and it fails; start again without it.
handleNoAn X account, with or without @. Telegram channels cannot be filtered on.
statusNolevel=episodes.
entityIdNolevel=positioning, required. One token or equity id from the entities tool.
directionNolevel=episodes.
entityIdsNoUp to 30 token or equity ids from the entities tool. Matches any of them.
assetClassNolevel=episodes. The market of the position's asset.

Output Schema

NameRequiredDescription
itemsYes
levelYes
noticeYes
hasMoreYes
nextCursorYes
servedFromYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), lowering the bar. The description still adds genuine behavioral context: what is deliberately excluded from results, and the fact that a particular status/from combination produces a point-in-time holdings snapshot. It says nothing about auth or rate limits, so it is short of a 5.

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 purpose is front-loaded and the level breakdown follows in a single dense block with no filler sentences. It loses a point for the malformed opening ('Telegram..' with a doubled period) and for compressing six level definitions into one run-on paragraph rather than clearly delimited units.

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 an output schema present, return values need not be described, and the description covers the mode selection that is the main source of ambiguity for a 13-parameter tool. Filter interplay (ids vs from, entityId requirement for positioning, cursor invalidation) is delegated to schema text, which is reasonable given its 100% coverage.

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, and the description earns above baseline by defining what each level value actually contains ('each post that opened, added to, trimmed, reaffirmed...' vs 'each position from open to close, with entry and exit prices'). That is real meaning the schema's one-line 'Which level to read' does not carry.

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 precisely what the tool returns and enumerates all three modes (calls, episodes, positioning), so an agent knows this reads account position activity rather than post text. It is specific about the resource and the shape of each level, but it never names or contrasts sibling tools (mentions, events, narratives, account_stats), which is what a 5 requires.

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?

Each level is given an explicit use case, and it goes further by showing a concrete filter combination ('level=episodes with status=open and from set to now reads what every matching account holds right now'). It also states an exclusion ('Not returned: post text or a recommendation'). What's missing is any routing to alternative tools when this one is the wrong choice.

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

entitiesEntitiesA
Read-onlyIdempotent

Turn a ticker, $cashtag, name, @handle, contract address, CoinGecko id, FIGI or CIK into the entity id that events and calls take.. It matches exactly, it is not a search: a prefix or a misspelling returns nothing. A ticker is not unique, so take the first row and check its name, or narrow with entityType. Forms of an asset share one family id where known: WBTC and cbBTC are Bitcoin. Resolve once and reuse the id.

NameRequiredDescriptionDefault
qYesWhat you hold, for example "btc", "$SOL", "@VitalikButerin" or a contract address.
limitNoItems per page, up to 200. Keep it small and page with cursor rather than asking for everything at once.
cursorNonextCursor from the previous reply. Change any argument but limit and it fails; start again without it.
entityTypeNoNarrow the match to these kinds. Omit to match every kind.

Output Schema

NameRequiredDescription
itemsYes
noticeYes
hasMoreYes
nextCursorYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive traits. The description adds substantial behavioral context beyond that: exact match semantics (prefix or misspelling returns nothing), ticker non-uniqueness and ambiguity handling, and the family-id grouping concept (WBTC and cbBTC share a Bitcoin family id). This is rich, non-obvious 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 front-loaded with the core purpose and each sentence adds useful information, but it runs longer than necessary and includes a minor typo ('take..'). It is efficient on balance, though not as tight as a perfect 5.

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 an output schema exists, the description need not cover return values or pagination format. It fully addresses the tool's complexity: what input forms are accepted, exact-match behavior, ambiguity resolution, and family-id reuse. 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.

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 four parameters thoroughly. The description adds only marginal parameter meaning: it lists input forms for `q` (already exemplified in the schema) and briefly advises narrowing with `entityType` (also described in the schema). 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 states a precise verb ('Turn a ticker, ... into the entity id') and resource ('entity id that events and calls take'), and explicitly distinguishes itself from search-based tools. An agent can tell this is a resolver, not a search, without opening any 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?

It gives clear usage context: exact matching only, no fuzzy/prefix matching, and a disambiguation strategy when tickers are non-unique ('take the first row and check its name, or narrow with entityType'). It does not name a specific sibling alternative, so it falls short of the explicit when/when-not/alternatives standard.

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

eventsEventsA
Read-onlyIdempotent

What is happening in crypto and equity markets, written up from posts across many sources.. level=events: what happened, what it names, how prices reacted where measured (impacts is empty on most events), and the posts behind it. level=storylines: the events of one development, threaded over days. level=arcs: storylines grouped into a larger movement. Search any level by topic with q, filter by asset with entityIds from the entities tool, or fetch up to 30 you hold with ids. Not returned: post text, a sentiment score or a price.

NameRequiredDescriptionDefault
qNoSearch by topic, best match first, for example "stablecoin regulation". from becomes optional.
toNolevel=events or storylines. End of the range, unix seconds. Defaults to now.
idsNoFetch up to 30 you already hold, by id. No from needed.
fromNolevel=events or storylines. Start of the range, unix seconds, not milliseconds. Required unless you fetch by ids or search with q. Arcs take no from. api_status returns historyFrom, the earliest time your plan reads.
sortNolevel=events: latest (default), or relevant, which ranks the last 24 hours and takes no from. level=arcs: latest, storylines or events.
arcIdNolevel=events. Events in one arc's storylines.
levelNoWhich level to read.events
limitNoItems per page, up to 30. Keep it small and page with cursor rather than asking for everything at once.
orderNodesc (default) or asc.
cursorNonextCursor from the previous reply. Change any argument but limit and it fails; start again without it.
statusNolevel=storylines: open (default; every status with q), dormant or any. level=arcs: active (default) or retired.
notableNolevel=events. true drops events their storyline marked as not material.
noveltyNolevel=events. update: a later reading of a story already served.
relationNolevel=storylines. Storylines holding an event of this relation.
entityIdsNoUp to 30 ids from the entities tool. Matches any of them.
eventTypeNolevel=events. What kind of development it is.
assetClassNolevel=events: events tied to this market by what they name, plus events tied to neither, such as macro news; a repeated query can return fewer as names get linked to assets. level=arcs: arcs with at least 15% of their events naming an asset in this market, then macro arcs.
eventClassNolevel=events. market: a development reported across posts. asset: posts about one asset. call: accounts taking positions.
alertActionNolevel=events. alert: judged impactful. monitor: worth watching.
implicationNolevel=events. Which way it cuts for the assets it names.
hasStorylineNolevel=events. true keeps events in a storyline, false those in none.

Output Schema

NameRequiredDescription
itemsYes
levelYes
noticeYes
hasMoreYes
nextCursorYes
servedFromYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive, so the safety profile is covered. The description adds valuable behavioral context beyond that: it discloses that impacts is empty on most events, that post text, sentiment scores, and prices are not returned, and that arcs take no from parameter.

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 organized: purpose first, then level definitions, then query modes, then explicit exclusions. Minor waste exists (a stray double period and a slightly fragmented opening), but every sentence carries information.

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 21-parameter tool with an output schema, the description covers the conceptual model (three levels), the main query strategies, and the data boundaries an agent must know. Return format details are delegated correctly to the output schema and field descriptions.

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, baseline is 3, but the description meaningfully elaborates the level parameter by explaining what events, storylines, and arcs contain. It also clarifies that q makes from optional and that ids fetches work without from, adding semantic context beyond the schema's field-level notes.

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 purpose (crypto/equity market events synthesized from posts) and then defines the three hierarchical levels (events, storylines, arcs) in concrete terms. An agent can distinguish what each level returns without consulting the schema, and the sibling relationship to the entities tool is noted for entityIds.

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 explains the three access patterns — topic search with q, asset filtering with entityIds, and direct fetching with ids — and notes limits (up to 30 ids). It does not explicitly contrast this tool against siblings like narratives or trending, so it stops short of full when/when-not routing.

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

marketMarketA
Read-onlyIdempotent

Whole-market views, no asset needed.. view=mindshare ranks assets by share of attention over a period, with hot on those heating up. view=call_book is the crowd's long/short lean, one bar per hour plus a live tick: read crowdingPercentile rather than longShare, since the accounts lean long almost always. view=trending_contracts ranks contract addresses by how many posts pasted them, crypto only, and the unnamed ones are often the ones worth watching.

NameRequiredDescriptionDefault
toNoEnd of the range, unix seconds. Defaults to now.
fromNoview=call_book and view=trending_contracts, required. Start of the range, unix seconds, not milliseconds. Trending contracts read 30 days at most.
viewNoWhich view to read.mindshare
limitNoItems per page, up to 200. Keep it small and page with cursor rather than asking for everything at once.
orderNoview=call_book. desc (default) or asc.
cursorNonextCursor from the previous reply. Change any argument but limit and it fails; start again without it.
marketNocrypto or equity. trending_contracts is crypto only.crypto
periodNoview=mindshare. The stretch share covers, ending at to. Default 4h.
minMentionsNoview=trending_contracts. Leave out addresses pasted fewer times. Default 5.

Output Schema

NameRequiredDescription
viewYes
itemsYes
marketYes
noticeYes
hasMoreYes
nextCursorYes
servedFromYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description still adds substantive behavioral context beyond them: accounts lean long almost always so longShare is misleading, call_book emits one bar per hour plus a live tick, and trending_contracts is crypto-only. That is genuinely useful data-behavior 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?

Front-loaded scope statement ('Whole-market views, no asset needed') followed by one clause per view. Dense but nearly waste-free; the trailing aside about unnamed contracts is a slight indulgence but carries information.

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?

An output schema exists, so return values need not be spelled out, and it covers all three view modes plus the range/required-parameter behavior handled in the schema. What is missing is the relationship to sibling tools, which would matter for a multi-view, zero-required-parameter entry point.

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 maps each parameter to its view (view=mindshare on period, view=call_book on order, etc.), so the description largely restates structured data. Its one real addition is the crowdsPercentile-vs-longShare advice, which is minor relative to nine parameters.

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 names a specific verb+resource per mode: mindshare ranks assets by share of attention, call_book is the crowd's long/short lean, trending_contracts ranks contract addresses by pasted posts. Each view's purpose is concrete and readable. However, it never distinguishes this tool from siblings like `trending`, `narratives`, or `mentions`, which an agent must guess at.

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?

Guidance is mostly interpretive rather than selection-oriented: read crowdingPercentile rather than longShare, trending_contracts is crypto only, unnamed addresses are often worth watching. There is no explicit statement of when to choose `market` over `trending`/`narratives`, and no when-not condition.

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

market_chatMarket chatA
Read-only

Ask Elfa for written market analysis grounded in its social data. Costs credits and varies by speed, so fast is the cheaper option. Pass sessionId from a previous reply to continue the same conversation. The reply includes sources: links to the posts and pages the research read (links only, not their text), so you can cite or check them.

NameRequiredDescriptionDefault
chainNoChain, paired with contractAddress.
speedNoDefaults to fast, which is cheaper and shallower. Ask for expert when the answer needs deeper reasoning.fast
symbolNoToken symbol, for token analysis.
messageNoThe question, required for analysisType=chat.
usernameNoX username, for analysisType=accountAnalysis.
sessionIdNoContinue an earlier conversation.
analysisTypeNochat needs message. tokenIntro and tokenAnalysis need symbol, or chain plus contractAddress. accountAnalysis needs username. macro and summary need nothing else.chat
contractAddressNoContract address, paired with chain.

Output Schema

NameRequiredDescription
messageYes
sourcesYesLinks the research read, in order, without duplicates. kind is x_post, x_account, telegram, dex, explorer, prediction_market or web; treat any other value as web. A source was read, not necessarily cited.
sessionIdYes
creditsConsumedYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the read-only, open-world, non-idempotent safety profile, and the description adds genuinely new behavioral facts: the call consumes credits, cost scales with the speed tier, and replies carry source links (links only, not text) that can be cited or checked. It stops short of stating credit amounts, rate limits, or failure behavior, which keeps it below a 5.

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?

Four short sentences, front-loaded with what the tool produces, then cost, then session continuation, then return content. Each sentence carries distinct information, with only minor overlap between the credit/speed sentence and the schema's speed description.

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 annotations covering safety, a full output schema covering returns, and 100% schema coverage for all eight parameters, the description supplies exactly the extras an agent needs: credit consumption, speed/cost tradeoff, session continuation, and the nature of the source links. Nothing material for correct invocation 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%, including the analysisType dependency map and the speed tradeoff, so the schema already carries most parameter meaning. The description largely restates the speed/cost point and the sessionId continuation rule rather than adding new semantics, which fits the baseline-3 case where the schema does the heavy lifting.

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 combination ('Ask Elfa for written market analysis grounded in its social data'), which is clearly distinguishable from list/lookup siblings like mentions or trending. It does not, however, name the closest sibling ('market') or explain how this differs from it, leaving the agent to infer the boundary.

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?

Guidance is given for parameter choice ('fast is the cheaper option', 'Ask for expert when the answer needs deeper reasoning', 'Pass sessionId ... to continue the same conversation'), but nothing says when to pick this tool over a sibling such as market, narratives, or calls. Usage is implied through cost/speed tradeoffs rather than stated selection criteria.

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

mentionsMentionsA
Read-onlyIdempotent

Social mentions from X and Telegram. 1 credit per call. Returns engagement metrics and a link per post, not the post text. mode=top ranks one ticker's mentions by engagement. mode=search filters by keywords or by account. mode=news returns the token news feed, which is X posts from accounts tagged as news sources rather than articles from news outlets.

NameRequiredDescriptionDefault
toNoEnd of an absolute range, unix seconds. Use with from.
fromNoStart of an absolute range, unix seconds. Use with to. For mode=search the range must span at least 1 day and at most 30.
modeYestop needs ticker. search needs keywords or accountName. news is a feed and needs neither.
pageNoPage number, starting at 1.
limitNoResult count for mode=search.
cursorNoPagination cursor from a previous mode=search response.
tickerNoTicker for mode=top, for example "BTC" or "$SOL".
coinIdsNoComma separated CoinGecko coin ids to filter mode=news.
repostsNoInclude reposts in the results.
keywordsNoUp to 5 comma separated keywords for mode=search.
pageSizeNoItems per page, up to 100. Keep it small and page through rather than asking for everything at once.
verbosityNoconcise returns the high signal fields only. Use detailed when you need every metric.concise
searchTypeNoHow multiple keywords combine in mode=search.
timeWindowNoRelative window such as "1h", "24h" or "7d".
accountNameNoX username for mode=search, without the @.

Output Schema

NameRequiredDescription
modeYes
nextYes
totalYes
noticeYes
mentionsYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds cost (1 credit per call) and return format (engagement metrics and link, not post text), which are valuable behavioral details 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?

Front-loaded with key facts (source, cost, return format), then mode details. Every sentence is informative and there is no wasted text.

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 complexity (15 params, 3 modes), the description covers cost, return limitations, and mode behaviors. Output schema exists, so return values needn't be explained. Minor gaps like rate limits beyond credit are acceptable; annotations cover the safety profile.

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 meaning about mode behavior (e.g., top ranks by engagement, search filters by keywords or account, news is X posts from news-tagged accounts), enhancing the parameter semantics beyond the schema's requirement notes.

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?

States a specific resource (social mentions from X and Telegram) and what it returns (engagement metrics and link, not post text). Clear on its own, but does not explicitly distinguish from siblings like trending or narratives.

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?

Describes what each mode does (top ranks by engagement, search filters by keywords or account, news returns a feed), which implicitly guides usage. However, it lacks explicit advice on when to choose this tool over sibling tools or exclusions.

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

narrativesNarrativesA
Read-onlyIdempotent

Written narrative analysis with source links, for when counts are not enough. 5 credits per call, so prefer trending or mentions when metrics will do. scope=market extracts the narratives moving the market. scope=keywords summarises events for keywords you supply, and can take over a minute to return.

NameRequiredDescriptionDefault
toNoEnd of an absolute range, unix seconds. Use with from.
fromNoStart of an absolute range, unix seconds. Use with to.
scopeNomarket is a broad sweep. keywords needs the keywords argument.market
keywordsNoUp to 5 comma separated keywords for scope=keywords.
timeFrameNoLookback for scope=market.
searchTypeNoHow multiple keywords combine for scope=keywords.
timeWindowNoRelative window such as "1h", "24h" or "7d".
maxNarrativesNoCap the narratives returned for scope=market.
maxTweetsPerNarrativeNoCap the sources per narrative for scope=market.

Output Schema

NameRequiredDescription
noteYes
itemsYes
scopeYes
noticeYes
matchedYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds genuinely new behavioral facts: per-call credit cost, that scope=keywords can exceed a minute to return, and that results include source links. Cost and latency disclosure are exactly the kind of context annotations cannot carry.

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 sentences, each carrying distinct payload: capability, cost/alternative steering, then per-scope behavior with a latency warning. The alternative-routing sentence is front-loaded ahead of mode details, which is the right order for a selection decision.

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 9 fully documented parameters and an output schema present, the description need not explain return shapes and instead spends its words on the non-schema facts (cost, latency, mode semantics). Nothing an agent needs to call this 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 3 baseline applies, but the description adds real meaning beyond it by describing what each scope returns ("extracts the narratives moving the market" vs "summarises events for keywords you supply") rather than the schema's vague "market is a broad sweep." It does not cover the date/window parameters, which the schema handles.

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 ("Written narrative analysis with source links") and immediately scopes it against metric-based tools. An agent can distinguish this from trending, mentions, and market without opening any schema.

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 routes the agent: use trending or mentions when counts/metrics suffice, and use this only when "counts are not enough." It also gives the cost trigger (5 credits per call) that should drive the decision, plus the latency caveat for scope=keywords.

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

top_accountsTop accountsA
Read-onlyIdempotent

X accounts ranked by standing (how much other accounts engage with them) or, with metric, by their track record as callers.. Standing measures attention, not accuracy; track is null for an account that has never opened a position. For the best callers use metric=alphaScore, not avgReturn, which a few big wins or a rally can top. Track metrics rank only accounts with at least 20 scored positions, over every position since late June 2026; quote the number you ranked by with scoredEpisodes. Pass a handle to the calls tool to see its positions.

NameRequiredDescriptionDefault
limitNoItems per page, up to 200. Keep it small and page with cursor rather than asking for everything at once.
orderNodesc (default) ranks the highest first.
cursorNonextCursor from the previous reply. Change any argument but limit and it fails; start again without it.
metricNostanding (default). alphaScore: return against the market (BTC for crypto, SPY for equities) and outright. hitRate: share of scored positions that made money. avgReturn: mean realized return, not adjusted for the market.

Output Schema

NameRequiredDescription
itemsYes
noticeYes
hasMoreYes
nextCursorYes

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/non-destructive/open-world, so the safety profile is covered. The description adds real domain behaviour beyond that: track is null for accounts that never opened a position, track metrics only rank accounts with at least 20 scored positions, the window is 'every position since late June 2026', and standing measures attention rather than accuracy. It does not mention rate limits or cost, but the semantic caveats are unusually substantive.

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?

Purpose is front-loaded, followed by caveats, metric guidance, and a cross-tool pointer — a sensible ordering. Nearly every sentence carries information, though there are typos ('callers..', trailing period) and the standing/track definitions are dense enough to need a second read.

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?

An output schema exists, so return shape need not be explained, and the description still calls out scoredEpisodes to quote alongside the ranking metric. It covers the ranking semantics, null behaviour, the 20-position threshold, and the date window. Pagination mechanics are left to the schema, which is acceptable.

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 parameter meaning is already largely carried by the schema (baseline 3). The description still adds value the schema lacks: it explains that standing means attention, not accuracy, and why avgReturn can be misleading relative to alphaScore. It leaves hitRate entirely to the schema, so it is not a full 5.

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?

States a specific verb and resource: accounts ranked by standing, or by their track record when a metric is supplied. It also routes the agent to a sibling ("Pass a handle to the calls tool to see its positions"), so it is distinguishable from neighbours like calls and account_stats. The phrasing ('track record as callers', stray double period) is slightly muddled, keeping it short of a 5.

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 which metric to choose and why: 'For the best callers use metric=alphaScore, not avgReturn, which a few big wins or a rally can top.' It names the condition that selects an alternative and warns against the tempting wrong choice. It also gives a cross-tool next step (hand a handle to calls).

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. 3 tool updatesv4.9.0
    • Changedauto_draft1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first."New value: +"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."
    • Changedauto_query_write1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first."New value: +"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."
    • Changedauto_validate1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first."New value: +"EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."
  2. 8 tool updatesv4.8.0
    • Changedapi_status2 fields changed
      • addedOutput schema / properties / historyFrom
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "reachable",
        -  "key",
        -  "problem"
        -]New value: +[
        +  "reachable",
        +  "key",
        +  "historyFrom",
        +  "problem"
        +]
    • Changedauto_validate4 fields changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "hyperliquid",
        -  "gmx",
        -  "binance"
        -]New value: +[
        +  "hyperliquid",
        +  "binance"
        +]
      • removedOutput schema / properties / estimatedCost
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • addedOutput schema / properties / tweetAccounts
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "valid",
        -  "errors",
        -  "warnings",
        -  "estimatedCredits",
        -  "estimatedCost"
        -]New value: +[
        +  "valid",
        +  "errors",
        +  "warnings",
        +  "estimatedCredits",
        +  "tweetAccounts"
        +]
    • Addedcalls
    • Addedentities
    • Addedevents
    • Addedmarket
    • Changedmarket_chat2 fields changed
      • addedOutput schema / properties / sources
        Added value: +{
        +  "description": "Links the research read, in order, without duplicates. kind is x_post, x_account, telegram, dex, explorer, prediction_market or web; treat any other value as web. A source was read, not necessarily cited.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "kind": {
        +        "type": "string"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "kind"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "message",
        -  "sessionId",
        -  "creditsConsumed"
        -]New value: +[
        +  "message",
        +  "sessionId",
        +  "creditsConsumed",
        +  "sources"
        +]
    • Addedtop_accounts
  3. 2 tool updatesv4.3.0
    • Removedauto_exchanges
    • Changedauto_validate3 fields changed
      • addedInput schema / properties / exchange
        Added value: +{
        +  "description": "Required for method=symbol.",
        +  "enum": [
        +    "hyperliquid",
        +    "gmx",
        +    "binance"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / method
        Added value: +{
        +  "default": "query",
        +  "description": "query validates EQL, symbol checks symbol support.",
        +  "enum": [
        +    "query",
        +    "symbol"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "Required for method=symbol, for example \"BTC\".",
        +  "type": "string"
        +}
  4. 12 tool updatesv2.0.0
    • First observedaccount_stats
    • First observedapi_status
    • First observedauto_build
    • First observedauto_draft
    • First observedauto_exchanges
    • First observedauto_query
    • First observedauto_query_write
    • First observedauto_validate
    • First observedmarket_chat
    • First observedmentions
    • First observednarratives
    • First observedtrending

TDQS

A4.1/5.0

Scored across 16 tools

Disambiguation4/5

The data tools (mentions, trending, narratives, events, market, calls, top_accounts) target overlapping social/market territory but descriptions carve out distinct modes and scopes, and the five auto_* tools have clearly separated roles (read, draft, validate, activate, park). A few pairs (mentions vs trending vs narratives for attention; calls vs top_accounts for accounts) require careful reading but are generally distinguishable.

Naming Consistency4/5

Nearly all names are lowercase snake_case, with the auto_ prefix grouping the automation tools and a shared *_status/account_stats/top_accounts pattern. Minor deviation: single-word nouns (mentions, events, market, entities) sit alongside verb_led names like auto_build and auto_query_write, mixing noun-only and verb styles.

Tool Count4/5

Sixteen tools is at the upper end but each earns its place: roughly one per data surface plus a coherent five-tool Auto lifecycle. Not bloated, though it flirts with the borderline-heavy range.

Completeness4/5

Coverage is broad: mentions/events/calls/narratives/market/trending for data, account and top_accounts for entities/persons, a full Auto query build-validate-activate-read cycle, plus api_status and entities resolution. The main gap is lookup ergonomics—entities matches exactly with no search—and no dedicated sentiment or post-text retrieval, but agents can work around both.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server that provides AI agents with crypto token safety checks (honeypot, liquidity, rug risk) and alpha signals (smart money buys, fresh rug radar) across PulseChain, Monad, Base, and BSC.
    34 npm
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP server that exposes QuantXData's institutional crypto market data APIs to AI assistants, enabling natural language queries for trades, order books, OHLCV, options, and more across 120+ exchanges.
    12
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for accessing crypto market data (prices, portfolio analytics) from CoinGecko and performing RAG-based search over internal documents with responsible-AI guardrails.
    4
    MIT