Semalt for AI

Semalt MCP server

Connect an MCP-compatible AI client to read and manage the Semalt accounts available to this API key.

Streamable HTTPhttps://semalt.com/mcp

Developer access

Get your Semalt API key

Create a free Semalt account to access the Public API and connect AI tools through MCP.

Loading API access...

Connect

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.

Choose an account context with one key

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.

  • Sites and analytics: tools show records owned by, linked to or explicitly shared with the selected account. Use access_type=own to show only its own sites. Added websites belong to the selected account.
  • Site Tags: owned by individual accounts and fully editable by their active linked accounts. Responses identify the owner; different owners may have tags with the same name. Editing preserves ownership and affects all linked users. Account linking preserves tag IDs and assignments. Inactive linked owners' tags are hidden until restoration.
  • Keyword Groups: owned by individual accounts and editable by linked accounts. New groups belong to the selected account; editing an existing group preserves its owner. Groups apply to a site’s domain.
  • My SEO: use 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.
  • Indexing: URL history and balance belong to the selected account. 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.

How the AI should work

  1. Call 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.
  2. Use only account IDs returned by semalt_get_me or semalt_list_accounts when selecting an account. Treat linked_account_ids as relationship metadata, not as the account-selection list.
  3. Call a semalt_list_*_sites tool in that account context to discover accessible site records.
  4. Keep duplicate domains: they can represent distinct account or GSC records.
  5. Use a site record’s 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.
  6. Follow next_cursor while has_more is true.
  7. For AI Analytics, use model=gpt-4.1-nano or model=gpt-5-nano.
  8. Use site tags to organize and filter domains, and keyword groups to filter My SEO and Google SERP keyword data.
  9. Ask for explicit confirmation before deleting a tag or keyword group, or removing tag/group members.

Generate a PDF report

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.

Access rules

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.

Prefer direct HTTP?

Use the same data contracts without MCP through Public API v1.

View API documentation

Available tools

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.