Senuto MCP server
MCP (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/mcpTransport: 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 . Pricing: senuto.com .
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.
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 |
| 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 |
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 .