Elfa MCP
OfficialYou can use this MCP server to query Elfa’s crypto/equities social and market intelligence and to build and manage unattended Auto monitoring queries.
Check API key tier, credit usage, remaining requests, and plan history window with
api_status.Resolve tickers, cashtags, names, handles, contract addresses, CoinGecko IDs, FIGI/CIK to entity IDs with
entities.Read market events, storylines and arcs; market mindshare, call book and trending contracts; calls, episodes and live positioning; and top X accounts by standing or track record.
Draft, validate, activate, cancel, delete, list/poll Auto queries and manage saved drafts.
Fetch X/Telegram mentions, token news, trending tokens/contracts, and narrative analysis.
Ask for written market analysis via conversational chat, macro, summary, token or account analysis.
Run locally with an API key or use the hosted server with browser sign-in; supports stdio and Streamable HTTP/OAuth deployments.
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 | 1 per call | 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 | 1, plus 1 per event or 2 per storyline or arc | 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 | call_book 2, mindshare 5, trending_contracts 5 (plus 5 over a 24 hour range), doubled for limit over 50 | 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 | 1, plus 1 per call or 2 per episode; positioning 2 | 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 | 5 by standing, 25 by a track metric, doubled for limit over 50 | 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. |
| read | Free | Read side of Auto drafts: list saved drafts and read one. Drafts are queries parked without activating; they never evaluate or fire. |
| write | Free, except convert which costs the same as creating a query | Create, update, delete or activate an Auto draft. Converting a draft activates it as a live query that runs unattended. |
| 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 | 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.getAccountSmartStats-v2— Deprecated and not maintained, so no tool wraps it. To rank accounts, use top_accounts; mentions with mode=search returns per-post engagement metrics with the posting account.
Some tools depend on the plan: today market_chat, which needs a higher-tier plan than the free one, and the API v3 tools on a key whose scopes leave them out. 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 and are open to every plan. Each call costs credits, priced per endpoint on the pricing page.
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 toolsapi_statusAPI key statusARead-onlyIdempotent
Check the Elfa API key tier, credit usage and remaining requests, and confirm the API is reachable. Free. 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 readOnlyHint, idempotentHint, non-destructive, and closed-world behavior. The description adds useful context beyond annotations: the call is free, it reports credit usage and remaining requests, and it explains the plan-dependent historyFrom limit affecting other tools.
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 three short sentences, front-loads the core purpose, and includes only relevant plan-limit context. No sentence is wasted.
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 zero parameters, rich annotations, and an output schema, the description is complete enough: it states what is checked, that the call is free, that it confirms reachability, and how historyFrom relates to the plan. Return-value details can safely be delegated to the output schema.
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 has zero parameters, so there are no parameter semantics to document. The description mentions historyFrom only as plan context for other tools, not as an input to this tool, which is appropriate for a zero-parameter status endpoint.
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, "Check," and names concrete resources: API key tier, credit usage, remaining requests, and reachability. It is clearly distinguishable from sibling tools like events, market, and calls, which read data rather than report account/API status.
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 provides clear usage context: use this to inspect plan limits and confirm API reachability, and notes that the call is free. It does not explicitly state when not to use it or name an alternative, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 runs until it is activated. 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), not for other X accounts.
| 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 substantial context beyond annotations: a stated cost of 1 credit plus LLM usage, the assurance that nothing executes until activation, and a coverage limitation on which X accounts can be used in tweet conditions. These are exactly the non-obvious traits an agent would otherwise get wrong, and they are consistent with readOnlyHint=true.
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 the purpose and the most decision-relevant constraint (draft-only, no execution), followed by cost and coverage limits. No sentence is redundant.
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 and an output schema present, the description need not explain returns, and it covers cost, non-execution, and coverage limits. Minor gap: it does not mention how credit is charged on failure or how the sessionId refinement loop is expected to be used.
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 more by explaining what the required message must contain (target, threshold, firing action) and implying the sessionId workflow ("Continue refining"). The speed parameter is left entirely to the schema, which is acceptable given its enum 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?
States a specific verb and resource: it turns a plain-language request into an EQL query draft. The sentence "This only drafts the query: nothing runs until it is activated" cleanly separates it from the execution siblings (auto_query, auto_query_write), though it does not explicitly distinguish itself from auto_validate or auto_draft.
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 concrete input requirements ("Say what to watch, the threshold, and what should happen when it fires") and a clear usage boundary (tweet conditions only for accounts in Elfa's real-time set, not other X accounts). It stops short of naming which sibling to use for other request types, so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_draftRead Auto draftsARead-onlyIdempotent
Read side of Auto drafts. Free. method=list browses saved drafts, method=get returns one draft. A draft is an Auto query parked without activating it: it never evaluates and never fires.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| method | Yes | Which read to perform. | |
| offset | No | Pagination offset. | |
| search | No | Free text filter for method=list. | |
| status | No | Filter for method=list. | |
| draftId | No | Required for method=get. |
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 readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description earns extra credit by disclosing that drafts 'never evaluate and never fire' and that reads are 'Free', which is behavioral context the annotations cannot express.
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 short sentences, zero filler, and the core definition of a draft is front-loaded. Each clause (read-side, method routing, draft semantics) earns its place with no repetition of schema fields.
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 described. The description supplies the one thing structured fields cannot: the domain concept of a parked, non-evaluating draft, making the tool fully usable from description plus schema plus annotations.
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 schema coverage at 100%, the schema already documents all six parameters, so baseline is 3. The description adds genuine meaning by explaining what each method value returns, complementing the schema's terse 'Which read to perform' enum description.
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+resource ('Read side of Auto drafts') and explicitly enumerates the two read modes (list vs get). It also names the resource concept precisely, distinguishing it from the write sibling auto_draft_write via the 'Read side' framing.
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?
Clearly explains which method selects which operation ('method=list browses saved drafts, method=get returns one draft'), giving an agent the routing decision. It stops short of stating when to prefer this over related siblings like auto_query or auto_build, so it is a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_draft_writeWrite Auto draftsADestructive
Create, update, delete or activate an Auto draft. method=upsert parks a query as a draft without activating it; drafts never evaluate and never fire. method=delete removes a draft. method=convert activates a draft as a live query, which runs unattended and fires its action without asking again, and costs the same as creating a query. upsert and delete are free.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | EQL query as a JSON object, not a string, with conditions, actions and expiresIn. auto_build drafts one inside its response text. Actions are notify or webhook: 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. delete removes one. convert activates it as a live query. | |
| draftId | No | Required for 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?
Goes well past the annotations by disclosing consequences: drafts never evaluate and never fire, while convert runs unattended and fires its action 'without asking again'. It also quantifies cost (convert costs the same as creating a query; upsert and delete are free), which is exactly the kind of information 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?
Three dense sentences, front-loaded with the capability and immediately followed by the per-method behavior. No filler; every clause (non-firing drafts, unattended firing, cost) 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?
For a destructive, open-world mutation with an output schema present, the description covers the critical unknowns: what each method does, what activation implies, and what it costs. Return values are handled by the output schema, so nothing essential 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 schema already documents each field; the description adds value by explaining the semantics and consequences of the method parameter beyond the schema's one-line gloss. Other parameters (query, draftId, title) 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?
Opens with a specific verb set and resource ('Create, update, delete or activate an Auto draft') and then enumerates each of the three enum values with its distinct effect. An agent can distinguish this write tool from the read-side sibling auto_draft without opening either 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 between methods: upsert for parking a non-firing draft, delete for removal, convert for going live. It does not name the read sibling (auto_draft) as the alternative when no write is needed, so the exclusion side is only implied.
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 establish readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds genuinely new behavioral context beyond them: the tool is free, there is no push channel, and polling cadence must respect pollAfterSeconds. It also discloses that method=get surfaces a failure with a recorded reason when evaluation failed. It could go further on rate limits or what polling too aggressively does, but the added context 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?
The key framing ('Read side of Auto. Free.') and the polling constraint are front-loaded and compact. It is a single dense run-on sentence in the middle, but virtually every clause maps a method to its output, so little is wasted.
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 schema, and an output schema to describe return shapes, the description's remaining job is method routing and polling behavior, both of which it handles. The main omission is guidance on which identifier parameters pair with which method beyond what the schema's 'Required for...' notes already state.
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 a bump by mapping each enum value of method to concrete behavior and return content — meaning the schema's terse 'Which read to perform' does not provide. It does not add anything for queryId, sessionId, executionId, or the filter parameters, relying entirely on the schema there.
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 framing ('Read side of Auto') and enumerates what each of the six methods returns (queries, evaluations, executions, LLM analysis), which lets an agent distinguish read operations from auto_query_write without opening the schema. It stops short of naming the write sibling explicitly, but 'Read side' carries the differentiation.
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 concrete routing guidance — use method=list to browse, method=get to poll a single query, method=executions/execution for what fired, method=sessions/session for LLM analysis — and adds a clear operational rule: there is no push channel, poll with method=get and respect pollAfterSeconds. The one gap is that it does not explicitly say to reach for auto_query_write when mutation is needed, leaving that to inference from the 'Read side' framing.
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. Per-post X accounts in its tweet conditions and per-day accounts in its x_follow_made or x_follow_overlap conditions are billed on top while it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | EQL query as a JSON object, not a string, with conditions, actions and expiresIn. auto_build drafts one inside its response text. Actions are notify or webhook: 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 declare destructiveHint=true and openWorldHint=true, yet the description still adds real behavioral context: a 5-credit create charge, free cancel/delete, and the fact that an activated query fires its action without asking again — the key risk of this tool. The extra per-post/per-day billing for account-listing conditions is a concrete operational caveat not available in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action set, then cost and execution semantics. Every sentence carries information, though the final sentence is dense and mixes billing rules into one long clause.
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 the safety profile and an output schema present, the description closes the remaining gaps an agent needs: credit cost, charge asymmetry across methods, and the irreversible unattended-execution behavior. Nothing essential to calling 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 description coverage is 100% and the method enum, queryId requirement, and query object shape are all documented there. The description's only parameter-adjacent contribution is naming x_follow_made/x_follow_overlap billing conditions inside the query object, which is marginal. Baseline 3 applies since the schema carries the load.
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 three specific verbs against a named resource ('Activate, cancel or delete an Auto query'), so an agent immediately knows the mutation surface. It does not explicitly contrast itself with siblings like auto_query (read) or auto_build (drafting), leaving that routing to inference.
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?
Cost guidance is useful signal for choosing among methods ('Creating costs 5 credits plus LLM usage, cancel and delete are free'), and the unattended-execution warning implies caution. But there is no explicit when-to-use/when-not guidance and no named alternative — the pointer to auto_build for drafting a query lives in the schema, not the description.
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 the estimated cost of activating a query. Free. 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. followAccounts lists the X account behind each x_follow_made or x_follow_overlap condition: billing=per_day accounts cost creditsPerDay for each UTC day their follows are read while the query runs, also on top of estimatedCredits. Pass either an inline query or a draftId. method=symbol instead checks that a symbol has market data on a venue, which price and ta conditions need.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | EQL query as a JSON object, not a string, with conditions, actions and expiresIn. auto_build drafts one inside its response text. Actions are notify or webhook: 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 | |
| followAccounts | Yes | |
| estimatedCredits | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnlyHint, idempotent, non-destructive), and the description adds genuinely new behavior: the call is free, cost is an estimate, and per_post/per_day billing semantics accrue on top of estimatedCredits while the query runs. That is exactly the cost-model context an agent needs before committing to a query.
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 and cost statement is front-loaded in the first two sentences, and the mode switch is placed last as a natural qualifier. The billing passages are lengthy and read as return-value documentation that the output schema could carry, which costs it a point.
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, full schema coverage and safety annotations, the description is nearly complete: it covers both modes, input alternatives, and cost implications. It does not say what a failed validation returns or whether a valid draftId/query is mutually exclusive, leaving a small gap.
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 schema already documents query, draftId, method, symbol and exchange. The description only reinforces the query-vs-draftId alternative and the method switch; the tweetAccounts/followAccounts text explains return fields rather than parameter meaning, so it adds little beyond 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?
The opening sentence states a specific verb and resource: check EQL syntax and estimate activation cost, plus a distinct symbol-data mode. It is clearly separable from auto_build (drafting) and auto_query (execution), though it never names those siblings explicitly to route the agent.
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?
"Pass either an inline query or a draftId" and "method=symbol instead checks..." give concrete invocation context for both modes, including the price/ta condition prerequisite. It stops short of stating when to prefer this over auto_build/auto_query or that validation is a precondition to activation.
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 declare readOnly, idempotent, non-destructive and open-world, so the bar is lower, yet the description adds real value by naming what is deliberately omitted (post text, recommendations) and by explaining that episodes match a position open at any point in the range rather than only at the endpoints. Pagination and cursor invalidation behavior live in the schema rather than the description.
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 and content-dense: the identity sentence comes first, then the level definitions, then the exclusion. There is a stray double period ('Telegram..') and the level definitions are run together in one block rather than separated, which slightly hurts scanability of a three-mode 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?
With 13 parameters, three read modes, and a full output schema, the description covers the mode semantics and the one meaningful omission from results. Remaining gaps—cursor reset behavior and range/ordering defaults—are fully covered by schema descriptions, so nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely adds meaning to the central 'level' parameter by defining what each of calls, episodes and positioning returns, plus a cross-parameter idiom (episodes + status=open + from=now). It does not touch the remaining filters, which the schema documents adequately.
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 clause states the resource precisely: positions accounts take in posts on X and Telegram, decomposed into three named levels (calls/episodes/positioning). An agent understands what is being read and that it is position data, not post content. It does not name a sibling (events, mentions, top_accounts) to differentiate itself, which keeps it from 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?
It gives explicit mode-selection guidance, including the non-obvious recipe 'level=episodes with status=open and from set to now reads what every matching account holds right now', which is essentially a when-to-use rule. It also states a hard exclusion ('Not returned: post text or a recommendation'). It stops short of routing the agent to alternative sibling tools for adjacent needs.
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, non-destructive behavior, so the description is free to add exact-match semantics, ticker non-uniqueness, and family-id unification such as WBTC and cbBTC mapping to Bitcoin. These are meaningful behavioral traits an agent would otherwise have to discover by trial and error.
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-loads the core conversion purpose, then adds only the constraints an agent needs: exact matching, ticker ambiguity, family-id sharing, and reuse. Dense but efficient; every sentence carries useful 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?
Given the output schema, the description covers the key caller-facing behavior: input forms, exact matching, ambiguity handling, and id reuse. Nothing critical is missing for correct invocation.
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 documentation is already strong. The description still adds value by explaining why entityType matters: tickers are not unique, so narrowing by entity type helps disambiguate results.
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: turning many identifier forms into an entity id. It also clarifies that this is exact resolution, not search, which distinguishes it from more exploratory tools.
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 when the tool works (exact matches) and when it fails (prefixes or misspellings return nothing). It also gives practical guidance for ambiguous tickers: take the first row and check the name, or narrow with entityType, and reuse the resolved id.
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?
The annotations already state that this is a read-only, idempotent, open-world operation, so the safety profile is covered. The description adds meaningful behavioral context that annotations cannot: impacts is empty on most events, post text, sentiment scores, and prices are not returned, and paging is required. That prevents several likely agent mistakes.
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 and the exclusions are front-loaded, and every sentence carries useful information. It is dense and somewhat run-on, and the first sentence contains a stray double period, but it is not padded.
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 21-parameter, three-level tool with an output schema, the description covers purpose, level semantics, lookup modes, and what is not returned. The remaining gaps are minor, such as which level-specific filters can safely be combined.
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 adds cross-parameter semantics that the schema only documents in isolation: which arguments belong to which level, that arcs take no from, and that relevant ranking covers only the last 24 hours. These are real additions over the per-field text.
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 the resource (crypto and equity market events derived from posts), the three granularity levels (events, storylines, arcs), and how each level relates. It also states what is not returned, so an agent can distinguish it from siblings like narratives, trending, and mentions without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear routing instructions: use q to search any level by topic, entityIds from the entities tool to filter by asset, or ids to fetch up to 30 held items. It does not explicitly contrast with sibling tools such as narratives or trending, which leaves some ambiguity about when this tool should be preferred.
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 declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds some useful behavior beyond that — the 30-day cap on trending_contracts and the fact that unnamed contracts are often the interesting ones — but pagination cost, latency, or data-freshness expectations are not described.
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-loads the scope claim, then allocates one clause-group per view — every view-specific sentence carries information an agent needs. Slightly dense run-on at the end and a stray double period, but no filler.
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 params, an output schema, and rich annotations, the description covers the main risk — picking the wrong view and misreading call_book output. It could say more about how the three views relate to sibling tools, but nothing required for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents each param with its view applicability, cursor invalidation rule, limits, and defaults. The description's view narratives are helpful orientation but largely restate what the schema params already say, so the baseline 3 fits.
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 scope statement ('Whole-market views, no asset needed') and then defines each of the three view values concretely (mindshare rankings, call_book long/short lean, trending_contracts contract rankings). It differentiates from the per-asset siblings implicitly via 'no asset needed' but never names trending/narratives/top_accounts as alternatives or complements.
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 view-by-view selection guidance, including a real trap to avoid ('read crowdingPercentile rather than longShare, since the accounts lean long almost always') and a 'crypto only' constraint on trending_contracts. It stops short of saying when to reach for this tool instead of trending, narratives, or top_accounts.
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. | |
| useMemory | No | true lets the request read and add to the saved memory of the Elfa account that owns the API key. Omitted, it neither reads nor writes memory. Leave it off when one key serves many people. | |
| 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 safety (readOnly, non-destructive, open-world, non-idempotent), so the bar is lower, yet the description still adds real context: credit consumption, cost/speed tradeoff, session continuity semantics, and the fact that sources are links only and not their text. It does not restate annotation fields, which is correct.
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, front-loaded with purpose and followed by cost, continuation and output notes. Each sentence carries information, though the sources sentence is slightly verbose for what it conveys.
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, rich annotations and full parameter documentation, the description needs only to frame purpose and key behaviors, which it does. An agent knows what the tool does, what it costs, how to continue a thread, and what comes back.
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 all nine parameters are already documented, establishing a baseline of 3. The description adds only marginal meaning beyond that, mainly that sessionId should come 'from a previous reply'; the speed note largely repeats the schema's own 'cheaper and shallower' wording.
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 concrete verb and resource: 'Ask Elfa for written market analysis grounded in its social data.' That is distinguishable from data-retrieval siblings like market, trending and narratives. It undersells the tool slightly by framing it as only 'market analysis' when the schema exposes six analysisTypes, but the core purpose is unmistakable.
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 useful in-tool guidance (continue a conversation via sessionId, choose fast for cost) but never routes the agent between this and siblings such as market, narratives or mentions. No explicit when-not-to-use or prerequisite conditions are stated.
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, open-world, non-destructive, so safety is covered. The description adds cost per call, the return shape (engagement metrics plus link, no post text), and clarifies that 'news' is tagged X accounts rather than outlet articles – all beyond structured fields. Pagination/rate behavior is left to the schema.
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?
Five short sentences, front-loaded with what it is, then cost, then return shape, then per-mode breakdown. Each sentence carries information an agent would otherwise have to infer.
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?
A 15-parameter, three-mode tool is handled well: the mode semantics and return-content caveat are exactly what an agent needs, and the output schema covers return structure. Pagination and the search time-range constraint live only in the schema, which is acceptable but not ideal.
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 every parameter is already documented. The description usefully ties mode to its required inputs and clarifies the news feed's sourcing, but it adds little on timeWindow, verbosity, reposts, cursor, or the search range constraint beyond what the schema states.
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 the concrete resource (social mentions from X and Telegram) and enumerates the three modes with distinct semantics, which no sibling tool offers. An agent can tell this apart from trending, narratives, or market without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear mode-selection guidance (top needs a ticker, search filters by keyword or account, news is a feed needing neither) and notes the one-credit cost. It stops short of naming alternatives such as trending or narratives for adjacent use cases.
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. 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 cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new operational facts: 5 credits per call and that scope=keywords can take over a minute. Cost and latency disclosure is exactly the context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler, front-loaded with the core purpose, then cost, then scope behavior. Every sentence carries distinct 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?
Covers purpose, cost, latency, and per-scope behavior, and an output schema exists so return format needn't be explained. Only slight gap is not mentioning the time range parameters, but those are fully documented in a 100%-coverage schema.
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 adds value by explaining what each scope actually returns: scope=market extracts market-moving narratives, scope=keywords summarises events for supplied keywords. That clarifies the semantic difference between the two enum branches beyond the schema's terse 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 verb+resource combination ("Written narrative analysis with source links") and contrasts its use case against count-based tools ("for when counts are not enough"). It also distinguishes its two scopes. It never names a specific sibling tool, which keeps it from 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?
Gives a clear selection condition ("for when counts are not enough") and explains the two scope branches, including that scope=keywords requires supplied keywords. It doesn't explicitly route to alternatives like market, trending, or mentions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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; scoredEpisodes is the number of positions behind each account's track metrics.
| 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 read-only, idempotent, non-destructive, so safety needs no restatement; the description instead adds real caveats an agent can't get elsewhere: track is null for accounts that never opened a position, track metrics only rank accounts with ≥20 scored positions, and the coverage window is every position since late June 2026. It adds scoredEpisodes semantics too, though it says nothing about result size or paging behavior.
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 two ranking modes, then the caveats; nearly every clause carries usable information. There is a stray double period ('callers..') and the metric advice is squeezed into one long sentence, but nothing is padding.
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 described; the schema also handles pagination via limit/cursor. What remains — what the metrics mean, null semantics, the minimum-position threshold, and the time window — is all covered.
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 coverage the baseline is 3, but the description goes beyond the enum docs by explaining why alphaScore is preferred over avgReturn and what standing actually measures. The normative guidance ('not avgReturn') is the kind of meaning the schema 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?
States a specific verb and resource — X accounts ranked — and immediately splits the two ranking modes (standing vs. track record via metric). It doesn't name any sibling (entities, trending, calls) as the alternative, so the agent must infer the boundary, but the purpose itself 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?
Gives explicit selection advice within the tool: 'For the best callers use metric=alphaScore, not avgReturn, which a few big wins or a rally can top,' plus the caveat that standing measures attention, not accuracy. There is no guidance on when to use this tool versus sibling tools such as trending or entities, which keeps it below 5.
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 the bar is lower, and the description still adds genuinely useful context: a per-call credit cost and the fact that token results include change against the previous window. It does not mention whether results are cached, rate-limited, or how the cost scales with pageSize.
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 compact sentences with the purpose front-loaded and scope semantics grouped together; the credit cost is placed out of the way. The opening fragment 'What is gaining social attention right now' is slightly indirect but earns its place as orientation.
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, all seven parameters are documented in the schema, and annotations cover the safety profile, so the remaining burden on the description is small. It fills exactly the gaps that matter: what each scope returns and what the call costs.
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 does add one thing the schema does not: the concrete meaning of each of the three scope enum values, since the schema text only says 'which trending list to return.' It adds nothing about from/to versus timeWindow precedence, minMentions, or paging strategy, all of which the schema 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?
The description names the resource clearly and, crucially, spells out what each scope returns: tickers ranked by mention volume with delta vs the previous window, or trending contract addresses. It lacks a crisp verb and never distinguishes itself from sibling social tools (mentions, narratives, top_accounts), so an agent must infer the difference.
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?
Scope-by-scope output descriptions implicitly tell the agent which variant to pick, which is real selection guidance. But there is no statement of when to prefer this over mentions or narratives, and no exclusions or prerequisites are given.
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.
2 tool updates
v4.10.0- Changed
auto_validate2 fields changed- added
Output schema / properties / followAccountsAdded value: +{ + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "valid", - "errors", - "warnings", - "estimatedCredits", - "tweetAccounts" -]New value: +[ + "valid", + "errors", + "warnings", + "estimatedCredits", + "tweetAccounts", + "followAccounts" +]
- Changed
market_chat1 field changed- added
Input schema / properties / useMemoryAdded value: +{ + "description": "true lets the request read and add to the saved memory of the Elfa account that owns the API key. Omitted, it neither reads nor writes memory. Leave it off when one key serves many people.", + "type": "boolean" +}
5 tool updates
v4.9.3- Removed
account_stats - Changed
auto_draft6 fields changed- removed
Input schema / properties / descriptionRemoved value: -{ - "description": "Description carried into the live query.", - "maxLength": 500, - "type": "string" -} - changed
Input schema / properties / draftId / descriptionPrevious value: -"Required for get, delete and convert. Optional on upsert to update."New value: +"Required for method=get." - changed
Input schema / properties / method / descriptionPrevious value: -"upsert creates or updates a draft. convert activates it as a live query."New value: +"Which read to perform." - changed
Input schema / properties / method / enumPrevious value: -[ - "list", - "get", - "upsert", - "delete", - "convert" -]New value: +[ + "list", + "get" +] - removed
Input schema / properties / queryRemoved value: -{ - "additionalProperties": {}, - "description": "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.", - "type": "object" -} - removed
Input schema / properties / titleRemoved value: -{ - "description": "Title carried into the live query.", - "maxLength": 120, - "type": "string" -}
- Added
auto_draft_write - 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. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."New value: +"EQL query as a JSON object, not a string, with conditions, actions and expiresIn. auto_build drafts one inside its response text. Actions are notify or webhook: 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. Use notify or webhook actions: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."New value: +"EQL query as a JSON object, not a string, with conditions, actions and expiresIn. auto_build drafts one inside its response text. Actions are notify or webhook: a query carrying a credential, such as a telegram_bot botToken or a webhook signingSecret, is refused."
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 Auto tools are mostly separable by read/write and draft/query roles, but auto_draft_write convert overlaps auto_query_write activation. Social-attention tools such as mentions, trending, and market mindshare, plus written-analysis tools such as narratives and market_chat, have overlapping boundaries that require close reading to distinguish.
All names use readable snake_case and the auto_* family has a useful _write suffix pair, but the set mixes bare resource nouns (events, calls, entities) with action-like names (auto_build, auto_validate, market_chat). There is no single predictable verb_noun pattern throughout.
Sixteen tools is slightly above the typical 3-15 range, but the surface covers a broad domain: Auto lifecycle, drafts, validation, entity resolution, social reads, market views, and API status. Each tool has a plausible role, though the Auto group is somewhat heavy.
The set covers the core lifecycle well: build, validate, draft, activate, cancel, and delete Auto queries, plus entity resolution and multiple social/market read paths. Minor gaps include no raw post text and no direct price-series tool, but these appear intentionally out of scope and can be worked around.
Maintenance
Related MCP Connectors
Crypto market intelligence, token rug-checks, and wallet verification in one MCP server.
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 gradedqualityDmaintenanceMCP 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.119 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