Skip to main content
Glama
solanaprox

solanaprox-mcp

by solanaprox

estimate_cost

Calculate AI request costs before execution to manage expenses. Estimates USD based on prompt length and model selection.

Instructions

Estimate the cost of an AI request before making it. Returns estimated USD cost based on prompt length and model.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
promptYesThe prompt to estimate cost for
modelNoModel to use for estimationclaude-sonnet-4-20250514
max_tokensNoExpected max tokens in response

Implementation Reference

  • The handler for the 'estimate_cost' tool - extracts arguments (prompt, model, max_tokens) and calls estimateCostFromPrompt to calculate the estimated cost, then returns a formatted response with the cost estimate.
    case "estimate_cost": {
      const { prompt, model, max_tokens } = args as any;
      const cost = estimateCostFromPrompt(
        prompt,
        model || "claude-sonnet-4-20250514",
        max_tokens || 1024
      );
    
      return {
        content: [
          {
            type: "text",
            text: [
              `💵 Cost Estimate`,
              `Model: ${model || "claude-sonnet-4-20250514"}`,
              `Prompt length: ~${Math.ceil(prompt.length / 4)} tokens`,
              `Max output: ${max_tokens || 1024} tokens`,
              `Estimated cost: ~$${cost.toFixed(6)} USDC`,
              ``,
              `Note: Cached responses get 50% discount`,
            ].join("\n"),
          },
        ],
      };
    }
  • The schema definition for the 'estimate_cost' tool - defines input parameters (prompt, model, max_tokens) with their types, descriptions, and defaults. Prompt is required.
    {
      name: "estimate_cost",
      description:
        "Estimate the cost of an AI request before making it. Returns estimated USD cost based on prompt length and model.",
      inputSchema: {
        type: "object",
        properties: {
          prompt: {
            type: "string",
            description: "The prompt to estimate cost for",
          },
          model: {
            type: "string",
            description: "Model to use for estimation",
            default: "claude-sonnet-4-20250514",
          },
          max_tokens: {
            type: "number",
            description: "Expected max tokens in response",
            default: 1024,
          },
        },
        required: ["prompt"],
      },
    },
  • The estimateCostFromPrompt helper function - estimates input tokens from prompt length (4 chars per token), assumes output tokens are half of max_tokens, and calls estimateCostFromTokens to calculate the final cost.
    function estimateCostFromPrompt(
      prompt: string,
      model: string,
      maxTokens: number
    ): number {
      // Rough estimate: 4 chars per token
      const estimatedInputTokens = Math.ceil(prompt.length / 4);
      const estimatedOutputTokens = maxTokens / 2; // assume half of max
      return estimateCostFromTokens(
        model,
        estimatedInputTokens,
        estimatedOutputTokens
      );
    }
  • The estimateCostFromTokens helper function - calculates USD cost based on per-million-token pricing for different models (Claude Sonnet, GPT-4 Turbo), with a 20% markup noted in comments.
    function estimateCostFromTokens(
      model: string,
      inputTokens: number,
      outputTokens: number
    ): number {
      // Pricing per 1M tokens (with 20% markup)
      const pricing: Record<string, { input: number; output: number }> = {
        "claude-sonnet-4-20250514": { input: 3.6, output: 18.0 },
        "claude-3-5-sonnet-20241022": { input: 3.6, output: 18.0 },
        "gpt-4-turbo": { input: 12.0, output: 36.0 },
      };
    
      const p = pricing[model] || { input: 3.6, output: 18.0 };
      return (inputTokens * p.input + outputTokens * p.output) / 1_000_000;
    }
  • src/index.ts:30-112 (registration)
    The tools array containing all tool definitions including 'estimate_cost', which is registered along with 'ask_ai', 'check_balance', and 'list_models'.
    const tools: Tool[] = [
      {
        name: "ask_ai",
        description:
          "Send a prompt to an AI model via SolanaProx. Costs are automatically deducted from your Solana wallet balance in USDC. Supports Claude and GPT-4 models. Use this for any AI inference task.",
        inputSchema: {
          type: "object",
          properties: {
            prompt: {
              type: "string",
              description: "The prompt or question to send to the AI model",
            },
            model: {
              type: "string",
              description:
                "AI model to use. Options: claude-sonnet-4-20250514 (default), gpt-4-turbo",
              default: "claude-sonnet-4-20250514",
            },
            max_tokens: {
              type: "number",
              description: "Maximum tokens in response (default: 1024, max: 4096)",
              default: 1024,
            },
            system: {
              type: "string",
              description: "Optional system prompt to set context for the AI",
            },
          },
          required: ["prompt"],
        },
      },
      {
        name: "check_balance",
        description:
          "Check your current SolanaProx balance. Returns available USDC and SOL balance that can be used for AI requests.",
        inputSchema: {
          type: "object",
          properties: {
            wallet: {
              type: "string",
              description:
                "Solana wallet address to check. Defaults to configured wallet.",
            },
          },
          required: [],
        },
      },
      {
        name: "estimate_cost",
        description:
          "Estimate the cost of an AI request before making it. Returns estimated USD cost based on prompt length and model.",
        inputSchema: {
          type: "object",
          properties: {
            prompt: {
              type: "string",
              description: "The prompt to estimate cost for",
            },
            model: {
              type: "string",
              description: "Model to use for estimation",
              default: "claude-sonnet-4-20250514",
            },
            max_tokens: {
              type: "number",
              description: "Expected max tokens in response",
              default: 1024,
            },
          },
          required: ["prompt"],
        },
      },
      {
        name: "list_models",
        description:
          "List all available AI models on SolanaProx with their pricing.",
        inputSchema: {
          type: "object",
          properties: {},
          required: [],
        },
      },
    ];
Behavior2/5

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

No annotations are provided, so the description carries full burden. While it states the tool returns 'estimated USD cost', it doesn't disclose important behavioral traits: whether this is a read-only operation (likely, but not stated), whether it requires authentication, rate limits, accuracy of estimates, or what happens with invalid inputs. For a cost estimation tool with zero annotation coverage, this is a significant gap.

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?

Two concise sentences that efficiently convey the core functionality. The first sentence states the purpose, the second specifies what it returns. No wasted words, though it could be slightly more structured by separating purpose from return value more clearly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a cost estimation tool. It doesn't explain the return format (beyond 'estimated USD cost'), error conditions, whether estimates are guaranteed, or how they're calculated. For a tool that could influence financial decisions, more context is needed about the estimation's reliability and limitations.

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?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds minimal value beyond the schema, mentioning 'prompt length and model' which aligns with the 'prompt' and 'model' parameters but doesn't provide additional semantic context. Baseline 3 is appropriate when schema does the heavy lifting.

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 tool's purpose: 'Estimate the cost of an AI request before making it' with specific verb ('estimate') and resource ('cost of an AI request'). It distinguishes from sibling tools like 'ask_ai' (executes request), 'check_balance' (checks account status), and 'list_models' (lists available models). However, it doesn't explicitly contrast with these siblings in the description text itself.

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

Usage Guidelines3/5

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

The description implies usage context ('before making it') suggesting this should be used prior to actual AI requests. However, it doesn't provide explicit guidance on when to use this vs. alternatives like 'ask_ai' (which presumably incurs actual cost) or 'check_balance' (which shows current balance). No exclusions or specific scenarios are mentioned.

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/solanaprox/mcp-server'

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