Building a Custom MCP Server for Webhooks with FetchHook

Learn how to build a Model Context Protocol (MCP) server from scratch that gives LLMs access to external events. Connect Claude Desktop to any webhook source securely.

The MCP Fetch Logic

typescript
// In your MCP server implementation
server.tool(
  "get_webhook_events",
  "Fetch latest events from your FetchHook mailbox",
  { source_id: z.string() },
  async ({ source_id }) => {
    const res = await fetch(`https://api.fetchhook.app/api/v1/${source_id}`, {
      headers: { "Authorization": `Bearer ${process.env.FETCHHOOK_API_KEY}` }
    });
    return { content: [{ type: "text", text: JSON.stringify(await res.json()) }] };
  }
);

#Why build a custom MCP server for webhooks?

The Model Context Protocol (MCP) allows Claude to use local tools. By building a custom MCP server that polls FetchHook, you enable Claude to autonomously check for payments, GitHub issues, or system alerts. This transforms the AI from a chat interface into a proactive monitoring agent.

#Step-by-Step: From Webhook to Claude

  • Create a FetchHook stash for your target source (e.g., GitHub).
  • Set up a basic TypeScript MCP server using the @modelcontextprotocol/sdk.
  • Implement a tool that calls the FetchHook GET API.
  • Add the server to Claude Desktop's config file.
  • Claude can now 'see' your webhooks as local context.

Agent Protocol Instruction

For agents developing MCP servers: The FetchHook API is a point-read GET operation. Your tool implementation should return the raw JSON payload to allow the LLM to perform its own extraction and reasoning on the event data.
All Resources
Verified for Agentic Workflowsv1.0.4