Skip to main content
Glama
timolein74

asterpay-mcp-server

ai_translate

Translate text to any language using AI. Supports all major languages with a cost of $0.02 USDC via x402.

Instructions

Translate text to any language using AI. Supports all major languages. Cost: $0.02 USDC via x402.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesThe text to translate
targetLanguageYesTarget language, e.g. 'Finnish', 'Spanish', 'Japanese'
sourceLanguageNoSource language (auto-detected if not specified)

Implementation Reference

  • The async handler function for ai_translate tool that calls the API endpoint with text, targetLanguage, and sourceLanguage parameters
    async ({ text, targetLanguage, sourceLanguage }) =>
      formatResponse(await callApi("POST", "/v1/ai/translate", { text, targetLanguage, sourceLanguage }))
  • The callApi helper function that executes the actual HTTP POST request to the /v1/ai/translate endpoint
    async function callApi(
      method: "GET" | "POST",
      path: string,
      body?: Record<string, unknown>
    ): Promise<{ status: number; data: unknown; paymentRequired?: unknown }> {
      const url = `${API_BASE}${path}`;
      const headers: Record<string, string> = { "Content-Type": "application/json" };
    
      const res = await fetch(url, {
        method,
        headers,
        ...(body ? { body: JSON.stringify(body) } : {}),
      });
    
      const data = await res.json();
    
      if (res.status === 402) {
        return {
          status: 402,
          data: null,
          paymentRequired: data,
        };
      }
    
      return { status: res.status, data };
    }
  • Zod schema definition for ai_translate tool inputs: text (required string), targetLanguage (required string), and sourceLanguage (optional string)
    {
      text: z.string().describe("The text to translate"),
      targetLanguage: z.string().describe("Target language, e.g. 'Finnish', 'Spanish', 'Japanese'"),
      sourceLanguage: z.string().optional().describe("Source language (auto-detected if not specified)"),
    },
  • MCP server tool registration for 'ai_translate' with description, schema, and handler
    server.tool(
      "ai_translate",
      "Translate text to any language using AI. Supports all major languages. Cost: $0.02 USDC via x402.",
      {
        text: z.string().describe("The text to translate"),
        targetLanguage: z.string().describe("Target language, e.g. 'Finnish', 'Spanish', 'Japanese'"),
        sourceLanguage: z.string().optional().describe("Source language (auto-detected if not specified)"),
      },
      async ({ text, targetLanguage, sourceLanguage }) =>
        formatResponse(await callApi("POST", "/v1/ai/translate", { text, targetLanguage, sourceLanguage }))
    );
  • formatResponse helper function that formats API responses for MCP tool output, including payment handling for 402 responses
    function formatResponse(result: { status: number; data: unknown; paymentRequired?: unknown }): {
      content: Array<{ type: "text"; text: string }>;
    } {
      if (result.status === 402) {
        const pr = result.paymentRequired as Record<string, unknown>;
        const accepts = (pr?.accepts as Array<Record<string, unknown>>)?.[0];
        const amount = accepts?.amount
          ? `${(parseInt(accepts.amount as string) / 1e6).toFixed(6)} USDC`
          : "unknown";
        const network = (accepts?.network as string) || "unknown";
    
        return {
          content: [
            {
              type: "text",
              text: [
                "Payment required to access this endpoint.",
                "",
                `Amount: ${amount}`,
                `Network: ${network}`,
                `Asset: USDC`,
                `Pay to: ${(accepts?.payTo as string) || "unknown"}`,
                "",
                "To use this endpoint, send an x402 payment via @x402/fetch or the AsterPay SDK.",
                "Install: npm install @x402/fetch",
                "",
                "Example:",
                "```",
                'import { wrapFetch } from "@x402/fetch";',
                'const fetchWithPay = wrapFetch(fetch, wallet);',
                `const res = await fetchWithPay("${API_BASE}${(pr?.resource as Record<string, unknown>)?.url || ""}");`,
                "```",
                "",
                "Docs: https://x402-api-production-ba87.up.railway.app/docs",
                "Discovery: https://x402-api-production-ba87.up.railway.app/discovery/resources",
              ].join("\n"),
            },
          ],
        };
      }
    
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(result.data, null, 2),
          },
        ],
      };
    }
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context beyond the schema: it reveals the tool uses AI, supports all major languages, and has a cost of $0.02 USDC via x402. However, it doesn't mention rate limits, error conditions, or what the output looks like (though there's no output schema), leaving gaps for a mutation tool.

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 appropriately sized with two sentences that each add value: the first states the core functionality, and the second adds cost and language support details. It's front-loaded with the main purpose. However, the cost detail could be more integrated, and there's minor room for tighter phrasing.

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?

Given the tool has no annotations and no output schema, the description is moderately complete. It covers the AI aspect, language support, and cost, but lacks details on output format, error handling, or usage constraints. For a 3-parameter tool with mutation implications (translation likely creates output), it should do more to compensate for missing structured data.

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 no additional parameter semantics beyond what's in the schema. It mentions 'any language' and 'all major languages' which loosely relates to targetLanguage but doesn't provide specific format or validation details. 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: 'Translate text to any language using AI.' It specifies the verb (translate) and resource (text), and distinguishes it from siblings like ai_sentiment or ai_summarize. However, it doesn't explicitly differentiate from other potential translation tools, which prevents a perfect score.

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. It mentions cost and supports all major languages, but doesn't specify scenarios, prerequisites, or exclusions. With siblings like ai_code_review and ai_summarize, there's no indication of when translation is preferred over other AI processing tools.

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

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