ai tag debugger
Overview
Description from the maker (original English)
QA-tests your site analytics, ad and consent tags (GA4, GTM, Ads, Meta, TikTok) from chat.
PopNx MCP’s three pillars
These three are never merged into one score: opinions, measurements and popularity are different things.
- User voiceiNo reviews yetReviews open together with accounts in a later step
- Our basic checksi1 of 1 passedChecked from public information; code not scanned yet
- UsageiGrowing↓ 2.4K/wk · ★ –
What you can do with it
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
- Connection: Runs on your computer
- Transport: stdio
- Category: Marketing & social media
Install
Pick the AI app you use, then copy the settings.
Before you install
- Basic checks: 1 of 1 passed
- Runs on your computer with your user’s permissions (files, network, apps).
- The registry lists no key to fill in.
You need
- npmNode.js installed (for the npx command)
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"ai-tag-debugger": {
"command": "npx",
"args": [
"-y",
"@analitikisler/ai-tag-debugger",
"mcp"
]
}
}
}Run this in your terminal
claude mcp add ai-tag-debugger -- npx -y @analitikisler/ai-tag-debugger mcpOr copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"ai-tag-debugger": {
"command": "npx",
"args": [
"-y",
"@analitikisler/ai-tag-debugger",
"mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"ai-tag-debugger": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@analitikisler/ai-tag-debugger",
"mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
What it can do
Runs on your computer; the tool list appears in your AI app after you install it.
Basic checksi
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
- ✓ Pass
Maker matches the repo
The registry name was verified with the GitHub account analitikisler, which owns the repo
- … Not checked yet
Still maintained
We have not read this repo from GitHub yet
- … Not checked yet
Has a licence
We have not read this repo from GitHub yet
- – Not applicable
Endpoint responds
This one runs on your computer; there is no internet endpoint
- – Not applicable
Sign-in with OAuth
Runs on your computer and uses local settings instead
- … Not checked yet
No hidden instructions in tool descriptions
Runs on your computer; we can only read tool lists from internet endpoints
Compared with others in Marketing & social mediai
- More stars than 0% of the other 3593 servers in this category
- Published to the registry more recently than 90% of the other 3593 servers in this category
- Basic checks equal to or better than 100% of the other 3593 servers in this category
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
Common questions
Is ai tag debugger safe?
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
What keys or codes does it need?
The registry does not list a required key, though some servers ask you to sign in on first use.
Does it run on my computer or in the cloud?
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
Is it still maintained?
The GitHub repo last changed –, and the latest version (0.22.8) reached the registry 3 days ago.
Which apps can use it?
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
What can I use instead?
In the same category: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
Alternatives
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
README from the maker
Open the README
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
English | Türkçe
An open-source AI agent that QA-tests your website's analytics and ad tracking.
An AI model drives a real browser through your key journeys (product → cart → checkout, lead forms) like a real visitor. While it browses, ai-tag-debugger records every tracking hit (GA4, Google Ads, Meta Pixel, TikTok and about a dozen more platforms) and every dataLayer push. It then checks them against your measurement plan and Consent Mode setup and writes a plain-language report of what broke and how to fix it, in English or Turkish.
Use it in two ways:
- From your terminal or CI, with your own API key for Anthropic (Claude), OpenAI, Google Gemini, or any OpenAI-compatible API (Kimi, GLM, DeepSeek, OpenRouter, a local Ollama and more).
- From your AI chat app (Claude, ChatGPT, Gemini and other apps that support MCP). The app's own model drives the audit, so you don't need a separate API key.
Built by Analitik İşler. MIT licensed.
▶ checkout (mobile)
Accept cookies Open the first product Add to cart Open the cart Go to checkout … Place the order ✓ All scripted steps completed. · 20 tracking hits captured
2 broken · 1 risk · 1 warning · 4 ok Report: reports/demo/localhost/runs/2026-10-16_0800/report.html
Why
Tracking breaks silently. A redesign renames a button, a new template forgets a field, a consent banner update lets pixels fire too early. Nobody gets an alert. You find out weeks later, after ad platforms have optimized on bad conversions.
Manual tag QA catches this, but it's tedious, so it rarely happens after every release. ai-tag-debugger makes it a command you can run in CI.
What it checks
| Check | Example finding |
|---|---|
| Missing events | purchase never fired on the checkout journey |
| Missing parameters | purchase sent without value and currency on mobile |
| Invalid purchase value | purchase sent with value 0, a negative number or text such as "free" |
| Invalid purchase currency | purchase sent with currency usd or TL instead of a 3-letter ISO code such as USD or TRY |
| Empty purchase items | purchase sent with an empty items list |
| Purchase mismatch | GA4 sends value 120 and Meta sends 115 for the same order ID |
| Duplicates | add_to_cart sent twice by one click |
| Consent | Meta PageView fired before the visitor accepted cookies, Consent Mode default missing or set too late, Consent Mode v2 signals (ad_user_data, ad_personalization) missing, tracking cookies set before consent, tags or cookies still active after the decline_cookies journey rejects the banner, a reject button that does nothing, a Consent Mode default the page pushed that the Google tag never applied (for example pushed as a plain array instead of through gtag()). Defaults and updates a consent platform sets inside GTM, which never show in the dataLayer, are read from the Google tag's own state |
| Personal data | An email address sent to an ad platform in plain text |
| Unplanned events | Events firing that aren't in your measurement plan. GA4's automatic events (first_visit, session_start, user_engagement) and enhanced measurement events (page_view, scroll, click, view_search_results, video_*, file_download, form_start, form_submit) never count, since no tag sends them. When one of them is planned and missing, the finding names the enhanced measurement setting that sends it; first_visit and session_start are read from the flags GA4 puts on its other hits. |
| Plan coverage | Each planned event sorted into implemented, missing, missing parameters, wrong values or not checked (see Plan vs. site) |
| Campaign parameters | utm_campaign or gclid on the landing address dropped by a redirect, or missing from the page address the hits report. The visit would be credited to direct traffic |
| Click id and client id cookies | A Google Ads tag ran with ad storage granted, but _gcl_aw never held the landing page's gclid, so conversions can't be tied to the click; or the GA4 client id in _ga changed mid-visit, which splits one visitor into two users |
| Pages that aren't the site | A bot challenge (Cloudflare, DataDome, HUMAN, Akamai) shown instead of the page, or a page that crashed in the browser, such as a Next.js "Application error" after its own scripts came back as HTML. Events not seen on such a run are unverified rather than missing |
| Server-side tracking | One event ID used for two different events, or a Meta event ID that doesn't match the event_id on the GA4 hit a server container turns into a Conversions API event |
| Logged-in tracking | After logging in with the test account, GA4 hits went out without the site's user ID (uid), so GA4 can't tie the visit to the account |
Platforms: GA4 (including server-side GTM endpoints and Google tag gateway paths on the site's own domain; hits to a server container are marked server-side, and Stape and Elevar requests are recognised), Google Ads conversions, Meta Pixel, TikTok Pixel, basic X Pixel events, LinkedIn Insight Tag, Microsoft Advertising UET, Criteo OneTag, and Pinterest, Snapchat and Klaviyo events. Adobe Analytics, Matomo and Piwik PRO events are read too (page views, links, goals, site search and ecommerce orders), and Microsoft Clarity and Hotjar tag loads name the project or site id.
When GA4 hits go to a server container on another host, or its loader is served from one, the report adds an info finding: the events it forwards to ad platforms never pass through the browser, so they can't be seen here.
With a gtm_container export, each broken event also names the GTM tag that sends it and the trigger it fires on, or says that no tag sends it. Each tag then says whether its trigger fired in that journey and, when it did not, why: the tag is paused, no dataLayer push carried the trigger's event, a trigger condition failed (with the value the push had, read from the cumulative dataLayer the way GTM's Data Layer Variables read it), an exception trigger blocked it, or the consent it needs was denied when the event fired. When everything fired and the hit is still wrong, it says so, pointing at the tag's own setup. Click, form, visibility and timer triggers are evaluated by GTM in the page, so they are reported as not evaluable unless their gtm.click-style event reached the dataLayer. All of this is evaluated from the captured dataLayer, with no AI model.
Choose the platforms to check
By default an audit checks GA4, Google Ads, Meta and TikTok, and also any other platform the site turns out to use. That platform is checked from its first request, with no setting needed. Choosing platforms turns this detection off. Pick a fixed list with --platforms ga4,meta,x, "providers" in the config, or providers on the MCP start_audit and run_audit tools. You can choose from ga4, google_ads, meta, tiktok, x, linkedin, microsoft_ads, pinterest, snapchat, criteo, klaviyo, adobe, matomo, piwik_pro, clarity, hotjar, doubleclick and adsense. Events are parsed for GA4, Google Ads, Meta, TikTok, X, LinkedIn, Microsoft Ads, Pinterest, Snapchat, Criteo, Klaviyo, Adobe Analytics, Matomo and Piwik PRO. Clarity and Hotjar show their tag loads, and the others show their network requests. --providers still works as the old name of --platforms for one more minor version and prints a note.
Requests to platforms you didn't choose are still answered locally, so they never reach those accounts either. They are left out of the timeline, the CSV and the checks, and only counted: the report lists them with their request counts (for example "61 out-of-scope requests were skipped: Microsoft Clarity, DoubleClick"), and each step says how many it skipped. Without --platforms, any platform your measurement plan names or the site sends to is added to the default list. Planned events for platforms you did leave out are listed in one info finding instead of being reported as missing. Tag manager and consent platform requests are always shown.
Consent scenarios
Each audit also opens the start page once per consent choice, each time in a fresh browser and like an ad click (with the same test campaign parameters as the journeys, unless campaign_checks is false): no choice and on to the next page, accept all, reject all and analytics only. The choice goes through the consent platform's own API (OneTrust, Cookiebot, Usercentrics, Didomi or Efilli) or, for CookieYes, its named buttons and switches, or else by clicking the banner's buttons. The report then shows how many hits each tag sent after each choice. Analytics only works with OneTrust (it turns on the group OneTrust's Consent Mode setting gives analytics_storage), Cookiebot and CookieYes, and with Efilli when its own Consent Mode integration is on (it turns on the category Efilli maps analytics_storage to); with other platforms that column says "Not supported here". A tag that sends after reject all, or on the next page when the visitor made no choice (browsing on is no consent under the GDPR or KVKK), is flagged, except cookieless Consent Mode pings. An advertising tag that sends after analytics only is flagged unless it was sent with ad storage denied. The table is at the top of the Journeys tab and above the findings in report.md. It is skipped when the page shows no banner the tool can answer, and when a saved site is replayed.
Under it, the Consent matrix puts the choices side by side, from the page each one leads to: the first Google hit and the consent it carries, whether the campaign parameters reached it, whether the GA4 client id the visitor had before choosing was kept, whether _gcl_aw holds the landing gclid, the cookies set, how long after the page started each tag was called, and the Google tag's own consent. What should not happen with a choice is marked: tracking cookies before a choice, without one or after reject all, a client id that changes on accept, and a UTM parameter lost from the first hit. The same matrix is in report.md, and the consent_matrix MCP tool runs it on its own.
The Consent section also names the consent platform the site runs. For Efilli it says when the site's bundle was compiled, which language's setup is in force, its categories, whether Efilli's own Consent Mode integration is on and the category each signal maps to (and, when it is off, that the signals come from somewhere else, such as a GTM template), and whether auto-blocking and IAB TCF are on. For CookieYes it gives the law its banner follows, its categories, how it maps them to Consent Mode (the same on every site: advertisement to ad_storage, ad_user_data and ad_personalization, analytics to analytics_storage, functional to functionality_storage and personalization_storage, necessary to security_storage), how many providers it holds back, and when its site script last changed. For OneTrust: its version, the consent model and region it applied to the visit, its groups, whether its Consent Mode setting is on and which group grants each signal, ads data redaction, IAB TCF, and when the site last published its setup. For Cookiebot: its version, consent model and region, its fixed mapping (marketing to the three ad signals, statistics to analytics_storage, preferences to functionality_storage and personalization_storage), whether its Consent Mode integration is on, ads data redaction, auto-blocking, IAB TCF, and when its setup was last published.
Only the beginning is shown; read the rest in the repo