Skip to main content
Glama

PixelFlow

Get blocked events

get_blocked_events
Read-onlyIdempotent

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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "site_id": "<site_id>",
      "from": "<from>",
      "to": "<to>"
    },
    "name": "get_blocked_events"
  }
}

Input Schema

NameRequiredDescriptionDefault
toYesRange end. YYYY-MM-DD means the end of that day in `timezone`, so the whole day is included; a full ISO 8601 timestamp is used as is.
fromYesRange start. YYYY-MM-DD means the start of that day in `timezone`; a full ISO 8601 timestamp is used as is.
sortNoDefault newest.
limitNoPage size. Default 25.
cursorNonext_cursor from the previous page, with the same sort. Omit for the first page.
eventsNoEvents to include, such as Purchase. Names are in list_supported_values's `events`. Default: the conversion events. Add PageView to include page views.
reasonsNoReasons to include. Default all.
site_idYesSite to act on, as returned by list_sites.
timezoneNoIANA time zone such as Europe/Berlin. Default UTC. Returned times and day buckets use it.

Output Schema

NameRequiredDescriptionDefault
rowsYesOne per blocked event, in the requested sort.
windowYesExact range read, after applying timezone.
timezoneYesIANA time zone used for times. UTC when none was passed.
next_cursorYesPass as cursor for the next page. null: last page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / next_cursor / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / next_cursor / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / rows / items / properties / consent_source / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / rows / items / properties / consent_source / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / rows / items / properties / detail / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / rows / items / properties / detail / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
  2. Changed13 schema fields changed
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "next_cursor from the previous page, with the same sort. Omit for the first page.",
      +  "type": "string"
      +}
    • addedInput schema / properties / events
      Added value: +{
      +  "description": "Events to include, such as Purchase. Names are in list_supported_values's `events`. Default: the conversion events. Add PageView to include page views.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • changedInput schema / properties / from / description
      Previous value: -"Range start. YYYY-MM-DD is the start of that calendar day in timezone. A full ISO instant is that instant"New value: +"Range start. YYYY-MM-DD means the start of that day in `timezone`; a full ISO 8601 timestamp is used as is."
    • removedInput schema / properties / group_by
      Removed value: -{
      -  "description": "reason, event_type, or day. Omitted means reason",
      -  "type": "string"
      -}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Page size. Default 25.",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / reasons
      Added value: +{
      +  "description": "Reasons to include. Default all.",
      +  "items": {
      +    "enum": [
      +      "denied",
      +      "no_decision",
      +      "gpc",
      +      "bot"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedInput schema / properties / site
      Removed value: -{
      -  "description": "Domain, id, or external id from list_sites",
      -  "type": "string"
      -}
    • addedInput schema / properties / site_id
      Added value: +{
      +  "description": "Site to act on, as returned by list_sites.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "Default newest.",
      +  "enum": [
      +    "newest",
      +    "oldest"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone for day buckets. Omitted means UTC, and the response says UTC"New value: +"IANA time zone such as Europe/Berlin. Default UTC. Returned times and day buckets use it."
    • changedInput schema / properties / to / description
      Previous value: -"Range end. YYYY-MM-DD is the end of that calendar day in timezone, so later events that day are included. A full ISO instant is that instant"New value: +"Range end. YYYY-MM-DD means the end of that day in `timezone`, so the whole day is included; a full ISO 8601 timestamp is used as is."
    • changedInput schema / required
      Previous value: -[
      -  "site",
      -  "from",
      -  "to"
      -]New value: +[
      +  "site_id",
      +  "from",
      +  "to"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "next_cursor": {
      +      "description": "Pass as cursor for the next page. null: last page.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "rows": {
      +      "description": "One per blocked event, in the requested sort.",
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "One blocked event.",
      +        "properties": {
      +          "consent_source": {
      +            "description": "Consent tool that reported the choice, such as cookieyes or onetrust. null for gpc and bot, and when the site did not report one.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "detail": {
      +            "description": "For bot only: the bot pattern detected, such as headless. null otherwise.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "event": {
      +            "description": "The event blocked, such as Purchase.",
      +            "type": "string"
      +          },
      +          "hour": {
      +            "description": "Start of the hour the event was blocked in, in timezone.",
      +            "format": "date-time",
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "Id of this blocked event.",
      +            "type": "integer"
      +          },
      +          "reason": {
      +            "description": "denied: the visitor refused consent. no_decision: no consent choice yet where one is required. gpc: the browser sent Global Privacy Control. bot: bot traffic.",
      +            "enum": [
      +              "denied",
      +              "no_decision",
      +              "gpc",
      +              "bot"
      +            ],
      +            "type": "string"
      +          },
      +          "regime": {
      +            "description": "Consent rule for the visitor's region. opt_in: consent is needed before tracking. opt_out: tracking is allowed until the visitor refuses.",
      +            "enum": [
      +              "opt_in",
      +              "opt_out"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "hour",
      +          "event",
      +          "reason",
      +          "consent_source",
      +          "regime",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "timezone": {
      +      "description": "IANA time zone used for times. UTC when none was passed.",
      +      "type": "string"
      +    },
      +    "window": {
      +      "additionalProperties": false,
      +      "description": "Exact range read, after applying timezone.",
      +      "properties": {
      +        "from": {
      +          "description": "First instant included.",
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "to": {
      +          "description": "Last instant included.",
      +          "format": "date-time",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "from",
      +        "to"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "window",
      +    "timezone",
      +    "next_cursor",
      +    "rows"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / from / description
      Previous value: -"Range start, ISO date"New value: +"Range start. YYYY-MM-DD is the start of that calendar day in timezone. A full ISO instant is that instant"
    • changedInput schema / properties / to / description
      Previous value: -"Range end, ISO date"New value: +"Range end. YYYY-MM-DD is the end of that calendar day in timezone, so later events that day are included. A full ISO instant is that instant"
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare a safe read, but the description adds substantial context beyond them: a 100-row cap per call, hourly rather than exact-time storage, no visitor data retained, the exact row shape, exclusion of blocking-rule events, and refusal of ranges before the plan's analytics lookback. These are exactly the behaviors an agent needs to interpret results correctly.

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?

Five sentences, front-loaded with purpose and scope, then storage semantics, then row shape, then the two caveats. No sentence is redundant and each carries a distinct constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema coverage, the description only needs to supply semantics the structured fields cannot: storage granularity, data retention, exclusions, and the lookback refusal. All of those are present, so an agent can call this correctly without further context.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: the 'up to 100 per call' ceiling ties to limit, and the hourly storage granularity tells the agent that from/to precision beyond the hour is meaningless. It does not explain the events/reasons filters, which the schema already handles.

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?

States a specific verb and resource ('List the events PixelFlow did not send to ad platforms'), plus the scoping ('on one site') and the causal filter ('because of consent or bot detection'). This clearly separates it from sibling list_events, which lists sent events rather than blocked ones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case with a concrete example ('find out why a conversion did not reach an ad platform, such as a purchase made at 3:15 today') and an exclusion ('Events stopped by the site's blocking rules are not included'). It never names a sibling alternative, so the routing signal is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.