PixelFlow
Server Details
Server-side conversion tracking for Meta, TikTok, etc. Set up tracking and ask about events.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- PixelFlow-org/mcp
- GitHub Stars
- 3
- Server Listing
- PixelFlow
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 25 tools
Most tools are cleanly separated by resource and action, with detailed descriptions that clarify analytics vs. setup vs. trigger lifecycle use cases. Minor overlap exists around setup state and checklist updates (get_site_status, close_get_started, update_site, verify_tracking), but the intended boundaries are still recoverable.
All names use snake_case and consistently start with a clear action verb such as list_, get_, create_, update_, delete_, save_, or verify_. Even less common operations like close_get_started and suggest_triggers follow the same convention.
The 25-tool surface is large, but the domain is broad: sites, events, triggers, integrations, pixels, blocking rules, attribution, and setup all need coverage. It is somewhat heavy and could likely be consolidated in places, but most tools have a distinct purpose.
Coverage is strong across the tracking lifecycle: site setup, trigger management, integrations, pixels, blocking rules, verification, and several analytics views. Minor gaps remain, such as no explicit delete_site operation and limited direct pixel/integration management outside dashboard links.
Publisher details
- Operator
- PixelFlow
- Operator website
- https://pixelflow.so
- Vendor relationship
- First-party
- Documentation
- https://pixelflow.so/features/mcp?source=glama
- Trust center
- Not available
- Restrictions
- Not applicable
Available Tools
25 toolsclose_get_startedUpdate Get Started checklistAIdempotentInspect
Check the site's Get Started checklist and mark as done the items PixelFlow can confirm from its data. The setup item is marked done when any event was received. The old pixel item is marked done when the last page check found no native ad platform pixel. The UTM item is marked done when an event came from a paid source. The consent banner item is marked done when a banner was detected or consent blocked an event. Items are only marked done, never undone. Returns the items this call marked done and the items not done yet, each with the update_site field that marks it done once the user confirms. Use it at the end of setup.
Inputs: site_id (required), extra_events_declined. Returns: remaining, marked_done, has_conversion_event
create_siteCreate siteAInspect
Add a new website to a PixelFlow workspace and return the saved site with its site_id. If the workspace is at its site limit or its plan is canceled, the site is not created and the error says why. The result includes next_action, the same as get_site_status. Use it when the user wants to track a website that list_sites does not show.
Inputs: platform (required), domain, currency, workspace_id, +2 more. Returns: domain, site_id, currency, platform, +11 more
create_triggerCreate triggerAIdempotentInspect
Create a trigger that sends an event to the site's ad platforms when a visitor submits a form, clicks an element, or loads a page, and return the saved trigger with its trigger_id.
Build the selector, text_match, and data_extraction fields from one of these, never guess: the site's code open in this chat; a site builder's element data when that builder is connected in this chat; or the live page loaded in a browser tool the agent controls, where the agent runs the selector and confirms it matches only the elements the trigger should fire on. A page fetched as text, view-source, or a screenshot is not a source. Use what is rendered in the page: an element's id, a class, the control's visible label, or an input's name attribute. When none of these yields the selector, do not create a click or submit trigger: call get_connect_link with target visual_tagger and the page path, so the user picks the element and its fields. Call list_triggers first: a click or submit trigger on the same element may already exist, such as one the Visual Tagger saved.
Nothing is added to the website code. Repeating an idempotency_key returns the same trigger. Refused until site setup has passed verify. Use it after the user approves a trigger, such as one proposed by suggest_triggers. Ask for approval in the user's words: the event, when it fires, and the fields it sends by their labels, if any.
Inputs: type (required), event (required), site_id (required), idempotency_key (required), +8 more. Returns: trigger, next_step
delete_blocking_ruleDelete blocking ruleADestructiveIdempotentInspect
Delete the blocking rule for one event on a site, such as Purchase, or the AllEvents rule. Rules for other events stay. After an event's own rule is deleted, the AllEvents rule applies to that event again. After the AllEvents rule is deleted, events without their own rule are no longer blocked. If the event has no rule, the call is refused and nothing changes. Returns the events that still have a rule, including AllEvents. Repeating an idempotency_key deletes once. Use it when the user wants events that a rule blocks to reach ad platforms again.
Inputs: target (required), site_id (required), idempotency_key (required). Returns: rules_left
delete_triggerDelete triggerADestructiveIdempotentInspect
Delete a trigger of type url, click, or submit and return the id and type of the removed trigger. Its event stops being sent from that trigger once visitors' browsers pick up the new site configuration. Repeating an idempotency_key deletes once. Use it when the user wants to stop sending an event from that trigger.
Inputs: type (required), site_id (required), trigger_id (required), idempotency_key (required). Returns: type, saved, deleted, trigger_id
disconnect_integrationDisconnect integrationADestructiveIdempotentInspect
Disconnect an integration such as Stripe or Calendly from a site and return which one was removed. Its webhook is removed and its events stop being sent to ad platforms. Reconnecting is done from the dashboard. Use it when the user asks to stop sending conversions from that integration.
Inputs: site_id (required), integration_id (required). Returns: type, disconnected, integration_id
get_attributionGet attributionARead-onlyIdempotentInspect
Get revenue and conversions for one site over a date range, broken down by traffic source, campaign, ad set, or ad, using PixelFlow's website attribution (the UTM tags and referrer of the converting visit). Each row has its event counts, revenue, unique visitors, and sessions. To drill down, pass the parent levels: campaign needs source; adset needs source and campaign; ad needs all three. Ranges before the plan's analytics lookback are refused, and a range too large to read at once is refused as range_too_wide with the largest range that fits. Use it for "which campaigns or ads drove conversions" questions.
Inputs: to (required), from (required), site_id (required), adset, +4 more. Returns: rows, window, group_by, timezone, +4 more
get_blocked_eventsGet blocked eventsARead-onlyIdempotentInspect
List the events PixelFlow did not send to ad platforms on one site because of consent or bot detection, up to 100 per call. Blocked events are stored without visitor data and by the hour, not the exact time. Each row is one blocked event with its hour, event, reason, consent tool, and consent regime. Events stopped by the site's blocking rules are not included. Ranges before the plan's analytics lookback are refused. Use it to find out why a conversion did not reach an ad platform, such as a purchase made at 3:15 today.
Inputs: to (required), from (required), site_id (required), sort, +5 more. Returns: rows, window, timezone, next_cursor
get_connect_linkGet dashboard linkAInspect
Create a one-time link to the PixelFlow dashboard page for a step that needs a browser sign-in or a secret. Returns the link and when it expires. The link holds only an opaque id and works only for this user when signed in, so no credential passes through the chat. It must be opened in a regular browser such as Chrome, Safari, or Firefox. Integration and Visual Tagger targets are refused until site setup has passed verify. Use it when connecting an ad platform pixel (such as Facebook or TikTok), connecting an integration (such as Stripe or Calendly), opening billing, or opening the Visual Tagger on a page of the site. A Visual Tagger link saves the trigger itself when the user confirms, so read list_triggers afterwards instead of calling create_trigger.
Inputs: target (required), site_id (required), page_path, ad_platform, +1 more. Returns: url, target, site_id, page_path, +3 more
get_event_payloadsGet event detailsARead-onlyIdempotentInspect
Get the payload (request body) PixelFlow sent to each ad platform for up to 25 events by id. Each event lists every pixel it was sent to, with that payload and any error. IP addresses in the payload are partly hidden. Pass include_ip true to see them in full. Name, email and phone are hashed, as the ad platforms receive them. Use it to see exactly what was sent for an event from list_events, or why an ad platform rejected it.
Inputs: ids (required), site_id (required), timezone, include_ip. Returns: events, timezone
get_install_instructionsGet install instructionsARead-onlyIdempotentInspect
Get step-by-step instructions the user follows on their website or in their ad platform's ads manager, for one task: installing PixelFlow, adding UTM parameters to ad links, removing an ad platform's own pixel code (such as the Facebook pixel) that was added before PixelFlow and would count events twice, or removing PixelFlow. Steps are written for the site's platform, and install steps include this site's code snippet, ready to paste. Use it when the user is ready to install PixelFlow, or asks how to add UTM parameters, remove a duplicate pixel, or uninstall.
Inputs: task (required), site_id (required), phase, other_platform. Returns: docs, task, steps, snippet, +7 more
get_journeysGet journeysARead-onlyIdempotentInspect
Get visitor journeys on one site, one row per visitor with an event in the date range. A journey covers that visitor's events in the lookback_days up to their last event in the range. Each row has the journey's value per currency, the count of each event, its last 50 events with their times, and the first and last touch credited (source and UTM tags). Events with no visitor id are their own rows. Ranges before the plan's journey lookback are refused. Use it when the user asks about customer, user, or conversion journeys: what visitors did on the site before they converted, and which first and last touch the conversion is credited to.
Inputs: to (required), from (required), site_id (required), page, +9 more. Returns: sort, total, window, journeys, +3 more
get_overviewGet tracking overviewARead-onlyIdempotentInspect
Get tracking totals for one site over a date range: the count of each event, such as Purchase or Lead, revenue, events delivered and failed per pixel, events blocked by consent or bot detection, event counts per day or week, and, for the newest 500 conversions in the range, how many carried a hashed email or phone. Ranges before the plan's analytics lookback are refused, and a range too large to read at once is refused as range_too_wide with the largest range that fits. Use it for "how is tracking doing" and weekly report questions.
Inputs: to (required), from (required), site_id (required), group_by, +1 more. Returns: failed, pixels, series, window, +9 more
get_site_statusGet site statusARead-onlyIdempotentInspect
Get the setup and health state of one site: its settings (domain, platform, currency, ecommerce flags), whether the PixelFlow script or plugin is installed, connected pixels and integrations, blocking rules, consent mode, the last event received of each type, which Get Started checklist items are done, and the plan, limits, and usage of its workspace. It also returns the next setup step, until setup and the Get Started checklist are complete. Use it before any setup or troubleshooting step, or when the user asks about their plan or limits.
Inputs: site_id (required). Returns: docs, domain, pixels, site_id, +18 more
list_eventsList eventsARead-onlyIdempotentInspect
List the tracked events on one site as rows, up to 100 per call. Each row has the time, event, page URL, traffic source, value, visitor and session ids, UTM tags with first and last touch, consent, and send status per pixel with any ad platform error. For an event's full payload, pass its id to get_event_payloads. Use it to answer questions about tracked events, such as what one visitor did, which conversions failed to send, or which pages purchases came from.
Inputs: to (required), from (required), site_id (required), sort, +11 more. Returns: events, window, timezone, event_count, +2 more
list_sitesList sitesARead-onlyIdempotentInspect
List the websites the signed-in user can access in PixelFlow: each site's site_id, domain, platform, currency, whether the user can edit it, and the workspace it belongs to with the user's role there. Plan, limits, and usage are in get_site_status. Use it to find the site_id for a website the user names, or to ask which site they mean when there are several.
Inputs: no named parameters. Returns: sites
list_supported_valuesList supported valuesARead-onlyIdempotentInspect
List the names PixelFlow supports and other tools accept: the platforms a site can run on, the ad platforms events can be sent to, the integrations that report conversions, the supported events, and the traffic sources events are attributed to. Use it when the user asks whether PixelFlow supports a platform, ad platform, integration, event, or traffic source, or before passing one of these names to another tool.
Inputs: no named parameters. Returns: events, sources, platforms, ad_platforms, +1 more
list_triggersList triggersARead-onlyIdempotentInspect
List every conversion trigger on one site, including integrations such as Stripe. Each trigger has its type, the event it sends, its page URL, selector, value and data extraction. It also shows when the trigger last sent an event and whether that send succeeded. Use it to check what is tracked, or to find a trigger_id before changing a trigger or an integration.
Inputs: site_id (required), timezone. Returns: timezone, triggers, checked_from
save_blocking_ruleSave blocking ruleADestructiveIdempotentInspect
Save the blocking rule for one event on a site, such as Purchase, or for all events (AllEvents). It replaces the rule already saved for that event, if any. Rules for other events stay. A blocking rule stops matching events from being sent to ad platforms, such as a second Purchase when the confirmation page is refreshed. A rule for one event, such as Purchase, replaces the AllEvents rule for that event, so include any AllEvents conditions it should keep. The current rules are in get_site_status. Returns the saved rule. Repeating an idempotency_key applies the change once. Use it when the user wants to stop duplicate or unwanted events reaching ad platforms, or to save a rule proposed by suggest_triggers.
Inputs: rule (required), site_id (required), idempotency_key (required). Returns: rule
suggest_triggersSuggest triggersARead-onlyIdempotentInspect
Suggest the conversion triggers a site still needs: which events are tracked today, and one proposal per gap. It uses what PixelFlow knows about the site and the observations passed in; it does not load the website or read code. A url proposal carries arguments ready for create_trigger. An integration proposal carries connect arguments for get_connect_link. A click or submit proposal carries no create_trigger arguments: the agent builds them from the site's code, a connected builder's element data, or the live page in its own browser tool. When none of these yields the selector, call get_connect_link with the proposal's connect arguments, so the user picks the element on the website with the Visual Tagger. Refused until site setup has passed verify. Use it when setting up conversion tracking, or when the user asks what else they could track.
Inputs: site_id (required), goal, events, observations. Returns: goal, coverage, question, proposals, +2 more
update_integrationUpdate integrationADestructiveIdempotentInspect
Change the settings of an integration connected to a site, such as Stripe or Calendly. Returns the saved settings. Every integration has a label and a fixed value sent with every event. Integrations that report payments also have a product list and a minimum payment amount. When they are set, events are sent only for those products and for payments of at least that amount. Fields left out stay unchanged. null clears a field. A setting the integration does not support is refused. Use it when the user wants to change which events an integration sends or the value sent with them.
Inputs: site_id (required), integration_id (required), label, fixed_value, +2 more. Returns: type, label, fixed_value, product_ids, +2 more
update_pixelUpdate pixelADestructiveIdempotentInspect
Change the label or the test event code of a connected ad platform pixel. Returns the pixel's label and test event code after the change. A test event code sends events to the ad platform's test events view, for debugging. An empty test event code turns test mode off. Test mode also turns off by itself at test_mode_ends_at. Fields left out stay unchanged. The pixel id and access token can only be changed in the dashboard. Use it when the user wants to rename a pixel or check events in the ad platform's test view.
Inputs: site_id (required), pixel_id (required), label, test_event_code. Returns: label, pixel_id, test_event_code, test_mode_ends_at
update_siteUpdate siteADestructiveIdempotentInspect
Change settings on a site (domain, platform, currency, ecommerce flags, or Get Started checklist items) and return the saved site. Omitted fields stay unchanged; provided fields overwrite the stored value. The result includes next_action, the same as get_site_status. Use it when the user changes a site setting or confirms that a Get Started item is done.
Inputs: site_id (required), domain, currency, platform, +6 more. Returns: domain, site_id, currency, platform, +11 more
update_triggerUpdate triggerADestructiveIdempotentInspect
Change an existing trigger of type url, click, or submit and return the saved trigger. type and event are always required. type can change only between submit and click; a url trigger keeps its type. Other omitted fields stay unchanged; provided fields overwrite the stored value.
Build a new selector, text_match, or data_extraction from one of these, never guess: the site's code open in this chat; a site builder's element data when that builder is connected in this chat; or the live page loaded in a browser tool the agent controls, where the agent runs the selector and confirms it matches only the elements the trigger should fire on. A page fetched as text, view-source, or a screenshot is not a source. Use what is rendered in the page: an element's id, a class, the control's visible label, or an input's name attribute. When none of these yields the selector, do not change a click or submit selector: call get_connect_link with target visual_tagger and the page path, so the user picks the element and its fields.
Repeating an idempotency_key applies the change once. Use it when the user wants to change a trigger's page, element, event, value, or data extraction. Ask for approval in the user's words: the event, when it fires, and the fields it sends by their labels, if any.
Inputs: type (required), event (required), site_id (required), trigger_id (required), +9 more. Returns: trigger, next_step
verify_trackingVerify trackingAInspect
Check that tracking works on one site by loading one of its pages in a headless browser and reading the events received since checked_from. Returns whether tracking works, the first failing step with its cause and fix, whether the page could be loaded, and any ad platform pixel added to the site outside PixelFlow that double counts events. A passing check marks site setup as complete. The result includes next_action, the same as get_site_status. Refused until an ad platform is connected. Rate limited per site. Use it after installing PixelFlow, after connecting a pixel, or when the user reports missing events.
Inputs: site_id (required), url. Returns: fix, docs, cause, domain, +9 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Server-side conversion tracking, installed and configured by your AI coding agent.
Tag manager with server-side conversions for GA4, Google Ads, Meta and TikTok, set up by an agent.
Meta, TikTok and ChatGPT Ads conversion tracking: stats, event log, audits and triggers.
Audit and set up Meta Pixel and the Conversions API from your AI agent.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables an AI assistant to set up and manage server-side conversion tracking by connecting ad platforms like Google Ads, Meta, and GA4, building and publishing conversion flows that fire when forms are submitted, installing tracking snippets, and reviewing conversion events. It also supports diagnosing missing conversions and excluding internal traffic, all through a hosted connector authorized against the user's own account.MIT- AlicenseAqualityBmaintenanceEnables AI agents to send server-side conversion events such as leads, signups, purchases, and subscriptions to ad platforms using a user-supplied API key, with normalization, hashing, deduplication, Meta CAPI test events, and usage statistics.3MIT
- AlicenseNot gradedqualityDmaintenanceHelps debug conversion tracking issues across GoHighLevel, Meta CAPI, webhooks, and GTM by providing tools to fetch events, contacts, logs, and perform full analysis.ISC
- AlicenseAqualityDmaintenanceA production-ready MCP server for Google Tag Manager, GA4 Measurement Protocol, DataLayer schema validation, Meta CAPI auditing, and tracking code snippet generation.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.