Skip to main content
Glama

get_curator_info

Retrieve detailed curator analytics including managed vaults, TVL, chain distribution, and performance metrics for DeFi risk assessment.

Instructions

Get detailed information about a vault curator including their managed vaults, TVL, chain distribution, and performance.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
curatorIdYesCurator ID

Implementation Reference

  • Main handler implementation for get_curator_info tool. Registers the tool with input schema (curatorId) and executes the async handler that fetches curator data via API and formats the response.
    export function registerGetCuratorInfo(server: McpServer) { server.tool( 'get_curator_info', 'Get detailed information about a vault curator including their managed vaults, TVL, chain distribution, and performance.', { curatorId: z.string().describe('Curator ID'), }, async (params) => { const result = await apiGet<{ data: any }>(`/v1/curators/${params.curatorId}`); const text = formatCuratorInfo(result.data); return { content: [{ type: 'text' as const, text }] }; } );
  • Input schema definition using zod. Validates that curatorId is a required string parameter.
    { curatorId: z.string().describe('Curator ID'), },
  • src/server.ts:37-37 (registration)
    Registration of get_curator_info tool in the server initialization. Calls registerGetCuratorInfo to register the tool with the MCP server.
    registerGetCuratorInfo(server);
  • formatCuratorInfo helper function that formats the raw API response data into a human-readable markdown string with curator name, TVL, vault count, APR, chain distribution, and top vaults.
    export function formatCuratorInfo(data: any): string { const { curator, vaults, chainDistribution } = data; const sections = [ `## ${curator.name}`, curator.one_liner ? `\n${curator.one_liner}` : '', `\n**TVL:** $${formatNumber(curator.tvl_total)} | **Vaults:** ${curator.vault_count} | **Avg APR:** ${formatPercent(curator.avg_apr)}`, ].filter(Boolean); if (chainDistribution?.length) { sections.push('\n### Chain Distribution'); for (const c of chainDistribution) { sections.push(`- **${c.name}**: ${c.vault_count} vaults, $${formatNumber(c.tvl)} TVL`); } } if (vaults?.length) { sections.push(`\n### Top Vaults (${Math.min(vaults.length, 5)} of ${vaults.length})`); for (const v of vaults.slice(0, 5)) { sections.push( `- **${v.name}** (${v.chain_name || 'Unknown'}): $${formatNumber(v.tvl_usd)} TVL, ${formatPercent(v.apr_net)} APR, Score ${v.total_score ?? v.risk_score ?? 'N/A'}/10` ); } } return sections.join('\n'); }
  • apiGet helper function that makes HTTP GET requests to the Philidor API with proper error handling and JSON response parsing.
    export async function apiGet<T = any>(path: string): Promise<T> { const res = await fetch(`${API_BASE}${path}`, { headers: { Accept: 'application/json' }, }); if (!res.ok) { let message: string; try { const json = (await res.json()) as Record<string, any>; message = json?.error?.message || json?.message || JSON.stringify(json); } catch { message = res.statusText || `HTTP ${res.status}`; } throw new Error(`API ${res.status}: ${message}`); } const json = await res.json(); return json as T; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Philidor-Labs/philidor-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server