Protocol Risk Monitor
query_protocol_riskQuery liquidation pressure and stress scores for DeFi lending protocols. Identifies critical/high-risk accounts and total debt at risk per protocol.
Instructions
Get liquidation pressure and stress scores for DeFi lending protocols. Shows critical/high-risk account counts, health factor deterioration rate, and total debt at risk per protocol. Covers Aave V3, Compound V3, Venus, Radiant, Morpho Blue, LlamaLend, ZeroLend, MakerDAO across 6 chains. Source: Liquidationbot real-time telemetry.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Time window for aggregation (default: 1h) | |
| network | No | Filter by blockchain network | |
| protocol | No | Filter by lending protocol | |
| limit | No | Maximum results (default 100) |
Implementation Reference
- src/tools/crypto.ts:78-108 (handler)The async handler function for query_protocol_risk. It calls apiGet to /api/v1/crypto/risk/protocols with optional window, network, protocol, and limit parameters, then formats the response as MCP text content.
async ({ window, network, protocol, limit }) => { const res = await apiGet<CryptoQueryResponse>( "/api/v1/crypto/risk/protocols", { window: window ?? "1h", network, protocol, limit: limit ?? 100, }, ); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { count, data } = res.data; const summary = `Found ${count} protocol risk record(s) for window=${window ?? "1h"}.`; const json = JSON.stringify(data, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, - src/tools/crypto.ts:39-76 (schema)Schema registration for query_protocol_risk including inputSchema with Zod definitions for window (enum 5m/1h/24h/7d), network (6 chains), protocol (8 protocols), and limit (1-100).
{ title: "Protocol Risk Monitor", description: "Get liquidation pressure and stress scores for DeFi lending protocols. " + "Shows critical/high-risk account counts, health factor deterioration rate, " + "and total debt at risk per protocol. Covers Aave V3, Compound V3, Venus, " + "Radiant, Morpho Blue, LlamaLend, ZeroLend, MakerDAO across 6 chains. " + "Source: Liquidationbot real-time telemetry.", inputSchema: { window: z .enum(["5m", "1h", "24h", "7d"]) .optional() .describe("Time window for aggregation (default: 1h)"), network: z .enum(["ethereum", "arbitrum", "polygon", "base", "bsc", "avalanche"]) .optional() .describe("Filter by blockchain network"), protocol: z .enum([ "aave_v3", "compound_v3", "venus", "radiant", "morpho_blue", "llamalend", "zerolend", "makerdao", ]) .optional() .describe("Filter by lending protocol"), limit: z .number() .int() .min(1) .max(100) .optional() .describe("Maximum results (default 100)"), }, - src/tools/crypto.ts:37-109 (registration)Registration of query_protocol_risk via server.registerTool() with name, metadata (title/description/inputSchema), and the async handler.
server.registerTool( "query_protocol_risk", { title: "Protocol Risk Monitor", description: "Get liquidation pressure and stress scores for DeFi lending protocols. " + "Shows critical/high-risk account counts, health factor deterioration rate, " + "and total debt at risk per protocol. Covers Aave V3, Compound V3, Venus, " + "Radiant, Morpho Blue, LlamaLend, ZeroLend, MakerDAO across 6 chains. " + "Source: Liquidationbot real-time telemetry.", inputSchema: { window: z .enum(["5m", "1h", "24h", "7d"]) .optional() .describe("Time window for aggregation (default: 1h)"), network: z .enum(["ethereum", "arbitrum", "polygon", "base", "bsc", "avalanche"]) .optional() .describe("Filter by blockchain network"), protocol: z .enum([ "aave_v3", "compound_v3", "venus", "radiant", "morpho_blue", "llamalend", "zerolend", "makerdao", ]) .optional() .describe("Filter by lending protocol"), limit: z .number() .int() .min(1) .max(100) .optional() .describe("Maximum results (default 100)"), }, }, async ({ window, network, protocol, limit }) => { const res = await apiGet<CryptoQueryResponse>( "/api/v1/crypto/risk/protocols", { window: window ?? "1h", network, protocol, limit: limit ?? 100, }, ); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { count, data } = res.data; const summary = `Found ${count} protocol risk record(s) for window=${window ?? "1h"}.`; const json = JSON.stringify(data, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, ); - src/index.ts:20-47 (registration)Import of registerCryptoTools from ./tools/crypto.js in the main entry point.
import { registerCryptoTools } from "./tools/crypto.js"; import { registerSanctionsTools } from "./tools/sanctions.js"; import { registerWhaleTools } from "./tools/whales.js"; import { registerLabelTools } from "./tools/labels.js"; import { registerHolderTools } from "./tools/holders.js"; import { registerDexTools } from "./tools/dex.js"; import { registerContractTools } from "./tools/contracts.js"; import { registerPmTools } from "./tools/pm.js"; import { registerPmArbTools } from "./tools/pm_arb.js"; import { registerPmResolutionTools } from "./tools/pm_resolution.js"; import { registerEconTools } from "./tools/econ.js"; import { registerPmMicroTools } from "./tools/pm_micro.js"; function createMcpServer() { const server = new McpServer({ name: "verilex-data", version: "0.3.3", }); registerNpiTools(server); registerSecTools(server); registerPacerTools(server); registerWeatherTools(server); registerOtcTools(server); registerTrademarkTools(server); registerPatentTools(server); registerCompanyTools(server); registerCryptoTools(server); - src/index.ts:47-61 (registration)Call to registerCryptoTools(server) in createMcpServer() which wires up the tool registration.
registerCryptoTools(server); registerSanctionsTools(server); registerWhaleTools(server); registerLabelTools(server); registerHolderTools(server); registerDexTools(server); registerContractTools(server); registerPmTools(server); registerPmArbTools(server); registerPmResolutionTools(server); registerEconTools(server); registerPmMicroTools(server); return server; }