MCP server providing AI-agent access to DeFi contract documentation, on-chain state, governance events, and market data via tools for contract inspection, ERC-20 info, Uniswap V3 pools, Polymarket markets, and article publishing.
Strong foundation with 15 well-named tools using consistent verb_noun patterns (get_, list_, inspect_, read_, publish_, validate_). All tools have descriptions (avg 156 chars, within 10-1024 baseline). Input schemas present for all tools with typed parameters. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Parameter descriptions are present but often lack constraints (enums, ranges, formats). Error handling guidance is minimal. Two write tools (publish_article, validate_article_draft) lack dry-run/confirmation patterns. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles.
Get the current admin / risk profile for a verified contract: detected privileged controls, current control values, recent governance summary, evidence, warnings, and freshness metadata. Accepts either a curated slug or chain+address.
Get metadata about a verified smart contract: name, compiler, classification, supported adapters, and counts of functions and events. Accepts either a curated slug (uni-eth, usdc-base, …) or chain+address.
Fetch the verified Solidity source for an indexed contract. Three modes by argument: no `file`/`search` returns a file index; `file:` returns one file's content; `search:` greps across all files (case-insensitive substring). Accepts a curated slug or chain+address.
Get live state of an ERC-20 token: supply (raw + human-formatted), price, market cap, and issuer. For admin / privilege controls (paused, owner, mintable, upgradeable, etc.) and recent governance activity, the contract page itself exposes an Admin & Risk section — those are not returned here. Accepts slug or chain+address.
Return the governance / admin event history for a contract, newest first. Surfaces only privileged events (role changes, pauses, proxy upgrades, blacklisting, minter config) — never per-user Transfer/Approval traffic. Each event includes a human-readable `summary` and a `category` (role_change, config, upgrade, lifecycle, risk_action). First call on a contract backfills ~90 days; subsequent calls are incremental. Pass `category` to filter. Accepts slug or chain+address.
Output schemas not documented. LLMs cannot predict response structure for tool chaining. E.g., get_contract_info returns metadata but response fields are not specified, forcing agents to guess field names for downstream calls.
Parameter constraints missing. 'limit' parameters lack min/max bounds (e.g., get_recent_events accepts 1-100 but description does not state this). 'chain' parameters accept Tier 1 vs Tier 2 chains but no enum constraint. LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Get Polymarket market metadata and on-chain resolution state by slug or condition_id. Includes outcome token IDs, derived CTF position IDs, prices when present, payouts, and links.
Get a wallet's Polymarket CTF outcome-token balances for up to 10 explicit markets. Input an address plus condition_ids and/or slugs.
Audit a Polymarket market resolution by slug or condition_id. Reads CTF payout state on-chain, includes Gamma market status and outcome token IDs, and flags whether API-level closed status agrees with the chain.
List the most recent events emitted by a contract, decoded against its ABI. Returns up to `limit` events (default 20, max 100), newest first. Pass `event_name` to filter to a single event signature (e.g. 'Swap', 'Transfer'). Unknown topics are returned with event='Unknown' and the raw topic0 + data — never errors out per-log. Accepts slug or chain+address.
Get live state of a Uniswap V3 pool: token pair, fee tier, current price (both directions), active liquidity, current tick, and TVL in USD (via DefiLlama token prices). Accepts slug or chain+address.
Inspect any EVM address: classifies it as an EOA / unverified contract / EIP-7702 delegated wallet, returns native-token balance, outgoing tx count (nonce), and reverse-ENS name (Ethereum only). Works for unindexed addresses — useful before deciding whether to call get_contract_info or get_erc20_info.
List multilingual article drafts under docs/drafts, including slug, category, locales, and validation errors. Requires the MCP connection to carry an Authorization: Bearer <publish_token> header.
Publish a multilingual article into Smarts article pages. Pass meta (category/subcategory/title/summary) and content (locale -> markdown body) inline; falls back to docs/drafts/:slug on the server if not provided. Optionally schedule X posts via x_queue. Requires the MCP connection to carry an Authorization: Bearer <publish_token> header.
Read the current on-chain value of a view/pure function. Fetches from the chain (cached 60s) and returns the decoded output. Accepts slug or chain+address.
Validate one multilingual article draft without publishing it. Pass meta and content inline to validate a local draft; omit both to read docs/drafts/:slug on the server. Requires the MCP connection to carry an Authorization: Bearer <publish_token> header.
No tool annotations. publish_article is WRITE (destructive) and validate_article_draft is READ_ONLY, but no readOnlyHint/destructiveHint/idempotentHint annotations present. Agents cannot distinguish safe from unsafe tools without reading descriptions.
publish_article lacks dry-run confirmation. This is a WRITE tool that publishes articles and schedules X posts, irreversible actions. No dry_run parameter exists to validate before committing. Agents risk publishing incorrect content.
Error handling guidance absent. No tool descriptions explain what to do on failure (e.g., 'If chain not found, try Tier 1 chains: eth, base, arbitrum...'). Agents will retry blindly or give up.