Skip to main content
Glama
LamboPoewert

MadeOnSol — Solana memecoin intelligence

madeonsol_list_webhooks

Read-onlyIdempotent

View all registered webhooks including their delivery status and failure counts to monitor webhook health.

Instructions

List all your registered webhooks with delivery status and failure counts.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • src/index.ts:490-498 (registration)
    Tool registration via server.tool() call — registers 'madeonsol_list_webhooks' with the MCP server. No input schema required (empty object {}). Uses readOnly annotations. Delegates to the restQuery helper.
    server.tool(
      "madeonsol_list_webhooks",
      "List all your registered webhooks with delivery status and failure counts.",
      {},
      { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
      async () => ({
        content: [{ type: "text" as const, text: await restQuery("GET", "/webhooks") }],
      })
    );
  • Handler function for madeonsol_list_webhooks — an async arrow function that calls restQuery('GET', '/webhooks') to list all registered webhooks from the MadeOnSol API.
      async () => ({
        content: [{ type: "text" as const, text: await restQuery("GET", "/webhooks") }],
      })
    );
  • Schema definition — empty input schema (no parameters needed) for listing webhooks.
    "List all your registered webhooks with delivery status and failure counts.",
    {},
  • restQuery helper function — generic HTTP request helper used by the webhook tools. Takes method, path, and optional body, sends a fetch to BASE_URL/api/v1{path} with JSON headers and API key auth, returns the JSON response as a string.
    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);
    }
  • Guard condition: tool is only registered when hasRestAuth (authMode === 'madeonsol') is true, meaning it requires a MadeOnSol API key (Pro/Ultra tier).
    // ── Webhook & Streaming tools (require MadeOnSol API key — Pro/Ultra tier) ──
    
    const hasRestAuth = authMode === "madeonsol";
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds behavioral context by specifying the return content (delivery status and failure counts), which is beyond annotations. No contradiction.

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 delivers the essential purpose without extraneous information. It is front-loaded and efficient.

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 no output schema, the description provides enough information about what the tool returns (list of webhooks with delivery status and failure counts). However, it does not mention potential pagination or sorting, but with zero parameters these are likely irrelevant. Completeness is good for a simple list tool.

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, and the schema description coverage is 100% (trivially). Per guidelines, baseline for 0 parameters is 4. The description adds no parameter information, which is acceptable since there are none.

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 the verb 'List', the resource 'registered webhooks', and includes specifics about the data returned ('delivery status and failure counts'). It effectively distinguishes from sibling tools like create, delete, and test webhooks.

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 does not provide any guidance on when to use this tool versus alternatives (e.g., test_webhook or other list tools). There is no mention of context, prerequisites, or exclusions, leaving the agent without decision support.

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