{"id":17825,"date":"2026-09-13T19:45:00","date_gmt":"2026-09-13T17:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=17825"},"modified":"2026-09-09T21:29:30","modified_gmt":"2026-09-09T19:29:30","slug":"claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/","title":{"rendered":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu"},"content":{"rendered":"<p>Kontener Google Tag Managera to dokument JSON, kt\u00f3ry rozstrzyga, jakie skrypty \u0142aduje witryna i kiedy. Zmiana takiego kontenera przez prompt oznacza przekazanie modelowi j\u0119zykowemu prawa zapisu do tego dokumentu. Ciekawe pytanie nie brzmi, czy to dzia\u0142a \u2014 dzia\u0142a \u2014 lecz czego dok\u0142adnie model mo\u017ce dotkn\u0105\u0107 i ile kosztuje samo pod\u0142\u0105czenie, zanim powstanie pierwszy tag.<\/p>\n<p>Na potrzeby tego artyku\u0142u zmierzono 9 wrze\u015bnia 2026 roku trzy integracje: trzy serwery MCP, ka\u017cdy uruchomiony przez <code>npx<\/code> po stdio na Raspberry Pi 5 z Node 20.19.2 i zapytany o list\u0119 narz\u0119dzi, a do tego API Tag Managera v2, na kt\u00f3rym wszystkie trzy si\u0119 opieraj\u0105. Liczby poni\u017cej pochodz\u0105 z tych uruchomie\u0144 oraz z dokumentu discovery samego API, nie z plik\u00f3w README.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/gtm-integrationen-pl.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"Droga zmiany od promptu przez Claude Code i serwer MCP do API Tag Managera, do przestrzeni roboczej i wreszcie do kontenera na \u017cywo, z zaznaczonym krokiem publikacji; poni\u017cej trzy zmierzone serwery MCP z liczb\u0105 narz\u0119dzi i rozmiarem ich listy narz\u0119dzi jako s\u0142upki oraz siedem zakres\u00f3w OAuth z liczb\u0105 metod przypadaj\u0105cych na ka\u017cdy z nich\"><figcaption>Droga zmiany, rozmiar trzech zmierzonych list narz\u0119dzi oraz rozk\u0142ad 106 metod API na siedem zakres\u00f3w.<\/figcaption><\/figure>\n<h2>Trzy drogi, kt\u00f3rymi kontener trafia do modelu<\/h2>\n<p>Claude Code sam z siebie nie wie nic o Tag Managerze. Wszystko, co da si\u0119 zrobi\u0107 z kontenerem, przychodzi jedn\u0105 z trzech dr\u00f3g, a tylko dwie z nich dok\u0142adaj\u0105 jak\u0105kolwiek zdolno\u015b\u0107.<\/p>\n<p><strong>Serwer MCP<\/strong> to proces, kt\u00f3ry Claude Code uruchamia i z kt\u00f3rym rozmawia po stdio albo HTTP. Serwer publikuje list\u0119 narz\u0119dzi, a ka\u017cde z nich pojawia si\u0119 w sesji pod nazw\u0105 <code>mcp__&lt;serwer&gt;__&lt;narz\u0119dzie&gt;<\/code>. Na t\u0119 w\u0142a\u015bnie nazw\u0119 reaguj\u0105 p\u00f3\u017aniej regu\u0142y uprawnie\u0144 i haki \u2014 dlatego warto j\u0105 zna\u0107.<\/p>\n<p><strong>Droga przez wiersz polece\u0144<\/strong> nie wymaga \u017cadnego serwera. Wystarczy token dost\u0119pu i <code>curl<\/code>, a zapytanie model uk\u0142ada sam. Nic nie l\u0105duje wcze\u015bniej w kontek\u015bcie, ale te\u017c nic nie znika za obudow\u0105 \u2014 wymiana brzmi: wygoda za przejrzysto\u015b\u0107.<\/p>\n<p><strong>Skill albo polecenie ze slashem<\/strong> nie dok\u0142ada \u017cadnej zdolno\u015bci. Zawiera przepis: konwencj\u0119 nazewnicz\u0105, list\u0119 kontroln\u0105, kolejno\u015b\u0107, w jakiej regu\u0142a musi istnie\u0107, zanim tag b\u0119dzie m\u00f3g\u0142 si\u0119 do niej odwo\u0142a\u0107. To zmienia, co model robi na dw\u00f3ch pozosta\u0142ych drogach, nigdy za\u015b to, co mu wolno. Mylenie jednego z drugim jest najcz\u0119stszym nieporozumieniem wok\u00f3\u0142 s\u0142owa \u201eintegracja&#8221;.<\/p>\n<h2>Co le\u017cy pod spodem: 106 metod, siedem zakres\u00f3w, jedna przestrze\u0144 robocza<\/h2>\n<p>Wszystkie drogi ko\u0144cz\u0105 si\u0119 w tym samym miejscu. Dokument discovery API Tag Managera v2, wersja 20260902 o rozmiarze 270 858 bajt\u00f3w, opisuje <strong>106 metod w 18 zasobach<\/strong>: 38 GET, 38 POST, 15 PUT i 15 DELETE.<\/p>\n<p>Dziesi\u0119\u0107 z tych zasob\u00f3w mie\u015bci si\u0119 wewn\u0105trz przestrzeni roboczej \u2014 tagi, regu\u0142y, zmienne, zmienne wbudowane, foldery, szablony, klienty, transformacje, strefy i konfiguracja gtag. Przestrze\u0144 robocza to szkic. To, co zostanie tam zapisane, nie dociera do \u017cadnego odwiedzaj\u0105cego, cho\u0107by by\u0142o zupe\u0142nie b\u0142\u0119dne.<\/p>\n<p>Mi\u0119dzy szkicem a stron\u0105 na \u017cywo stoj\u0105 jeszcze dwa kroki. <code>workspaces.create_version<\/code> zamra\u017ca przestrze\u0144 robocz\u0105 w wersj\u0119 kontenera, a <code>versions.publish<\/code> czyni t\u0119 wersj\u0119 aktywn\u0105. Zakres <code>tagmanager.publish<\/code> obejmuje dok\u0142adnie <strong>dwie ze 106 metod<\/strong>: wywo\u0142anie publikacji i <code>environments.reauthorize<\/code>. Wszystko inne, co integracja potrafi zrobi\u0107, pozostaje z za\u0142o\u017cenia niewidoczne dla odwiedzaj\u0105cych, dop\u00f3ki osobne wywo\u0142anie nie postanowi inaczej.<\/p>\n<pre><code># Odczyt tagow: sciezka niesie konto, kontener i przestrzen robocza.\n# Identyfikator przestrzeni jest obowiazkowy - do tagow na zywo\n# nie prowadzi zadna trasa.\nACC=6012345678; CONT=123456789; WS=42\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n  \"https:\/\/tagmanager.googleapis.com\/tagmanager\/v2\/accounts\/$ACC\/containers\/$CONT\/workspaces\/$WS\/tags\"\n\n# Bez tokenu kazda metoda odpowiada tak samo:\n# {\"error\":{\"code\":401,\"status\":\"UNAUTHENTICATED\",\n#   \"details\":[{\"reason\":\"CREDENTIALS_MISSING\"}]}}<\/code><\/pre>\n<p>Pi\u0119tna\u015bcie schemat\u00f3w API prowadzi pole <code>fingerprint<\/code>, kt\u00f3rego warto\u015b\u0107 zmienia si\u0119 przy ka\u017cdej zmianie obiektu. Aktualizacja z nieaktualnym odciskiem zostaje odrzucona, zamiast nadpisa\u0107 zmian\u0119, kt\u00f3r\u0105 w mi\u0119dzyczasie wprowadzi\u0142 kto\u015b w przegl\u0105darce.<\/p>\n<h2>Trzy serwery MCP, trzy sposoby poci\u0119cia tego samego API<\/h2>\n<table>\n<tr>\n<th>Serwer<\/th>\n<th>Narz\u0119dzia<\/th>\n<th>tools\/list<\/th>\n<th>\u2248 tokeny<\/th>\n<th>Kr\u00f3j<\/th>\n<\/tr>\n<tr>\n<td><code>google-tag-manager-mcp-server<\/code> 5.1.1<\/td>\n<td>18<\/td>\n<td>108 201 B<\/td>\n<td>27 000<\/td>\n<td>jedno narz\u0119dzie na rodzaj obiektu, akcja jako parametr<\/td>\n<\/tr>\n<tr>\n<td><code>gtm-mcp<\/code> 1.0.0<\/td>\n<td>104<\/td>\n<td>49 656 B<\/td>\n<td>12 400<\/td>\n<td>mniej wi\u0119cej jedno narz\u0119dzie na metod\u0119 API<\/td>\n<\/tr>\n<tr>\n<td><code>@theethosteam\/gtm-mcp<\/code> 1.1.1<\/td>\n<td>33<\/td>\n<td>19 797 B<\/td>\n<td>4 900<\/td>\n<td>bli\u017cej zadania, pi\u0119\u0107 przepis\u00f3w i wywo\u0142anie surowe<\/td>\n<\/tr>\n<\/table>\n<p>Pierwszy pakuje ca\u0142e API za 18 narz\u0119dzi. Siedemna\u015bcie z nich przyjmuje parametr <code>action<\/code>, kt\u00f3ry niesie \u0142\u0105cznie 101 akcji, z czego 38 tylko czyta; samo <code>gtm_tag<\/code> obejmuje create, get, list, update, remove i revert. Osiemnaste, <code>gtag_destination<\/code>, jedynie wypisuje list\u0119.<\/p>\n<p>Drugi odwzorowuje API niemal jeden do jednego: 104 narz\u0119dzia wobec 106 metod, 37 z nich nosi nazw\u0119 <code>get_\u2026<\/code> lub <code>list_\u2026<\/code>.<\/p>\n<p>Trzeci nie idzie za krojem API w og\u00f3le. Obok zwyk\u0142ych wywo\u0142a\u0144 prowadzi pi\u0119\u0107 przepis\u00f3w \u2014 <code>gtm_recipe_ga4_config<\/code>, <code>gtm_recipe_ga4_event<\/code>, <code>gtm_recipe_meta_pixel<\/code> i dwa przepisy na regu\u0142y \u2014 oraz licz\u0105ce 215 bajt\u00f3w wyj\u015bcie awaryjne o nazwie <code>gtm_raw<\/code> na wszystko, czego pozosta\u0142e 32 narz\u0119dzia nie si\u0119gaj\u0105.<\/p>\n<p>Czwarty kandydat w og\u00f3le nie wystartowa\u0142. <code>@yoryoboy\/gtm-mcp<\/code> 4.1.0 przerwa\u0142 komunikatem <code>Missing required configuration: DATABASE_URL, DB_ENCRYPTION_KEY<\/code>, poniewa\u017c zbudowano go jako hostowan\u0105 us\u0142ug\u0119 wielodost\u0119pn\u0105 z baz\u0105 PostgreSQL za plecami, a nie jako proces lokalny. Publikacja w npm z dopiskiem \u201eMCP server&#8221; nie m\u00f3wi nic o tym, czy pakiet uruchomi si\u0119 na stacji roboczej.<\/p>\n<h2>Koszt kontekstu nie kryje si\u0119 w liczbie narz\u0119dzi<\/h2>\n<p>Trzy listy narz\u0119dzi r\u00f3\u017cni\u0105 si\u0119 rozmiarem o wsp\u00f3\u0142czynnik 5,5, a kolejno\u015b\u0107 nie idzie za liczb\u0105 narz\u0119dzi. Serwer z 18 narz\u0119dziami wysy\u0142a 108 201 bajt\u00f3w definicji, ten z 33 tylko 19 797.<\/p>\n<p>Dwa narz\u0119dzia odpowiadaj\u0105 za blisko po\u0142ow\u0119 najwi\u0119kszej listy: <code>gtm_version<\/code> z 28 212 bajtami i <code>gtm_workspace<\/code> z 24 594, razem 48,8 procent ze 108 201. Powodem jest zas\u00f3b ContainerVersion. Mieszcz\u0105 si\u0119 w nim tagi, regu\u0142y, zmienne, klienty, foldery, strefy, szablony, transformacje i konfiguracja gtag, wi\u0119c w pe\u0142ni otypowany schemat tego zasobu musi by\u0107 du\u017cy \u2014 i jedzie w komplecie niezale\u017cnie od tego, czy jakakolwiek wersja zostanie kiedykolwiek tkni\u0119ta.<\/p>\n<p>To nie jest jednorazowy wydatek przy \u0142\u0105czeniu. Definicje narz\u0119dzi nale\u017c\u0105 do zapytania, jad\u0105 wi\u0119c z ka\u017cd\u0105 tur\u0105 sesji. Wynikaj\u0105 z tego dwie rzeczy. Pod\u0142\u0105czenie kilku serwer\u00f3w tego kroju naraz wype\u0142nia spor\u0105 cz\u0119\u015b\u0107 okna kontekstu, zanim praca si\u0119 zacznie. A serwer z lu\u017aniejszymi schematami nie jest z automatu wyborem s\u0142abszym: b\u0142\u0119dny typ pola API wy\u0142apuje w sekund\u0119, podczas gdy dok\u0142adny schemat op\u0142aca si\u0119 w ka\u017cdej pojedynczej turze.<\/p>\n<h2>O tym, co integracja mo\u017ce zmieni\u0107, rozstrzyga token<\/h2>\n<p>Wszystkie trzy serwery loguj\u0105 si\u0119 u Google tak samo, a w\u0142a\u015bciw\u0105 barierk\u0105 jest zakres OAuth. Ustawienie domy\u015blne najwi\u0119kszego z nich \u017c\u0105da wszystkich siedmiu, wraz z publikacj\u0105 i usuwaniem kontener\u00f3w \u2014 wida\u0107 to w jego <code>src\/constants\/scopes.ts<\/code> jako zwyk\u0142\u0105 list\u0119.<\/p>\n<p>Ten zbi\u00f3r da si\u0119 zaw\u0119zi\u0107. Serwer czyta <code>GTM_SCOPES<\/code> ze zmiennych \u015brodowiskowych i dzieli po spacjach lub przecinkach. Zaw\u0119\u017cenie dzia\u0142a jednak <strong>tylko w jednym z trzech tryb\u00f3w logowania<\/strong>. W kodzie <code>createAuthFromEnv<\/code> przekazuje odczytane zakresy wy\u0142\u0105cznie do ga\u0142\u0119zi kont us\u0142ugowych; ga\u0142\u0105\u017a tokenu od\u015bwie\u017caj\u0105cego dostaje identyfikator klienta, sekret i token, a ga\u0142\u0105\u017a tokenu dost\u0119pu dostaje sam token. Token od\u015bwie\u017caj\u0105cy niesie w sobie zakresy, z kt\u00f3rymi go wystawiono, a postawione obok <code>GTM_SCOPES<\/code> niczego nie zmienia i niczego nie zg\u0142asza.<\/p>\n<pre><code>{\n  \"mcpServers\": {\n    \"gtm\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"google-tag-manager-mcp-server\"],\n      \"env\": {\n        \"GOOGLE_SERVICE_ACCOUNT_KEY\": \"{...}\",\n        \"GTM_SCOPES\": \"https:\/\/www.googleapis.com\/auth\/tagmanager.readonly\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Druga brama siedzi w samym Tag Managerze. Konto us\u0142ugowe si\u0119gnie kontenera dopiero po wpisaniu jego adresu jako u\u017cytkownika, a to uprawnienie jest stopniowane osobno dla ka\u017cdego kontenera: odczyt, edycja, zatwierdzanie, publikacja. Konto z prawem edycji i zakresem publikacji i tak nie opublikuje.<\/p>\n<p>Trzecia brama stoi po stronie Claude Code i chwyta za nazw\u0119 narz\u0119dzia. Regu\u0142a blokuj\u0105ca <code>mcp__gtm__gtm_version<\/code> wyjmuje narz\u0119dzie publikacji z zasi\u0119gu nawet tam, gdzie token pozwoli\u0142by na wywo\u0142anie, a hak <code>PreToolUse<\/code> na t\u0119 sam\u0105 nazw\u0119 mo\u017ce zamiast tego za\u017c\u0105da\u0107 potwierdzenia. S\u0105 to wi\u0119c trzy niezale\u017cne bramy, a rozs\u0105dnie jest domkn\u0105\u0107 najbardziej zewn\u0119trzn\u0105 \u2014 token \u2014 bo tylko ona trzyma r\u00f3wnie\u017c wtedy, gdy do kontenera kto\u015b si\u0119gnie spoza tej sesji.<\/p>\n<h2>Gdzie si\u0119 to psuje<\/h2>\n<p><strong>Update zast\u0119puje, nie uzupe\u0142nia.<\/strong> Pi\u0119tna\u015bcie z 18 opis\u00f3w narz\u0119dzi m\u00f3wi to wprost: ka\u017cde pole nieobecne w \u0142adunku zostaje usuni\u0119te. Model, kt\u00f3ry wysy\u0142a tylko zmieniane pole, sprz\u0105ta reszt\u0119 tagu. Jedena\u015bcie narz\u0119dzi \u017c\u0105da dodatkowo odcisku ostatnio odczytanego stanu, co wymusza odczyt przed ka\u017cdym zapisem i zamienia nieuwa\u017cn\u0105 zmian\u0119 w komunikat b\u0142\u0119du zamiast w strat\u0119.<\/p>\n<p><strong>Tag nie jest obiektem p\u0142askim.<\/strong> Jego ustawienia le\u017c\u0105 w tablicy <code>parameter<\/code> z\u0142o\u017conej z klucza, typu i warto\u015bci, z o\u015bmioma typami w wyliczeniu \u2014 <code>template<\/code>, <code>integer<\/code>, <code>boolean<\/code>, <code>list<\/code>, <code>map<\/code>, <code>triggerReference<\/code>, <code>tagReference<\/code> i typem nieokre\u015blonym \u2014 przy czym <code>list<\/code> i <code>map<\/code> zagnie\u017cd\u017caj\u0105 w sobie kolejne parametry. To na tej strukturze, a nie na nazwie tagu, wyk\u0142adaj\u0105 si\u0119 generowane \u0142adunki.<\/p>\n<pre><code>{\n  \"name\": \"GA4 - purchase\",\n  \"type\": \"gaawe\",\n  \"parameter\": [\n    { \"type\": \"template\", \"key\": \"eventName\", \"value\": \"purchase\" },\n    { \"type\": \"tagReference\", \"key\": \"measurementId\",\n      \"value\": \"GA4 Configuration\" },\n    { \"type\": \"list\", \"key\": \"eventParameters\", \"list\": [\n      { \"type\": \"map\", \"map\": [\n        { \"type\": \"template\", \"key\": \"name\",  \"value\": \"value\" },\n        { \"type\": \"template\", \"key\": \"value\", \"value\": \"{{DLV - value}}\" }\n      ]}\n    ]}\n  ],\n  \"firingTriggerId\": [\"17\"]\n}<\/code><\/pre>\n<p><strong>\u201eGTM&#8221; jest w rejestrze pakiet\u00f3w niejednoznaczne.<\/strong> Wyszukanie <code>gtm-mcp<\/code> zwraca obok serwer\u00f3w do Tag Managera tak\u017ce te dla framework\u00f3w go-to-market; <code>@shashwatgtmalpha\/craft-gtm-mcp<\/code> ma <code>go-to-market<\/code> w\u015br\u00f3d s\u0142\u00f3w kluczowych, a <code>growth-mcp<\/code> okre\u015bla si\u0119 jako \u201eopen-source GTM MCP server&#8221;, nie maj\u0105c Tag Managera na my\u015bli w og\u00f3le. Lista s\u0142\u00f3w kluczowych rozdziela jedno od drugiego szybciej ni\u017c opis.<\/p>\n<h2>Czego to nie rozwi\u0105zuje<\/h2>\n<p>\u017badna z tych integracji nie stwierdzi, czy tag rzeczywi\u015bcie si\u0119 uruchamia. <code>quick_preview<\/code> przek\u0142ada przestrze\u0144 robocz\u0105 na wersj\u0119 podgl\u0105dow\u0105; strony nie \u0142aduje i o sp\u00f3\u017anionym data layerze nie powie nic. Ocena poprawno\u015bci zostaje przy sesji podgl\u0105du w przegl\u0105darce, dok\u0142adnie jak wcze\u015bniej.<\/p>\n<p>API nie zapisuje te\u017c, dlaczego co\u015b zmieniono. Wersja kontenera niesie nazw\u0119 i opis, a oba pozostaj\u0105 puste, o ile nie zostan\u0105 wype\u0142nione w tym samym wywo\u0142aniu \u2014 co czyni opis wersji najta\u0144szym miejscem na odnotowanie, kt\u00f3ry prompt wywo\u0142a\u0142 kt\u00f3r\u0105 zmian\u0119, a zarazem pierwsz\u0105 rzecz\u0105, jakiej brakuje przy tagu zak\u0142adanym w po\u015bpiechu.<\/p>\n<p>Droga plikowa te\u017c si\u0119 nie zestarza\u0142a. Wyeksportowany kontener to jeden plik JSON, a jego przejrzenie w postaci diffa nie potrzebuje ani tokenu, ani zakresu, ani serwera. Dla zmiany, kt\u00f3r\u0105 pisze model, a czyta cz\u0142owiek, eksport pozostaje drog\u0105 kr\u00f3tsz\u0105 \u2014 przewaga API zaczyna si\u0119 tam, gdzie zmian\u0119 trzeba zastosowa\u0107, a nie tam, gdzie trzeba j\u0105 zrozumie\u0107.<\/p>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/v2\" target=\"_blank\" rel=\"noopener noreferrer\">Tag Manager API v2 \u2014 Overview<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/v2\/authorization\" target=\"_blank\" rel=\"noopener noreferrer\">Authorizing Requests to the Tag Manager API<\/a><\/li>\n<li><a href=\"https:\/\/docs.claude.com\/en\/docs\/claude-code\/mcp\" target=\"_blank\" rel=\"noopener noreferrer\">Connect Claude Code to tools via MCP<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Zmiana kontenera Tag Managera przez prompt oznacza przekazanie modelowi j\u0119zykowemu tokenu OAuth. Trzy serwery MCP uruchomiono 9 wrze\u015bnia 2026 roku przez stdio i zapytano o list\u0119 narz\u0119dzi: 18, 33 i 104 narz\u0119dzia oraz od 20 do 108 kilobajt\u00f3w definicji, kt\u00f3re jad\u0105 z ka\u017cdym zapytaniem. Pod spodem u wszystkich le\u017cy to samo API: 106 metod, siedem zakres\u00f3w i dok\u0142adnie dwa wywo\u0142ania si\u0119gaj\u0105ce kontenera na \u017cywo.<\/p>\n","protected":false},"author":1,"featured_media":17844,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[106],"tags":[92061,92133,92346],"class_list":["post-17825","post","type-post","status-publish","format-standard","hentry","category-cloud-ai-pl","tag-automation-pl","tag-google-tag-manager-pl","tag-llm-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-13T17:45:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"luky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"luky\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu\",\"datePublished\":\"2026-09-13T17:45:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/\"},\"wordCount\":1555,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png\",\"keywords\":[\"Automation\",\"Google Tag Manager\",\"LLM\"],\"articleSection\":[\"Cloud &amp; AI\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/\",\"name\":\"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png\",\"datePublished\":\"2026-09-13T17:45:00+00:00\",\"description\":\"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png\",\"width\":1200,\"height\":630,\"caption\":\"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/author\\\/luky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog","description":"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/","og_locale":"en_US","og_type":"article","og_title":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog","og_description":"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-13T17:45:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png","type":"image\/png"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu","datePublished":"2026-09-13T17:45:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/"},"wordCount":1555,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png","keywords":["Automation","Google Tag Manager","LLM"],"articleSection":["Cloud &amp; AI"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/","name":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png","datePublished":"2026-09-13T17:45:00+00:00","description":"Trzy serwery MCP dla GTM zmierzone przez stdio: 18, 33 i 104 narz\u0119dzia, od 20 do 108 kB definicji i kt\u00f3ry zakres OAuth mo\u017ce publikowa\u0107.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-17825-claude-code-integracje-gtm-serwer-mc-n.png","width":1200,"height":630,"caption":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/claude-code-integracje-gtm-serwer-mcp-koszt-kontekstu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Integracje GTM dla Claude Code: trzy serwery MCP, liczba narz\u0119dzi i koszt kontekstu"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"],"url":"https:\/\/www.lukaswojcik.com\/blog\/author\/luky\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/17825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=17825"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/17825\/revisions"}],"predecessor-version":[{"id":17868,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/17825\/revisions\/17868"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/17844"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=17825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=17825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=17825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}