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;
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, it doesn't address important behavioral aspects like whether this requires authentication, rate limits, error conditions, or what format the detailed information returns. The description mentions what information is included but not how it's structured or delivered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that packs substantial information about what the tool returns. It's appropriately sized for a simple lookup tool with one parameter, though it could potentially be more front-loaded with the core purpose before listing specific data points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with one parameter and no output schema, the description provides reasonable coverage of what information is returned. However, without annotations or output schema, it lacks important context about behavioral characteristics, error handling, and response format that would be needed for optimal agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% with the single parameter 'curatorId' documented as 'Curator ID'. The description adds no additional parameter semantics beyond what's already in the schema. The baseline score of 3 reflects adequate but minimal value added by the description regarding parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get detailed information') and resource ('vault curator'), with specific details about what information is included (managed vaults, TVL, chain distribution, performance). However, it doesn't explicitly differentiate from sibling tools like 'get_vault' or 'get_protocol_info' which might provide related but different information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_vault', 'get_protocol_info', and 'search_vaults' available, there's no indication of when this specific curator-focused tool is appropriate versus those other options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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