Connects Claude to Aarna's tokenized DeFi yield vaults on Ethereum and Base. Exposes 19 tools covering vault discovery, real-time NAV/TVL/APY queries, deposit/withdraw/stake transaction builders, and portfolio tracking across user positions. Handles both instant and queued withdrawal flows, pausing status checks, and historical performance data. Runs as a hosted streamable HTTP endpoint requiring an API key (request at dev@aarnalab.dev). Useful when you need to query vault metrics, construct on-chain transactions for vault operations, or track DeFi positions without writing contract integration code yourself. Includes a TypeScript SDK and self-hosting option via Docker if you want to run it locally.
Public tool metadata for what this MCP can expose to an agent.
list_vaultsList all available ATV vaults. Returns vault metadata including address, chain, withdraw type, contract type, and supported deposit tokens with balances.2 paramsList all available ATV vaults. Returns vault metadata including address, chain, withdraw type, contract type, and supported deposit tokens with balances.
chainstringuserAddressstringget_vaultGet metadata for a specific ATV vault by its contract address.2 paramsGet metadata for a specific ATV vault by its contract address.
addressstringuserAddressstringget_vault_navGet the current Net Asset Value (NAV) of an ATV vault in USD.1 paramsGet the current Net Asset Value (NAV) of an ATV vault in USD.
addressstringget_vault_tvlGet the current Total Value Locked (TVL) of an ATV vault in USD.1 paramsGet the current Total Value Locked (TVL) of an ATV vault in USD.
addressstringget_vault_apyGet the current APY breakdown (base + reward + total) for an ATV vault.1 paramsGet the current APY breakdown (base + reward + total) for an ATV vault.
addressstringbuild_deposit_txBuild the transaction steps required to deposit tokens into an ATV vault. Returns an ordered array of transactions (approve then deposit) that must be sent in order.4 paramsBuild the transaction steps required to deposit tokens into an ATV vault. Returns an ordered array of transactions (approve then deposit) that must be sent in order.
userAddressstringvaultAddressstringdepositAmountstringdepositTokenAddressstringbuild_withdraw_txBuild the transaction steps required to withdraw vault shares from an ATV vault and receive an output token.6 paramsBuild the transaction steps required to withdraw vault shares from an ATV vault and receive an output token.
simulatestringslippagestringuserAddressstringvaultAddressstringoTokenAddressstringsharesToWithdrawstringget_deposit_statusCheck whether deposits are currently paused on an ATV vault. Use this before building a deposit transaction to avoid sending a doomed tx.1 paramsCheck whether deposits are currently paused on an ATV vault. Use this before building a deposit transaction to avoid sending a doomed tx.
addressstringget_withdraw_statusCheck whether withdrawals are currently paused on an ATV vault. Use this before building a withdraw transaction.1 paramsCheck whether withdrawals are currently paused on an ATV vault. Use this before building a withdraw transaction.
addressstringget_queue_withdraw_statusCheck whether queued (delayed) withdrawals are currently paused on an ATV vault.1 paramsCheck whether queued (delayed) withdrawals are currently paused on an ATV vault.
addressstringbuild_stake_txBuild the transaction steps to stake vault tokens into a timelock contract for boosted rewards. Returns an approve step (if needed) and a stake step.4 paramsBuild the transaction steps to stake vault tokens into a timelock contract for boosted rewards. Returns an approve step (if needed) and a stake step.
stakeAmountstringuserAddressstringvaultAddressstringlockPeriodIndexstringbuild_unstake_txBuild the transaction step to unstake vault tokens from a timelock contract.4 paramsBuild the transaction step to unstake vault tokens from a timelock contract.
stakeIndexstringuserAddressstringvaultAddressstringunstakeAmountstringbuild_queue_withdraw_txBuild the transaction step to initiate a queued (delayed) withdrawal from an ATV vault. The withdrawal is not instant — it must be redeemed later once processed.4 paramsBuild the transaction step to initiate a queued (delayed) withdrawal from an ATV vault. The withdrawal is not instant — it must be redeemed later once processed.
userAddressstringvaultAddressstringtokensToWithdrawstringwithdrawTokenAddressstringbuild_unqueue_withdraw_txBuild the transaction step to cancel a pending queued withdrawal request from an ATV vault.4 paramsBuild the transaction step to cancel a pending queued withdrawal request from an ATV vault.
requestIdstringuserAddressstringvaultAddressstringoTokenAddressstringbuild_redeem_withdraw_txBuild the transaction step to claim (redeem) a completed queued withdrawal from an ATV vault.4 paramsBuild the transaction step to claim (redeem) a completed queued withdrawal from an ATV vault.
oTokensstringuserAddressstringbatchCounterstringvaultAddressstringget_vault_balanceGet the underlying token breakdown and balance data for an ATV vault from the Aarna engine database.1 paramsGet the underlying token breakdown and balance data for an ATV vault from the Aarna engine database.
addressstringget_historical_navGet historical NAV (Net Asset Value) data points for an ATV vault over a specified number of days. Useful for charting price trends.2 paramsGet historical NAV (Net Asset Value) data points for an ATV vault over a specified number of days. Useful for charting price trends.
daysstringaddressstringget_total_tvlGet the total TVL (Total Value Locked) across all ATV vaults, or for a specific vault, from the Aarna engine database.1 paramsGet the total TVL (Total Value Locked) across all ATV vaults, or for a specific vault, from the Aarna engine database.
addressstringget_user_investmentsGet a user's investment portfolio and position data across ATV vaults. Optionally filter to a specific vault.2 paramsGet a user's investment portfolio and position data across ATV vaults. Optionally filter to a specific vault.
userAddressstringvaultAddressstringAI-native access to Aarna's tokenized yield vaults on Ethereum and Base. 20 tools for vault discovery, performance metrics, transaction building, and portfolio tracking.
API Base URL: https://atv-api.aarna.ai
MCP Endpoint: https://atv-api.aarna.ai/mcp (Streamable HTTP)
API Docs: https://atv-api.aarna.ai/docs
The hosted API at https://atv-api.aarna.ai is available to anyone with a valid API key. All requests require an x-api-key header.
To get an API key, reach out to us at dev@aarnalab.dev.
Once you have your API key, add the config to your client:
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"atv": {
"url": "https://atv-api.aarna.ai/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
claude mcp add atv --transport http https://atv-api.aarna.ai/mcp --header "x-api-key: YOUR_API_KEY"
Create .cursor/mcp.json in your project root:
{
"mcpServers": {
"atv": {
"url": "https://atv-api.aarna.ai/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
Add to .vscode/settings.json:
{
"mcp": {
"servers": {
"atv": {
"url": "https://atv-api.aarna.ai/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
}
{
"mcpServers": {
"atv": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://atv-api.aarna.ai/mcp", "--header", "x-api-key:YOUR_API_KEY"]
}
}
}
| Tool | Description |
|---|---|
list_vaults | List all vaults, optionally filter by chain |
get_vault | Get metadata for a specific vault by address |
| Tool | Description |
|---|---|
get_vault_nav | Current NAV (Net Asset Value) in USD |
get_vault_tvl | Current TVL (Total Value Locked) in USD |
get_vault_apy | APY breakdown: base + reward + total |
| Tool | Description |
|---|---|
get_deposit_status | Whether deposits are paused |
get_withdraw_status | Whether withdrawals are paused |
get_queue_withdraw_status | Whether queued withdrawals are paused |
| Tool | Description |
|---|---|
build_deposit_tx | Build approve + deposit transaction steps |
build_withdraw_tx | Build withdrawal transaction steps |
build_stake_tx | Build approve + stake steps (timelock vaults) |
build_unstake_tx | Build unstake step (timelock vaults) |
| Tool | Description |
|---|---|
build_queue_withdraw_tx | Initiate a queued withdrawal |
build_unqueue_withdraw_tx | Cancel a pending queued withdrawal |
build_redeem_withdraw_tx | Claim a completed queued withdrawal |
| Tool | Description |
|---|---|
get_vault_portfolio | Underlying token portfolio |
get_historical_nav | NAV data points over a period (7, 30, 60, 360, max) |
get_historical_tvl | TVL data points over a period (7, 30, 60, 360, max) |
get_total_tvl | Platform-wide or per-vault TVL |
get_user_investments | User portfolio and positions |
All endpoints require x-api-key header and are prefixed with /v1.
| Method | Path | Description |
|---|---|---|
| GET | /v1/vaults | List all available vaults |
| GET | /v1/vaults/tvl | Platform-wide TVL |
| GET | /v1/vaults/:address | Vault metadata |
| GET | /v1/vaults/:address/nav | NAV price |
| GET | /v1/vaults/:address/tvl | Vault TVL |
| GET | /v1/vaults/:address/apy | APY breakdown |
| GET | /v1/vaults/:address/deposit-status | Deposit pause status |
| GET | /v1/vaults/:address/withdraw-status | Withdraw pause status |
| GET | /v1/vaults/:address/queue-withdraw-status | Queue-withdraw pause status |
| GET | /v1/vaults/:address/portfolio | Token portfolio |
| GET | /v1/vaults/:address/historical-nav | Historical NAV (days: 7,30,60,360,max) |
| GET | /v1/vaults/:address/historical-tvl | Historical TVL (days: 7,30,60,360,max) |
| Method | Path | Description |
|---|---|---|
| GET | /v1/deposit-tx | Build deposit calldata |
| GET | /v1/withdraw-tx | Build withdraw calldata |
| GET | /v1/stake-tx | Build stake calldata |
| GET | /v1/unstake-tx | Build unstake calldata |
| GET | /v1/queue-withdraw-tx | Build queue-withdraw calldata |
| GET | /v1/unqueue-withdraw-tx | Build unqueue-withdraw calldata |
| GET | /v1/redeem-withdraw-tx | Build redeem-withdraw calldata |
| Method | Path | Description |
|---|---|---|
| GET | /v1/user-investments | User portfolio data |
| ALL | /mcp | MCP server (Streamable HTTP) |
| Method | Path | Description |
|---|---|---|
| GET | /health | Health check |
| GET | /openapi.json | OpenAPI 3.1 spec |
| GET | /docs | Interactive API reference |
| GET | /llms.txt | LLM-friendly documentation (llms.txt spec) |
| GET | /.well-known/agent.json | A2A agent card |
import { AtvClient } from '@atv/sdk';
const client = new AtvClient({
apiKey: 'atv_...',
baseUrl: 'https://atv-api.aarna.ai',
});
const vaults = await client.vaults.list({ chain: 'base' });
const nav = await client.vaults.nav('0xVaultAddress');
docker build -t atv-api \
--build-arg AWS_ACCESS_KEY_ID=... \
--build-arg AWS_SECRET_ACCESS_KEY=... \
--build-arg AWS_DEFAULT_REGION=us-east-1 .
docker run -p 3000:3000 atv-api
Required environment variables (set in AWS Secrets Manager under atv-sdk):
DATABASE_URL — PostgreSQL connection stringREDIS_URL — Redis host:portRPC_URL_ETHEREUM — Ethereum JSON-RPC endpointRPC_URL_BASE — Base JSON-RPC endpointSTRAPI_URL — CMS URLSTRAPI_API_TOKEN — CMS API tokenENGINE_BASE_URL — Aarna engine APIpnpm install
cp .env.example apps/api/.env
# Fill in environment variables
pnpm migrate
pnpm dev
API: http://localhost:3000 | Docs: http://localhost:3000/docs
atv-sdk/
├── apps/api/ # Express API server + MCP server
├── packages/sdk/ # TypeScript SDK (@atv/sdk)
├── packages/mcp-server/ # npm connector package (@aarna-ai/mcp-server-atv)
├── server.json # MCP registry manifest
└── docs/ # Guides
pnpm build
# API: apps/api/dist/
# SDK: packages/sdk/dist/ (CJS + ESM)
See docs/customer-onboarding.md for how to generate API keys, manage tiers, revoke access, and run admin queries.
MIT — see LICENSE.
ATV_API_KEY*secretAPI key for authenticating with the ATV API
io.github.shelvick/shopify-subscription-reconciliation
zleventer/google-ads-mcp
csoai-org/meok-stripe-acp-checkout-mcp
io.github.mharnett/google-ads
csoai-org/stripe-billing-mcp
co.pipeboard/google-ads-mcp