Skip to main content
Glama

Elfa MCP

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

Works with any MCP client: Claude Code, Claude Desktop, Cursor, VS Code, Codex, and anything else that speaks MCP.

Install

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

One click

Add to Cursor Add to VS Code

Claude Desktop

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

Claude Code

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

Cursor, VS Code, Claude Desktop, and other clients

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

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

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

Related MCP server: onchain-safety-mcp

Configuration

Variable

Required

Purpose

ELFA_API_KEY

yes

Authenticates every request

ELFA_TIMEOUT

no

Request timeout in ms, default 120000

ELFA_RETRIES

no

Retries on failure, default 0

ELFA_MCP_MAX_RESPONSE_CHARS

no

Response size ceiling, default 60000

ELFA_EXTRA_HEADERS

no

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

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

11 tools, mapped to every documented /v2 operation.

Tool

Mode

Cost

What it does

api_status

read

Free

Check API key tier, credit usage and remaining requests. Also confirms the API is reachable.

mentions

read

1 per call

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

trending

read

1 per call

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

narratives

read

5 per call

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

account_stats

read

1 per call

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

market_chat

read

Varies by speed

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

auto_build

read

1 plus LLM usage

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

auto_validate

read

Free

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

auto_query

read

Free

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

auto_query_write

write

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

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

auto_draft

write

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

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

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, which needs 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.

Where this differs from the raw API

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

API

Here

Why

pageSize

10 to 50 depending on endpoint, max 100

10

Page through rather than pull everything

speed on chat

expert

fast

Cheaper by default, ask for expert when depth matters

Mention fields

full record

high signal fields

Pass verbosity: "detailed" for the rest

Large responses

returned whole

trimmed to fit, with a note

Keeps one call from filling the context window

Every value is still settable per call, and pageSize accepts up to 100.

Auto

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

The flow is three steps:

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

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

  3. auto_query_write — activate it

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

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

Remote server

The same server runs over Streamable HTTP for hosted deployments:

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

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

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

ELFA_MCP_ALLOWED_HOSTS=mcp.example.com

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

Variable

Required

Purpose

ELFA_MCP_TRANSPORT

no

http to serve over Streamable HTTP, default stdio

ELFA_MCP_HOST

no

Bind address, default 127.0.0.1

ELFA_MCP_PORT

no

Bind port, default 3000

ELFA_MCP_ALLOWED_HOSTS

no

Comma separated Host allowlist, defaults to the loopback names bound

ELFA_MCP_ALLOWED_ORIGINS

no

Comma separated Origin allowlist

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

OAuth sign-in

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

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

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

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

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

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

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

Variable

Required in OAuth mode

Purpose

ELFA_MCP_AUTH

yes

oauth to enable, default apikey

ELFA_MCP_RESOURCE_URL

yes

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

ELFA_OAUTH_ISSUER

yes

Authorization server listed in the metadata

ELFA_OAUTH_INTROSPECTION_URL

yes

Where tokens are checked

ELFA_OAUTH_INTROSPECTION_TOKEN

yes

Bearer sent to the introspection endpoint

ELFA_OAUTH_SCOPES

no

Comma separated scopes to advertise, default elfa

Notes:

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

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

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

Safety

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

Mentions, news and narratives return third-party social text that anyone can write. The server marks it as untrusted in every response, and the server instructions tell the model to treat it as data. Keep that in mind before letting an agent chain from that content into auto_query_write.

Development

npm install
npm run build
npm run verify

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

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

License

MIT

Available Tools

11 tools
account_statsAccount statsA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesX username, with or without the @.

Output Schema

ParametersJSON Schema
NameRequiredDescription
usernameYes
followersYes
averageReachYes
smartFollowersYes
smartFollowingYes
averageEngagementYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover 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.

Conciseness4/5

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.

Completeness5/5

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

For a single-parameter, read-only 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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb-resource 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.

Usage Guidelines5/5

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 statusA
Read-onlyIdempotent

Check the Elfa API key tier, credit usage and remaining requests, and confirm the API is reachable. Free. Call this first when a request fails with an auth or credit error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyYes
problemYes
reachableYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context by noting the tool is 'Free' and that it 'confirm[s] the API is reachable,' going beyond the structured annotations. No contradiction exists.

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

Conciseness5/5

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

The description is two sentences: the first states the purpose, the second gives usage guidance. It is front-loaded, concise, and contains no redundant or filler content.

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

Completeness5/5

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

Given the empty input schema, an existing output schema, and strong annotations, the description fully covers the tool's purpose, when to use it, and its cost ('Free'). There are no missing critical details for a zero-parameter status check.

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

Parameters4/5

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

The tool has exactly zero parameters, and the schema coverage is 100% by default. There is nothing for the description to add regarding parameters, so a baseline score of 4 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Check' and clearly names the resource: 'Elfa API key tier, credit usage and remaining requests, and confirm the API is reachable.' This distinguishes it from sibling data-related tools and leaves no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

It provides explicit usage guidance: 'Call this first when a request fails with an auth or credit error.' This is clear context for when to use the tool, but it doesn't mention when-not to use it or name alternative tools, though none are obvious given its diagnostic role.

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

auto_buildAuto query builderA
Read-only

Turn a plain-language monitoring request into an EQL query. Costs 1 credit plus LLM usage. This only drafts the query, nothing starts running until you activate it with auto_query_write. Say what to watch, the threshold, and what should happen when it fires.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
planIdsYes
responseYes
reasoningYes
sessionIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Discloses cost (1 credit plus LLM usage) and side-effect-free nature ('nothing starts running until you activate it'), which complements the readOnlyHint=true annotation. The draft-only behavior is critical for agents to know it won't execute anything and aligns with the annotation's safety profile.

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

Conciseness5/5

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

Three sentences, each serving a distinct purpose: purpose, cost/side-effect, and input guidance. No filler, tautology, or redundant repetition of schema information. Front-loaded with the core functionality.

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

Completeness5/5

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

Given the output schema and annotations, the description covers essential behavioral context: cost, draft-only nature, and activation requirement. It also provides enough input guidance for an agent to construct a valid request. Nothing critical is missing.

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

Parameters4/5

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

Schema already covers all parameters with descriptions (100% coverage), so a baseline of 3 applies. The description adds value by specifying what to include in 'message' (what to watch, threshold, action), enriching the primary parameter's semantics. Speed and sessionId are adequately documented in the schema.

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

Purpose5/5

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

Clearly states it converts plain-language monitoring requests into EQL queries, a specific verb+resource pair. The phrase 'only drafts the query' distinguishes it from activation tools like auto_query_write, removing ambiguity about its scope.

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

Usage Guidelines4/5

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

Explains when to use it: for drafting a query, not running it, and explicitly directs activation to auto_query_write. Provides input guidance (what to watch, threshold, action). However, it does not explicitly contrast with sibling tools like auto_query or auto_draft, leaving some potential for confusion.

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

auto_draftAuto draftsA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size.
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first.
titleNoTitle carried into the live query.
methodYesupsert creates or updates a draft. convert activates it as a live query.
offsetNoPagination offset.
searchNoFree text filter for method=list.
statusNoFilter for method=list.
draftIdNoRequired for get, delete and convert. Optional on upsert to update.
descriptionNoDescription carried into the live query.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
methodYes

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description gives explicit usage context: '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 queriesA
Read-onlyIdempotent

Read side of Auto. Free. method=list browses queries, method=get polls one query and returns its latest evaluation, 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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
methodYes
pollAfterSecondsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds valuable behavioral context beyond annotations: it's free, there is no push channel (requires polling), and it mentions pollAfterSeconds for rate/interval respect. This enriches understanding of how to interact with the tool.

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

Conciseness5/5

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

The description packs all necessary method semantics into three concise sentences. It front-loads the essential purpose ('Read side of Auto'), uses a clear list-like enumeration for methods, and closes with critical polling behavior. No word is wasted.

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

Completeness4/5

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

With 9 parameters, 6 methods, and a rich output schema, the description covers all method categories and the key interaction pattern (polling). It omits some details about pagination or filters, but those are fully documented in the schema. The overall tool behavior is sufficiently clear for an AI agent to use it correctly.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all 9 parameters, so the baseline is 3. The description adds value by linking methods to parameter usage (e.g., method=get polls one query, method=execution shows a specific execution, method=session requires sessionId). This helps select the right method and understand which parameters matter per method, going slightly beyond the schema.

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

Purpose5/5

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

The description clearly identifies this as the read side of Auto and enumerates each method with its specific purpose (list browses queries, get polls one query, executions/execution show fired items, sessions/session return LLM analysis). It explicitly positions itself as read-only, distinguishing it from write/sibling tools like auto_query_write.

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

Usage Guidelines4/5

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

The description gives concrete guidance: 'Read side of Auto' implies use for reads rather than writes, and 'no push channel here, poll with method=get' explicitly tells the agent to use polling instead of expecting push. It also directs respecting pollAfterSeconds. It could be more explicit about when to use this over siblings, but the context is clear.

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

auto_query_writeWrite Auto queriesA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first.
titleNoShort title shown in the notification when this fires.
methodYescreate activates a new query. cancel stops an active one. delete removes one that has already finished.
queryIdNoRequired for cancel and delete.
descriptionNoWhy this was set up, shown alongside the title.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
methodYes

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations' destructiveHint=true, the description discloses key behavior: creating costs 5 credits plus LLM usage, and an activated query runs unattended and fires without asking again. This is crucial side-effect information. Minor additional detail, such as what exactly gets destroyed on delete, is left to the schema, but the critical behavior is covered.

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

Conciseness5/5

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

The description is three sentences, each earning its place: the operation, the cost model, and the unattended-fire warning with the required user confirmation. It is front-loaded with the action and wastes no words.

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

Completeness5/5

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

For a write tool with an output schema and rich annotations, the description covers everything needed to invoke it correctly: operation set, cost, unattended behavior, validation prerequisite, and user-confirmation requirement. The conditional parameter detail (queryId for cancel/delete) is already in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter. The description adds workflow context by telling the agent to build the query with auto_build and validate it, but it does not add parameter-specific semantics beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific action set — 'Activate, cancel or delete an Auto query' — naming both the verb and the resource. This clearly differentiates the tool from siblings like auto_build, auto_validate, and auto_query, which construct, validate, or read rather than write.

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

Usage Guidelines4/5

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

It gives explicit workflow guidance: build with auto_build, check with auto_validate, and confirm cost and the action with the user before calling. It also distinguishes create from cancel/delete and calls out the cost difference. It stops short of explicitly stating 'when not to use this tool,' but the prerequisites are unambiguous.

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

auto_validateValidate Auto queryA
Read-onlyIdempotent

Check EQL syntax and get a cost estimate before anything is activated. Free. Always run this before auto_query_write, and show the estimated cost to the user. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoEQL query object with conditions, actions and expiresIn. Build it with auto_build and check it with auto_validate first.
titleNoTitle to validate with the query.
methodNoquery validates EQL, symbol checks symbol support.query
symbolNoRequired for method=symbol, for example "BTC".
draftIdNoValidate a stored draft instead of an inline query.
exchangeNoRequired for method=symbol.
descriptionNoDescription to validate with the query.

Output Schema

ParametersJSON Schema
NameRequiredDescription
validYes
errorsYes
warningsYes
estimatedCostYes
estimatedCreditsYes

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses that the tool is free and provides a cost estimate, adding operational detail beyond the annotations (readOnlyHint, idempotentHint, destructiveHint). It implies a non-destructive dry-run by saying 'before anything is activated.' No contradiction with annotations; the description adds useful context without repeating 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.

Conciseness4/5

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

The description is composed of three sentences that front-load the primary purpose and cost estimate, then provide workflow guidance and the two modes. It is reasonably concise but could be more structured (e.g., separating the symbol mode sentence). The essential information is present without excessive verbosity.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, parameter dependencies, and a rich output schema), the description covers the primary workflow, the symbol mode, and the integration with auto_query_write. It does not explicitly describe error handling or return format, but the output schema likely covers that. Overall, it is 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.

Parameters4/5

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

The description explains the relationship between parameters: 'Pass either an inline query or a draftId' and that method=symbol requires symbol and exchange. This supplements the schema's individual field descriptions, which already have 100% coverage. The description adds usage logic, especially for the method-dependent parameters, going beyond baseline.

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

Purpose5/5

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

The description clearly states the tool's function: 'Check EQL syntax and get a cost estimate before anything is activated.' It distinguishes itself from the sibling auto_query_write by noting it should run first, and describes the alternative symbol method. This provides a specific verb and resource, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Usage is explicitly guided: 'Always run this before auto_query_write' and 'show the estimated cost to the user.' It also explains when to use method=symbol (to check symbol support before building conditions). This gives concrete when-to-use instructions and contrasts with the write operation.

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

market_chatMarket chatA
Read-only

Ask Elfa for written market analysis grounded in its social data. Costs credits and varies by speed, so fast is the cheaper option. Pass sessionId from a previous reply to continue the same conversation.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
sessionIdYes
creditsConsumedYes

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses meaningful behavioral traits beyond the annotations: using this tool costs credits, speed and cost are linked with fast being cheaper, and sessionId enables a continued conversation. It is consistent with readOnlyHint=true and adds useful context around pricing and stateful conversation.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose, and then covers cost/speed and session continuation in a compact way. Every sentence earns its place without unnecessary detail.

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

Completeness4/5

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

Given the 100% schema coverage and the presence of an output schema, the description covers the essential interaction model: ask a question, choose a speed, and optionally continue a session. It doesn't enumerate all analysisType variants or alternatives, but the schema handles those details, so the description is close to complete.

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

Parameters4/5

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

Schema coverage is 100% and each parameter already has a description. The tool description adds value by clarifying that speed directly affects cost ('fast is the cheaper option') and that sessionId carries over a previous conversation, which are not obvious from the schema alone.

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

Purpose5/5

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

The description says 'Ask Elfa for written market analysis grounded in its social data,' which names a specific verb ('ask'), a resource ('Elfa'), and a clear deliverable ('written market analysis'). It also differentiates from sibling tools by emphasizing 'grounded in its social data' and the written/market-analysis nature.

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

Usage Guidelines3/5

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

The description implies usage for asking market-analysis questions, and it offers useful context about cost/speed and continuing conversations via sessionId. However, it does not explicitly state when to use this tool instead of siblings like account_stats or narratives, nor does it give 'when not to use' guidance.

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

mentionsMentionsA
Read-onlyIdempotent

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

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
nextYes
totalYes
noticeYes
mentionsYes

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (15 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters 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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines4/5

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.

narrativesNarrativesA
Read-onlyIdempotent

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

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
itemsYes
scopeYes
noticeYes
matchedYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv4.3.0
    • Removedauto_exchanges
    • Changedauto_validate3 fields changed
      • addedInput schema / properties / exchange
        Added value: +{
        +  "description": "Required for method=symbol.",
        +  "enum": [
        +    "hyperliquid",
        +    "gmx",
        +    "binance"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / method
        Added value: +{
        +  "default": "query",
        +  "description": "query validates EQL, symbol checks symbol support.",
        +  "enum": [
        +    "query",
        +    "symbol"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "Required for method=symbol, for example \"BTC\".",
        +  "type": "string"
        +}
  2. 12 tool updatesv2.0.0
    • First observedaccount_stats
    • First observedapi_status
    • First observedauto_build
    • First observedauto_draft
    • First observedauto_exchanges
    • First observedauto_query
    • First observedauto_query_write
    • First observedauto_validate
    • First observedmarket_chat
    • First observedmentions
    • First observednarratives
    • First observedtrending

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation4/5

Each tool has a generally distinct role, especially the auto_query lifecycle and data endpoints. Minor overlap exists between mentions and trending (both track social attention) and between narratives and market_chat (both provide written market analysis), but descriptions are specific enough to guide selection.

Naming Consistency4/5

Tool names are consistently snake_case and readable, and the auto_* group clearly signals the query lifecycle. There is some stylistic drift between verb-led names like auto_build and noun-led names like market_chat, but not enough to cause confusion.

Tool Count5/5

With 11 tools, the set is well-scoped for a social intelligence and monitoring server. The data tools, analysis tools, and auto-query lifecycle tools each earn their place without feeling bloated or thin.

Completeness4/5

The surface covers retrieval, analysis, monitoring, and API status well. The auto-query lifecycle is thorough, though there is no explicit update operation for an existing active query and account_stats is explicitly legacy, leaving minor gaps that agents can work around.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

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