内容
# DefiLlama MCP 服务器
[](https://www.npmjs.com/package/@iqai/defillama-mcp)
[](https://opensource.org/licenses/ISC)
## 概述
DefiLlama MCP 服务器使 AI 代理能够与 [DefiLlama](https://defillama.com),一个综合的 DeFi 数据聚合器,进行交互。该服务器提供对 TVL 指标、DEX 交易量、协议统计数据、稳定币数据、代币价格、收益农场池、期权数据等 - 跨越 8 个服务组和 4 个上游主机的访问。
通过实施模型上下文协议(MCP),该服务器允许大型语言模型(LLM)通过 **代码模式** 接口查询 DeFi 数据:代理编写小型 JavaScript 程序,这些程序在沙盒 `isolated-vm` 环境中运行,针对预先连接的 `defillama.*` 客户端运行。四个可选的动态工具可用于结构化的端点发现和调度。
## 演示
来自 Claude 的服务器正在使用。代理使用 `search_docs` 查找正确的方法,编写一个小的 `execute` 沙盒程序,并仅将答案投射回边界。
**“哪个协议具有最高的 TVL 7 天变化?”** - 代理加载工具,调用 `search_docs` 查找如何读取变化指标,然后编写一个 `execute` 程序。它注意到原始领导者是一个数据伪影(一个协议的 TVL 从接近零跃升,读取为万亿百分之百的增益),并推理出有意义的答案:

然后它将字面答案(3Jane Lending)与有意义的答案(STRATO,协议中 TVL 足够高的 top gainer)区分开来:

**“TVL 高且 30 天 APY 的池”** - 一个 `execute` 调用获取收益池,按 TVL 排名,然后将 `apyMean30d` 格式化为表格:

## 要求
- Node.js >= 22(由 `isolated-vm` 6.x 要求,用于 `execute` 沙盒)。
- 已发布的二进制文件的 shebang 已经传递 `--no-node-snapshot` 给 node。如果你直接调用 `node dist/index.js`,请自己传递 `--no-node-snapshot`:`node --no-node-snapshot dist/index.js`。
- `isolated-vm` 在 `optionalDependencies` 中声明,因此 `pnpm install` 将在没有预编译插件或编译器工具链的平台上成功。但是,服务器仍然启动,`search_docs` 仍然有效;只有 `execute` 将报告加载失败错误,直到你运行 `pnpm rebuild isolated-vm`。
- `pnpm`(用于包管理和 `pnpm dlx` 调用)。
## 安装
### 使用 pnpm dlx(推荐)
要使用此服务器而无需全局安装:
```bash
pnpm dlx @iqai/defillama-mcp
```
### 从源代码构建
```bash
git clone https://github.com/IQAIcom/mcp-defillama.git
cd mcp-defillama
pnpm install
pnpm run build
```
## 使用 MCP 客户端运行
将以下配置添加到您的 MCP 客户端设置中(例如,`claude_desktop_config.json`)。
### 最小配置
```json
{
"mcpServers": {
"defillama": {
"command": "pnpm",
"args": ["dlx", "@iqai/defillama-mcp"],
"env": {}
}
}
}
```
### 高级配置(使用 IQ Gateway)
```json
{
"mcpServers": {
"defillama": {
"command": "pnpm",
"args": ["dlx", "@iqai/defillama-mcp"],
"env": {
"IQ_GATEWAY_URL": "your_iq_gateway_url",
"IQ_GATEWAY_KEY": "your_iq_gateway_key"
}
}
}
}
```
### 启用动态工具
使用 `--tools=dynamic`(或设置 `DEFILLAMA_MCP_TOOLS=dynamic`)启动,注册另外四个端点调度工具:
```json
{
"mcpServers": {
"defillama": {
"command": "pnpm",
"args": ["dlx", "@iqai/defillama-mcp", "--tools=dynamic"],
"env": {}
}
}
}
```
> **注意(Claude Desktop / 旧 MCP 客户端):** Claude Desktop 可能会从 `PATH` 中的 **旧 Node** 解析 `pnpm`/`node`,而服务器拒绝(需要 Node >= 22)。如果启动失败并出现 Node 版本错误,请参见下面的[故障排除](#故障排除)。
## 配置(环境变量)
所有环境变量都是可选的。DefiLlama 的公共 API 无需身份验证;API 密钥和网关设置适用于已付费访问或需要缓存的用户。
| 变量 | 必需 | 描述 | 默认值 |
| --- | --- | --- | --- |
| `DEFILLAMA_API_KEY` | 否 | DefiLlama API 密钥;作为 `x-api-key` 发送到直接调用。 | - |
| `IQ_GATEWAY_URL` | 否 | IQ Gateway 基本 URL。当与 `IQ_GATEWAY_KEY` 一起设置时,所有上游调用都通过网关代理(添加缓存)。 | - |
| `IQ_GATEWAY_KEY` | 否 | IQ Gateway API 密钥;发送到网关作为 `x-api-key`。 | - |
| `DEFILLAMA_MCP_TOOLS` | 否 | 设置为 `dynamic` 以注册另外四个端点调度工具。与传递 `--tools=dynamic` 等效。 | - |
## 故障排除
### `requires Node >= 22` / `ReferenceError: File is not defined`
服务器需要 **Node >= 22**(`execute` 沙盒使用 `isolated-vm` 6.x)。当通过 `pnpm dlx`/`npx` 启动时,包的 shebang 解析 `PATH` 中第一个 **Node** - 而像 Claude Desktop 这样的客户端通常继承 `PATH`,其中旧 Node(例如来自 `nvm`)是第一个。在该旧 Node 下,服务器现在立即退出,并出现:
```
[defillama-mcp] @iqai/defillama-mcp 需要 Node >= 22(运行 v18.17.1)。
```
(旧版本崩溃并出现神秘的 `ReferenceError: File is not defined` 错误。)
**修复 - 固定绝对 Node >= 22.** 使用 Node 22 工具链安装包,并直接指向该 Node 二进制文件和已安装的入口,绕过 `PATH`:
```bash
# 使用所需的 Node 22:
npm install -g @iqai/defillama-mcp@latest
npm root -g # 打印 <global>;入口是 <global>/@iqai/defillama-mcp/dist/index.js
which node # 绝对路径到您的 Node >= 22 二进制文件
```
```json
{
"mcpServers": {
"defillama": {
"command": "/absolute/path/to/node22/bin/node",
"args": [
"--no-node-snapshot",
"/absolute/path/to/global/node_modules/@iqai/defillama-mcp/dist/index.js"
],
"env": {}
}
}
}
```
添加 `"--tools=dynamic"` 作为 `args` 中的第三个条目以启用动态工具。
或者,保持 `pnpm dlx` 但强制 Node >= 22 到 `PATH` 前面通过服务器的 `env`:
```json
{
"mcpServers": {
"defillama": {
"command": "/absolute/path/to/node22/bin/pnpm",
"args": ["dlx", "@iqai/defillama-mcp@latest"],
"env": { "PATH": "/absolute/path/to/node22/bin:/usr/local/bin:/usr/bin:/bin" }
}
}
}
```
在 **Windows** 上,使用 `;` 路径分隔符和 Windows 样式路径在 `PATH` 覆盖(例如 `"PATH": "C:\\Program Files\\nodejs;C:\\Windows\\System32"`),并将 `command` 指向 `node.exe` / `pnpm.cmd`。
绝对路径方法推荐 - 它还避免每次启动的 `dlx` 获取。
## 架构
```
┌────────────────────────────────────────────────────────────────────────────┐
│ Claude Desktop / Cursor / 任意 MCP 客户端 │
└─────────────────────────────────┬──────────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌────────────────────────────────────────────────────────────────────────────┐
│ defillama-mcp 服务器 │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 默认工具 │ 动态工具(按需通过 --tools=…) │ │
│ │ ────────────────────── │ ────────────────────────────────── │ │
│ │ execute │ defillama_resolve │ │
│ │ search_docs │ list_endpoints │ │
│ │ │ get_endpoint_schema │ │
│ │ │ invoke_endpoint (带有 jq_filter) │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │ │
│ ┌─────────▼──────────────┐ ┌──────────▼──────────────┐ │
│ │ 隔离的 vm 沙盒 │ │ 直接调度 │ │
│ │ • 128 MiB 限制 │ │ • zod 模式验证 │ │
│ │ • 30 秒时钟限制 │ │ • 5 秒 / 6 秒超时 │ │
│ │ • 范围预算+插槽 │ │ • jq 投影 │ │
│ └────────────────────────┘ └─────────────────────────┘ │
│ └──────────────┬──────────────────┘ │
└───────────────────────────┼────────────────────────────────────────────────┘
│ HTTPS (可选 API 密钥或 IQ Gateway)
▼
┌──────────────────────────────────────────────┐
│ DefiLlama 上游(4 个主机) │
│ api.llama.fi coins.llama.fi │
│ stablecoins.llama.fi yields.llama.fi │
└──────────────────────────────────────────────┘
```
### `execute` 工作原理(一次调用的生命周期)
```mermaid
sequenceDiagram
participant Agent
participant Tool as execute (tool.ts)
participant Sandbox as runInSandbox (sandbox.ts)
participant Guest as Guest JS<br/>(V8 isolate)
participant Bridge as installServiceCall<br/>(client.ts)
participant DefiLlama as DefiLlama API
Agent->>Tool: tools/call execute {code}
Tool->>Tool: createExecutionScope()<br/>(budget=100, concurrency=10)
Tool->>Sandbox: runInSandbox(code, installClient)
Sandbox->>Sandbox: new Isolate({memoryLimit:128MB})
Sandbox->>Bridge: installDefillamaClient(ctx, scope)
Bridge-->>Guest: install defillama.protocol.*, defillama.price.*, resolveChain, ...
Sandbox->>Guest: script.run({timeout:30s})
Guest->>Bridge: await defillama.protocol.getChains({})
Bridge->>Bridge: tryReserveBudget<br/>acquireSlot<br/>safeParse(args)
Bridge->>DefiLlama: HTTPS (5 秒中止 + 6 秒 axios 超时)
DefiLlama-->>Bridge: JSON
Bridge-->>Guest: envelope {ok:true, data}
Guest-->>Sandbox: return projected result
Sandbox-->>Tool: {ok, result, log_lines, err_lines}
Tool->>Tool: cancelScope() in finally
Tool-->>Agent: MCP envelope
```
关键的洞察:**只有投影返回值跨越 V8 边界**。代理编写 JavaScript 进行循环、连接和过滤;主机看到一个返回值,而不是 N 个中间响应。
## 代码模式
查询 DefiLlama 的首选方式是 `execute` + `search_docs` 对。这两个工具通过作者编写的 JavaScript 处理整个工作流 - 发现、投影、多步骤组合。
### 默认工具表面
默认情况下,服务器注册恰好两个工具:
| 工具 | 目的 |
| --- | --- |
| `execute` | 在安全的 `isolated-vm` 沙盒中运行代理编写的 JavaScript,以配置的 DefiLlama 客户端。处理多步骤工作流、循环、连接、条件逻辑和自定义投影。 |
| `search_docs` | 搜索嵌入的 MiniSearch 索引,涵盖所有 DefiLlama API 方法和 cookbook 条目。 |
### `--tools=dynamic` 模式
使用 `--tools=dynamic`(或设置 `DEFILLAMA_MCP_TOOLS=dynamic`)启动服务器,注册另外四个工具:
| 工具 | 目的 |
| --- | --- |
| `defillama_resolve` | 将人类可读的名称解析为其 DefiLlama 标识符。 |
| `list_endpoints` | 列出所有可用的端点合格名称及其描述。 |
| `get_endpoint_schema` | 检查特定端点的参数和响应形状。 |
| `invoke_endpoint` | 调用具有可选 `jq_filter` 的单个端点以进行主机端投影。 |
**MCP 客户端配置动态工具:
```json
{
"mcpServers": {
"defillama": {
"command": "pnpm",
"args": ["dlx", "@iqai/defillama-mcp", "--tools=dynamic"],
"env": {}
}
}
}
```
或通过环境变量:
```json
{
"mcpServers": {
"defillama": {
"command": "pnpm",
"args": ["dlx", "@iqai/defillama-mcp"],
"env": {
"DEFILLAMA_MCP_TOOLS": "dynamic"
}
}
}
}
```
### `execute` - 沙盒 JavaScript
在安全的 `isolated-vm` 沙盒中运行任意 JavaScript。沙盒接收一个完全配置的 DefiLlama 客户端作为 `defillama`。所有八个服务组都可用。
定义 `async function run(defillama) { ... }`; JSON 可序列化返回值(以及 `console.log` 输出)被发送回。
**示例 - TVL 前 5 个协议:
```javascript
async function run(defillama) {
const protocols = await defillama.protocol.getProtocols();
return protocols
.sort((a, b) => (b.tvl ?? 0) - (a.tvl ?? 0))
.slice(0, 5)
.map(p => ({ name: p.name, tvl: p.tvl, chain: p.chain }));
}
```
**示例 - ETH 和 USDT 当前价格:
```javascript
async function run(defillama) {
return await defillama.price.getCurrentPrices({
coins: 'coingecko:ethereum,ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7'
});
}
```
### `defillama.*` 客户端组
`execute` 沙盒内的 `defillama` 客户端组分为四个组,映射了上游服务架构:
| 组 | 方法 | 上游主机 |
| --- | --- | --- |
| `defillama.protocol` | `getChains`, `getProtocols`, `getProtocol`, `getHistoricalChainTvl` | api.llama.fi |
| `defillama.dex` | `getDexSummary`, `getDexsOverview` | api.llama.fi |
| `defillama.fees` | `getFeesSummary`, `getFeesOverview` | api.llama.fi |
| `defillama.options` | `getOptionsSummary`, `getOptionsOverview` | api.llama.fi |
| `defillama.stablecoin` | `getStablecoins`, `getStablecoinChains`, `getStablecoinCharts`, `getStablecoinPrices` | stablecoins.llama.fi |
| `defillama.price` | `getCurrentPrices`, `getFirstPrices`, `getBatchHistorical`, `getHistoricalPrices`, `getPercentageChange`, `getPriceChart` | coins.llama.fi |
| `defillama.yield` | `getLatestPools`, `getHistoricalPoolData` | yields.llama.fi |
| `defillama.blockchain` | `getBlockAtTimestamp` | coins.llama.fi |
### 解析器
`execute` 内置三个解析器:
- **`resolveChain(input)`** - 将人类名称解析为 `{ name, slug }`。在 api 组中使用 `.name`(协议,dex,费用,选项)和在 coins 组中使用 `.slug`(价格,区块链)。
- **`resolveProtocol(input)`** - 将协议名称解析为 DefiLlama 斜线字符串(例如 `"lido"`)。
- **`resolveStablecoin(input)`** - 将稳定币名称或符号解析为数值 DefiLlama ID 字符串(例如 USDT 的 `"1"`)。
**示例:**
```javascript
async function run(defillama) {
const chain = await defillama.resolveChain('BSC');
// chain = { name: 'BSC', slug: 'bsc' }
const overview = await defillama.dex.getDexsOverview({ chain: chain.name });
return overview.protocols?.slice(0, 5).map(p => ({ name: p.name, volume: p.total24h }));
}
```
### 链名称与 slug 约定
DefiLlama 根据主机使用两种链拼写:
- **api.llama.fi 组** (`protocol`, `dex`, `fees`, `options`) 使用链 **显示名称** - 例如 `"Ethereum"`,`"BSC"`。
- **coins.llama.fi 调用** (`price`, `blockchain`) 使用小写 **slug** - 例如 `"ethereum"`,`"bsc"`。
`resolveChain(x)` 返回 `{ name, slug }`。始终对 api 组参数使用 `.name`,对 coins 组参数使用 `.slug`。
### 价格币格式 - `chain:address`
`price` 组识别代币为 `chain:address`,使用小写链 slug:
- `ethereum:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` - 以太坊上的 WETH
- `coingecko:ethereum` - 通过 CoinGecko ID 的原生 ETH(无需合约地址)
- `bsc:0x55d398326f99059ff775485246999027b3197955` - BSC 上的 USDT
多个代币用逗号分隔:
```javascript
await defillama.price.getCurrentPrices({
coins: 'coingecko:ethereum,ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7'
})
```
### `search_docs` - 本地文档搜索
搜索嵌入的 MiniSearch 索引,涵盖所有 DefiLlama API 方法和 cookbook 条目。在您不确定需要哪种方法或参数时使用它,或查找一个已有的示例。
**示例查询:** `top protocols tvl`
### 安全限制
`execute` 沙盒强制执行五个边界。默认调优适用于合法的工作流。
| 限制 | 默认值 | 重写 | 行为(命中时) |
| --- | --- | --- | --- |
| 隔离内存 | 128 MiB | 硬编码 | 隔离被终止;错误表现为脚本超时(V8 在某些路径上将 OOM 与超时混淆) |
| 脚本时钟 | 30 秒 | 内部(仅测试) | 返回 `"Execute timed out after 30s."` |
| 每次 `execute` 调用 | 100 | 内部(仅测试) | 随后的 guest 调用返回超出预算错误 |
| 并发调用 | 10 | 内部(仅测试) | 调用在一个信号量上排队;无错误,仅延迟 |
| 每个调用的上游 | 5 秒中止 + 6 秒 axios | 硬编码 | 返回 `"DefiLlama call timed out after 5s: <method>"` |
这些限制保护了 DefiLlama 的公共速率限制,该限制与任何用户凭证无关。
沙盒还会在提交时阻止源级标识符 `process.`、`require(`、`import(` 和 `eval(`,作为深度防御检查。
每 guest 调用都会强制执行模式验证:参数会根据方法的已发布模式进行 zod 解析,然后再传递给上游服务。无效参数会返回清晰的错误消息,而不是传播到 API。
## 架构
```
┌────────────────────────────────────────────────────────────────────────────┐
│ Claude Desktop / Cursor / 任意 MCP 客户端 │
└─────────────────────────────────┬──────────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌────────────────────────────────────────────────────────────────────────────┐
│ defillama-mcp 服务器 │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 默认工具 │ 动态工具(按需通过 --tools=…) │ │
│ │ ────────────────────── │ ────────────────────────────────── │ │
│ │ execute │ defillama_resolve │ │
│ │ search_docs │ list_endpoints │ │
│ │ │ get_endpoint_schema │ │
│ │ │ invoke_endpoint (带有 jq_filter) │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │ │
│ ┌─────────▼──────────────┐ ┌──────────▼──────────────┐ │
│ │ 隔离的 vm 沙盒 │ │ 直接调度 │ │
│ │ • 128 MiB 限制 │ │ • zod 模式验证 │ │
│ │ • 30 秒时钟限制 │ │ • 5 秒 / 6 秒超时 │ │
│ │ • 范围预算+插槽 │ │ • jq 投影 │ │
│ └────────────────────────┘ └─────────────────────────┘ │
│ └──────────────┬──────────────────┘ │
└───────────────────────────┼────────────────────────────────────────────────┘
│ HTTPS (可选 API 密钥或 IQ Gateway)
▼
┌──────────────────────────────────────────────┐
│ DefiLlama 上游(4 个主机) │
│ api.llama.fi coins.llama.fi │
│ stablecoins.llama.fi yields.llama.fi │
└──────────────────────────────────────────────┘
```
### `invoke_endpoint` 使用 `jq_filter`
`invoke_endpoint`(在 `--tools=dynamic` 模式下)接受一个可选的 `jq_filter`,它在响应**返回代理之前**进行投影——减少响应大小并跳过客户端解析。
```json
{
"name": "defillama.protocol.getChains",
"params": {},
"jq_filter": "[.[] | {name, tvl}] | sort_by(-.tvl) | .[0:5]"
}
```
常见模式:
| 目标 | jq 过滤器 |
| :--- | :--- |
| 投影一个字段 | `.name` |
| 从每个项目中选择 | `.[] \| {name, tvl}` |
| 过滤然后投影 | `[.[] \| select(.tvl > 1000000) \| .name]` |
| 聚合 | `[.[] \| .tvl] \| add` |
过滤器通过 [jqts](https://github.com/mwri/jqts)(纯 JS,无原生 `jq` 二进制文件)运行,因此它适用于每个平台。
### 错误信封
每个工具都返回 MCP 标准 `{ content: [{ type, text }], isError }` 信封。`text` 是 JSON,包含以下之一:
| 形状 | 您看到它的情况 |
| :--- | :--- |
| `{"ok": true, "result": ..., "log_lines": [], "err_lines": []}` | `execute` 成功;`result` 是 `run(defillama)` 返回的内容 |
| `{"ok": false, "error": "...", "log_lines": [], "err_lines": [...]}` | `execute` 失败;上面列出的规范消息 |
| `{"results": [...]}` | `search_docs` 命中的结果 |
| `{"resolved": {"name","slug"}}` (链)/ `{"resolved": "<slug-or-id>"}` (协议/稳定币)或 `{"resolved": null, "error": "..."}` | `defillama_resolve` |
| `{"endpoints": [...]}` | `list_endpoints` |
| `{"qualified", "description", "params", "response", "exampleCall"}` | `get_endpoint_schema` |
| 原始方法 JSON(或 jq 投影) | `invoke_endpoint` 成功 |
| `{"error": "..."}` | `invoke_endpoint` 失败 |
错误永远不会跨 VM 边界抛出——每个 guest 端的失败都表现为 `{ ok: false, error }` 信封。
### 从早期版本迁移
~19 端点特定的 `defillama_*` 工具已**删除**。对于多步骤工作流,请使用 `execute`,或使用 `--tools=dynamic` 启动每端点调度三元组:
- **`list_endpoints`** — 发现可用的端点及其合格名称。
- **`get_endpoint_schema`** — 检查特定端点的参数和响应形状。
- **`invoke_endpoint`** — 调用单个端点,带有可选的 `jq_filter` 进行主机侧投影。
`OPENROUTER_API_KEY`、`LLM_MODEL` 和 `GOOGLE_GENERATIVE_AI_API_KEY` 环境变量不再被识别。
## ADK 用法
`@iqai/defillama-mcp` 导出一个 ADK 兼容的帮助程序:
```typescript
import { getDefillamaTools } from "@iqai/defillama-mcp/dist/adk/index.js";
// 默认表面(execute + search_docs)— 2 工具
const tools = getDefillamaTools();
// 启用动态工具 — 6 工具
const allTools = getDefillamaTools({ dynamic: true });
```
`getDefillamaTools()` 返回 `@iqai/adk` 中的 `BaseTool[]`。这些工具包装了相同的 MCP 工具实现,可以放入任何 ADK 代理。
## 开发
### 构建项目
```bash
pnpm run build
```
### 开发模式(监视)
```bash
pnpm run watch
```
### linting 和格式化
```bash
pnpm run lint
pnpm run format
```
### 测试
```bash
pnpm test
```
### 发布管理
```bash
pnpm changeset # 创建发布说明
pnpm version-packages # 应用待处理的变化集
pnpm publish-packages # 构建和发布
```
## 项目结构
```
src/
├── index.ts # 服务器入口点(FastMCP 注册)
├── env.ts # 环境验证(dotenv + zod)
├── config.ts # 按组缓存 TTL
├── types.ts # 共享 TypeScript 类型
├── adk/index.ts # getDefillamaTools() ADK 适配器
├── services/ # DefiLlama API 客户端(每个域一个 *.service.ts)
│ └── base.service.ts # RequestOptions, IQ-Gateway + 直接获取
├── lib/
│ ├── entity-resolver.ts # resolveChain / resolveProtocol / resolveStablecoin
│ └── utils/ # 记录器,错误处理程序
├── mcp/
│ ├── tools.ts # defillama_resolve(动态模式)
│ ├── execute/ # 代码模式:沙箱 + 客户端 + 范围 + 工具
│ ├── search-docs/ # MiniSearch 索引 + 工具 + 食谱
│ ├── endpoints/ # list_endpoints / get_endpoint_schema / invoke_endpoint
│ ├── instructions/ # instructions.md → instructions.generated.ts
│ └── catalog/ # 工具元数据 + 响应模式(共享)
└── enums/chains.ts # 捆绑的链目录(实时获取失败时的回退)
scripts/
├── build-docs-index.ts # 预构建:工具元数据 + 食谱 → embedded-index.ts
└── build-instructions.ts # 预构建:instructions.md → instructions.generated.ts
tests/integration/ # 端到端测试(启动构建的服务器)
```
## 资源
- [DefiLlama API 文档](https://defillama.com/docs/api)
- [模型上下文协议(MCP)](https://modelcontextprotocol.io)
- [DefiLlama 平台](https://defillama.com)
- [IQ AI](https://iq.ai)
## 免责声明
该项目是一个非官方工具,与 DefiLlama 没有直接关联。它通过 DefiLlama 的公共 API 与 DeFi 协议数据交互。用户应谨慎并独立验证所有数据。DeFi 涉及风险。
## 许可证
[ISC](LICENSE)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器