tokensift
OfficialClick 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., "@tokensiftCheck if 0xABC... is a honeypot on Base"
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.
tokensift
Read-only token due-diligence over keyless public APIs, as one Python package that is both an importable library and a stdio MCP server. Six tools, one envelope, no trading, no secrets.
Tool | Upstream | Chains |
| honeypot.is buy/sell simulation | ethereum, bsc, base |
| rugcheck.xyz risk report | solana |
| DexScreener search | all |
| DexScreener pools for a token | ethereum, bsc, base, solana |
| DexScreener pair snapshot | ethereum, bsc, base, solana |
| Jupiter Price v3 (lite host) | solana |
Every call returns the same envelope (also each tool's outputSchema):
{"ok": true, "source": {"provider": "dexscreener", "url": "…exact GET…", "chain": "solana"},
"fetched_at": "2026-09-06T12:00:00Z", "cache": {"hit": false, "ttl_s": 30},
"summary": {…}, "raw": null, "raw_truncated": false, "error": null}On failure ok is false, summary is null, and error carries type (invalid_input | not_found | rate_limited | upstream_unavailable | upstream_changed), message, optional retry_after_s, and advice written for the model. The MCP tool returns the same envelope with isError=true.
Library
from tokensift import Tokensift
async with Tokensift() as ts:
env = await ts.honeypot_check("base", "0x…")
if env.ok:
print(env.summary["is_honeypot"], env.summary["sell_tax"])Related MCP server: Cabal-Hunter
MCP server
uvx --from /path/to/tokensift tokensift-mcp # stdioSee docs/REGISTRATION.md for Claude Code, Codex CLI, and Gemini CLI entries and the Inspector smoke test.
Behavior that matters
Validation before network: chain aliases (
eth,1,bnb,56,8453,sol) and address formats are checked first; bad input never hits an upstream.Per-provider token buckets (
TOKENSIFT_RPM_*). When a bucket is empty the call waits up toTOKENSIFT_LIMITER_WAIT_S(5 s) and then returnsrate_limitedwithretry_after_s.rate_limitedandupstream_unavailableare never cached;invalid_inputandnot_foundare cached forTOKENSIFT_NEG_CACHE_TTL_S(10 s).Successful responses are cached for
TOKENSIFT_CACHE_TTL_S(30 s) keyed by provider, endpoint, and normalized params.One retry on 429/502/503/504 honoring
Retry-After, capped at 5 s. Timeouts and 401/403 becomeupstream_unavailable(403 advice names the datacenter-IP possibility).rawis returned only withverbose=true, capped atTOKENSIFT_RAW_MAX_BYTES(32 kB) withraw_truncated=truewhen cut.Logging goes to stderr only; stdout is the MCP wire.
Dual-era: the server answers both a legacy
initializehandshake and modern2026-07-28per-request metadata (tested over a real pipe).
Development
uv sync
uv run pytest # unit + client + server + contract + stdio (no network)
uv run pytest -m live # one real call per upstream; run weekly
uv run python scripts/record_fixtures.py # refresh recorded upstream fixtures
npx -y @modelcontextprotocol/inspector --cli ./scripts/serve-stdio.sh --method tools/list # flag-free launcher: the inspector cli eats `--from`Stack (pinned 2026-09-06): fastmcp>=4.0,<4.1 on mcp 2.x (spec 2026-07-28), httpx2, pydantic-settings, aiolimiter, cachetools. Python 3.12 via uv.
T0 spike findings (2026-09-06)
fastmcp.tools.ToolResult(content, structured_content, meta, is_error)acceptsis_errorwith structured content, so errors are returned as results, never raised (a raised exception becomes a JSON-RPC error inmcp2.x).mcp.server.runnerdrivesserve_dual_era_loop; a legacyinitializeis handled inline and negotiated fromHANDSHAKE_PROTOCOL_VERSIONS.tests/test_stdio.pyproves both handshakes over a pipe.The
Envelopefieldokforbids a classmethod of the same name; factories areEnvelope.success/Envelope.failed.MCP Inspector CLI v2 parses flags anywhere on its command line, so a target like
uvx --from … tokensift-mcploses--fromand reports "Connection closed".scripts/serve-stdio.shis a flag-free launcher for the Inspector; the three CLIs pass args through correctly and useuvxdirectly.
Available Tools
6 toolsdex_pairDexScreener pair snapshotARead-onlyIdempotent
live snapshot of one dexscreener pair: price, liquidity, fdv, market cap, 24h volume and txns, price change windows, project links and boosts. chains: chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol). not_found means no such pair on that chain. verbose=true adds the raw payload.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol) | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary | |
| pair_address | Yes | pair/pool address in the chain's format |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond that: it is a live snapshot, not_found has a defined meaning, and verbose=true includes the raw upstream payload. These details help the agent understand observable behavior without contradicting 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?
The description is compact and front-loads the core purpose before listing supported chains and behavioral notes. Each sentence contributes useful information, though the chain-alias enumeration is duplicated in the schema and makes the description slightly dense.
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 that an output schema exists, the description does not need to explain return values. It covers supported chains, aliases, required pair address, not_found semantics, and the verbose flag, which is sufficient for correct invocation of a read-only snapshot tool. It could be more complete by naming sibling distinctions, but nothing essential for calling this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters already described in the input schema. The description mostly repeats the chain aliases and verbose behavior rather than adding substantial new parameter-level meaning; the only slight addition is the not_found error semantics, which is more about output behavior than parameter meaning.
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 a live snapshot of one DexScreener pair and enumerates the fields included (price, liquidity, FDV, market cap, 24h volume, txns, price change windows, links, boosts). It identifies the resource and verb specifically, but it does not explicitly contrast itself with sibling tools like dex_search or dex_token_pairs, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the caller what inputs are needed (chain plus pair address), which chains/aliases are supported, and what not_found means. It does not explicitly state when to use this tool versus alternatives such as dex_search or jupiter_prices, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex_searchDexScreener searchARead-onlyIdempotent
search dexscreener by ticker, name, token address or pair address and return candidate pairs in upstream relevance order with chain, dex, price, liquidity, fdv, 24h volume and txns, and pair age. tickers are ambiguous: confirm identity by contract address (dex_token_pairs / dex_pair) before any safety check. limit 1-30 (default 10). verbose=true adds the raw payload.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max pairs to return, 1-30 | |
| query | Yes | ticker, name, or address; 1-64 chars | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the agent knows it's safe and non-destructive. The description adds context about ticker ambiguity and the need for address confirmation, which is useful for correct usage, but it doesn't disclose other behaviors like error handling or rate limits. Given the annotation coverage, a 3 is appropriate.
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 a single, dense paragraph that front-loads the primary purpose and includes critical usage guidance. It is slightly long but every sentence contributes useful information, and it avoids 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?
Given the presence of an output schema and rich annotations, the description covers what the tool returns, parameter semantics, and important usage caveats. It lacks explicit mention of error cases or rate limits, but those are not critical for invocation correctness given the safety hints.
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 each parameter has a description (query type, limit range, verbose behavior). The description adds value by noting the default limit and the purpose of verbose, but it doesn't elaborate beyond what schema already provides. Baseline 3 is correct.
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 searches dexscreener by multiple query types and returns candidate pairs with specific fields. It distinguishes itself by mentioning the relevance ordering, which is unique among siblings, and the explicit note about ticker ambiguity prevents misuse.
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 explicitly advises confirming identity by contract address using dex_token_pairs/dex_pair before any safety check, which is crucial when to use complementary tools. It also specifies the limit range and default, and the verbose flag behavior, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex_token_pairsDexScreener pools for a tokenARead-onlyIdempotent
list dexscreener pools for one token contract on one chain, sorted by liquidity descending, with price, liquidity, fdv, volume, txns and pair age. chains: chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol). limit 1-30 (default 20). an empty list means dexscreener does not index the token on that chain. verbose=true adds the raw payload.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol) | |
| limit | No | max pools to return, 1-30 | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary | |
| token_address | Yes | token contract address in the chain's format |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond that: results are sorted by liquidity descending, an empty list means the token is not indexed on that chain, and verbose=true exposes the raw upstream payload. No contradiction with 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?
The description is compact and front-loaded: action, scope, sort order, output fields, chain support, limits, and edge-case behavior each get one clause. There is no filler or redundant 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?
The tool is simple and well-covered by the input schema and output schema. The description supplies the missing runtime context: supported chains, default/max limit, empty-list interpretation, and verbose behavior. An agent has everything needed to invoke it 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 restates chain aliases and limit/verbose behavior, but adds little beyond what the parameter descriptions already provide. It does not deepen understanding of token_address formats or how parameters interact.
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 action and resource: 'list dexscreener pools for one token contract on one chain,' and names the returned fields. It is clearly scoped to token-level pool listing, which distinguishes it from sibling tools like dex_search and dex_pair.
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 clear invocation context: one chain, one token contract, sorted by liquidity, with a meaningful empty-list behavior. It does not explicitly name sibling alternatives or state when not to use the tool, but the context is unambiguous enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
honeypot_checkHoneypot simulation (EVM)ARead-onlyIdempotent
simulate a buy and sell of an evm token via honeypot.is and report is_honeypot, buy/sell/transfer tax, gas, risk flags, pair liquidity, contract open-source/proxy status and holder count. chains: ethereum, bsc, base (chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol)); for solana use rugcheck_report. no result means the token has no simulated pair yet. verbose=true adds top holders with supply percentages and the raw payload.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | chain id or alias; supported: ethereum (aliases: eth, 1); bsc (aliases: bnb, 56); base (aliases: 8453); solana (aliases: sol) | |
| address | Yes | token contract address (0x + 40 hex) | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds behavioral context beyond these: it describes the simulation nature (not a real transaction), the meaning of empty results, and the effect of verbose=true (adds top holders and raw payload). This fully discloses behavior without contradicting 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?
The description is information-dense but each sentence contributes value. It front-loads the core purpose, then provides chain details, a routing note, and verbose behavior. It is slightly redundant (aliases are repeated in schema), but remains well-structured and avoids fluff.
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 is complex (multiple chains, external service, optional verbose), and the description covers all necessary aspects: purpose, supported inputs, routing to alternatives, edge-case behavior (no pair), and output enhancement. An output schema exists, so return structure is covered elsewhere. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description adds extra semantic value by explaining that verbose=true includes top holders with supply percentages and raw payload, and by reiterating the chain aliases in a readable format. It goes beyond the schema's minimal descriptions, though some duplication exists.
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 simulates a buy and sell of an EVM token via honeypot.is and enumerates the specific metrics it reports (is_honeypot, taxes, gas, risk flags, etc.). It names the exact resource and action, and differentiates from sibling rugcheck_report by explicitly directing Solana usage there.
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 explicitly states supported chains (ethereum, bsc, base) with aliases and instructs to use rugcheck_report for Solana, providing clear routing. It also clarifies that a null result means no simulated pair exists, which guides interpretation of the tool's output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jupiter_pricesJupiter prices (Solana)ARead-onlyIdempotent
usd prices for up to 50 solana mints from jupiter price v3 (swap-derived), with liquidity, 24h change and decimals; unknown mints come back with found=false. use as a second price source next to dexscreener. verbose=true adds the raw payload.
| Name | Required | Description | Default |
|---|---|---|---|
| mints | Yes | 1-50 solana mint addresses | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses useful edge-case behavior: unknown mints come back with found=false, a 50-mint limit exists, and verbose=true adds the raw payload. These details help the agent predict behavior; no contradiction with 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?
The description is two dense sentences with no filler. Purpose, limits, edge behavior, and usage context are all front-loaded economically.
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 and complete parameter documentation, the description covers purpose, source, limits, edge cases, and verbose behavior. It could be slightly stronger with an explicit when-not-to-use note, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says: up to 50 mint addresses and verbose adding raw payload. It adds no genuinely new parameter-level meaning.
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 USD prices for up to 50 Solana mints from Jupiter, with liquidity, 24h change, decimals, and found=false for unknown mints. It identifies itself as a price source alongside dexscreener, but does not explicitly contrast with sibling tools like dex_search or dex_token_pairs.
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 an explicit use context: 'use as a second price source next to dexscreener.' However, it does not state when not to use this tool or name specific sibling alternatives, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rugcheck_reportRugCheck report (Solana)ARead-onlyIdempotent
fetch rugcheck.xyz's risk report for a solana mint: score and normalised score, named risks with levels, lp locked percentage, token program. verbose=true fetches the full report: mint/freeze authority, top holders with percentages and insider flags, metadata mutability, jupiter verification, and the raw payload. solana only; for evm tokens use honeypot_check.
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | solana mint address (base58) | |
| verbose | No | when true, include the raw upstream payload under `raw` (capped) and extra detail in summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| raw | No | |
| cache | No | |
| error | No | |
| source | Yes | |
| summary | No | |
| fetched_at | No | |
| raw_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/openWorld/idempotent/non-destructive safety context. The description adds useful behavioral detail beyond those annotations, such as what default vs verbose mode returns, including the capped raw payload. No contradiction with 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?
Two concise sentences, front-loaded with the core action and output summary, then enriched with verbose-mode details and platform constraint. Every sentence earns its place without repeating 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, full parameter coverage, and strong annotations, the description covers purpose, mode behavior, result contents, and platform routing. Nothing essential is missing for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3. The description adds value beyond the schema by enumerating verbose-mode fields like mint/freeze authority, top holders with insider flags, metadata mutability, and Jupiter verification that the schema does not list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: "fetch rugcheck.xyz's risk report for a solana mint" and enumerates the report's fields. It also explicitly distinguishes itself from honeypot_check by stating "solana only."
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 routing guidance: use for Solana mint risk reports, use verbose=true for richer detail, and use honeypot_check for EVM tokens. This directly tells an agent when to use this tool vs alternatives.
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.
6 tool updates
v0.1.0- First observed
dex_pair - First observed
dex_search - First observed
dex_token_pairs - First observed
honeypot_check - First observed
jupiter_prices - First observed
rugcheck_report
TDQS
Scored across 6 tools
Tools are mostly distinct: honeypot_check and rugcheck_report clearly separate EVM vs Solana safety checks; dex_search, dex_token_pairs, and dex_pair cover different granularities of pair data. Minor overlap exists between dex_search and dex_token_pairs, but descriptions clarify when each is appropriate.
All tool names use consistent snake_case and follow a predictable pattern: domain-specific prefix (dex_, jupiter_, honeypot_, rugcheck_) plus a clear noun or verb. The naming scheme makes the tool's function obvious and uniform across the set.
Six tools is a well-scoped size for a token research and safety-checking server. Each tool covers a distinct aspect of the workflow (search, pair lookup, pair snapshot, safety verification, pricing) without redundancy or bloat.
The core workflow (find token, verify pair, assess safety, get price) is covered. Minor gaps exist: no EVM-specific price source analogous to jupiter_prices, and dex_token_pairs only queries one chain at a time, requiring multiple calls for cross-chain analysis.
Maintenance
Related MCP Connectors
Pre-trade token safety checks for AI agents on Solana and Base. x402 USDC per call, no key.
Pay-per-call Solana token risk intelligence: 8 tools via x402. From $0.005 USDC, no API key.
Solana address risk grades and token scans for AI agents. Pay-per-call via x402 (USDC on Base).
Pre-trade token safety check for AI agents. Simulates a sell before you buy, then returns one low/medium/high/unknown verdict with the signals behind it: sellability, buy/sell tax, liquidity depth, pair age, same-ticker impersonation, owner powers from bytecode. Ethereum, BSC, Base, Solana. Fail-closed - a check that cannot run answers unknown, never low. Publishes its own measured error rate with the benchmark harness in the repo. Free, no signup, no API key, MIT.
Related MCP Servers
AlicenseAqualityBmaintenanceProvides post-deploy Solana threat intelligence, enabling AI agents to check operators, tokens, and network stats for detecting rug pulls and malicious activity.516 npmMIT- AlicenseAqualityAmaintenanceOn-chain Solana token safety for trading agents — traces coordinated wallet funding, same-block Jito bundles, serial-rug deployers and live coordinated dumps into one Exit-Liquidity Risk verdict before a swap. Free tier, then $0.02 USDC/query via x402.118 npm1MIT
- AlicenseBqualityBmaintenanceProvides on-chain forensic checks for evaluating transaction risks, including token verification, rug-pull detection, and fund tracing, using public blockchain endpoints.1216 npmMIT
- FlicenseAqualityBmaintenanceEnables read-only on-chain analysis to spot trending and new memecoin pools, evaluate rug risk, and surface early buyer wallets across Solana, Base, and Ethereum.5-