Skip to main content

curator-mcp

Live DeFi lending yields, TVL, utilization and token prices on Base — as MCP tools.

An MCP server that answers the questions an agent actually asks about DeFi markets: where should this asset sit, what does it earn, and how deep is the liquidity? Data comes from The Graph — Messari standardized subgraphs for lending and DEX markets, and the Token API for spot prices.

Standalone and dependency-light. It knows nothing about any particular agent; it was extracted from one, which is the only relationship it has to the vault curator that first used it.


Install

Requires Python ≥ 3.10 and a free Graph API key from thegraph.com/studio → API Keys.

uvx curator-mcp                  # run without installing
# or
pip install curator-mcp

Published on PyPI — no clone required. Verified from a machine that has never seen this repo.

From a clone, if you want to modify it:

git clone <this-repo> && cd <this-repo>
uv pip install ./data/curator_mcp

Configure your MCP client

{
  "mcpServers": {
    "curator": {
      "command": "uvx",
      "args": ["curator-mcp"],
      "env": { "GRAPH_API_KEY": "your-key-here" }
    }
  }
}

That is the whole setup. Claude Desktop, Claude Code, Cursor, Zed and anything else speaking MCP over stdio will pick the tools up.


Tools

Tool Arguments Answers
compare_protocols asset Where should this asset sit? Ranks every protocol, and names the best-APY and deepest-TVL ones separately because they are usually not the same.
get_market_yields asset What does this asset earn, and where? Supply-side APYs across every protocol listing it.
list_markets assets? Broad survey of lending markets and DEX pools.
get_token_price symbol Spot USD price.

Plus a curator://protocols resource listing which protocols are configured.

Response shape

Every tool returns the same three guarantees:

{
  "asset": "USDC",
  "protocols": [
    {
      "protocol": "aave-v3",
      "supply_apy": 0.0432,        // fraction — use this for arithmetic
      "supply_apy_pct": 4.32,      // percent  — use this for display
      "tvl_usd": 84200000.0,
      "utilization": 0.91,
      "fact_ids": ["messari:yield:aave-v3/usdc", "messari:tvl:aave-v3/usdc"],
      "sources": ["messari"]
    }
  ],
  "best_apy": "aave-v3",
  "deepest_tvl": "moonwell",
  "taken_at": "2026-07-25T14:05:00+00:00",
  "errors": []                     // non-empty means your view is PARTIAL
}
  1. fact_ids and sources on every number. Provenance travels with the data, so a model can cite what it saw and a human can check it.
  2. errors on every response. If a protocol could not be reached it is named here. A non-empty errors means the answer is partial and should be described that way — never silently treated as the whole market.
  3. APY twice, in both units. supply_apy is a fraction (0.0432); supply_apy_pct is a percentage (4.32). Mixing them up is a 100× error, so neither has to be inferred.

See SKILL.md for how an agent should use these tools well.


Configuration

Variable Required Default Purpose
GRAPH_API_KEY yes — Subgraph gateway credential (thegraph.com/studio)
TOKEN_API_KEY no GRAPH_API_KEY Token API bearer token, if different
TOKEN_API_URL no https://api.pinax.network/v1 Token API host. Pinax operates it — token-api.thegraph.com does not resolve
DATA_CHAIN no base Chain to query
DATA_REQUEST_TIMEOUT_S no 15 Per-request timeout
CURATOR_MCP_LOG_LEVEL no WARNING Logs go to stderr; stdout is the MCP transport

Values are read from the environment, or from a .env found by walking up from the package.


Extending it

Protocols are configuration, not code. Because Messari publishes one standardized schema per protocol type, every lending market answers the same GraphQL query — so adding one is a single line in curator_data/sources/protocols.py:

Protocol(key="moonwell", subgraph_id="33ex…sBrg", family="lending", label="Moonwell (Base)"),

Adding a whole new provider (Chainlink, Pyth, DefiLlama) is one file plus one registration line — see the curator-data README. New sources appear in these tools automatically, because tools resolve sources by capability (provides = ("price",)) rather than by name.


Verify it works

GRAPH_API_KEY=… curator-data verify-live      # live gateway check, names any failing protocol
uv run pytest data/tests -q                   # offline test suite

License

MIT.

Metadata

Release files for curator-mcp 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for curator-mcp 0.4.0
File Size Uploaded
curator_mcp-0.4.0.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for curator-mcp 0.4.0
File Interpreter ABI Platform
curator_mcp-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.3 kB

Release files / curator_mcp-0.4.0.tar.gz

Download URL curator_mcp-0.4.0.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
743bcb9275fe3aba8ff4fd1df40c43aa1086955a2e7d786000029ee6ad392ea9
BLAKE2b-256 checksum
How to use checksums
23e5aab0f28df3480c2f7236c92f63d0aff84a5a826aeddeb195e1c2ddad0c00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / curator_mcp-0.4.0-py3-none-any.whl

Download URL curator_mcp-0.4.0-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6924b21aa25b4f1dddda94b86eee61d76e5d30e8fa84a8081d3877d8c7ddfb3a
BLAKE2b-256 checksum
How to use checksums
ae7a4c7ea23738ee97e2d59b409f95b930b49c48c3a155be42386c30a7acf049
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page