Elfa MCP
OfficialElfa MCP gives any MCP client crypto and equity social intelligence plus an always-on market condition engine (Auto).
Check access —
api_statusreports key tier, credit usage, remaining requests, and how far back the plan's history goes.Resolve entities —
entitiesturns a ticker, $cashtag, name, @handle, contract address, CoinGecko id, FIGI or CIK into the entity id the other tools take.Track market events —
eventsreturns what happened (with price reactions), multi-day storylines, and larger arcs, searchable by topic, asset, type, or implication.See whole-market views —
marketranks assets by attention share (mindshare), shows the crowd's hourly long/short lean (call book), and ranks trending contract addresses.Follow trader positions —
callslists individual position posts, open-to-close episodes with author track records, and current open longs/shorts on an asset.Rank X accounts —
top_accountssorts by standing/engagement or by caller performance (alphaScore, hitRate, avgReturn).Monitor social chatter —
mentions(top, keyword/account search, token news feed) andtrending(tickers or contract addresses on X/Telegram) show what's gaining attention.Get written analysis —
narrativesproduces sourced narrative summaries, andmarket_chatanswers market questions (chat, macro, summaries, token/account analysis) with cited source links.Judge accounts —
account_statsreturns follower and engagement ratios for an X account (legacy, retires 28 Oct 2026).Automate monitoring (Auto) —
auto_builddrafts an EQL query from plain language,auto_validatechecks syntax and cost,auto_query_writeactivates/cancels/deletes it,auto_draftparks inactive drafts, andauto_querypolls results, executions, and LLM sessions. Fired actions can notify, hit a webhook, message Telegram, or run LLM analysis.
Allows connecting a Binance exchange account so Auto queries can place orders when conditions are met.
Allows using a GMX exchange account for Auto queries to place orders when conditions are met.
Provides access to social mentions from Telegram and allows Auto queries to message a Telegram bot as an action.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Elfa MCPwhat's trending in crypto right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
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/mcpCursor, 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 |
| yes | Authenticates every request |
| no | Request timeout in ms, default |
| no | Retries on failure, default |
| no | Response size ceiling, default |
| 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 |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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). |
| 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. |
| read | Free | Check EQL syntax and get a cost estimate before activating, or check that a symbol has market data on a venue. |
| read | Free | Read side of Auto: list queries, poll one query, and read its executions and LLM sessions. |
| 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. |
| 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. |
| 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. |
| read | 1 per call | What is gaining social attention. scope=tokens for tickers, scope=contracts_twitter or scope=contracts_telegram for contract addresses. |
| read | 5 per call | Written narrative analysis with source links. scope=market extracts market-wide narratives, scope=keywords summarises events for specific keywords. |
| 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. |
| 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
entitiesfirst and reuse the id.Times are unix seconds. Milliseconds are refused.
How far back a key reads depends on its plan.
api_statusreturns it ashistoryFrom.
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 | |
| 10 to 50 depending on endpoint, max 100 | 10 | Page through rather than pull everything |
| 10 or 50 depending on endpoint, max 30 or 200 | 10 | Page with |
|
|
| Cheaper by default, ask for |
Mention fields | full record | high signal fields | Pass |
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:
auto_build— describe what to watch in plain language, get EQL backauto_validate— check the syntax and get the credit costauto_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/mcpIt 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.comThat 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 |
| no |
|
| no | Bind address, default |
| no | Bind port, default |
| no | Comma separated |
| no | Comma separated |
| no | Domain-verification token from OpenAI's plugin portal, served as plain text at |
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:
A request with no credential gets
401and aWWW-Authenticatechallenge.The challenge points the client to the protected-resource metadata at
/.well-known/oauth-protected-resource/mcp.That metadata names the authorization server, where the user signs in.
The client then sends
Authorization: Bearer <token>.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/mcpVariable | Required in OAuth mode | Purpose |
| yes |
|
| yes | Canonical URL of this endpoint. Tokens must be issued for exactly this value |
| yes | Authorization server listed in the metadata |
| yes | Where tokens are checked |
| yes | Bearer sent to the introspection endpoint |
| no | Comma separated scopes to advertise, default |
Notes:
An
x-elfa-api-keyheader still works in OAuth mode.ELFA_API_KEYis 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 verifynpm 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.
Links
License
MIT
Available Tools
16 toolsaccount_statsAccount statsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | X username, with or without the @. |
Output Schema
| Name | Required | Description |
|---|---|---|
| username | Yes | |
| followers | Yes | |
| averageReach | Yes | |
| smartFollowers | Yes | |
| smartFollowing | Yes | |
| averageEngagement | Yes |
TDQS
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.
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.
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.
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.
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.
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 statusARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| problem | Yes | |
| reachable | Yes | |
| historyFrom | Yes |
TDQS
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.
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.
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.
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.
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.
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 builderARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | No | fast is cheaper, expert reasons more deeply about the query. | fast |
| message | Yes | What to monitor, in plain language, for example "tell me on Telegram when BTC funding on Binance goes negative". | |
| sessionId | No | Continue refining a query from an earlier reply. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| planIds | Yes | |
| response | Yes | |
| reasoning | Yes | |
| sessionId | Yes |
TDQS
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.
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.
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.
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.
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.
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 draftsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| query | No | 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. | |
| title | No | Title carried into the live query. | |
| method | Yes | upsert creates or updates a draft. convert activates it as a live query. | |
| offset | No | Pagination offset. | |
| search | No | Free text filter for method=list. | |
| status | No | Filter for method=list. | |
| draftId | No | Required for get, delete and convert. Optional on upsert to update. | |
| description | No | Description carried into the live query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| method | Yes |
TDQS
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.
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.
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.
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.
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.
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 queriesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter executions by type. | |
| limit | No | Page size for list style methods. | |
| method | Yes | Which read to perform. | |
| offset | No | Pagination offset. | |
| search | No | Free text filter for method=list. | |
| status | No | Filter by status. | |
| queryId | No | Required for get, sessions and session. | |
| sessionId | No | Required for method=session. | |
| executionId | No | Required for method=execution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| method | Yes | |
| pollAfterSeconds | Yes |
TDQS
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.
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.
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.
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.
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.
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 queriesADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 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. | |
| title | No | Short title shown in the notification when this fires. | |
| method | Yes | create activates a new query. cancel stops an active one. delete removes one that has already finished. | |
| queryId | No | Required for cancel and delete. | |
| description | No | Why this was set up, shown alongside the title. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| method | Yes |
TDQS
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.
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.
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.
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.
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.
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 queryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 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. | |
| title | No | Title to validate with the query. | |
| method | No | query validates EQL, symbol checks symbol support. | query |
| symbol | No | Required for method=symbol, for example "BTC". | |
| draftId | No | Validate a stored draft instead of an inline query. | |
| exchange | No | Required for method=symbol. | |
| description | No | Description to validate with the query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | |
| errors | Yes | |
| warnings | Yes | |
| tweetAccounts | Yes | |
| estimatedCredits | Yes |
TDQS
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.
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.
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.
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.
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.
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.
callsCallsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the range, unix seconds. Defaults to now. | |
| ids | No | level=calls or episodes. Fetch up to 30 call or episode ids you already hold. No from needed. | |
| from | No | level=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. | |
| level | No | Which level to read. | calls |
| limit | No | Items per page, up to 30. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | desc (default) or asc. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| handle | No | An X account, with or without @. Telegram channels cannot be filtered on. | |
| status | No | level=episodes. | |
| entityId | No | level=positioning, required. One token or equity id from the entities tool. | |
| direction | No | level=episodes. | |
| entityIds | No | Up to 30 token or equity ids from the entities tool. Matches any of them. | |
| assetClass | No | level=episodes. The market of the position's asset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| level | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes | |
| servedFrom | Yes |
TDQS
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.
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.
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.
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.
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.
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.
entitiesEntitiesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | What you hold, for example "btc", "$SOL", "@VitalikButerin" or a contract address. | |
| limit | No | Items per page, up to 200. Keep it small and page with cursor rather than asking for everything at once. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| entityType | No | Narrow the match to these kinds. Omit to match every kind. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes |
TDQS
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.
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.
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.
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.
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.
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.
eventsEventsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by topic, best match first, for example "stablecoin regulation". from becomes optional. | |
| to | No | level=events or storylines. End of the range, unix seconds. Defaults to now. | |
| ids | No | Fetch up to 30 you already hold, by id. No from needed. | |
| from | No | level=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. | |
| sort | No | level=events: latest (default), or relevant, which ranks the last 24 hours and takes no from. level=arcs: latest, storylines or events. | |
| arcId | No | level=events. Events in one arc's storylines. | |
| level | No | Which level to read. | events |
| limit | No | Items per page, up to 30. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | desc (default) or asc. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| status | No | level=storylines: open (default; every status with q), dormant or any. level=arcs: active (default) or retired. | |
| notable | No | level=events. true drops events their storyline marked as not material. | |
| novelty | No | level=events. update: a later reading of a story already served. | |
| relation | No | level=storylines. Storylines holding an event of this relation. | |
| entityIds | No | Up to 30 ids from the entities tool. Matches any of them. | |
| eventType | No | level=events. What kind of development it is. | |
| assetClass | No | level=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. | |
| eventClass | No | level=events. market: a development reported across posts. asset: posts about one asset. call: accounts taking positions. | |
| alertAction | No | level=events. alert: judged impactful. monitor: worth watching. | |
| implication | No | level=events. Which way it cuts for the assets it names. | |
| hasStoryline | No | level=events. true keeps events in a storyline, false those in none. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| level | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes | |
| servedFrom | Yes |
TDQS
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.
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.
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.
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.
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.
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.
marketMarketARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the range, unix seconds. Defaults to now. | |
| from | No | view=call_book and view=trending_contracts, required. Start of the range, unix seconds, not milliseconds. Trending contracts read 30 days at most. | |
| view | No | Which view to read. | mindshare |
| limit | No | Items per page, up to 200. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | view=call_book. desc (default) or asc. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| market | No | crypto or equity. trending_contracts is crypto only. | crypto |
| period | No | view=mindshare. The stretch share covers, ending at to. Default 4h. | |
| minMentions | No | view=trending_contracts. Leave out addresses pasted fewer times. Default 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | |
| items | Yes | |
| market | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes | |
| servedFrom | Yes |
TDQS
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.
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.
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.
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.
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.
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 chatARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Chain, paired with contractAddress. | |
| speed | No | Defaults to fast, which is cheaper and shallower. Ask for expert when the answer needs deeper reasoning. | fast |
| symbol | No | Token symbol, for token analysis. | |
| message | No | The question, required for analysisType=chat. | |
| username | No | X username, for analysisType=accountAnalysis. | |
| sessionId | No | Continue an earlier conversation. | |
| analysisType | No | chat needs message. tokenIntro and tokenAnalysis need symbol, or chain plus contractAddress. accountAnalysis needs username. macro and summary need nothing else. | chat |
| contractAddress | No | Contract address, paired with chain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| sources | Yes | 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. |
| sessionId | Yes | |
| creditsConsumed | Yes |
TDQS
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.
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.
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.
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.
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.
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.
mentionsMentionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of an absolute range, unix seconds. Use with from. | |
| from | No | Start of an absolute range, unix seconds. Use with to. For mode=search the range must span at least 1 day and at most 30. | |
| mode | Yes | top needs ticker. search needs keywords or accountName. news is a feed and needs neither. | |
| page | No | Page number, starting at 1. | |
| limit | No | Result count for mode=search. | |
| cursor | No | Pagination cursor from a previous mode=search response. | |
| ticker | No | Ticker for mode=top, for example "BTC" or "$SOL". | |
| coinIds | No | Comma separated CoinGecko coin ids to filter mode=news. | |
| reposts | No | Include reposts in the results. | |
| keywords | No | Up to 5 comma separated keywords for mode=search. | |
| pageSize | No | Items per page, up to 100. Keep it small and page through rather than asking for everything at once. | |
| verbosity | No | concise returns the high signal fields only. Use detailed when you need every metric. | concise |
| searchType | No | How multiple keywords combine in mode=search. | |
| timeWindow | No | Relative window such as "1h", "24h" or "7d". | |
| accountName | No | X username for mode=search, without the @. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| next | Yes | |
| total | Yes | |
| notice | Yes | |
| mentions | Yes |
TDQS
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.
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.
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.
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.
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.
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.
narrativesNarrativesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of an absolute range, unix seconds. Use with from. | |
| from | No | Start of an absolute range, unix seconds. Use with to. | |
| scope | No | market is a broad sweep. keywords needs the keywords argument. | market |
| keywords | No | Up to 5 comma separated keywords for scope=keywords. | |
| timeFrame | No | Lookback for scope=market. | |
| searchType | No | How multiple keywords combine for scope=keywords. | |
| timeWindow | No | Relative window such as "1h", "24h" or "7d". | |
| maxNarratives | No | Cap the narratives returned for scope=market. | |
| maxTweetsPerNarrative | No | Cap the sources per narrative for scope=market. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| items | Yes | |
| scope | Yes | |
| notice | Yes | |
| matched | Yes |
TDQS
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.
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.
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.
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.
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.
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 accountsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Items per page, up to 200. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | desc (default) ranks the highest first. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| metric | No | standing (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
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes |
TDQS
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.
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.
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.
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.
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.
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.
trendingTrendingARead-onlyIdempotent
What is gaining social attention right now. 1 credit per call. scope=tokens returns tickers ranked by mention volume with the change against the previous window. scope=contracts_twitter and scope=contracts_telegram return trending contract addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of an absolute range, unix seconds. Use with from. | |
| from | No | Start of an absolute range, unix seconds. Use with to. | |
| page | No | Page number, starting at 1. | |
| scope | No | Which trending list to return. | tokens |
| pageSize | No | Items per page, up to 100. Keep it small and page through rather than asking for everything at once. | |
| timeWindow | No | Relative window such as "24h" or "7d". Defaults to 24h unless both from and to are given. | |
| minMentions | No | Drop entries below this mention count. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| items | Yes | |
| scope | Yes | |
| total | Yes | |
| pageSize | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds context those annotations cannot: a per-call cost of 1 credit and what each scope actually returns (mention-volume ranking with change vs. the previous window). It doesn't cover rate limits or whether results are cached/delayed, but the added detail is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler. The purpose leads, the cost disclosure follows immediately, and the scope semantics come last where they are most actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't be explained, and all seven parameters are fully described in the schema. Cost and scope semantics are covered. The remaining gap is the absence of sibling routing guidance in a crowded namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns the bump by explaining what the scope enum values produce — 'tokens' means tickers ranked by mention volume with change against the previous window, while the two contracts scopes return trending contract addresses — which is meaning the enum's one-line schema description does not supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line pins down the resource precisely: socially trending items ranked 'right now', and the scope breakdown tells the agent it can return either tickers or contract addresses. It is clear what the tool returns, but it never distinguishes itself from siblings like 'mentions' or 'narratives', which plausibly cover adjacent ground.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope values imply when each mode applies, and the timeWindow/from-to note hints at range selection, but there is no explicit statement of when to reach for this tool rather than 'mentions', 'narratives', or 'market'. Usage is inferable rather than stated.
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.
3 tool updates
v4.9.0- Changed
auto_draft1 field changed- changed
Input schema / properties / query / descriptionPrevious 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."
- Changed
auto_query_write1 field changed- changed
Input schema / properties / query / descriptionPrevious 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."
- Changed
auto_validate1 field changed- changed
Input schema / properties / query / descriptionPrevious 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."
8 tool updates
v4.8.0- Changed
api_status2 fields changed- added
Output schema / properties / historyFromAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / requiredPrevious value: -[ - "reachable", - "key", - "problem" -]New value: +[ + "reachable", + "key", + "historyFrom", + "problem" +]
- Changed
auto_validate4 fields changed- changed
Input schema / properties / exchange / enumPrevious value: -[ - "hyperliquid", - "gmx", - "binance" -]New value: +[ + "hyperliquid", + "binance" +] - removed
Output schema / properties / estimatedCostRemoved value: -{ - "anyOf": [ - { - "additionalProperties": {}, - "type": "object" - }, - { - "type": "null" - } - ] -} - added
Output schema / properties / tweetAccountsAdded value: +{ + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "valid", - "errors", - "warnings", - "estimatedCredits", - "estimatedCost" -]New value: +[ + "valid", + "errors", + "warnings", + "estimatedCredits", + "tweetAccounts" +]
- Added
calls - Added
entities - Added
events - Added
market - Changed
market_chat2 fields changed- added
Output schema / properties / sourcesAdded 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" +} - changed
Output schema / requiredPrevious value: -[ - "message", - "sessionId", - "creditsConsumed" -]New value: +[ + "message", + "sessionId", + "creditsConsumed", + "sources" +]
- Added
top_accounts
2 tool updates
v4.3.0- Removed
auto_exchanges - Changed
auto_validate3 fields changed- added
Input schema / properties / exchangeAdded value: +{ + "description": "Required for method=symbol.", + "enum": [ + "hyperliquid", + "gmx", + "binance" + ], + "type": "string" +} - added
Input schema / properties / methodAdded value: +{ + "default": "query", + "description": "query validates EQL, symbol checks symbol support.", + "enum": [ + "query", + "symbol" + ], + "type": "string" +} - added
Input schema / properties / symbolAdded value: +{ + "description": "Required for method=symbol, for example \"BTC\".", + "type": "string" +}
12 tool updates
v2.0.0- First observed
account_stats - First observed
api_status - First observed
auto_build - First observed
auto_draft - First observed
auto_exchanges - First observed
auto_query - First observed
auto_query_write - First observed
auto_validate - First observed
market_chat - First observed
mentions - First observed
narratives - First observed
trending
TDQS
Scored across 16 tools
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.
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.
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.
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
Related MCP Connectors
Crypto market intelligence, token rug-checks, and wallet verification in one MCP server.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Unlock the power of real-time cryptocurrency data with our Crypto Price Insights MCP server.
Live whale movements, wallet intel and Alpha-bot signals across 17 EVM chains, over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that delivers cryptocurrency sentiment analysis to AI agents.547MIT
- AlicenseNot gradedqualityFmaintenanceMCP 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 npmMIT
- AlicenseBqualityDmaintenanceMCP 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.12MIT
- AlicenseAqualityDmaintenanceMCP server for accessing crypto market data (prices, portfolio analytics) from CoinGecko and performing RAG-based search over internal documents with responsible-AI guardrails.4MIT