Elfa MCP
OfficialElfa MCP is a Model Context Protocol server exposing the Elfa API for crypto social intelligence, market events/positions/rankings, and an unattended condition engine called Auto.
Check account/API health —
api_statusreports key tier, credit usage, remaining requests, history depth, and reachability (free).Track social buzz —
mentionspulls X/Telegram posts by ticker engagement, keyword/account search, or token news feed;trendingranks tickers or contract addresses gaining attention.Get written analysis —
narrativesproduces sourced market-wide or keyword narratives;market_chatanswers market, macro, token, and account questions conversationally.Vet accounts —
account_statsreturns follower/engagement metrics for an X account (legacy, removed 28 Oct 2026).Build Auto monitoring queries —
auto_buildturns plain language into an EQL query;auto_validatechecks syntax, symbol support, and estimated cost before activation.Run Auto unattended —
auto_query_writeactivates, cancels, or deletes live queries that fire actions (notify, webhook, Telegram, LLM) when conditions match;auto_draftparks/manages inactive drafts and converts them into live queries.Read Auto state —
auto_querylists and polls queries, executions, and LLM sessions (no push channel; poll withpollAfterSeconds).
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 — crypto social intelligence from X and Telegram, API v3 events, positions and rankings across crypto and equities, plus Auto, a condition engine that watches the market and fires an action when your conditions are met.
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 | Social mentions from X and Telegram. mode=top ranks a ticker's mentions by engagement, mode=search filters by keyword or account, mode=news returns the token news feed, which is X posts from accounts tagged as news sources rather than articles from news outlets. |
| read | 1 per call | What is gaining social attention. scope=tokens for tickers, scope=contracts_twitter or scope=contracts_telegram for contract addresses. |
| read | 5 per call | Written narrative analysis with source links. scope=market extracts market-wide narratives, scope=keywords summarises events for specific keywords. |
| read | 1 per call | Smart follower and engagement stats for an X account. Legacy: it still works, but will be removed on 28 October 2026. |
| read | Varies by speed | Ask for written market analysis. Supports conversational chat, macro overview, quick summary, token intro, token analysis and account analysis. |
| read | 1 plus LLM usage | Turn a plain-language monitoring request into an EQL query. Returns a draft to validate and activate, it does not activate anything itself. |
| read | Free | Check EQL syntax and get a cost estimate before activating, or check that a symbol has market data on a venue. |
| read | Free | Read side of Auto: list queries, poll one query, and read its executions and LLM sessions. |
| write | 5 plus LLM usage to create, free to cancel or delete | Activate, cancel or delete an Auto query. Activated queries run unattended and fire their action when conditions are met. |
| write | Free, except convert which costs the same as creating a query | Manage inactive Auto drafts. Drafts do not evaluate until converted into an active query. |
| read | Free on PAYG and Grow until 31 Oct 2026 | Resolve a ticker, $cashtag, name, @handle, contract address, CoinGecko id, FIGI or CIK to the entity id that events and calls take. Matches exactly, it is not a search. |
| read | Free on PAYG and Grow until 31 Oct 2026 | What is happening in crypto and equity markets. level=events for what happened and how prices reacted, level=storylines for one development threaded over days, level=arcs for storylines grouped into a larger movement. Searchable by topic. |
| read | Free on PAYG and Grow until 31 Oct 2026 | Whole-market views for crypto or equities. view=mindshare ranks assets by share of attention, view=call_book is the crowd's long/short lean hour by hour, view=trending_contracts ranks contract addresses by how many posts pasted them. |
| read | Free on PAYG and Grow until 31 Oct 2026 | Positions accounts take in posts. level=calls for each post that takes or changes a position, level=episodes for each position from open to close with the author's track record, level=positioning for open longs and shorts on one asset now. |
| read | Free on PAYG and Grow until 31 Oct 2026 | X accounts ranked by standing (how much other accounts engage with them) or, with metric, by their track record as callers (alphaScore, hitRate, avgReturn). |
Not exposed as tools:
chat-stream-v2— A tool call returns one result, so streaming adds nothing. market_chat covers the same analysis.auto-stream-queries-v2— Long lived streams have no tool equivalent. Poll with auto_query.auto-stream-query-v2— Long lived streams have no tool equivalent. Poll with auto_query.
Some tools depend on the plan: today market_chat and the API v3 tools, which need a higher-tier plan than the free one. At startup (stdio) or per request (HTTP, cached for a minute per key), the server reads the key's scopes from /v2/key-status. A tool the plan doesn't include stays listed, but its description says it needs a higher-tier plan, and calling it returns the upgrade link without calling the API or spending credits. If the scopes can't be read within 3 seconds, every tool is listed as usual and the API decides.
Streaming endpoints stay available through the SDKs for applications that can consume SSE.
API v3
entities, events, market, calls and top_accounts read API v3: events, storylines and arcs; call books, mindshare and trending contracts; calls, call episodes and positioning; ranked accounts. They cover crypto and equities, are free on Pay-as-you-go and Grow plans until 31 October 2026, and are open to Enterprise keys.
Filters take entity ids, not tickers. Resolve an asset with
entitiesfirst and reuse the id.Times are unix seconds. Milliseconds are refused.
How far back a key reads depends on its plan.
api_statusreturns it ashistoryFrom.
Where this differs from the raw API
The tools deliberately do not inherit every API default, because an agent pays for verbosity in context.
API | Here | Why | |
| 10 to 50 depending on endpoint, max 100 | 10 | Page through rather than pull everything |
| 10 or 50 depending on endpoint, max 30 or 200 | 10 | Page with |
|
|
| Cheaper by default, ask for |
Mention fields | full record | high signal fields | Pass |
Large responses | returned whole | trimmed to fit, with a note | Keeps one call from filling the context window |
Every value is still settable per call: pageSize accepts up to 100, and limit up to the endpoint's maximum.
Auto
Auto queries run unattended. Once armed, a query keeps evaluating and fires its action without asking again.
The flow is three steps:
auto_build— describe what to watch in plain language, get EQL backauto_validate— check the syntax and get the credit costauto_query_write— activate it
Actions can notify you, call a webhook, message a Telegram bot, or run an LLM analysis.
There is no push channel over MCP. Poll auto_query with method=get, and wait for the returned pollAfterSeconds between calls.
Remote server
The same server runs over Streamable HTTP for hosted deployments:
ELFA_MCP_TRANSPORT=http ELFA_MCP_PORT=3000 npx -y @elfa-ai/mcpIt is stateless — no sessions, one server instance per request, safe behind a load balancer. Credentials come from the x-elfa-api-key request header, falling back to the environment, or from an OAuth sign-in (see below).
DNS rebinding protection is on by default. The server accepts only the loopback names it binds — localhost:PORT and 127.0.0.1:PORT — which covers the local run above and nothing else. Any deployment that answers on a different Host must list the values it serves:
ELFA_MCP_ALLOWED_HOSTS=mcp.example.comThat includes a public domain, a reverse proxy, and a container that maps the port to a different one than the server binds. A Host the list does not cover is rejected with 403.
Variable | Required | Purpose |
| no |
|
| no | Bind address, default |
| no | Bind port, default |
| no | Comma separated |
| no | Comma separated |
Set ELFA_MCP_ALLOWED_ORIGINS as well when browsers call the server directly. It complements the host allowlist rather than replacing it: a rebound request is same origin, so it carries no Origin header for that list to check, and the Host header is the only one still naming the attacker's domain.
OAuth sign-in
A hosted server can let clients sign in through a browser instead of sending an API key. Set ELFA_MCP_AUTH=oauth and the server becomes an OAuth resource server under the MCP authorization spec:
A request with no credential gets
401and aWWW-Authenticatechallenge.The challenge points the client to the protected-resource metadata at
/.well-known/oauth-protected-resource/mcp.That metadata names the authorization server, where the user signs in.
The client then sends
Authorization: Bearer <token>.The server checks the token against the authorization server's introspection endpoint. The endpoint answers with the Elfa API key the request runs as, so the token never reaches the Elfa API.
ELFA_MCP_TRANSPORT=http \
ELFA_MCP_AUTH=oauth \
ELFA_MCP_RESOURCE_URL=https://mcp.example.com/mcp \
ELFA_OAUTH_ISSUER=https://auth.example.com \
ELFA_OAUTH_INTROSPECTION_URL=https://auth.example.com/introspect \
ELFA_OAUTH_INTROSPECTION_TOKEN=... \
ELFA_MCP_ALLOWED_HOSTS=mcp.example.com \
npx -y @elfa-ai/mcpVariable | Required in OAuth mode | Purpose |
| yes |
|
| yes | Canonical URL of this endpoint. Tokens must be issued for exactly this value |
| yes | Authorization server listed in the metadata |
| yes | Where tokens are checked |
| yes | Bearer sent to the introspection endpoint |
| no | Comma separated scopes to advertise, default |
Notes:
An
x-elfa-api-keyheader still works in OAuth mode.ELFA_API_KEYis ignored in OAuth mode, so a caller with no credential never runs as the server's own key.Valid tokens are cached for up to a minute, which bounds how long a revoked token keeps working.
Safety
api_status is the fastest way to tell an auth problem from a credit problem.
Mentions, news and narratives return third-party social text that anyone can write, events are written up from it, and the v3 tools carry third-party asset, account and channel names. The server marks it as untrusted in every response, and the server instructions tell the model to treat it as data. Keep that in mind before letting an agent chain from that content into auto_query_write.
Development
npm install
npm run build
npm run verifynpm run verify runs typecheck, tests, the spec drift check, and the docs check.
manifest.json maps every documented API operation to the tool that covers it. npm run check:drift fails if the API grows an operation the server does not handle. The tool table above is generated from the same file with npm run docs:tools.
Links
License
MIT
Available Tools
16 toolsaccount_statsAccount statsARead-onlyIdempotent
Smart follower and engagement stats for an X account. 1 credit per call. Use it to judge whether an account's reach is real before weighting what it posts. Returns raw metrics, not a reputation score, so the signal is in the ratios. Legacy: it still works today and keeps working until 28 October 2026, when it will be removed, and it is not being extended before then. Build new work on mentions with mode=search, which returns the posting account alongside each post's engagement metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | X username, with or without the @. |
Output Schema
| Name | Required | Description |
|---|---|---|
| username | Yes | |
| followers | Yes | |
| averageReach | Yes | |
| smartFollowers | Yes | |
| smartFollowing | Yes | |
| averageEngagement | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, and the description adds substantial value beyond them: the 1-credit-per-call cost, the raw-metrics-not-reputation nuance with the signal in the ratios, and the full deprecation lifecycle with a concrete removal date and migration path. This is exactly the behavioral context an agent needs to decide whether to rely on this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then cost, usage, return interpretation, and lifecycle in logical order, and each sentence carries non-redundant information. The legacy sentence is slightly wordy — 'it still works today and keeps working until...' repeats the same idea — but the overall density-to-length ratio is strong.
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 single-parameter, read-only tool with a documented output schema, the description covers everything needed to call it correctly: cost, safety (via annotations), usage context, return semantics, deprecation status, and a migration alternative. Nothing an agent needs to decide or invoke 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%, and the schema fully documents the single username parameter including the with-or-without-@ format, so the description need not repeat it. The description's mention of 'an X account' reinforces the parameter's role but adds no format or semantics beyond the schema, matching the baseline of 3 for high schema coverage.
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 verb-resource pair — 'follower and engagement stats for an X account' — and clarifies the output is raw metrics rather than a reputation score. It also differentiates from the closest sibling by directing new work to mentions with mode=search, which returns posting accounts alongside engagement metrics, so an agent can classify this tool without opening its 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?
Explicit usage context is given: 'use it to judge whether an account's reach is real before weighting what it posts.' The description also states when NOT to use it — it is legacy, removed on 28 October 2026, and not being extended — and names the exact alternative (mentions with mode=search), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_statusAPI key statusARead-onlyIdempotent
Check the Elfa API key tier, credit usage and remaining requests, and confirm the API is reachable. Free. Call this first when a request fails with an auth or credit error. historyFrom is the earliest time, in unix seconds, the events, market and calls tools read on this plan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| problem | Yes | |
| reachable | Yes | |
| historyFrom | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new context: the call is 'Free' (no credit cost), it is a reachability probe, and it is the first diagnostic to run on auth/credit failures. It doesn't describe latency or failure modes, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, then cost, then the trigger condition. The trailing historyFrom sentence is useful plan context but is the least essential and is slightly ambiguous in a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained. Given a parameterless, read-only diagnostic, the description covers purpose, cost, trigger, and the plan-scoped data limits an agent needs to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and the schema (empty object, 100% coverage) carries the full burden. The mention of historyFrom is not a parameter but a plan-limit detail, which adds context about what the returned tier implies, though it reads slightly as if it were an input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb with three named resources: checks API key tier, credit usage/remaining requests, and reachability. This is unmistakably a diagnostics tool and cannot be confused with any sibling such as market, calls, or events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Call this first when a request fails with an auth or credit error.' That is a clear usage condition. It lacks any when-not guidance (e.g., don't call it alongside every request), so it falls just short of the top bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_buildAuto query builderARead-only
Turn a plain-language monitoring request into an EQL query. Costs 1 credit plus LLM usage. This only drafts the query, nothing starts running until you activate it with auto_query_write. Say what to watch, the threshold, and what should happen when it fires. It drafts tweet conditions only for accounts in Elfa's real-time set (included); for any other X account, write the condition yourself and check it with auto_validate.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | No | fast is cheaper, expert reasons more deeply about the query. | fast |
| message | Yes | What to monitor, in plain language, for example "tell me on Telegram when BTC funding on Binance goes negative". | |
| sessionId | No | Continue refining a query from an earlier reply. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| planIds | Yes | |
| response | Yes | |
| reasoning | Yes | |
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: cost (1 credit plus LLM usage), the fact that no monitoring starts until activation, and the coverage limitation for tweet conditions on non-Elfa accounts. Annotations already declare readOnlyHint/openWorldHint, so the incremental disclosure is the cost and the non-execution guarantee; return format is left to the output 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?
Purpose is front-loaded in the first clause, followed by cost, non-execution, input guidance, and the account-coverage caveat. Every sentence carries distinct, load-bearing information with no repetition of structured 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?
With an output schema present, return values need not be described. The description covers purpose, cost, activation path, required input content, and the coverage boundary — everything an agent needs to invoke it correctly rather than a sibling.
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 meaningfully enriches the 'message' parameter by telling the agent what content to include (target, threshold, firing action). It does not address speed or sessionId, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Turn a plain-language monitoring request into an EQL query.' It clearly separates drafting from running ('This only drafts the query, nothing starts running'), which distinguishes it from siblings auto_query_write and auto_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: activate with auto_query_write after drafting, and for X accounts outside Elfa's real-time set, 'write the condition yourself and check it with auto_validate.' It names both alternatives and the conditions that select them, plus what input to supply ('what to watch, the threshold, and what should happen when it fires').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_draftAuto draftsADestructive
Park an Auto query without activating it. Drafts never evaluate and never fire. Free, except method=convert which activates the draft and costs the same as creating a query. Use drafts when the user is still deciding.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| query | No | EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. | |
| title | No | Title carried into the live query. | |
| method | Yes | upsert creates or updates a draft. convert activates it as a live query. | |
| offset | No | Pagination offset. | |
| search | No | Free text filter for method=list. | |
| status | No | Filter for method=list. | |
| draftId | No | Required for get, delete and convert. Optional on upsert to update. | |
| description | No | Description carried into the live query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| method | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false, but the description adds critical behavioral nuance: drafts are non-evaluating, non-firing, and free except for method=convert which activates and incurs cost. This goes well beyond the annotations and materially informs invocation decisions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver purpose, behavioral rules, and usage guidance with no filler. The most important information is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters, nested objects, and an output schema; the description covers the essential decision-making points (what a draft is, when to use it, cost caveat). The rich schema handles parameter details, and the output schema covers return values, leaving only the need for a bit more explicit workflow guidance (e.g., 'build and validate first') which the schema itself hints at via query description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters have descriptions. The tool description adds a cost implication for method=convert but does not otherwise elaborate on parameter relationships or formats. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Park an Auto query without activating it,' a specific verb+resource that clearly states the tool's core function. It further distinguishes itself from live query tools by noting 'Drafts never evaluate and never fire,' making the purpose unmistakable and distinct from siblings like auto_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use drafts when the user is still deciding.' This tells the agent when to choose drafts over live queries, though it does not explicitly name alternative tools. The cost caveat for method=convert also serves as a conditional usage warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_queryRead Auto queriesARead-onlyIdempotent
Read side of Auto. Free. method=list browses queries, method=get polls one query and returns its latest evaluation, plus failure when it failed with a recorded reason, method=executions and method=execution show what fired, method=sessions and method=session return the LLM analysis attached to a query. There is no push channel here, poll with method=get and respect pollAfterSeconds.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter executions by type. | |
| limit | No | Page size for list style methods. | |
| method | Yes | Which read to perform. | |
| offset | No | Pagination offset. | |
| search | No | Free text filter for method=list. | |
| status | No | Filter by status. | |
| queryId | No | Required for get, sessions and session. | |
| sessionId | No | Required for method=session. | |
| executionId | No | Required for method=execution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| method | Yes | |
| pollAfterSeconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuinely non-obvious behavior: the endpoint is free, there is no push/subscription channel so the agent must poll, and get surfaces a failure plus a recorded reason when a query failed. It stops short of stating rate limits or pagination semantics beyond pollAfterSeconds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but nearly waste-free: every clause conveys method behavior (list/get/executions/sessions) or operational guidance (no push, poll, pollAfterSeconds). It is one long run-on sentence rather than cleanly front-loaded bullets, which slightly hurts scannability but not information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shapes need not be described. The description covers all six methods, the polling model, cost, and failure surfacing, which is close to complete for a 9-parameter dispatch tool. It omits any mention of auth requirements or what 'Free' implies about rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (baseline 3), and the description rises above it by giving meaning to each method enum value rather than leaving 'Which read to perform.' It explains what the outputs of the different reads represent and confirms which identifier goes with which method, adding real value over the terse schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb+resource ('Read side of Auto') and then enumerates exactly what each read does: list browses queries, get polls one query's latest evaluation, executions show what fired, sessions return the attached LLM analysis. This lets an agent distinguish it from the write-side sibling (auto_query_write) and from the other Auto tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear selection guidance: use method=get to poll and respect pollAfterSeconds because there is no push channel, and it clarifies condition-specific methods (execution requires executionId, session requires sessionId). It never explicitly names the write alternative, but the 'read side' framing plus 'no push channel' tells the agent what to do instead of waiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_query_writeWrite Auto queriesADestructive
Activate, cancel or delete an Auto query. Creating costs 5 credits plus LLM usage, cancel and delete are free. An activated query runs unattended and fires its action without asking again, so validate it with auto_validate and confirm the cost, including any per-post X accounts, and the action with the user before calling this.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. | |
| 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 non-idempotent, but the description adds material context they cannot: the 5-credit + LLM cost of create versus free cancel/delete, and the crucial fact that an activated query fires unattended without re-confirmation. That is exactly the kind of behavior an agent needs before a destructive write.
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?
Two sentences, zero waste. The what-it-does clause is front-loaded, followed by cost and the safety precondition in priority order.
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 five-parameter write tool with an output schema and full annotation coverage, nothing an agent needs to call it correctly is missing: action scope, cost, validation path, and the unattended-firing warning are all present.
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's own description already explains create/cancel/delete semantics, so the schema carries the parameter burden. The description adds cost context tied to the create path but no syntax or format detail beyond what is already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (activate/cancel/delete) against a specific resource (an Auto query), which maps cleanly onto the three-valued method enum. It is clearly distinguishable from siblings auto_build (construct), auto_validate (check), and auto_query (read).
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 names the prerequisite alternative (auto_validate) and the required pre-call human confirmation of both cost and action. It also flags the per-post X account cost dimension, giving the agent a concrete gate before invoking a write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_validateValidate Auto queryARead-onlyIdempotent
Check EQL syntax and get a cost estimate before anything is activated. Free. Always run this before auto_query_write, and show the estimated cost to the user. tweetAccounts lists the X account behind each tweet condition: billing=per_post accounts cost creditsPerPost for every post from the account (not replies or reposts), matched or not, while the query runs, on top of estimatedCredits, so state that too. Pass either an inline query or a draftId. method=symbol instead checks that a symbol has market data on a venue, before you build price or ta conditions around it.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | EQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first. | |
| title | No | Title to validate with the query. | |
| method | No | query validates EQL, symbol checks symbol support. | query |
| symbol | No | Required for method=symbol, for example "BTC". | |
| draftId | No | Validate a stored draft instead of an inline query. | |
| exchange | No | Required for method=symbol. | |
| description | No | Description to validate with the query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | |
| errors | Yes | |
| warnings | Yes | |
| tweetAccounts | Yes | |
| estimatedCredits | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly/idempotent/non-destructive), yet the description adds substantial context: it is free, it returns a cost estimate, and it details the per_post billing nuance (accounts cost creditsPerPost for every matched-or-not post while the query runs, on top of estimatedCredits). That is exactly the added-value context annotations cannot supply.
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 core instruction and cost-warning are front-loaded, and even the dense tweetAccounts/billing sentence is deliberately included because the agent must relay cost to the user. It is longer than ideal and slightly tangential, but each sentence carries actionable content.
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 no prose, and the description still covers both operating modes, input source options, the sequencing requirement, and the cost-reporting duty. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by clarifying the mutual-exclusivity of query vs draftId and the query/symbol method split and their prerequisites (exchange and symbol for method=symbol). It adds real routing meaning beyond the field descriptions, though the billing detail is not parameter syntax.
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 ('Check EQL syntax and get a cost estimate') and distinguishes it from the write sibling via 'before anything is activated'. It also separates the two modes (method=query vs method=symbol), so an agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing ('Always run this before auto_query_write, and show the estimated cost to the user') plus input routing ('Pass either an inline query or a draftId') and the alternative mode ('method=symbol instead checks that a symbol has market data ... before you build price or ta conditions around it'). When-to-use and alternatives are both covered.
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. Free on Pay-as-you-go and Grow plans until 31 October 2026. 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 closed-world, so safety is covered; the description adds value beyond them by scoping what is returned ('Not returned: post text or a recommendation') and by stating plan/access gating ('Free on Pay-as-you-go and Grow plans until 31 October 2026'). It says nothing about pagination limits or result volume, which the schema hints at but the description does not reinforce.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the resource definition and level breakdown, each sentence doing distinct work. The pricing/plan sentence is time-limited promotional detail of marginal utility to an agent and is the one piece that does not clearly earn 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 13-parameter, no-required-parameter read tool with an output schema, the description covers the primary mode selector, the composite open-positions query, and the exclusion of post text, so an agent can call it correctly. It stops short of full completeness because it does not tie the many optional filters (assetClass, direction, ids, entityId) back into the level story.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns above that by supplying the real semantics for the level enum, which the schema only labels 'Which level to read', and by spelling out the status=open + from composite query. It adds no meaning for handle, cursor, entityIds or direction beyond the already-complete schema 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 a concrete resource and scope — 'What accounts are doing: positions taken in posts on X and Telegram' — and then decomposes the three data shapes it can return (level=calls, level=episodes, level=positioning). That is far more specific than the bare tool name 'calls' and lets an agent distinguish it from siblings like mentions, market_chat or trending. It lacks an explicit verb for the overall operation, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each enum value of the primary selector is given a when-to-use gloss (calls = individual posts/actions, episodes = full position lifecycle with entry/exit and track record, positioning = current open longs/shorts for one asset), and it even documents the derived query 'level=episodes with status=open and from set to now'. No sibling alternatives or explicit exclusions are named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitiesEntitiesARead-onlyIdempotent
Turn a ticker, $cashtag, name, @handle, contract address, CoinGecko id, FIGI or CIK into the entity id that events and calls take. Free on Pay-as-you-go and Grow plans until 31 October 2026. 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 cover the safety profile (readOnly, idempotent, non-open-world), and the description adds genuinely new behavior: exact-match failure mode, ticker non-uniqueness, family-id grouping for asset variants (WBTC/cbBTC as Bitcoin), and free-tier eligibility through 31 October 2026. These are operational traits an agent cannot infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core conversion purpose, then behavioral caveats. Dense and mostly efficient, though the pricing-eligibility sentence is incidental to invocation and adds a small amount of non-essential weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description still supplies everything else an agent needs: accepted input forms, match semantics, disambiguation strategy, and reuse guidance. Nothing material 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 baseline is 3, but the description adds interpretive value on the q parameter (ticker ambiguity, first-row verification) and on entityType as the narrowing lever. It stops short of explaining cursor/limit mechanics beyond what the schema already 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 a specific verb and resource: convert eight named identifier forms into the entity id consumed by events and calls. This distinguishes it sharply from siblings like events, calls and mentions, which take ids rather than produce them.
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 frames the tool as exact-match-not-search, warns that prefixes and misspellings return nothing, and tells the agent to take the first row and verify the name or narrow with entityType. It also says to resolve once and reuse the id, which preempts repeated calls.
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. Free on Pay-as-you-go and Grow plans until 31 October 2026. level=events: what happened, what it names, how prices reacted where measured (impacts is empty on most events), and the posts behind it. level=storylines: the events of one development, threaded over days. level=arcs: storylines grouped into a larger movement. Search any level by topic with q, filter by asset with entityIds from the entities tool, or fetch up to 30 you hold with ids. Not returned: post text, a sentiment score or a price.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by topic, best match first, for example "stablecoin regulation". from becomes optional. | |
| to | No | level=events or storylines. End of the range, unix seconds. Defaults to now. | |
| ids | No | Fetch up to 30 you already hold, by id. No from needed. | |
| from | No | level=events or storylines. Start of the range, unix seconds, not milliseconds. Required unless you fetch by ids or search with q. Arcs take no from. api_status returns historyFrom, the earliest time your plan reads. | |
| sort | No | level=events: latest (default), or relevant, which ranks the last 24 hours and takes no from. level=arcs: latest, storylines or events. | |
| arcId | No | level=events. Events in one arc's storylines. | |
| level | No | Which level to read. | events |
| limit | No | Items per page, up to 30. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | desc (default) or asc. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| status | No | level=storylines: open (default; every status with q), dormant or any. level=arcs: active (default) or retired. | |
| notable | No | level=events. true drops events their storyline marked as not material. | |
| novelty | No | level=events. update: a later reading of a story already served. | |
| relation | No | level=storylines. Storylines holding an event of this relation. | |
| entityIds | No | Up to 30 ids from the entities tool. Matches any of them. | |
| eventType | No | level=events. What kind of development it is. | |
| assetClass | No | level=events: events tied to this market by what they name, plus events tied to neither, such as macro news; a repeated query can return fewer as names get linked to assets. level=arcs: arcs with at least 15% of their events naming an asset in this market, then macro arcs. | |
| eventClass | No | level=events. market: a development reported across posts. asset: posts about one asset. call: accounts taking positions. | |
| alertAction | No | level=events. alert: judged impactful. monitor: worth watching. | |
| implication | No | level=events. Which way it cuts for the assets it names. | |
| hasStoryline | No | level=events. true keeps events in a storyline, false those in none. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| level | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes | |
| servedFrom | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: what each level returns, that impacts is usually empty, the explicit non-returns (post text, sentiment score, price), and a hard pagination constraint ('Change any argument but limit and it fails; start again without it'). That cursor-invalidations rule is exactly the kind of behavioral trait structured fields do not 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?
Front-loaded with purpose before diving into level semantics, then query modes, then exclusions. Dense but every clause is functional, with the plan-eligibility sentence being the only marginally expendable content. No wasted or repeated phrasing.
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-mode tool with an output schema, the description covers level selection, per-level parameter applicability, access patterns, and exclusion caveats. The one omission is explicit routing versus sibling tools (narratives, trending, calls) that also surface market developments; otherwise an agent has what it needs to call this correctly.
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 each of the 21 parameters already carries per-level applicability rules, defaults, and enums, so the baseline is 3. The description's summary (q for topic, entityIds from the entities tool, ids for up to 30 held items) largely restates what the schema documents in more detail, adding only the cross-cutting 'Not returned' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'What is happening in crypto and equity markets, written up from posts across many sources,' then defines three distinct read levels (events/storylines/arcs) with what each contains. An agent can tell this apart from siblings like narratives, trending, or market_chat 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 operating context: which level to choose, and three named access patterns (topic via q, asset via entityIds from the entities tool, or fetching up to 30 held ids). It also states the free-plan window and that impacts is empty on most events. It stops short of naming sibling alternatives (e.g. narratives, trending) as substitutes, so the when-not-to-use case is left implicit.
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. Free on Pay-as-you-go and Grow plans until 31 October 2026. 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, and destructiveHint=false, so safety is covered. The description adds real behavioral value beyond that: the free-until-31-Oct-2026 pricing constraint, the crypto-only restriction, and the interpretive caveat to read crowdingPercentile rather than longShare because accounts nearly always lean long.
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 scope statement, then organized view-by-view; dense but each clause carries machine-relevant facts (pricing, crypto-only, which field to read). Minor sloppiness in fragments like 'with hot on those heating up' keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, output-schema-backed tool this covers the mode semantics, conditional parameter applicability, and pricing constraint well, and return values need not be explained. The one gap is routing guidance against the many sibling tools (trending, narratives, mentions) that could overlap with these views.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds semantic meaning beyond the schema's terse 'Which view to read' by explaining what each view mode actually returns (attention ranking, hourly bars plus live tick, posted-address ranking). It also notes trending contracts read 30 days at most, reinforcing the schema's from-field note.
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 ('whole-market views, no asset needed') and enumerates the three distinct view modes with what each ranks (mindshare by share of attention, call_book by long/short lean, trending_contracts by pasted addresses). An agent can distinguish this market-wide tool from asset-scoped siblings like entities, calls, or account_stats 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 per-mode context (period applies to mindshare, order to call_book, minMentions and crypto-only to trending_contracts) and states the free-tier window, which shapes when to call it. It does not, however, name an alternative sibling tool or say when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_chatMarket chatARead-only
Ask Elfa for written market analysis grounded in its social data. Costs credits and varies by speed, so fast is the cheaper option. Pass sessionId from a previous reply to continue the same conversation. The reply includes sources: links to the posts and pages the research read (links only, not their text), so you can cite or check them.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Chain, paired with contractAddress. | |
| speed | No | Defaults to fast, which is cheaper and shallower. Ask for expert when the answer needs deeper reasoning. | fast |
| symbol | No | Token symbol, for token analysis. | |
| message | No | The question, required for analysisType=chat. | |
| username | No | X username, for analysisType=accountAnalysis. | |
| sessionId | No | Continue an earlier conversation. | |
| analysisType | No | chat needs message. tokenIntro and tokenAnalysis need symbol, or chain plus contractAddress. accountAnalysis needs username. macro and summary need nothing else. | chat |
| contractAddress | No | Contract address, paired with chain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| sources | Yes | Links the research read, in order, without duplicates. kind is x_post, x_account, telegram, dex, explorer, prediction_market or web; treat any other value as web. A source was read, not necessarily cited. |
| sessionId | Yes | |
| creditsConsumed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly true, destructive false), and the description adds genuinely non-obvious behavior: the call consumes credits, cost varies by speed, sessionId enables multi-turn continuity, and the reply includes source links (links only, not their text). The credit cost is the key disclosure an agent cannot get from 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?
Three tight sentences, front-loaded with what the tool does, then cost/speed, then session continuation, then return shape. Efficient, though the speed-status sentence slightly duplicates schema wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be fully explained, and the description still flags the sources array. Cost, speed, session continuation, and return highlights are covered; only sibling differentiation is missing for an 8-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters. The description only restates schema content for speed/cheapness and sessionId, adding no syntax or format detail beyond what's structured. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: asking Elfa for written market analysis grounded in social data. This is clearly distinct from raw-data siblings like market or narratives, though the description never names those siblings to make the boundary explicit.
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?
Provides real operating context — credits cost, the fast-vs-expert speed tradeoff, and passing sessionId to continue a thread — but offers no explicit when-to-use or when-not-to-use guidance relative to alternatives such as market or trending. Usage is implied rather than directed.
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?
The description adds valuable behavioral context beyond the annotations (readOnlyHint, idempotentHint, destructiveHint all true/false). It discloses the 1-credit cost, specifies that it returns engagement metrics and links rather than post text, and clarifies that news mode returns X posts from tagged news accounts, not traditional articles. This is rich, non-contradictory context.
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 compact and information-dense, front-loading the core purpose, then cost, return structure, and mode explanations. Every sentence earns its place, and there is no redundancy or filler. It is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (15 parameters, 3 modes) and the existence of an output schema, the description covers the essential decision points: modes, cost, return limitations, and the nuanced nature of news mode. Some parameter interactions (e.g., timeWindow, searchType) are left to the schema, but that is appropriate. It is nearly complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters and their meanings. The description adds no new parameter-level semantic detail beyond what the schema provides; it only clarifies the behavior of mode=news and the general return format. This meets the baseline for full schema coverage without surpassing it.
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 clearly states the tool's function: it retrieves social mentions from X and Telegram, with three distinct modes (top, search, news) explained. It differentiates itself from sibling tools by focusing specifically on mentions, and the description names the sources and what it returns, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context for each mode (top ranks by engagement, search filters by keywords/account, news returns a news-sourced feed), which effectively guides the agent on when to use which mode. However, it does not explicitly compare this tool to alternatives or state when not to use it, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
narrativesNarrativesARead-onlyIdempotent
Written narrative analysis with source links, for when counts are not enough. 5 credits per call, so prefer trending or mentions when metrics will do. scope=market extracts the narratives moving the market. scope=keywords summarises events for keywords you supply, and can take over a minute to return.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of an absolute range, unix seconds. Use with from. | |
| from | No | Start of an absolute range, unix seconds. Use with to. | |
| scope | No | market is a broad sweep. keywords needs the keywords argument. | market |
| keywords | No | Up to 5 comma separated keywords for scope=keywords. | |
| timeFrame | No | Lookback for scope=market. | |
| searchType | No | How multiple keywords combine for scope=keywords. | |
| timeWindow | No | Relative window such as "1h", "24h" or "7d". | |
| maxNarratives | No | Cap the narratives returned for scope=market. | |
| maxTweetsPerNarrative | No | Cap the sources per narrative for scope=market. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| items | Yes | |
| scope | Yes | |
| notice | Yes | |
| matched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable context: the cost of '5 credits per call' and the warning that scope=keywords 'can take over a minute to return', which are not captured in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, cost/alternative, and scope explanations. Front-loaded with the core purpose, and no fluff or redundancy.
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?
Despite having 9 parameters with no required fields, the description covers the key decision points: when to use qualitative analysis, the cost, the two scope behaviors, and latency expectations. The rich schema and output schema handle the remaining parameter and return details, so the description is complete for the agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic nuance for the main scopes—'market extracts the narratives moving the market' and 'keywords summarises events'—which goes beyond the schema's brief 'broad sweep' and 'needs the keywords argument'. This adds meaningful context for parameter selection.
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 clearly states the tool provides 'Written narrative analysis with source links', distinguishing it from count-based tools like trending and mentions. It also differentiates between the two scopes (market and keywords), giving specific verbs and resources for each.
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 'for when counts are not enough' and 'prefer trending or mentions when metrics will do', providing clear when-to-use and when-not-to-use guidance. It also explains the distinction between market and keywords scopes, including the latency caveat for keywords.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_accountsTop accountsARead-onlyIdempotent
X accounts ranked by standing (how much other accounts engage with them) or, with metric, by their track record as callers. Free on Pay-as-you-go and Grow plans until 31 October 2026. Standing measures attention, not accuracy; track is null for an account that has never opened a position. For the best callers use metric=alphaScore, not avgReturn, which a few big wins or a rally can top. Track metrics rank only accounts with at least 20 scored positions, over every position since late June 2026; quote the number you ranked by with scoredEpisodes. Pass a handle to the calls tool to see its positions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Items per page, up to 200. Keep it small and page with cursor rather than asking for everything at once. | |
| order | No | desc (default) ranks the highest first. | |
| cursor | No | nextCursor from the previous reply. Change any argument but limit and it fails; start again without it. | |
| metric | No | standing (default). alphaScore: return against the market (BTC for crypto, SPY for equities) and outright. hitRate: share of scored positions that made money. avgReturn: mean realized return, not adjusted for the market. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notice | Yes | |
| hasMore | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent operation, so the bar is lower; the description still adds real behavior: track is null for accounts that never opened a position, track metrics only rank accounts with >=20 scored positions since late June 2026, standing measures attention not accuracy, and there is a free-tier window through 31 October 2026. It omits error/rate-limit behavior but the eligibility and null semantics are genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the two ranking modes and the metric recommendation come early, caveats follow. Nearly every clause carries information, though the pricing sentence and the scoring-window detail are slightly buried mid-paragraph, making it a touch harder to scan than an ideal two-to-three sentence definition.
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-format explanation is unnecessary, and annotations cover the safety profile. The description supplies the missing interpretive context — null track semantics, ranking eligibility threshold, metric trade-offs, and a tool handoff for follow-up. Only pagination ergonomics (deferred to the schema's cursor text) are left unaddressed.
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 adding decision-level meaning: it recommends alphaScore over avgReturn and warns that avgReturn is not market-adjusted. It reinforces the scoredEpisodes pairing ('quote the number you ranked by') rather than just restating the schema's metric definitions.
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 action and resource — accounts ranked — and splits it into two clearly named modes (standing vs track record via metric). It also names the sibling tools it relates to (calls) and the parameter that selects the ranking basis, so an agent can distinguish it from account_stats and calls without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance for choosing the right metric: 'For the best callers use metric=alphaScore, not avgReturn' with the reason (big wins or a rally can top it), and points to the calls tool for drill-down. It covers when to use each mode but does not state when not to use this tool relative to account_stats or other ranking siblings.
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?
Adds a credit cost per call, which is not in the annotations, and details scope-specific return behavior (ranked by mention volume, change against previous window, contract addresses). This supplements the readOnlyHint and idempotentHint annotations with practical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: three sentences that front-load the purpose and cost, then clearly map the scope options to their outputs. No filler or redundant restatement of the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full input schema, output schema, and annotations, the description covers the essential behavioral aspects: cost, scope variants, and output type. It lacks explicit pagination/filtering guidance, but those are already documented in the schema, so the overall package is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enhances the scope parameter by explaining what each enum value returns (tickers vs contract addresses) and introducing the notion of 'change against the previous window', adding semantic value beyond the schema's simple enum listing.
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 clearly states the tool returns what is gaining social attention, with explicit scope variants: tokens ranked by mention volume with change, and contract addresses for Twitter/Telegram. It uses a specific verb ('returns') and identifies the resource (trending tickers/contracts), distinguishing it from sibling tools like mentions or narratives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for surfacing trending social attention, but it does not explicitly contrast with alternatives such as mentions or narratives, nor does it state when not to use this tool. The scope explanations provide parameter-level guidance, but not tool-selection guidance.
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.
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
Most tools have distinct resource/action scopes, especially the Auto lifecycle (build, validate, draft, query, write). Some overlap remains among analysis-oriented tools like market_chat, narratives, and events, and auto_build vs auto_draft could be initially confused, though descriptions clarify boundaries.
Names consistently use snake_case, which is predictable and readable across the server. However, the pattern mixes bare nouns (events, market, calls) with verb_noun or compound forms (auto_query_write, api_status), so it is not a strict uniform verb_noun convention.
At 16 tools, the server is slightly above the ideal 3-15 range but still well-scoped for a broad crypto social-data API. The Auto suite and data-access tools each seem justified rather than redundant.
The surface covers status, entity resolution, market/social data, account ranking/stats, and the full Auto query build-validate-read-write lifecycle. Minor gaps exist, such as no query editing after creation and no direct post text or sentiment retrieval, but these appear intentional or workable around.
Maintenance
Related MCP Connectors
Crypto market intelligence, token rug-checks, and wallet verification in one MCP server.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Unlock the power of real-time cryptocurrency data with our Crypto Price Insights MCP server.
Live whale movements, wallet intel and Alpha-bot signals across 17 EVM chains, over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that delivers cryptocurrency sentiment analysis to AI agents.547MIT
- AlicenseNot gradedqualityFmaintenanceMCP server that provides AI agents with crypto token safety checks (honeypot, liquidity, rug risk) and alpha signals (smart money buys, fresh rug radar) across PulseChain, Monad, Base, and BSC.63 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