--- title: "Serwer MCP Senuto" source: https://docs.senuto.com/mcp --- # Serwer MCP Senuto [MCP](https://modelcontextprotocol.io/) (Model Context Protocol) to standard, którym asystenci AI łączą się z zewnętrznymi źródłami danych. **Serwer MCP Senuto** wystawia dane Senuto jako narzędzia, po które model sięga sam: pytasz w Claude, ChatGPT czy Cursorze o widoczność domeny, a asystent pobiera liczby z Senuto, zamiast je zgadywać. Serwer jest **zdalny** — nie instalujesz niczego lokalnie: ``` https://mcp.senuto.com/mcp ``` Transport: **HTTP**. Uwierzytelnienie: **OAuth przy pierwszym użyciu** — nie pobierasz i nie wklejasz żadnego tokena. > **Informacja:** > MCP prowadzi do **tych samych danych** co [REST API](/get-started) — różni się tym, kto pisze > integrację: przy REST Ty w kodzie, przy MCP model na podstawie Twojego polecenia. Porównanie trzech > dróg (API, MCP, no-code): [API, MCP czy no-code](/api-mcp-nocode). ## Czego potrzebujesz MCP i REST API to **osobne uprawnienia** na koncie: | Plan / dodatek | REST API | Serwer MCP | | ------------------------------------------------------- | ------------- | ------------- | | **Advanced**, **Prime** | w cenie planu | w cenie planu | | Dodatek **„Dostęp do API + MCP"** (Basic, Lite) | tak | tak | | Dodatek **„Dostęp do MCP"** — 69 zł/mies. (Basic, Lite) | **nie** | tak | Dodatek włączasz samodzielnie w aplikacji: **[app.senuto.com/user/user-package](https://app.senuto.com/user/user-package)**. Ceny: stan na 2026-09-06, aktualne w [cenniku Senuto](https://www.senuto.com/pl/cennik/). Warunki dodatku API (rozliczenie miesięczne, rezygnacja przez nieprzedłużenie) opisuje strona [Dostęp do API](/access) — dodatek MCP działa tak samo. > **Ostrzeżenie:** > **Sam dodatek MCP nie odblokowuje REST API.** Serwer MCP uwierzytelnia się w API Senuto po swojemu; > Twoje własne żądanie wysłane wprost na `api.senuto.com` z takim kontem dostanie `403` z pustą treścią > (`{"success": false, "message": ""}`). Jeśli obok asystenta chcesz pisać własne integracje, potrzebujesz > dodatku obejmującego API. ## Podłączenie ### Dodaj serwer w swoim kliencie **Claude Code** ```bash claude mcp add senuto --transport http https://mcp.senuto.com/mcp ``` **Claude (aplikacja)** _Ustawienia → Konektory → Dodaj własny konektor_ — jako adres podaj `https://mcp.senuto.com/mcp`. Działa tak samo w aplikacji desktopowej i w wersji przeglądarkowej. **ChatGPT** _Settings → Connectors → Advanced → Developer mode → Create_ — jako adres podaj `https://mcp.senuto.com/mcp`. **Cursor / VS Code** Cursor — `.cursor/mcp.json` w projekcie albo w konfiguracji globalnej: ```json filename=".cursor/mcp.json" { "mcpServers": { "senuto": { "url": "https://mcp.senuto.com/mcp" } } } ``` VS Code (Copilot) — sekcja `mcp` w `settings.json`: ```json filename="settings.json" { "mcp": { "servers": { "senuto": { "type": "http", "url": "https://mcp.senuto.com/mcp" } } } } ``` **Gemini CLI** `~/.gemini/settings.json`: ```json filename="~/.gemini/settings.json" { "mcpServers": { "senuto": { "httpUrl": "https://mcp.senuto.com/mcp" } } } ``` Dla Codex CLI (`~/.codex/config.toml`) i pozostałych klientów aktualne fragmenty konfiguracji trzyma [mcp.senuto.com](https://mcp.senuto.com). ### Zaloguj się przez OAuth Klient wyświetli monit przy pierwszym użyciu i przeprowadzi Cię przez logowanie do Senuto. **Nie generujesz tu żadnego tokena ręcznie** i nie używasz tokena REST API — to dwie różne rzeczy. ### Sprawdź, że działa Poproś asystenta o coś, czego nie wie z głowy — np. _„sprawdź w Senuto widoczność zalando.pl"_. Powinien wywołać narzędzie `get_domain_statistics` i pokazać liczby. Jeśli odpowiada bez wywołania narzędzia, patrz [Gdy coś nie działa](#gdy-coś-nie-działa). ## Co potrafi serwer MCP **26 narzędzi** pokrywających cztery moduły plus odczyt limitów. Poniżej mapa: narzędzie MCP → odpowiadający mu endpoint REST, gdybyś chciał to samo zrobić we własnym kodzie. > **Informacja:** > Stan na **2026-09-15**. Źródłem prawdy jest lista narzędzi, którą serwer zgłasza Twojemu klientowi — > zestaw może się zmieniać częściej niż ta strona. ### Analiza widoczności | Narzędzie MCP | Co zwraca | Odpowiednik w REST API | | ------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | | `get_domain_statistics` | widoczność domeny, TOP3/10/50, ranking, ekwiwalent Ads oraz liczba fraz z AI Overview i cytowań domeny w nim | [`dashboard/getDomainStatistics`](/modules/visibility_analysis/va-dashboard-getDomainStatistics) | | `get_positions_data` | frazy, na które rankuje domena, z pozycjami i widocznością | [`positions/getData`](/modules/visibility_analysis/positions) | | `get_competitors` | konkurenci domeny z porównaniem metryk | [`competitors/getData`](/modules/visibility_analysis/va-competitors-getData) | | `get_cannibalization_keywords` | frazy, o które konkuruje kilka własnych URL-i | [`cannibalization/getKeywords`](/modules/visibility_analysis/va-cannibalization-getKeywords) | | `get_characteristics_table` | rozkład fraz wg cech (długość, trendy, wyszukiwania, trudność) | [`keywords/getCharacteristicsTable`](/modules/visibility_analysis/va-keywords-getCharacteristicsTable) | | `get_keyword_history` | historia pozycji pojedynczej frazy | [`positions/getKeywordHistory`](/modules/visibility_analysis/va-positions-getKeywordHistory) | | `get_positions_history_chart` | historia rozkładu pozycji (dane do wykresu) | — (poza zakresem tej dokumentacji) | | `get_subdomains` | widoczność w podziale na subdomeny | [`sections/getSubdomains`](/modules/visibility_analysis/va-sections-getSubdomains) | | `get_urls` | pojedyncze URL-e rankujące w wynikach | [`sections/getUrls`](/modules/visibility_analysis/va-sections-getUrls) | | `suggest_domains` | podpowiedzi domen do wyszukiwarki | — (poza zakresem tej dokumentacji) | | `get_countries_list` | lista obsługiwanych rynków | [Kraje i `country_id`](/countries) | ### Baza słów kluczowych | Narzędzie MCP | Co zwraca | Odpowiednik w REST API | | ------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `get_keyword_statistics` | wyszukiwania, CPC i trend dokładnie tych fraz, które podasz — do 500 na wywołanie | [`tools/statistics/create`](/modules/keywords_analysis/ka-statistics-create) → [`checkData`](/modules/keywords_analysis/ka-statistics-checkData) → [`getKeywords`](/modules/keywords_analysis/ka-statistics-getKeywords) | | `get_keywords` | propozycje fraz dla frazy, domeny albo URL-a | [`keywords/getKeywords`](/modules/keywords_analysis/ka-keywords-getKeywords) | | `get_groups` | grupy semantyczne dla frazy | [`keywords/getGroups`](/modules/keywords_analysis/ka-keywords-getGroups) | | `get_questions` | frazy pytające powiązane z frazą | [`keywords/getQuestions`](/modules/keywords_analysis/ka-keywords-getQuestions) | > **Ostrzeżenie:** > `get_keywords` nie zwraca wyszukiwań frazy, którą podasz — zwraca inne frazy do niej dopasowane, > a sam seed często nie ma w wynikach własnego wiersza. Wyszukiwania konkretnych fraz daje > `get_keyword_statistics`: jeden wiersz na frazę, `found: false`, gdy Senuto nie ma dla niej danych, > i `searches: 0`, gdy fraza jest znana, ale bez wolumenu. Narzędzia Bazy słów kluczowych obsługują `country_id`: `1` (PL), `50` (CZ), `53` (DK), `82` (HU), `134` (NL), `153` (RO), `160` (SE), `164` (SK). ### Monitoring (Rank Tracker) | Narzędzie MCP | Co zwraca | Odpowiednik w REST API | | ---------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | | `rt_get_active_projects` | Twoje aktywne projekty | [`projects/getMyActiveProjects`](/modules/rank_tracker/rt-projects-getMyActiveProjects) | | `rt_get_projects_list` | lista projektów z rozszerzonymi danymi | [`projects/getListWithExtendedData`](/modules/rank_tracker/rt-projects-getListWithExtendedData) | | `rt_list_groups` | wszystkie grupy fraz w projekcie (pobiera każdą stronę) | [`groups/list`](/modules/rank_tracker/rt-groups-list) | | `rt_get_project_keywords` | frazy monitorowane w projekcie (id + treść, bez pozycji) | [`keywords/getProjectKeywords`](/modules/rank_tracker/rt-keywords-getProjectKeywords) | | `rt_get_position_data` | dzienna historia pozycji fraz w zakresie dat | [`positions/getData`](/modules/rank_tracker/rt-positions-getData) | | `rt_get_snippets_statistics` | statystyki snippetów i funkcji SERP w projekcie | [`snippets/getStatistics`](/modules/rank_tracker/rt-snippets-getStatistics) | ### Analiza SERP Ten sam przepływ asynchroniczny co w REST API ([Eksporty i zadania async](/exports-and-tasks)): zlecasz analizę, odpytujesz o status, dopiero potem czytasz raporty. | Narzędzie MCP | Co robi | Odpowiednik w REST API | | ----------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------- | | `serp_create` | zleca analizę SERP dla frazy — **zużywa limit** | [`serp_analysis/create`](/modules/serp_analysis/serp-task-create) | | `serp_check` | status zadania (`has_serp_data`, `has_keywords_analysis_data`) | [`serp_analysis/check`](/modules/serp_analysis/serp-task-check) | | `serp_list` | Twoje zadania SERP, od najnowszych | — (poza zakresem tej dokumentacji) | | `serp_get_report` | raport z gotowego zadania (9 udokumentowanych rodzajów, patrz niżej) | strony raportów w [module SERP](/modules/serp_analysis) | Raporty dostępne w `serp_get_report` (parametr `report`): [`urls`](/modules/serp_analysis/serp-urls-getList), [`content_statistics`](/modules/serp_analysis/serp-content-getStatistics), [`keyword_stats`](/modules/serp_analysis/serp-keyword-getStatistics), [`competitors_number`](/modules/serp_analysis/serp-keyword-getCompetitorsNumber), [`topic_leaders`](/modules/serp_analysis/serp-keyword-getTopicLeaders), [`groups`](/modules/serp_analysis/serp-keyword-getGroups), [`questions`](/modules/serp_analysis/serp-keyword-getQuestions), [`related_keywords`](/modules/serp_analysis/serp-keyword-getRelatedKeywords), [`keywords_propositions`](/modules/serp_analysis/serp-keyword-getKeywordsPropositions). Parametr `report` przyjmuje jeszcze `titles`, ale ten raport zwraca pustą listę na każdym zadaniu. Tytuły stron rankujących znajdziesz w raporcie `urls`. ### Konto | Narzędzie MCP | Co zwraca | Odpowiednik w REST API | | ------------- | ----------------------------------------------------------- | -------------------------------------------------------------------- | | `get_limits` | stan wszystkich limitów konta naraz; nie zużywa żadnej puli | [`GET /api/users/getLimits`](/rate-limits#podgląd-limitów-przez-api) | ## Limity — jedna pula na konto Wywołania przez MCP **czerpią z tych samych liczników co REST API i klikanie w aplikacji**. Nie ma osobnego „limitu MCP": zapytanie asystenta o nową domenę zużywa tę samą jednostkę co odpowiadające mu żądanie REST. Zasady, okresy rozliczeniowe i _Grace Window_ opisuje strona [Limity zapytań](/rate-limits). W praktyce, przy pracy z asystentem: - **`get_limits` jest darmowe** — możesz kazać modelowi sprawdzać stan puli, ile chcesz. - **`serp_create` kosztuje** jednostkę `serp_analysis_daily_limit`. Zanim zlecisz nową analizę, warto sprawdzić `serp_list` — raporty **istniejącego, zakończonego** zadania dla tej samej frazy pobierzesz bez naliczenia. - **Czytanie gotowych danych zwykle nie kosztuje** — paginacja i kolejne raporty tego samego zadania podlegają limitom liczby wierszy, nie limitowi zapytań. - **`get_keyword_statistics` i `get_keywords` czerpią z osobnych pul.** Pierwsze liczy się do `tools_daily_limit` i kosztuje jedną jednostkę na wywołanie, choćby niosło 500 fraz. Drugie liczy się do `keywords_analysis_queries_per_day`, po jednostce za każdy seed — pięć seedów to pięć jednostek, w jednym wywołaniu czy w pięciu. - **Pętla w rozmowie potrafi wyczerpać limit**, którego potrzebujesz do pracy w panelu — to ta sama pula. ## Czym MCP różni się od REST API | | Serwer MCP | REST API | | -------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | **Zakres** | 26 narzędzi, wybrane raporty | 124 udokumentowane endpointy | | **Rynki (Analiza widoczności)** | `1` (PL 1.0), `50` (CZ), `164` (SK), `200` (PL 2.0) | wszystkie [obsługiwane rynki](/modules/visibility_analysis#obsługiwane-rynki-bazy-krajowe) | | **Rynki (Baza słów kluczowych)** | `1`, `50`, `53`, `82`, `134`, `153`, `160`, `164` — dla Polski `1`, bez `200` | jak wyżej | | **Wielkość odpowiedzi** | `detail_level`: `summary` / `standard` / `extended` | pełna odpowiedź + [paginacja](/types/pagination) | | **Strona wyników** | do 100 rekordów (`rt_get_position_data`: do 50) | limity per endpoint | | **Zapis** | tylko `serp_create` (zlecenie analizy) — reszta to odczyt | pełna powierzchnia odczytowa modułów | | **Kto ustala parametry** | model, na podstawie Twojego polecenia | Ty, w kodzie | > **Ostrzeżenie:** > **Baza 2.0 dla Polski (`country_id: 200`) nie działa w narzędziach Bazy słów kluczowych** — tam użyj > `country_id: 1`. W Analizie widoczności `200` jest dostępne i to nadal > [zalecana baza](/modules/visibility_analysis#obsługiwane-rynki-bazy-krajowe). > **Informacja:** > Parametry dobiera model, więc **warto je weryfikować** — zwłaszcza rynek (`country_id`) i tryb domeny > (`fetch_mode`: `topLevelDomain` czy `subdomain`). Najprościej podać je wprost w poleceniu: > _„…dla `senuto.com`, cała domena, baza 2.0"_. Do powtarzalnych, rozliczanych raportów zamiast MCP > użyj REST API — tam parametry są w Twoim kodzie, nie w interpretacji promptu. ## Gdy coś nie działa | Objaw | Przyczyna i co zrobić | | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | Logowanie OAuth się nie kończy albo klient nie łączy się z serwerem | sprawdź, czy Twoje konto ma dostęp do MCP (plan Advanced/Prime albo dodatek); przy wątpliwościach napisz na czacie do supportu | | Klient widzi serwer, ale nie ma żadnych narzędzi | serwer podłączony bez zakończonej autoryzacji — usuń konektor i dodaj go ponownie, przechodząc OAuth do końca | | Asystent odpowiada „z głowy", bez wywołania narzędzia | poproś wprost: _„użyj narzędzia Senuto"_ i wskaż raport; sprawdź też, czy konektor jest włączony w tej rozmowie | | `serp_get_report` zwraca `Unfinished task` | crawl jeszcze trwa — odpytuj `serp_check`, aż `progress.has_serp_data` będzie `true` | | Błąd `418` w trakcie rozmowy | najczęściej wyczerpany limit modułu — sprawdź `get_limits` ([Limity zapytań](/rate-limits)) | | `403` z pustą treścią przy własnych żądaniach `curl`-em | masz dostęp do MCP, ale nie do REST API — patrz [Czego potrzebujesz](#czego-potrzebujesz) | Bieżące informacje o awariach: **[komunikat.senuto.com](https://komunikat.senuto.com)**. ## Co dalej - [API, MCP czy no-code](/api-mcp-nocode) - [Limity zapytań](/rate-limits) - [Dostęp do API](/access) - [Instrukcja podłączenia (mcp.senuto.com)](https://mcp.senuto.com)