semalt_get_me Get the API key owner account_id and that account’s linked_account_ids.
Connect an MCP-compatible AI client to read and manage the Semalt accounts available to this API key.
https://semalt.com/mcpDeveloper access
Create a free Semalt account to access the Public API and connect AI tools through MCP.
Configure a remote Streamable HTTP MCP server with a URL that contains your Semalt API key as the token query parameter. This works for MCP clients that accept only a server URL.
{
"mcpServers": {
"semalt": {
"url": "https://semalt.com/mcp?token=YOUR_API_KEY"
}
}
}Keep the key private. A URL token can appear in browser history, access logs, proxy logs, or shared configuration. Use a dedicated API key for URL-only MCP connections and rotate it if the URL is exposed.
The connection key identifies the token owner. Call semalt_get_me to identify that owner’s account_id, then semalt_list_accounts to discover accounts available for selection by name and email. Keep the same connection and pass the chosen account_id to each account tool.
For example, a key owned by account 10 can list indexing URLs for another available account 20 using these tool-call arguments:
{
"name": "semalt_list_indexing_urls",
"arguments": {
"account_id": 20,
"page": 1,
"page_size": 50
}
}Every account tool requires account_id. The server does not remember a selected account between calls. semalt_get_account reads a selected account’s details; semalt_get_me always identifies the key owner. linked_account_ids describes the returned account’s linked group and includes the account itself; it is not the list of all accounts available to the API key. Use semalt_list_accounts to determine which account IDs are selectable. Responses return IDs as strings; supply account, site and campaign IDs as integers in tool arguments.
Account results include meta.actor_account_id for the key owner and meta.account_id for the selected account. The two global ranking tools do not take an account_id.
access_type=own to show only its own sites. Added websites belong to the selected account.semalt_list_my_seo_campaigns to obtain campaign_id. Use that ID together with the same selected account_id for keywords and backlinks. Campaigns for the same domain in different accounts remain separate. A launched FullSEO campaign can switch between auto and manual keyword mode. Auto mode permits rejecting keywords and restoring rejected keywords to pending; manual mode also permits approving and rejecting keywords, changing approved-keyword backlink weights, and applying a one-shot percentage allocation.semalt_add_indexing_urls spends that account’s balance; linked-account balances are not pooled.For semalt_list_my_seo_backlinks, search matches the start of the donor domain, case-insensitively. For example, blog matches blog.example.com; example does not match blog.example.com. Keep using link_type and domain_rating to narrow placements further.
Check the intended account before submitting indexing URLs. If a submission response is lost, check that same account’s URL list before retrying; indexing submissions do not support an idempotency key.
semalt_get_me for the token owner or semalt_list_accounts for account contexts available for selection, then explicitly pass the intended account_id to each account tool.semalt_get_me or semalt_list_accounts when selecting an account. Treat linked_account_ids as relationship metadata, not as the account-selection list.semalt_list_*_sites tool in that account context to discover accessible site records.id as site_id in site detail tools. Its owner_account.account_id identifies the owner; it does not automatically select that account. Use campaign_id from semalt_list_my_seo_campaigns for campaign tools.next_cursor while has_more is true.model=gpt-4.1-nano or model=gpt-5-nano.Call semalt_get_report_catalog(account_id) first. Each item contains a ready-to-fill definition_template and a scope.id_field that names the exact ID field. Copy the template into semalt_generate_report and replace its null scope ID with a value from the matching site or campaign tool.
For custom PDF branding, call semalt_list_report_white_labels(account_id), take the returned white_label_id, and add it inside the report definition. The white-label tool lists active labels with uploaded logos. Omit white_label_id to use Semalt branding.
semalt_list_report_white_labels({ "account_id": 20, "search": "Acme" })
{
"data": [
{
"white_label_id": "42",
"name": "Acme Reports",
"company_name": "Acme Ltd"
}
],
"meta": { "limit": 50, "has_more": false }
}semalt_get_report_catalog({ "account_id": 20 })
semalt_generate_report({
"account_id": 20,
"idempotency_key": "keywords-456-latest",
"definition": {
"kind": "table",
"key": "my_seo.keywords",
"scope": { "campaign_id": 456 },
"period": { "type": "latest_snapshot" },
"filters": { "status": "approved" },
"white_label_id": "42"
},
"disposition": "attachment"
})The template already contains kind, key, scope, period, and filters. Add only optional fields listed by that catalog item; white_label_id is the optional global field for custom PDF branding. For Search Console reports and supported tables, comparison: { type: "previous_period" } puts the preceding equal-length period into the same PDF.
semalt_generate_report({
"account_id": 20,
"idempotency_key": "gsc-123-2026-08-compare",
"definition": {
"kind": "report",
"key": "search_console.site_overview",
"scope": { "site_id": 123 },
"period": { "type": "fixed", "date_from": "2026-08-01", "date_to": "2026-08-31" },
"comparison": { "type": "previous_period" }
}
})Anyone holding a report link can open the PDF for up to 90 days, unless the links are revoked. Use inline to open it or attachment to download it. A report generation does not send email.
If a tool response is lost, reuse the same idempotency_key and definition. A processing result can be checked with semalt_get_report_run. A failed generation requires a new key for another attempt. Existing files and new links retain their original expiry.
The MCP server uses the API key from your Semalt account. Each account tool checks access to the selected account and then to the requested resource. A shared website alone does not grant access to its owner’s account context. Hidden and removed records are excluded.
A campaignid must belong to the selected accountid. Access to the selected account and requested resource is checked on every call; the selected account’s normal linked-group scope applies to site, tag and keyword-group operations. Product limits and campaign requirements continue to apply. Percentage allocation uses the same one-shot behavior as the dashboard: supplied approved-keyword percentages are fixed for that request, and omitted approved keywords share the remainder equally. It does not create a persistent fixed-percentage setting; call semalt_list_my_seo_keywords afterwards to inspect the resulting weights and shares.
Use the same data contracts without MCP through Public API v1.
View API documentation
semalt_get_me Get the API key owner account_id and that account’s linked_account_ids.
semalt_list_accounts List accounts available for selection with this API key.
semalt_get_account Get the selected account and its linked_account_ids.
semalt_list_sites List every accessible physical Semalt site row.
semalt_get_site Get one physical Semalt site row by site_id.
semalt_list_search_console_sites List physical Search Console rows with summary metrics.
semalt_get_search_console_overview Get Search Console summary and charts for a site_id.
semalt_get_search_console_traffic Get a daily Search Console metric series for a site_id.
semalt_list_search_console_data List Search Console queries, pages, devices, or countries.
semalt_list_google_serp_sites List physical sites with Google SERP metrics.
semalt_get_google_serp_overview Get Google SERP summary metrics for a site_id.
semalt_get_google_serp_data Get Google SERP keywords, pages, or competitors.
semalt_list_google_serp_rankings List global Google SERP rankings.
semalt_list_ai_analytics_sites List physical sites with AI visibility metrics.
semalt_get_ai_analytics_overview Get AI visibility summary metrics for a site_id.
semalt_get_ai_analytics_data Get AI Analytics queries, pages, or competitors.
semalt_list_ai_analytics_rankings List global AI visibility rankings.
semalt_list_my_seo_campaigns List campaigns owned by account_id and obtain campaign_id for detail tools.
semalt_list_my_seo_keywords List keywords for a campaign_id owned by account_id.
semalt_set_my_seo_keyword_mode Set a launched FullSEO campaign keyword_mode to auto or manual.
semalt_update_my_seo_keyword_statuses Update keyword_ids with status pending, approved, or rejected according to the campaign keyword mode.
semalt_update_my_seo_keyword_backlink_weights Set items shaped as {id, backlink_weight} for approved campaign keywords; backlink_weight is 1 to 10000.
semalt_apply_my_seo_backlink_allocation Set items shaped as {id, percentage} for a one-shot allocation; omitted approved keywords share the remainder equally and no fixed setting is persisted.
semalt_list_my_seo_backlinks List backlinks for a campaign_id owned by account_id. search matches the start of the donor domain, case-insensitively.
semalt_list_indexing_urls List indexing URLs and statuses for account_id.
semalt_add_site Add a website owned by account_id.
semalt_add_my_seo_keywords Add manual keyword and target URL pairs to a launched FullSEO campaign.
semalt_add_indexing_urls Submit URLs for indexing using account_id’s balance. Check the intended payer and avoid automatic retries after a lost response.
semalt_list_site_tags List tags owned by the selected account and active linked accounts, including owner details for namesakes.
semalt_create_site_tag Create a tag owned by the selected account and editable by its active linked accounts. Duplicate names for the same owner are rejected.
semalt_update_site_tag Rename or recolor a site tag.
semalt_delete_site_tag Delete a site tag and its assignments after confirmation.
semalt_list_site_tag_sites List domains assigned to a site tag.
semalt_add_sites_to_tag Assign a site tag to accessible domains.
semalt_remove_sites_from_tag Remove a site tag from domains after confirmation.
semalt_list_keyword_groups List reusable keyword groups for a site.
semalt_create_keyword_group Create a reusable keyword group for a site.
semalt_update_keyword_group Rename an editable keyword group.
semalt_delete_keyword_group Delete an editable keyword group after confirmation.
semalt_list_keyword_group_keywords List keywords in a reusable group.
semalt_add_keyword_group_keywords Add keywords to an editable group.
semalt_remove_keyword_group_keywords Remove keyword rows from a group after confirmation.
semalt_get_report_catalog Discover PDF report types, ready-to-fill definition templates, comparison modes, columns, and quotas.
semalt_list_report_white_labels Find active white labels with uploaded logos. Use the returned white_label_id inside semalt_generate_report definition for custom PDF branding.
semalt_generate_report Generate a PDF synchronously from a catalog definition_template and return public links valid for 90 days. Add white_label_id from semalt_list_report_white_labels inside definition for custom branding. Search Console reports and supported Search Console tables accept comparison.type=previous_period for comparison charts and deltas. Reuse the idempotency key after a lost response.
semalt_list_report_runs List report generation history.
semalt_get_report_run Get a report generation status and metadata.
semalt_create_report_links Issue public view and download links for a ready PDF.
semalt_revoke_report_links Revoke all existing public links for a report run.