Skip to main content
Glama
AdamikHQ

Adamik MCP Server

Official

readMeFirst

Learn how to use this MCP server's blockchain tools by consulting the initial guide before accessing transaction management, account insights, or token interaction features.

Instructions

Get information about how this tool is supposed to be used. Use this tool first before any other tool from this MCP server

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Inline anonymous handler function for the readMeFirst tool. Returns a structured content response with detailed text explaining the MCP server's usage, tool categories, critical decimal handling instructions with examples, user presentation guidelines, and address requirements.
    async () => {
      return {
        content: [
          {
            type: "text",
            text: [
              "This MCP server allows any LLM to perform operations on over 60 blockchain networks. For read operations,",
              "this server is enough. But for operation that require wallet connection, submitting transactions, this tool should work in",
              "conjunction with the adamik-signer-mcp-server. That tool will handle wallet connection and signing.",
              "\n\n",
              "## TOOL CATEGORIES:",
              "\n",
              "**OPERATIONAL TOOLS** (for executing blockchain actions):",
              "• getSupportedChains, listFeatures - Chain capabilities",
              "• getAccountState, getAccountHistory - Account data",
              "• getTokenDetails, getChainValidators - Network information",
              "• deriveAddress - Address generation",
              "• encodeTransaction, broadcastTransaction - Transaction lifecycle",
              "• getTransactionDetails - Transaction status",
              "\n",
              "**SPECIFICATION TOOL** (for understanding API requirements):",
              "• getApiSpecification - Complete API reference for exact schemas, formats, and validation rules",
              "\n",
              "**When to use each:**",
              "- Use OPERATIONAL tools when users want current data or to execute actions",
              "- Use getApiSpecification when you need to understand correct formats, troubleshoot errors, or provide guidance",
              "\n\n",
              "## CRITICAL: DECIMAL HANDLING - READ THIS CAREFULLY",
              "\n",
              "COMMON ERROR: Raw amounts are in SMALLEST UNITS, NOT human-readable values!",
              "\n",
              "All balance amounts from getAccountState() are returned in SMALLEST UNITS (wei, satoshis, µATOM, etc.).",
              "You MUST convert them before showing to users. NEVER show raw amounts directly!",
              "\n",
              "**MANDATORY CONVERSION PROCESS:**",
              "\n",
              "**For NATIVE CURRENCY balances:**",
              "1. ALWAYS call listFeatures(chainId) FIRST to get the exact native currency decimals - NEVER assume decimals!",
              "2. Call getAccountState(chainId, accountId) to get raw balances",
              "3. Convert: human_readable = raw_amount ÷ 10^decimals (using the decimals from step 1)",
              "4. Format properly with appropriate decimal places",
              "\n",
              "**For TOKEN balances:**",
              "1. Call getAccountState(chainId, accountId) to get raw token balances and token IDs",
              "2. ALWAYS call getTokenDetails(chainId, tokenId) for EACH token to get its exact decimals - NEVER assume!",
              "3. Convert each token: human_readable = raw_amount ÷ 10^token_decimals (using decimals from step 2)",
              "\n",
              "CRITICAL: NEVER guess or assume decimal values! Different networks use different decimals:",
              "• ATOM = 6 decimals, ETH = 18 decimals, BTC = 8 decimals, USDC = 6 decimals, etc.",
              "• Always get the exact value from the API endpoints above!",
              "\n",
              "**SPECIFIC EXAMPLES TO PREVENT ERRORS:**",
              "\n",
              "• ATOM (Cosmos): Raw '4191769000', decimals=6 → 4191769000 ÷ 10^6 = 4.191769 ATOM",
              "  WRONG: '4,191.769 ATOM' CORRECT: '4.191769 ATOM'",
              "\n",
              "• ETH (Ethereum): Raw '5354656887913579', decimals=18 → 5354656887913579 ÷ 10^18 = 0.005354656887913579 ETH",
              "  WRONG: '5,354.656887913579 ETH' CORRECT: '0.0054 ETH'",
              "\n",
              "• BTC (Bitcoin): Raw '100000000', decimals=8 → 100000000 ÷ 10^8 = 1.0 BTC",
              "  WRONG: '100.000000 BTC' CORRECT: '1.0 BTC'",
              "\n",
              "• USDC (Token): Raw '2245100', call getTokenDetails() → decimals=6 → 2245100 ÷ 10^6 = 2.2451 USDC",
              "\n\n",
              "## USER PRESENTATION GUIDELINES",
              "\n",
              "**ALWAYS present balances to end users in human-readable format (ETH, BTC, USDC, ATOM, etc.), NOT in smallest units.**",
              "\n",
              "**DECIMAL PLACE FORMATTING:**",
              "• For large amounts: Show reasonable precision (e.g., '1,234.56 ETH', not '1234.567890123456789 ETH')",
              "• For small amounts: Show enough precision to be meaningful (e.g., '0.000123 BTC', not '0.0001 BTC')",
              "• Remove unnecessary trailing zeros for cleaner display",
              "\n",
              "**Only show smallest units (wei, satoshis, µATOM, etc.) in these specific cases:**",
              "• Troubleshooting/debugging API issues",
              "• Very low balances where human-readable shows 0.000000... (dust amounts)",
              "• Technical discussions about transaction fees/gas",
              "• When user explicitly requests raw blockchain values",
              "• API integration debugging",
              "\n",
              "**Example presentations:**",
              "GOOD: 'Your ATOM balance is 4.191769 ATOM'",
              "BAD: 'Your ATOM balance is 4191769000 µATOM'",
              "BAD: 'Your ATOM balance is 4,191.769 ATOM' (incorrect decimal placement)",
              "\n",
              "GOOD: 'Your ETH balance is 0.0054 ETH'",
              "BAD: 'Your ETH balance is 5354656887913579 wei'",
              "\n\n",
              "## ADDRESS REQUIREMENTS",
              "\n",
              "IMPORTANT: Many operations require blockchain addresses. If you need to check account balances, transaction history,",
              "or perform other account-specific operations, you have two options:",
              "\n",
              "1. Provide a specific blockchain address (e.g., 0x1234... for Ethereum, bc1... for Bitcoin, cosmos1... for Cosmos)",
              "2. Connect to the adamik-signer-mcp-server first to access wallet addresses",
              "\n",
              "If the user hasn't provided an address in their request, please ask them to provide one or connect their wallet.",
            ].join(" "),
          },
        ],
      };
    }
  • src/module.ts:112-221 (registration)
    Registration of the readMeFirst tool using server.tool(). Includes tool name, description encouraging first use, empty input schema {}, and the inline handler function.
    server.tool(
      "readMeFirst",
      [
        "Get information about how this tool is supposed to be used. Use this tool first before any other tool from this",
        "MCP server",
      ].join(" "),
      {},
      async () => {
        return {
          content: [
            {
              type: "text",
              text: [
                "This MCP server allows any LLM to perform operations on over 60 blockchain networks. For read operations,",
                "this server is enough. But for operation that require wallet connection, submitting transactions, this tool should work in",
                "conjunction with the adamik-signer-mcp-server. That tool will handle wallet connection and signing.",
                "\n\n",
                "## TOOL CATEGORIES:",
                "\n",
                "**OPERATIONAL TOOLS** (for executing blockchain actions):",
                "• getSupportedChains, listFeatures - Chain capabilities",
                "• getAccountState, getAccountHistory - Account data",
                "• getTokenDetails, getChainValidators - Network information",
                "• deriveAddress - Address generation",
                "• encodeTransaction, broadcastTransaction - Transaction lifecycle",
                "• getTransactionDetails - Transaction status",
                "\n",
                "**SPECIFICATION TOOL** (for understanding API requirements):",
                "• getApiSpecification - Complete API reference for exact schemas, formats, and validation rules",
                "\n",
                "**When to use each:**",
                "- Use OPERATIONAL tools when users want current data or to execute actions",
                "- Use getApiSpecification when you need to understand correct formats, troubleshoot errors, or provide guidance",
                "\n\n",
                "## CRITICAL: DECIMAL HANDLING - READ THIS CAREFULLY",
                "\n",
                "COMMON ERROR: Raw amounts are in SMALLEST UNITS, NOT human-readable values!",
                "\n",
                "All balance amounts from getAccountState() are returned in SMALLEST UNITS (wei, satoshis, µATOM, etc.).",
                "You MUST convert them before showing to users. NEVER show raw amounts directly!",
                "\n",
                "**MANDATORY CONVERSION PROCESS:**",
                "\n",
                "**For NATIVE CURRENCY balances:**",
                "1. ALWAYS call listFeatures(chainId) FIRST to get the exact native currency decimals - NEVER assume decimals!",
                "2. Call getAccountState(chainId, accountId) to get raw balances",
                "3. Convert: human_readable = raw_amount ÷ 10^decimals (using the decimals from step 1)",
                "4. Format properly with appropriate decimal places",
                "\n",
                "**For TOKEN balances:**",
                "1. Call getAccountState(chainId, accountId) to get raw token balances and token IDs",
                "2. ALWAYS call getTokenDetails(chainId, tokenId) for EACH token to get its exact decimals - NEVER assume!",
                "3. Convert each token: human_readable = raw_amount ÷ 10^token_decimals (using decimals from step 2)",
                "\n",
                "CRITICAL: NEVER guess or assume decimal values! Different networks use different decimals:",
                "• ATOM = 6 decimals, ETH = 18 decimals, BTC = 8 decimals, USDC = 6 decimals, etc.",
                "• Always get the exact value from the API endpoints above!",
                "\n",
                "**SPECIFIC EXAMPLES TO PREVENT ERRORS:**",
                "\n",
                "• ATOM (Cosmos): Raw '4191769000', decimals=6 → 4191769000 ÷ 10^6 = 4.191769 ATOM",
                "  WRONG: '4,191.769 ATOM' CORRECT: '4.191769 ATOM'",
                "\n",
                "• ETH (Ethereum): Raw '5354656887913579', decimals=18 → 5354656887913579 ÷ 10^18 = 0.005354656887913579 ETH",
                "  WRONG: '5,354.656887913579 ETH' CORRECT: '0.0054 ETH'",
                "\n",
                "• BTC (Bitcoin): Raw '100000000', decimals=8 → 100000000 ÷ 10^8 = 1.0 BTC",
                "  WRONG: '100.000000 BTC' CORRECT: '1.0 BTC'",
                "\n",
                "• USDC (Token): Raw '2245100', call getTokenDetails() → decimals=6 → 2245100 ÷ 10^6 = 2.2451 USDC",
                "\n\n",
                "## USER PRESENTATION GUIDELINES",
                "\n",
                "**ALWAYS present balances to end users in human-readable format (ETH, BTC, USDC, ATOM, etc.), NOT in smallest units.**",
                "\n",
                "**DECIMAL PLACE FORMATTING:**",
                "• For large amounts: Show reasonable precision (e.g., '1,234.56 ETH', not '1234.567890123456789 ETH')",
                "• For small amounts: Show enough precision to be meaningful (e.g., '0.000123 BTC', not '0.0001 BTC')",
                "• Remove unnecessary trailing zeros for cleaner display",
                "\n",
                "**Only show smallest units (wei, satoshis, µATOM, etc.) in these specific cases:**",
                "• Troubleshooting/debugging API issues",
                "• Very low balances where human-readable shows 0.000000... (dust amounts)",
                "• Technical discussions about transaction fees/gas",
                "• When user explicitly requests raw blockchain values",
                "• API integration debugging",
                "\n",
                "**Example presentations:**",
                "GOOD: 'Your ATOM balance is 4.191769 ATOM'",
                "BAD: 'Your ATOM balance is 4191769000 µATOM'",
                "BAD: 'Your ATOM balance is 4,191.769 ATOM' (incorrect decimal placement)",
                "\n",
                "GOOD: 'Your ETH balance is 0.0054 ETH'",
                "BAD: 'Your ETH balance is 5354656887913579 wei'",
                "\n\n",
                "## ADDRESS REQUIREMENTS",
                "\n",
                "IMPORTANT: Many operations require blockchain addresses. If you need to check account balances, transaction history,",
                "or perform other account-specific operations, you have two options:",
                "\n",
                "1. Provide a specific blockchain address (e.g., 0x1234... for Ethereum, bc1... for Bitcoin, cosmos1... for Cosmos)",
                "2. Connect to the adamik-signer-mcp-server first to access wallet addresses",
                "\n",
                "If the user hasn't provided an address in their request, please ask them to provide one or connect their wallet.",
              ].join(" "),
            },
          ],
        };
      }
    );
  • Empty input schema object for the readMeFirst tool (no parameters required).
    {},
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the tool is for getting usage information and should be used first, but doesn't disclose behavioral traits like what format the information is in, whether it's cached, or if it requires authentication. The description adds some context but lacks depth on behavior.

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?

The description is two short sentences that are front-loaded and waste no words. The first sentence states the purpose, and the second provides critical usage guidance. Every sentence earns its place, making it highly concise and well-structured.

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

Completeness4/5

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

Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is reasonably complete. It explains the purpose and provides essential usage instructions. However, it could be more specific about what 'information' it returns, which would help the agent understand the output better, especially without an output schema.

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?

The tool has 0 parameters with 100% schema description coverage. The description doesn't need to add parameter semantics, and it doesn't attempt to. With no parameters, the baseline is 4, as there's nothing to compensate for and the description appropriately focuses on usage.

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: 'Get information about how this tool is supposed to be used.' It specifies a verb ('Get') and resource ('information'), though it doesn't distinguish from siblings beyond the 'use first' instruction. The purpose is clear but not highly specific about what information it provides.

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?

The description provides explicit usage guidance: 'Use this tool first before any other tool from this MCP server.' It clearly states when to use it (first) and implies when not to use it (after other tools). This is a strong directive that helps the agent prioritize this tool over all siblings.

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

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