Skip to main content
Glama
mikusnuz

umami-mcp

send_event

Send custom events or pageviews to Umami Analytics for server-side tracking. Track user interactions, page visits, and custom data without browser dependencies.

Instructions

Send a custom event or pageview to Umami (useful for server-side tracking)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
websiteIdYesWebsite UUID (used as the 'website' field in payload)
hostnameYesHostname of the site (e.g. 'example.com')
urlYesURL path (e.g. '/checkout')
eventNameNoCustom event name (omit for pageview)
eventDataNoCustom event data as key-value pairs
referrerNoReferrer URL
languageNoBrowser language (e.g. 'en-US')
titleNoPage title

Implementation Reference

  • The handler function that executes the logic for the "send_event" tool, processing parameters and calling the Umami API.
    async ({ websiteId, hostname, url, eventName, eventData, referrer, language, title }) => {
      const payload: Record<string, unknown> = {
        website: websiteId,
        hostname,
        url,
      };
      if (eventName) payload.name = eventName;
      if (eventData) payload.data = eventData;
      if (referrer) payload.referrer = referrer;
      if (language) payload.language = language;
      if (title) payload.title = title;
    
      await client.call("POST", "/api/send", {
        type: eventName ? "event" : "pageview",
        payload,
      });
      return { content: [{ type: "text", text: "Event sent successfully." }] };
    }
  • Zod schema definition for the input arguments of the "send_event" tool.
    {
      websiteId: z.string().describe("Website UUID (used as the 'website' field in payload)"),
      hostname: z.string().describe("Hostname of the site (e.g. 'example.com')"),
      url: z.string().describe("URL path (e.g. '/checkout')"),
      eventName: z.string().optional().describe("Custom event name (omit for pageview)"),
      eventData: z
        .record(z.unknown())
        .optional()
        .describe("Custom event data as key-value pairs"),
      referrer: z.string().optional().describe("Referrer URL"),
      language: z.string().optional().describe("Browser language (e.g. 'en-US')"),
      title: z.string().optional().describe("Page title"),
    },
  • Registration of the "send_event" tool within the MCP server.
    server.tool(
      "send_event",
      "Send a custom event or pageview to Umami (useful for server-side tracking)",
      {
        websiteId: z.string().describe("Website UUID (used as the 'website' field in payload)"),
        hostname: z.string().describe("Hostname of the site (e.g. 'example.com')"),
        url: z.string().describe("URL path (e.g. '/checkout')"),
        eventName: z.string().optional().describe("Custom event name (omit for pageview)"),
        eventData: z
          .record(z.unknown())
          .optional()
          .describe("Custom event data as key-value pairs"),
        referrer: z.string().optional().describe("Referrer URL"),
        language: z.string().optional().describe("Browser language (e.g. 'en-US')"),
        title: z.string().optional().describe("Page title"),
      },
      async ({ websiteId, hostname, url, eventName, eventData, referrer, language, title }) => {
        const payload: Record<string, unknown> = {
          website: websiteId,
          hostname,
          url,
        };
        if (eventName) payload.name = eventName;
        if (eventData) payload.data = eventData;
        if (referrer) payload.referrer = referrer;
        if (language) payload.language = language;
        if (title) payload.title = title;
    
        await client.call("POST", "/api/send", {
          type: eventName ? "event" : "pageview",
          payload,
        });
        return { content: [{ type: "text", text: "Event sent successfully." }] };
      }
    );

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/mikusnuz/umami-mcp'

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