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
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID (used as the 'website' field in payload) | |
| hostname | Yes | Hostname of the site (e.g. 'example.com') | |
| url | Yes | URL path (e.g. '/checkout') | |
| eventName | No | Custom event name (omit for pageview) | |
| eventData | No | Custom event data as key-value pairs | |
| referrer | No | Referrer URL | |
| language | No | Browser language (e.g. 'en-US') | |
| title | No | Page title |
Implementation Reference
- src/tools/events.ts:22-39 (handler)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." }] }; } - src/tools/events.ts:9-21 (schema)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"), }, - src/tools/events.ts:6-40 (registration)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." }] }; } );