MCP tools

propose_competitor

Propose adding a competitor domain to this asset's tracked set. QUEUES A REQUEST FOR HUMAN APPROVAL; it does not add the competitor. Returns applied:false and a change-request id.

When to use it

  • Use it when: The user asked to track a specific competitor domain, and list_competitors shows it is not tracked yet.
  • Not when: You are guessing who the competitors might be.

Parameters

NameTypeRequiredDescription
assetIdstringyesThe Visibility Asset UUID this concerns.
domainstringyesThe competitor hostname, e.g. example.com.
reasonstringnoWhy this competitor is relevant. Shown to the approver.

What comes back

Every field this tool can return. Checked against the handler on a real database in the test suite, not typed from memory.

FieldMeaning
dataStatusAlways queued. A person decides; nothing has changed.
statusAlways pending_human_approval. Nothing has happened yet.
appliedAlways false. This is the field an agent would have to lie about to misreport the call.
changeRequestIdThe queued request, which get_measurement_status lists under pendingChangeRequests until a person decides.
hostnameThe site the request concerns.
proposedWhat was proposed, in one phrase.
messageWhere a person approves it. Repeat this to the user rather than saying the change was made.

This does not change anything

It queues a change request for a human on the account to approve. Nothing is added, removed or measured until someone says yes, and the request records which credential asked. An agent cannot act on your account by itself.

Example request

The wire shape, from the schema. Every argument is a placeholder.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "propose_competitor",
    "arguments": {
      "assetId": "<assetId from list_assets>",
      "domain": "<domain>",
      "reason": "<reason>"
    }
  }
}

Every result carries dataStatus: queued: a person decides, nothing has changed.

Example prompt

Propose tracking example.com as a competitor of my site, and tell me it is waiting for my approval.

Calling it

Connect the MCP server at https://app.seoaio.ai/api/mcp over the Streamable HTTP transport. Per-customer authentication is required, so nothing is exposed without it. Call list_assets first: every other tool needs an assetId from it. A proposal is approved or rejected by a person at https://app.seoaio.ai/dashboard/requests.

Next

For an agent

Read the skill at /SKILL.md before calling anything. It carries the tool order and the rules for quoting a number, including the one that matters most: quoting a share without its interval overstates what we measured.