Skip to main content
Glama

mcp-infinifi

Read-only stdio MCP server for infiniFi public Ethereum mainnet contracts and documentation index. No wallet, key, transaction signing, authentication, or write tools. This is an independent local prototype, not an infiniFi release.

The API documentation names protocol state and historical data but publishes no HTTP paths, parameters, or base URL. It points to an infinifi-backend repository that returned HTTP 404 when checked on 2026-10-20. This server does not invent an HTTP API, historical metric, or product endpoint. Instead it uses eth_call against published Ethereum contract addresses, the public contract interfaces, and the published llms.txt index.

Install

Node.js 20+ and pnpm are required. From this folder:

pnpm install
pnpm build
node dist/index.js

The last command runs the stdio server; an MCP client supplies messages on stdin. Set INFINIFI_RPC_URL to another trusted Ethereum mainnet JSON-RPC URL if the default public endpoint is unavailable. The default is https://ethereum-rpc.publicnode.com.

For Claude Desktop on macOS, add this to ~/Library/Application Support/Claude/claude_desktop_config.json under mcpServers and restart Claude:

{
  "mcpServers": {
    "infinifi": {
      "command": "node",
      "args": [
        "/Users/0xmarvel/superconductor/projects/value-drops/infinifi-mcp/dist/index.js"
      ]
    }
  }
}

For Cursor, use the same mcpServers entry in ~/.cursor/mcp.json (or the project .cursor/mcp.json) and reload Cursor. Replace the path if you moved this folder.

Related MCP server: Cryo MCP

Tool to source mapping

Tool

Exact read

Public source

get_token_supplies

JSON-RPC eth_call: totalSupply(), decimals() on iUSD and siUSD

Token addresses, ReceiptToken, StakedToken

list_registered_farms

JSON-RPC eth_call: getFarms(), getEnabledAssets() on FarmRegistry

Registry address, source

get_farm_state

JSON-RPC eth_call: isFarm(address), then assetToken(), assets(), cap(), asset decimals()

Registry, Farm source

get_docs_index

HTTP GET https://docs.infinifi.xyz/llms.txt

Documentation index

Each onchain result reads a single block. retrievedAt is local request completion time, not the block time. Amounts remain decimal strings, with raw integer values included. A capUnlimited flag marks the contract uint256.max sentinel, with cap: null. Token supply is not TVL; farm accounting assets are not a promise of immediate liquidity.

Real MCP calls

I started node dist/index.js over stdio, initialized MCP, and sent the following tools/call requests on 2026-10-20 UTC. The JSON below is the exact text returned by each tool at that time. Values will change.

get_token_supplies

Request: tools/call with {"name":"get_token_supplies","arguments":{}}.

Recorded tool text (live response):

{
  "readOnly": true,
  "retrievedAt": "2026-10-20T20:32:25.412Z",
  "source": {
    "endpoint": "https://ethereum-rpc.publicnode.com eth_call",
    "methods": "iUSD.totalSupply(), iUSD.decimals(), siUSD.totalSupply(), siUSD.decimals()",
    "contracts": [
      "0x48f9e38f3070AD8945DFEae3FA70987722E3D89c",
      "0xDBDC1Ef57537E34680B898E1FEBD3D68c7389bCB"
    ],
    "documentation": "https://docs.infinifi.xyz/dev-docs/contracts",
    "interfaces": [
      "https://github.com/InfiniFi-Labs/infinifi-protocol/blob/master/src/tokens/ReceiptToken.sol",
      "https://github.com/InfiniFi-Labs/infinifi-protocol/blob/master/src/tokens/StakedToken.sol"
    ]
  },
  "data": {
    "block": "26236205",
    "tokens": [
      {
        "symbol": "iUSD",
        "address": "0x48f9e38f3070AD8945DFEae3FA70987722E3D89c",
        "supplyRaw": "68302862178713469460186700",
        "decimals": 18,
        "supply": "68302862.1787134694601867"
      },
      {
        "symbol": "siUSD",
        "address": "0xDBDC1Ef57537E34680B898E1FEBD3D68c7389bCB",
        "supplyRaw": "48068711238339140960628049",
        "decimals": 18,
        "supply": "48068711.238339140960628049"
      }
    ]
  }
}

list_registered_farms

Request: tools/call with {"name":"list_registered_farms","arguments":{}}.

Recorded tool text (live response):

{
  "readOnly": true,
  "retrievedAt": "2026-10-20T20:32:26.018Z",
  "source": {
    "endpoint": "https://ethereum-rpc.publicnode.com eth_call",
    "contract": "0xF5f2718708f471e43968271956CC01aaA8c46119",
    "methods": "getFarms(), getEnabledAssets()",
    "documentation": "https://docs.infinifi.xyz/dev-docs/integrations/farm-registry",
    "interface": "https://github.com/InfiniFi-Labs/infinifi-protocol/blob/master/src/integrations/FarmRegistry.sol"
  },
  "data": {
    "block": "26236205",
    "count": 17,
    "farms": [
      "0x49877d937B9a00d50557bdC3D87287b5c3a4C256",
      "0xCb1747E89a43DEdcF4A2b831a0D94859EFeC7601",
      "0xda40ce7DdDBE7D54A106D32575b2CCF41dDb1A11",
      "0xAc21B22B5aEb11bc32De4ecF59E4538fCa48b694",
      "0x90787c1b99F47EFfEE0db0aB9D4e33CdC3e6bFa7",
      "0x79e1B8e45932A7C802eA3dAb3844e5DEa68d971f",
      "0x277FdF6Dc5c53C5c2828188Da84B9593A50884C1",
      "0xe919C66475f2F30d285c768853E6B5b23ef181Cf",
      "0xbFd5FC8DecA3C6128bfCE0FE46c25616811c3580",
      "0xfD1Ea12d29B90630b265DBbc6Af88266d1a83dE4",
      "0xd880D7C5CaFdbE2AEc281250995abF612235e563",
      "0xA7c1DAEAA5D97e1319B4Ff6Cdf658F5C4582A27E",
      "0x9E5efC5F387D8661C1AFB2469B7EeF6972451852",
      "0x2fa5E6C5549BEdF98A935Cac3BB4337459c74897",
      "0x78A31bD6cAca12BdF83F8A608076006C1F58F363",
      "0xbD6c2d1C4809a5D8847FbA3a3cf7d6BDf6b6C3bA",
      "0xe9E44C0A68C49aDe51CdA5e027909C5996B5c71a"
    ],
    "enabledAssets": [
      "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "0x8292Bb45bf1Ee4d140127049757C2E0fF06317eD"
    ]
  }
}

get_farm_state

Request: tools/call with {"name":"get_farm_state","arguments":{"address":"0xbFd5FC8DecA3C6128bfCE0FE46c25616811c3580"}}.

Recorded tool text (live response):

{
  "readOnly": true,
  "retrievedAt": "2026-10-20T20:32:32.937Z",
  "source": {
    "endpoint": "https://ethereum-rpc.publicnode.com eth_call",
    "contract": "0xbFd5FC8DecA3C6128bfCE0FE46c25616811c3580",
    "methods": "FarmRegistry.isFarm(address), Farm.assetToken(), Farm.assets(), Farm.cap(), assetToken.decimals()",
    "registry": "0xF5f2718708f471e43968271956CC01aaA8c46119",
    "documentation": "https://docs.infinifi.xyz/dev-docs/integrations/farm-registry",
    "interface": "https://github.com/InfiniFi-Labs/infinifi-protocol/blob/master/src/integrations/Farm.sol"
  },
  "data": {
    "block": "26236205",
    "address": "0xbFd5FC8DecA3C6128bfCE0FE46c25616811c3580",
    "assetToken": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 6,
    "assetsRaw": "3508611028172",
    "assets": "3508611.028172",
    "capRaw": "115792089237316195423570985008687907853269984665640564039457584007913129639935",
    "cap": null,
    "capUnlimited": true
  }
}

get_docs_index

Request: tools/call with {"name":"get_docs_index","arguments":{}}.

Recorded tool text (live response):

{
  "readOnly": true,
  "retrievedAt": "2026-10-20T20:32:33.223Z",
  "source": {
    "endpoint": "GET https://docs.infinifi.xyz/llms.txt",
    "documentation": "https://docs.infinifi.xyz/dev-docs/api-documentation"
  },
  "data": {
    "pages": [
      {
        "title": "infiniFi Docs Hub",
        "url": "https://docs.infinifi.xyz/index.md"
      },
      {
        "title": "Whitepaper",
        "url": "https://docs.infinifi.xyz/whitepaper/index.md"
      },
      {
        "title": "Oracles",
        "url": "https://docs.infinifi.xyz/oracles.md"
      },
      {
        "title": "Vaults",
        "url": "https://docs.infinifi.xyz/vaults.md"
      },
      {
        "title": "Deposit Quickstart",
        "url": "https://docs.infinifi.xyz/deposit-quickstart.md"
      },
      {
        "title": "Pendle Liquidity Transfer",
        "url": "https://docs.infinifi.xyz/pendle-liquidity-transfer/index.md"
      },
      {
        "title": "Security",
        "url": "https://docs.infinifi.xyz/audits.md"
      },
      {
        "title": "Risk Disclosures",
        "url": "https://docs.infinifi.xyz/risk-disclosures.md"
      },
      {
        "title": "Slashing mechanics",
        "url": "https://docs.infinifi.xyz/slashing-mechanics.md"
      },
      {
        "title": "Developer Summary",
        "url": "https://docs.infinifi.xyz/dev-docs/summary.md"
      },
      {
        "title": "Contract Addresses",
        "url": "https://docs.infinifi.xyz/dev-docs/contracts.md"
      },
      {
        "title": "Changelog",
        "url": "https://docs.infinifi.xyz/dev-docs/changelog.md"
      },
      {
        "title": "Core",
        "url": "https://docs.infinifi.xyz/dev-docs/core/index.md"
      },
      {
        "title": "InfiniFiCore.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/core/infini-fi-core.md"
      },
      {
        "title": "CoreControlled.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/core/core-controlled.md"
      },
      {
        "title": "Gateway",
        "url": "https://docs.infinifi.xyz/dev-docs/gateway/index.md"
      },
      {
        "title": "InfiniFiGatewayV1.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/gateway/infini-fi-gateway-v1.md"
      },
      {
        "title": "Tokens",
        "url": "https://docs.infinifi.xyz/dev-docs/tokens/index.md"
      },
      {
        "title": "ReceiptToken.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/tokens/receipt-token.md"
      },
      {
        "title": "StakedToken.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/tokens/staked-token.md"
      },
      {
        "title": "LockedPositionToken.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/tokens/locked-position-token.md"
      },
      {
        "title": "Funding",
        "url": "https://docs.infinifi.xyz/dev-docs/funding/index.md"
      },
      {
        "title": "MintController.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/funding/mint-controller.md"
      },
      {
        "title": "RedeemController.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/funding/redeem-controller.md"
      },
      {
        "title": "RedemptionPool.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/funding/redemption-pool.md"
      },
      {
        "title": "Locking",
        "url": "https://docs.infinifi.xyz/dev-docs/locking/index.md"
      },
      {
        "title": "LockingController.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/locking/locking-controller.md"
      },
      {
        "title": "UnwindingModule.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/locking/unwinding-module.md"
      },
      {
        "title": "Finance",
        "url": "https://docs.infinifi.xyz/dev-docs/finance/index.md"
      },
      {
        "title": "Accounting.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/finance/accounting.md"
      },
      {
        "title": "YieldSharing.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/finance/yield-sharing.md"
      },
      {
        "title": "Governance",
        "url": "https://docs.infinifi.xyz/dev-docs/governance/index.md"
      },
      {
        "title": "AllocationVoting.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/governance/allocation-voting.md"
      },
      {
        "title": "Timelock.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/governance/timelock.md"
      },
      {
        "title": "MinorRolesManager.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/governance/minor-roles-manager.md"
      },
      {
        "title": "Integrations",
        "url": "https://docs.infinifi.xyz/dev-docs/integrations/index.md"
      },
      {
        "title": "Farm.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/integrations/farm.md"
      },
      {
        "title": "FarmRegistry.sol",
        "url": "https://docs.infinifi.xyz/dev-docs/integrations/farm-registry.md"
      },
      {
        "title": "Farms",
        "url": "https://docs.infinifi.xyz/dev-docs/integrations/farms.md"
      },
      {
        "title": "API Documentation",
        "url": "https://docs.infinifi.xyz/dev-docs/api-documentation.md"
      },
      {
        "title": "Roles Documentation",
        "url": "https://docs.infinifi.xyz/dev-docs/roles-documentation.md"
      },
      {
        "title": "Research Overview",
        "url": "https://docs.infinifi.xyz/research.md"
      },
      {
        "title": "Liquid keeper reserve",
        "url": "https://docs.infinifi.xyz/liquid-keeper-reserve.md"
      },
      {
        "title": "Risk Assessment Framework",
        "url": "https://docs.infinifi.xyz/risk-assessment-framework.md"
      }
    ]
  }
}

What I would add next

Once infiniFi publishes concrete public HTTP paths and schemas, add protocol-state and historical-metric tools against those documented endpoints. Cross-check farm valuations against a published accounting contract address before calling any aggregate figure TVL.

Available Tools

4 tools
get_docs_indexA

Fetch infiniFi's live llms.txt index of canonical documentation URLs. Returns titles and URLs, not scraped protocol metrics.

Inputs: no named parameters.

get_farm_stateA

Read a registered Ethereum mainnet farm's asset token, accounting assets and deposit cap at one block. capUnlimited=true means no configured cap; accounting assets are not guaranteed instantly redeemable.

Inputs: address (required).

get_token_suppliesA

Read Ethereum mainnet iUSD and siUSD ERC-20 total supplies at one block. Supplies are not protocol TVL.

Inputs: no named parameters.

list_registered_farmsA

Read all registered Ethereum mainnet farm addresses and enabled asset addresses at one block; does not infer current yield or liquidity.

Inputs: no named parameters.

Tool Schema Changelog

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

    TDQS

    A4/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: token supplies, farm enumeration, single-farm state, and documentation index. The descriptions explicitly delineate boundaries (e.g. list_registered_farms vs get_farm_state) so an agent can select reliably.

    Naming Consistency5/5

    All four tools follow a consistent verb_noun snake_case pattern: get_token_supplies, list_registered_farms, get_farm_state, get_docs_index. Verb choice (get/list) maps predictably to retrieval vs enumeration.

    Tool Count4/5

    Four tools is slightly thin but well-scoped for a read-only protocol data reader, with each tool earning its place. No redundant or filler tools, though the surface is minimal.

    Completeness3/5

    The read surface covers token supplies, farms, farm state, and docs, but lacks user-position/balance queries and yield or historical metrics that a protocol reader would typically need. These notable gaps limit deeper agent workflows without external calls.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      D
      maintenance
      Enables AI-powered analysis of Ethereum blockchain data through semantic search, natural language queries, and structured filtering. Provides comprehensive access to addresses, transactions, blocks, tokens, and smart contracts with real-time blockchain intelligence.
      26
      12 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language querying of blockchain data, including blocks, transactions, logs, and more, powered by Cryo and Reth, with optional micropayment integration via Payflow.
      8
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Provides read-only access to Solana on-chain data, enabling natural language queries for wallet balances, token holdings, prices, transactions, and more via MCP-compatible clients.
      8
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables querying on-chain data (balances, transactions, token transfers, blocks) across 20+ EVM chains through natural language.
      149 npm
      MIT