Skip to main content
Glama
LamboPoewert

MadeOnSol — Solana memecoin intelligence

madeonsol_copytrade_list

Read-onlyIdempotent

List your copy-trade rules. Shows rule count and content based on your plan: 3 for PRO, 20 for ULTRA.

Instructions

List your copy-trade rules. PRO=3 rules, ULTRA=20 rules.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Handler function for the 'madeonsol_copytrade_list' tool. It calls restQuery with GET method to '/copytrade/subscriptions' to list all copy-trade rules.
    server.tool(
      "madeonsol_copytrade_list",
      "List your copy-trade rules. PRO=3 rules, ULTRA=20 rules.",
      {},
      { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
      async () => ({
        content: [{ type: "text" as const, text: await restQuery("GET", "/copytrade/subscriptions") }],
      })
    );
  • Schema for madeonsol_copytrade_list — no input parameters (empty object), it simply lists all copy-trade rules.
    {},
    { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
  • src/index.ts:678-686 (registration)
    Registration via server.tool() within the hasRestAuth conditional block (requires MADEONSOL_API_KEY) inside the registerTools function.
    server.tool(
      "madeonsol_copytrade_list",
      "List your copy-trade rules. PRO=3 rules, ULTRA=20 rules.",
      {},
      { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
      async () => ({
        content: [{ type: "text" as const, text: await restQuery("GET", "/copytrade/subscriptions") }],
      })
    );
  • restQuery helper function used by madeonsol_copytrade_list to make authenticated GET requests to the MadeOnSol REST API (requires MADEONSOL_API_KEY).
    async function restQuery(method: string, path: string, body?: unknown): Promise<string> {
      const headers: Record<string, string> = {
        "Content-Type": "application/json",
        ...apiKeyHeaders(),
      };
      const res = await fetch(`${BASE_URL}/api/v1${path}`, {
        method,
        headers,
        ...(body ? { body: JSON.stringify(body) } : {}),
      });
      if (!res.ok) {
        const text = await res.text().catch(() => "");
        return `Error ${res.status}: ${text}`;
      }
      return JSON.stringify(await res.json(), null, 2);
    }
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, so the description adds value by noting plan limits. No contradictions. The behavioral traits are well-covered.

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 a single concise sentence that immediately conveys the action and includes essential plan context. No wasted words, well front-loaded.

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 zero parameters and no output schema, the description provides sufficient context for a simple list tool. It includes plan limits for expected results. Could be slightly improved by stating that no input is required, but the schema already implies that.

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 input schema has zero parameters with 100% coverage. The description adds no parameter info, but none is needed. Baseline score of 4 applies for zero-parameter tools.

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?

The description clearly states it lists copy-trade rules and differentiates by mentioning plan limits (PRO=3, ULTRA=20). It distinguishes from sibling tools like madeonsol_copytrade_create and madeonsol_copytrade_get which are for creating or retrieving individual rules.

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

Usage Guidelines4/5

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

The description provides clear context by stating what the tool does and includes plan-specific limits, which helps in understanding expected output. However, it does not explicitly mention when not to use it or compare with other list tools, though the usage is straightforward.

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

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