IndigoProtocol/indigo-mcp
MCP server for Indigo Protocol on Cardano — exposes iAsset prices (iUSD, iBTC, iETH, iSOL), CDP/loan analytics, stability pools, INDY staking, governance, and DEX data to LLM agents.
README
Indigo MCP
MCP server for Indigo Protocol — exposes Indigo iAsset data, prices, and CDP/loan analytics to LLM agents via the Model Context Protocol.
Features
- Real-time iAsset prices (iUSD, iBTC, iETH, iSOL)
- ADA and INDY token price feeds
- CDP/loan browsing with pagination and filtering
- Owner lookup by payment key hash or bech32 address
- CDP health analysis with collateral ratio and liquidation risk status
- Stability pool state and account queries
- INDY staking positions and manager state
- Protocol analytics: TVL, APR rewards, DEX yields, aggregated stats
- Governance: protocol parameters, polls, temperature checks
- Redemption order book and queue aggregation
- DEX proxy: Steelswap swaps, Iris liquidity pools, Blockfrost balances
- CDP liquidation, redemption, freeze, and merge operations
- Leveraged CDP opening via LRP positions
- LRP (Limit Redemption Protocol) position management
- Oracle interest rate feeding and initialization
- Stability pool request processing and cancellation
- Staking reward distribution
- Collector UTXOs, IPFS storage and retrieval
Quick Start
Install globally:
npm install -g @indigoprotocol/indigo-mcp
Or run directly with npx (no install needed):
npx @indigoprotocol/indigo-mcp
Docker
docker build -t indigo-mcp .
docker run -i indigo-mcp
HTTP Transport (Remote)
The server supports HTTP transport for remote/hosted deployments:
MCP_TRANSPORT=http PORT=3000 npx @indigoprotocol/indigo-mcp
This starts an HTTP server with:
POST /mcp— MCP endpoint (Streamable HTTP with SSE)GET /health— Health check
Configuration
Note:
BLOCKFROST_API_KEYis required for write operations (transaction building). Read-only tools work without it. Get a free key at blockfrost.io.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"indigo": {
"command": "npx",
"args": ["-y", "@indigoprotocol/indigo-mcp"],
"env": {
"INDEXER_URL": "https://analytics.indigoprotocol.io/api/v1",
"BLOCKFROST_API_KEY": "your-blockfrost-project-id"
}
}
}
}
Claude Code (CLI)
Add to ~/.claude/settings.json or .claude/settings.json in your project:
{
"mcpServers": {
"indigo": {
"command": "npx",
"args": ["-y", "@indigoprotocol/indigo-mcp"],
"env": {
"INDEXER_URL": "https://analytics.indigoprotocol.io/api/v1",
"BLOCKFROST_API_KEY": "your-blockfrost-project-id"
}
}
}
}
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project-level):
{
"mcpServers": {
"indigo": {
"command": "npx",
"args": ["-y", "@indigoprotocol/indigo-mcp"],
"env": {
"INDEXER_URL": "https://analytics.indigoprotocol.io/api/v1",
"BLOCKFROST_API_KEY": "your-blockfrost-project-id"
}
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"indigo": {
"command": "npx",
"args": ["-y", "@indigoprotocol/indigo-mcp"],
"env": {
"INDEXER_URL": "https://analytics.indigoprotocol.io/api/v1",
"BLOCKFROST_API_KEY": "your-blockfrost-project-id"
}
}
}
}
Any MCP-Compatible Client
Run the server directly via stdio:
INDEXER_URL=https://analytics.indigoprotocol.io/api/v1 \
BLOCKFROST_API_KEY=your-blockfrost-project-id \
npx @indigoprotocol/indigo-mcp
Or install globally and reference the binary:
npm install -g @indigoprotocol/indigo-mcp
indigo-mcp
For any client that supports MCP over stdio, point it to the npx @indigoprotocol/indigo-mcp command with the environment variables above.
Available Tools
Asset Tools
| Tool | Description | Parameters |
|---|---|---|
get_assets |
Get all Indigo iAssets with prices and interest data | None |
get_asset |
Get details for a specific iAsset | asset: iUSD, iBTC, iETH, or iSOL |
get_asset_price |
Get the current price for a specific iAsset | asset: iUSD, iBTC, iETH, or iSOL |
get_ada_price |
Get the current ADA price in USD | None |
get_indy_price |
Get the current INDY token price in ADA and USD | None |
CDP / Loan Tools
| Tool | Description | Parameters |
|---|---|---|
get_all_cdps |
Get all CDPs/loans, optionally filtered by iAsset | asset?: iAsset filter; limit?: 1-500 (default 50); offset?: pagination offset |
get_cdps_by_owner |
Get CDPs for a specific owner | owner: payment key hash (56-char hex) or bech32 address |
get_cdps_by_address |
Get CDPs for a specific Cardano address | address: bech32 address (addr1... or addr_test1...) |
analyze_cdp_health |
Analyze collateral ratios and liquidation risk | owner: payment key hash or bech32 address |
CDP Write Tools
| Tool | Description | Parameters |
|---|---|---|
open_cdp |
Open a new CDP position (returns unsigned CBOR tx) | address: bech32 address; asset: iUSD, iBTC, iETH, or iSOL; collateralAmount: lovelace; mintAmount: iAsset smallest unit |
deposit_cdp |
Deposit additional collateral into a CDP | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index; amount: lovelace |
withdraw_cdp |
Withdraw collateral from a CDP | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index; amount: lovelace |
close_cdp |
Close a CDP and reclaim collateral | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index |
CDP Mint/Burn Tools
| Tool | Description | Parameters |
|---|---|---|
mint_cdp |
Mint additional iAssets from an existing CDP (increases debt) | address: bech32 address; asset: iUSD, iBTC, iETH, or iSOL; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: CDP UTxO output index; amount: iAsset amount in smallest unit |
burn_cdp |
Burn iAssets to reduce CDP debt | address: bech32 address; asset: iUSD, iBTC, iETH, or iSOL; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: CDP UTxO output index; amount: iAsset amount in smallest unit |
CDP Liquidation & Redemption Tools
| Tool | Description | Parameters |
|---|---|---|
liquidate_cdp |
Liquidate an undercollateralized CDP through the stability pool | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index |
redeem_cdp |
Redeem iAssets from a CDP | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index; amount: iAsset amount in smallest unit |
freeze_cdp |
Freeze a CDP to prevent further operations | address: bech32 address; asset: iAsset; cdpTxHash: CDP UTxO tx hash; cdpOutputIndex: output index |
merge_cdps |
Merge multiple CDPs into one | address: bech32 address; cdpOutRefs: array of {txHash, outputIndex} (min 2) |
Leverage CDP Tools
| Tool | Description | Parameters |
|---|---|---|
leverage_cdp |
Open a leveraged CDP by redeeming against LRP positions | address: bech32 address; asset: iAsset; leverage: multiplier (e.g. 2.0); baseCollateral: lovelace amount |
Stability Pool Tools
| Tool | Description | Parameters |
|---|---|---|
get_stability_pools |
Get the latest stability pool state for each iAsset | None |
get_stability_pool_accounts |
Get all open stability pool accounts, optionally filtered by iAsset | asset?: iUSD, iBTC, iETH, or iSOL |
get_sp_account_by_owner |
Get stability pool accounts for specific owners | owners: array of payment key hashes or bech32 addresses |
Staking Tools
| Tool | Description | Parameters |
|---|---|---|
get_staking_info |
Get the current INDY staking manager state | None |
get_staking_positions |
Get all open INDY staking positions | None |
get_staking_positions_by_owner |
Get INDY staking positions for specific owners | owners: array of payment key hashes or bech32 addresses |
get_staking_position_by_address |
Get INDY staking positions for a single address | address: Cardano bech32 address |
Stability Pool Request Tools
| Tool | Description | Parameters |
|---|---|---|
process_sp_request |
Process a pending stability pool request (protocol maintenance) | address: bech32 address; asset: iAsset; accountTxHash: account UTxO tx hash; accountOutputIndex: output index |
annul_sp_request |
Cancel a pending stability pool request | address: bech32 address; accountTxHash: account UTxO tx hash; accountOutputIndex: output index |
Staking Write Tools
| Tool | Description | Parameters |
|---|---|---|
open_staking_position |
Stake INDY tokens by creating a new staking position | address: bech32 address; amount: INDY amount in smallest unit |
adjust_staking_position |
Adjust an existing staking position (add or remove INDY) | address: bech32 address; amount: positive=stake more, negative=unstake; positionTxHash: UTxO tx hash; positionOutputIndex: UTxO output index |
close_staking_position |
Close a staking position and unstake all INDY | address: bech32 address; positionTxHash: UTxO tx hash; positionOutputIndex: UTxO output index |
Staking Reward Tools
| Tool | Description | Parameters |
|---|---|---|
distribute_staking_rewards |
Distribute collected ADA rewards from collector UTxOs to stakers | address: bech32 address; collectorTxHashes: array of {txHash, outputIndex} |
Analytics & APR Tools
| Tool | Description | Parameters |
|---|---|---|
get_tvl |
Get historical TVL data from DefiLlama | None |
get_apr_rewards |
Get all APR reward records | None |
get_apr_by_key |
Get APR for a specific key | key: APR key (e.g. sp_iUSD_indy, stake_ada) |
get_dex_yields |
Get DEX farm yields for iAsset pairs | None |
get_protocol_stats |
Get aggregated protocol statistics | None |
Governance Tools
| Tool | Description | Parameters |
|---|---|---|
get_protocol_params |
Get latest governance protocol parameters | None |
get_temperature_checks |
Get temperature check polls | None |
get_sync_status |
Get indexer sync status | None |
get_polls |
Get all governance polls | None |
Redemption & Order Book Tools
| Tool | Description | Parameters |
|---|---|---|
get_order_book |
Get open limited redemption positions | asset?: iAsset filter; owners?: array of payment key hashes |
get_redemption_orders |
Get redemption orders with optional filters | timestamp?: Unix ms; in_range?: filter by price range |
get_redemption_queue |
Get aggregated redemption queue for an iAsset | asset: iUSD, iBTC, iETH, or iSOL |
LRP Write Tools
| Tool | Description | Parameters |
|---|---|---|
open_lrp |
Open a new LRP position with ADA and a max price limit | address: bech32 address; asset: iAsset; lovelacesAmount: lovelace to deposit; maxPrice: on-chain integer string |
cancel_lrp |
Cancel an existing LRP position | address: bech32 address; lrpTxHash: LRP UTxO tx hash; lrpOutputIndex: output index |
adjust_lrp |
Adjust ADA in an LRP (positive to add, negative to remove) | address: bech32 address; lrpTxHash: LRP UTxO tx hash; lrpOutputIndex: output index; lovelacesAdjustAmount: adjustment; newMaxPrice?: optional new max price |
claim_lrp |
Claim received iAssets from an LRP position | address: bech32 address; lrpTxHash: LRP UTxO tx hash; lrpOutputIndex: output index |
redeem_lrp |
Redeem iAssets against one or more LRP positions | address: bech32 address; redemptionLrps: array of {txHash, outputIndex, iAssetAmount}; priceOracleTxHash; priceOracleOutputIndex; iassetTxHash; iassetOutputIndex |
Oracle Write Tools
| Tool | Description | Parameters |
|---|---|---|
feed_interest_oracle |
Feed a new interest rate to the interest oracle (oracle operator only) | address: operator bech32 address; asset: iAsset; newInterestRate: bigint string; biasTime: ms bigint string; owner: operator pub key hash |
start_interest_oracle |
Initialize a new interest oracle (admin one-time setup) | address: admin bech32 address; initialUnitaryInterest; initialInterestRate; initialLastInterestUpdate; biasTime; owner: operator pub key hash |
DEX Proxy Tools
| Tool | Description | Parameters |
|---|---|---|
get_steelswap_tokens |
Get all tokens available on Steelswap DEX | None |
get_steelswap_estimate |
Get a swap estimate from Steelswap | tokenIn: input token; tokenOut: output token; amountIn: amount |
get_iris_liquidity_pools |
Get liquidity pools from Iris | tokenA?: first token; tokenB?: second token; dex?: DEX filter |
get_blockfrost_balances |
Get token balances for a Cardano address | address: Cardano bech32 address |
Collector & IPFS Tools
| Tool | Description | Parameters |
|---|---|---|
get_collector_utxos |
Get collector UTXOs for fee distribution | length?: max UTXOs to return |
store_on_ipfs |
Store text content on IPFS | text: content to store |
retrieve_from_ipfs |
Retrieve content from IPFS by CID | cid: IPFS content identifier |
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
INDEXER_URL |
No | https://analytics.indigoprotocol.io/api/v1 |
Indigo analytics API base URL |
BLOCKFROST_API_KEY |
For write ops | — | Blockfrost project ID for transaction building |
CARDANO_NETWORK |
No | mainnet |
Cardano network: mainnet, preprod, or preview |
MCP_TRANSPORT |
No | stdio |
Transport mode: stdio or http |
PORT |
No | 3000 |
HTTP server port (only used when MCP_TRANSPORT=http) |
Example Queries
When connected to an LLM agent, you can ask natural language questions like:
- "What are the current prices of all Indigo iAssets?"
- "What is the price of iUSD right now?"
- "How much is ADA worth in USD?"
- "Show me all iETH CDPs"
- "What CDPs does this address own?" (paste a Cardano address)
- "Analyze the health of my CDPs" (with your address or payment key hash)
- "Are any of my positions at risk of liquidation?"
- "Show me the current stability pool state"
- "What are my stability pool deposits?" (with your address)
- "How much INDY am I staking?" (with your address)
- "What's the current TVL of Indigo?"
- "What APR can I earn on iUSD stability pool?"
- "What are the current governance protocol parameters?"
- "Show me the iUSD redemption queue"
- "Get a Steelswap estimate for swapping 100 ADA to iUSD"
- "What are the current DEX yields for iAsset pairs?"
Development
Prerequisites
- Node.js >= 18
- npm
Setup
git clone https://github.com/IndigoProtocol/indigo-mcp.git
cd indigo-mcp
npm install
npm run dev # run with tsx (hot reload)
Scripts
npm run build # compile TypeScript
npm run start # run compiled server
npm run dev # run with tsx (hot reload)
npm run typecheck # type-check without emitting
npm run lint # eslint
npm run lint:fix # eslint --fix
npm run format # prettier
npm run format:check # prettier --check
npm run test # run tests
npm run test:watch # run tests in watch mode
Project Structure
src/
├── index.ts # Server entry point (stdio transport)
├── types/
│ └── tx-types.ts # UnsignedTxResult, TxSummary types
├── tools/
│ ├── index.ts # Tool registration hub
│ ├── asset-tools.ts # 5 asset/price tools
│ ├── cdp-tools.ts # 4 CDP/loan tools
│ ├── stability-pool-tools.ts # 3 stability pool tools
│ ├── staking-tools.ts # 4 INDY staking tools
│ ├── staking-write-tools.ts # 3 INDY staking write tools
│ ├── staking-reward-tools.ts # 1 staking reward distribution tool
│ ├── cdp-liquidation-tools.ts # 4 CDP liquidation/redemption/freeze/merge tools
│ ├── leverage-cdp-tools.ts # 1 leveraged CDP tool
│ ├── lrp-write-tools.ts # 5 LRP write tools
│ ├── oracle-write-tools.ts # 2 oracle write tools
│ ├── sp-request-tools.ts # 2 SP request processing tools
│ ├── analytics-tools.ts # 5 analytics/APR tools
│ ├── governance-tools.ts # 4 governance tools
│ ├── redemption-tools.ts # 3 redemption/order book tools
│ ├── dex-tools.ts # 4 DEX proxy tools
│ └── collector-tools.ts # 3 collector/IPFS tools
├── resources/
│ └── index.ts # MCP resource definitions
├── tests/
│ ├── unit/
│ │ ├── tools/ # Unit tests for each tool module
│ │ └── utils/ # Unit tests for validators, address
│ └── integration/
│ └── indexer-client.test.ts # Integration test for HTTP client
└── utils/
├── index.ts # Re-exports
├── indexer-client.ts # Axios client for Indigo analytics API
├── validators.ts # Zod validators (AssetParam enum)
├── address.ts # Bech32 address → payment credential
├── lucid-provider.ts # Lucid + Blockfrost singleton provider
├── sdk-config.ts # SystemParams loader with cache
└── tx-builder.ts # Transaction builder → unsigned CBOR
Testing via stdin
The server communicates over stdio using JSON-RPC. You can test tools directly:
npm run build
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}' | node dist/index.js
License
ISC
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.