--- title: "Senuto MCP server" source: https://docs.senuto.com/en/mcp --- # Senuto MCP server [MCP](https://modelcontextprotocol.io/) (Model Context Protocol) is the standard AI assistants use to reach external data. The **Senuto MCP server** exposes Senuto's SEO data as tools the model calls on its own: ask Claude, ChatGPT or Cursor about a domain's visibility and the assistant fetches the numbers from Senuto instead of guessing them. The server is **remote**, so there is nothing to install: ``` https://mcp.senuto.com/mcp ``` Transport: **Streamable HTTP**. Authentication: **OAuth 2.0** with dynamic client registration — your client prompts you to log in to Senuto on first use. You never copy or paste a token. ## Markets Senuto's data covers **Poland, Czechia and Slovakia**. Keyword research tools also cover Denmark, Hungary, the Netherlands, Romania and Sweden. | Module | `country_id` values | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | Visibility Analysis | `200` Poland, Base 2.0 (**default**) · `1` Poland, standard database · `50` Czechia · `164` Slovakia | | Keyword research | `1` Poland (**default**) · `50` Czechia · `53` Denmark · `82` Hungary · `134` Netherlands · `153` Romania · `160` Sweden · `164` Slovakia | A domain or phrase outside these markets returns empty results. Keyword research tools do not accept `200`; for Poland they use `1`. ## Requirements MCP access is part of the Senuto account: | Plan | MCP server | | ----------------------- | ------------------------------------------------------------------ | | **Advanced**, **Prime** | included | | **Basic**, **Lite** | with the **MCP access** add-on, or the **API + MCP access** add-on | The add-on is enabled in the app: [app.senuto.com/user/user-package](https://app.senuto.com/user/user-package). Pricing: [senuto.com](https://www.senuto.com/en/pricing/). ## Connecting ### Add the server to your client **Claude** _Settings → Connectors → Add custom connector_, with `https://mcp.senuto.com/mcp` as the URL. Works the same in the desktop app and on claude.ai. **Claude Code** ```bash claude mcp add senuto --transport http https://mcp.senuto.com/mcp ``` **ChatGPT** _Settings → Connectors → Advanced → Developer mode → Create_, with `https://mcp.senuto.com/mcp` as the URL. **Cursor / VS Code** Cursor, in `.cursor/mcp.json`: ```json filename=".cursor/mcp.json" { "mcpServers": { "senuto": { "url": "https://mcp.senuto.com/mcp" } } } ``` VS Code (Copilot), in `settings.json`: ```json filename="settings.json" { "mcp": { "servers": { "senuto": { "type": "http", "url": "https://mcp.senuto.com/mcp" } } } } ``` ### Log in with OAuth The client opens the Senuto login page on first use. The MCP login is separate from the REST API token; you do not need one. ### Check that it works Ask something the assistant cannot know on its own, for example _"check the visibility of zalando.pl in Senuto"_. It should call `get_domain_statistics` and show the numbers. ## Tools **26 tools**, all read-only except `serp_create`. Every tool declares `title` and `readOnlyHint` in its MCP annotations. The list your client receives from the server is the source of truth; this page reflects it as of 2026-09-24. ### Visibility Analysis | Tool | Returns | | ------------------------------ | ----------------------------------------------------------------------------------------------------------- | | `get_domain_statistics` | domain visibility, keywords in TOP 3/10/50, domain rank, ads equivalent, AI Overview coverage and citations | | `get_positions_data` | keywords the domain ranks for, with positions, visibility, search volume, CPC and difficulty | | `get_competitors` | competing domains with shared keywords and their metrics | | `get_cannibalization_keywords` | keywords whose ranking URL changed between measurements, with the rows that cannot be compared marked | | `get_characteristics_table` | keywords broken down by word count, trends, search volume, difficulty or SERP features | | `get_keyword_history` | position history of a single keyword | | `get_positions_history_chart` | day-by-day history of TOP 3/10/50, visibility and ranking URLs | | `get_subdomains` | visibility split by subdomain | | `get_urls` | individual ranking URLs with keywords and visibility | | `suggest_domains` | domain suggestions for a partial name | | `get_countries_list` | supported markets | `fetch_mode` sets what counts as the domain: `topLevelDomain` (**default**) is the exact host given, `subdomain` is the whole site with all its subdomains. The two differ a lot on large sites — onet.pl had 67 827 keywords in TOP 10 as `topLevelDomain` and 552 891 as `subdomain` (measured 2026-09-22). The Senuto app shows `subdomain` by default, so this is the usual reason numbers differ from the app. Five tools also accept `catalog` (a section of a site and everything under it, path in `domain`: `example.com/blog`) and `url` (a single address): `get_positions_data`, `get_domain_statistics`, `get_characteristics_table`, `get_positions_history_chart` and `get_cannibalization_keywords`. The other visibility endpoints accept a path but return data for the whole domain, so their tools do not offer these two values. ### Keyword research | Tool | Returns | | ------------------------ | ----------------------------------------------------------------------------------------- | | `get_keyword_statistics` | search volume, CPC and 12-month trend of exactly the phrases you pass, up to 500 per call | | `get_keywords` | keyword ideas for a phrase, domain or URL | | `get_questions` | question keywords related to a phrase | | `get_groups` | semantic groups of keywords around a phrase, with the number of keywords in each | `get_keywords` returns **other** keywords matching the seed, sorted by volume, and the seed itself is often not among them. The volume of a specific phrase comes from `get_keyword_statistics`: one row per phrase, `found: false` when Senuto has no data for it. ### Rank Tracker | Tool | Returns | | ---------------------------- | -------------------------------------------------------------------------- | | `rt_get_active_projects` | your active projects | | `rt_get_projects_list` | all projects with their statistics | | `rt_list_groups` | keyword groups in a project | | `rt_get_project_keywords` | keywords tracked in a project | | `rt_get_position_data` | daily position history of tracked keywords in a date range | | `rt_get_snippets_statistics` | SERP features found for the project's keywords, compared between two dates | ### SERP Analysis An asynchronous flow: start an analysis, check its status, then read the reports. | Tool | What it does | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `serp_create` | starts a SERP analysis for a keyword — **the only tool that writes**, and it uses one unit of the SERP limit | | `serp_check` | task status; `has_serp_data: true` means the reports are ready | | `serp_list` | your SERP analysis tasks, newest first | | `serp_get_report` | a report from a finished task: `urls`, `content_statistics`, `keyword_stats`, `competitors_number`, `topic_leaders`, `groups`, `questions`, `related_keywords`, `keywords_propositions` | A crawl takes several minutes. For a keyword that already has a finished task on the account, `serp_create` returns that task and uses nothing. ### Account | Tool | Returns | | ------------ | -------------------------------------------------------------------- | | `get_limits` | every account limit with usage, remaining capacity and time to reset | ## Limits MCP calls draw on **the same counters** as the REST API and the Senuto app. There is no separate MCP allowance. | Tools | Counter | What uses a unit | | --------------------------------------------------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | Visibility Analysis tools (all except `suggest_domains` and `get_countries_list`) | `visibility_analysis_queries_per_day` | a new domain + `fetch_mode`. Every report for that pair is included, and asking about it again within 24 hours is free. `country_id` does not add a unit | | `get_keywords`, `get_questions` | `keywords_analysis_queries_per_day` | a new seed, once per day, shared between the two tools | | `get_keyword_statistics` | `tools_daily_limit` | each call, however many phrases it carries | | `serp_create` | `serp_analysis_daily_limit` | a new keyword + `country_id` | | everything else | — | free | `get_limits` costs nothing and shows `hours_to_reset` for each counter. Several counters named `_per_day` reset on a longer cycle; the value of `hours_to_reset` is the one to go by. ## Data and privacy The server reads your Senuto account through the Senuto API, with the permissions of the account you log in with. It keeps the OAuth tokens (encrypted) and a login record — email and IP address, deleted after three years — and stores no SEO data. Analytics events about failed calls carry the tool name and control parameters (market, pagination, dates, IDs); domains, keywords and URLs are replaced with a shape marker before they are sent. ## Troubleshooting | Symptom | Cause and fix | | ----------------------------------------------------- | ----------------------------------------------------------------------- | | Login does not complete, or the client cannot connect | the account has no MCP access — see [Requirements](#requirements) | | The client shows the server but no tools | authorization was not completed — remove the connector and add it again | | Empty results for a domain or phrase | outside Senuto's markets — see [Markets](#markets) | | `serp_get_report` returns `Unfinished task` | the crawl is still running; `serp_check` reports when it is ready | | Error `418` during a conversation | usually a spent limit; `get_limits` shows which | Service status: **[komunikat.senuto.com](https://komunikat.senuto.com)**.