Skip to main content
Glama

list_supported_pairs

Retrieve all chain-qualified token pairs supported for RFQ/swap to verify market availability before creating a quote.

Instructions

List the chain-qualified token pairs Hashlock supports for RFQ/swap. Read-only, no auth side effects.

USE WHEN: before create_rfq if unsure a token/chain is supported, or to show the user available markets instead of guessing. DO NOT USE WHEN: you already know the pair is supported — this is discovery, not a precondition.

Each entry is SYMBOL/chain. Same symbol on different chains (e.g. SUI/sui vs SUI/sui-testnet) are distinct markets — pass baseChain/quoteChain explicitly to create_rfq.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • src/index.ts:234-248 (registration)
    Registration of 'list_supported_pairs' tool via server.tool(). Name + description + empty schema + handler.
    // ─── list_supported_pairs ────────────────────────────────────
    
    server.tool(
      'list_supported_pairs',
      [
        'List the chain-qualified token pairs Hashlock supports for RFQ/swap. Read-only, no auth side effects.',
        '',
        'USE WHEN: before create_rfq if unsure a token/chain is supported, or to show the user available markets instead of guessing.',
        'DO NOT USE WHEN: you already know the pair is supported — this is discovery, not a precondition.',
        '',
        'Each entry is SYMBOL/chain. Same symbol on different chains (e.g. SUI/sui vs SUI/sui-testnet) are distinct markets — pass baseChain/quoteChain explicitly to create_rfq.',
      ].join('\n'),
      {},
      wrapTool(async () => okContent({ pairs: SUPPORTED_PAIRS })),
    );
  • Handler function: wrapTool(async () => okContent({ pairs: SUPPORTED_PAIRS })). Wraps the logic in error-handling and returns the pairs data.
    // ─── list_supported_pairs ────────────────────────────────────
    
    server.tool(
      'list_supported_pairs',
      [
        'List the chain-qualified token pairs Hashlock supports for RFQ/swap. Read-only, no auth side effects.',
        '',
        'USE WHEN: before create_rfq if unsure a token/chain is supported, or to show the user available markets instead of guessing.',
        'DO NOT USE WHEN: you already know the pair is supported — this is discovery, not a precondition.',
        '',
        'Each entry is SYMBOL/chain. Same symbol on different chains (e.g. SUI/sui vs SUI/sui-testnet) are distinct markets — pass baseChain/quoteChain explicitly to create_rfq.',
      ].join('\n'),
      {},
      wrapTool(async () => okContent({ pairs: SUPPORTED_PAIRS })),
    );
  • SUPPORTED_PAIRS constant - the canonical data source listing all chain-qualified token pairs (ETH, BTC, USDC, USDT, WBTC, WETH, SUI on various chains).
    /** Canonical chain-qualified pairs. Single source of truth for the
     *  list_supported_pairs tool (and future use). The create_rfq description
     *  keeps its own prose copy intentionally — its pin tests assert that text. */
    export const SUPPORTED_PAIRS = [
      'ETH/sepolia', 'ETH/ethereum',
      'BTC/bitcoin-signet', 'BTC/bitcoin',
      'USDC/sepolia', 'USDC/ethereum',
      'USDT/ethereum', 'WBTC/ethereum', 'WETH/ethereum',
      'SUI/sui', 'SUI/sui-testnet',
    ] as const;
    
    export const SUPPORTED_PAIRS_LINE = SUPPORTED_PAIRS.join(', ') + '.';
  • okContent helper used by the handler to format the response as JSON text content.
    export function okContent(value: unknown): ToolContent {
      return { content: [{ type: 'text', text: JSON.stringify(value, null, 2) }] };
    }
  • wrapTool helper that wraps the handler with try/catch error handling.
    export function wrapTool<A extends unknown[]>(
      handler: (...args: A) => Promise<ToolContent>,
    ): (...args: A) => Promise<ToolContent> {
      return async (...args: A) => {
        try {
          return await handler(...args);
        } catch (err) {
          return toErrorEnvelope(err);
        }
      };
    }
Behavior4/5

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

Discloses read-only nature and no auth side effects. Explains that same symbol on different chains are distinct markets, which is a behavioral trait beyond basic description. No rate limits or pagination mentioned, but acceptable for a simple list with no parameters.

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?

Three paragraphs with clear front-loaded first sentence. Each sentence adds value, though could be slightly more concise by merging some lines. Overall well-structured.

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?

Complete context for a parameterless list tool: explains entry format (SYMBOL/chain), usage hints, and distinctions between chains. No output schema needed as purpose is clear.

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

Parameters4/5

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

No parameters in schema, so description does not need to add parameter info. Schema coverage is 100% (no params). Baseline 4 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 the tool lists chain-qualified token pairs supported for RFQ/swap. The use of specific verb 'list' and resource 'token pairs' sets a precise scope, distinguishing it from siblings like create_rfq or swap_quote.

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 provides when to use ('before create_rfq if unsure a token/chain is supported', 'to show available markets') and when not to use ('if already know the pair is supported'), including the rationale that this is for discovery, not a precondition.

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/Hashlock-Tech/hashlock-mcp'

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