Skip to main content
Glama
SoapyRED

FreightUtils MCP Server

get_subscribe_link

Read-onlyIdempotent

Get the subscription URL to upgrade to FreightUtils Pro for higher API limits and avoid rate limits.

Instructions

Get the URL where the user can subscribe to FreightUtils Pro for higher API limits.

Use this tool when:

  • The user asks how to upgrade or subscribe

  • The user hits a rate limit and asks how to get more requests

  • The user asks about pricing

Returns the subscription URL plus the tier/limit/price metadata. Agents must hand this URL to the user — DO NOT attempt to complete the subscription on the user's behalf.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tierNoTier to surface (only "pro" supported today)

Implementation Reference

  • src/server.ts:19-42 (registration)
    Tools are registered in a loop in server.ts. 'get_subscribe_link' is registered via the ALL_TOOLS array.
    for (const tool of ALL_TOOLS) {
      server.tool(
        tool.name,
        tool.description,
        tool.schema.shape,
        tool.annotations,
        async (args: Record<string, unknown>) => {
          try {
            const result = await tool.handler(args);
            return {
              content: [
                { type: 'text' as const, text: JSON.stringify(result, null, 2) },
              ],
            };
          } catch (err: unknown) {
            const message = err instanceof Error ? err.message : String(err);
            return {
              content: [{ type: 'text' as const, text: `Error: ${message}` }],
              isError: true,
            };
          }
        },
      );
    }
  • src/tools.ts:713-733 (registration)
    'getSubscribeLink' is included in the ALL_TOOLS array which is used by server.ts to register all tools.
    export const ALL_TOOLS: ToolDef[] = [
      cbmCalculator,
      chargeableWeightCalculator,
      ldmCalculator,
      adrLookup,
      adrExemptionCalculator,
      adrLqEqCheck,
      airlineLookup,
      containerLookup,
      hsCodeLookup,
      incotermsLookup,
      palletFittingCalculator,
      unitConverter,
      consignmentCalculator,
      unlocodeLookup,
      ukDutyCalculator,
      shipmentSummary,
      uldLookup,
      vehicleLookup,
      getSubscribeLink,
    ];
  • Full tool definition including the handler that returns a static subscription URL (no API call).
    const getSubscribeLink: ToolDef = {
      name: 'get_subscribe_link',
      description: `Get the URL where the user can subscribe to FreightUtils Pro for higher API limits.
    
    Use this tool when:
    - The user asks how to upgrade or subscribe
    - The user hits a rate limit and asks how to get more requests
    - The user asks about pricing
    
    Returns the subscription URL plus the tier/limit/price metadata. Agents must hand this URL to the user — DO NOT attempt to complete the subscription on the user's behalf.`,
    
      schema: z.object({
        tier: z.enum(['pro']).optional().describe('Tier to surface (only "pro" supported today)'),
      }).strict(),
    
      annotations: readOnlyAnnotations('FreightUtils Subscribe Link'),
    
      // Pure static response — no upstream API call. The pricing page is the
      // canonical surface for subscription; this tool just hands the URL back.
      handler: async () => ({
        url: 'https://www.freightutils.com/pricing',
        tier: 'pro',
        monthly_limit: 50000,
        monthly_price: '£19',
        currency: 'GBP',
        note: 'Open the URL in a browser to subscribe. Agents must not attempt to complete checkout themselves.',
      }),
    };
  • Zod schema defining the optional 'tier' input parameter (only 'pro' is supported).
    schema: z.object({
      tier: z.enum(['pro']).optional().describe('Tier to surface (only "pro" supported today)'),
    }).strict(),
  • Helper used by the tool to generate annotation metadata marking it as read-only and idempotent.
    const readOnlyAnnotations = (title: string): ToolAnnotationShape => ({
      title,
      readOnlyHint: true,
      destructiveHint: false,
      idempotentHint: true,
      openWorldHint: false,
    });
Behavior5/5

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

Annotations already indicate read-only, idempotent, non-destructive. Description adds critical behavioral guidance (DO NOT complete subscription) and states return value (URL plus metadata), exceeding annotation information.

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

Conciseness5/5

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

Very concise; purpose stated first, followed by usage conditions and a behavioral warning. No redundant sentences.

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

Completeness5/5

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

Despite no output schema, description explains the return value (URL and metadata) and covers all aspects: purpose, when to use, parameter, and agent behavior. Complete for this simple tool.

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 coverage is 100% and schema fully describes the tier parameter (enum with 'pro'). Description does not add any additional meaning beyond schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states it gets the subscription URL for FreightUtils Pro, with specific verb and resource. It is distinct from all sibling tools which are calculation/lookup tools.

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

Usage Guidelines5/5

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

Explicitly lists three scenarios when to use (upgrade, rate limit, pricing) and instructs agents not to complete subscription on user's behalf, providing clear usage context.

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/SoapyRED/freightutils-mcp'

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