budgetSEO

Affordable SEO & GEO data: rank tracking, keywords, competitors, AI visibility.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
75%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'find_quick_wins' description lacks action verbin find_quick_wins

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~7,080Tokens (tool definitions)
~3.8 KBTypical response size
Significant attention impact (5.53% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "budget-seo-mcp": {
      "url": "https://www.budgetseo.ai/api/mcp"
    }
  }
}

Remote endpoints

https://www.budgetseo.ai/api/mcpstreamable-http

What it can do

Tool inventory

Tools (17)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_seo_briefing(projectId, since)

Use this first when the user asks what to do with SEO today, what changed, or what to focus on. Returns the top actions, recent rank moves, plan limits, and the next automatic check.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "since": {
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "generatedAt": {
      "type": "string"
    },
    "since": {
      "type": "string"
    },
    "actions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "actionKey": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "quick_win",
              "rank_drop",
              "research_idea",
              "competitor_gap",
              "ai_visibility"
            ]
          },
          "title": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "estimatedMonthlyClicks": {
            "type": [
              "number",
              "null"
            ]
          },
          "effort": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keywordId": {
            "type": [
              "string",
              "null"
            ]
          },
          "keyword": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "actionKey",
          "type",
          "title",
          "why",
          "estimatedMonthlyClicks",
          "effort",
          "nextSteps",
          "projectId",
          "projectName",
          "keywordId",
          "keyword"
        ],
        "additionalProperties": false
      }
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keywordId": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keyword": {
            "type": "string"
          },
          "previousPosition": {
            "type": [
              "number",
              "null"
            ]
          },
          "position": {
            "type": [
              "number",
              "null"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "up",
              "down",
              "new",
              "lost"
            ]
          },
          "places": {
            "type": [
              "number",
              "null"
            ]
          },
          "estimatedMonthlyClicksDelta": {
            "type": [
              "number",
              "null"
            ]
          },
          "rankingUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "keywordId",
          "projectId",
          "projectName",
          "keyword",
          "previousPosition",
          "position",
          "kind",
          "places",
          "estimatedMonthlyClicksDelta",
          "rankingUrl"
        ],
        "additionalProperties": false
      }
    },
    "plan": {
      "type": "object",
      "properties": {
        "tier": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "schedule": {
          "type": "string"
        },
        "keywordSlotsRemaining": {
          "type": "number"
        },
        "maxKeywords": {
          "type": "number"
        },
        "upgradeUrl": {
          "type": "string"
        }
      },
      "required": [
        "tier",
        "name",
        "schedule",
        "keywordSlotsRemaining",
        "maxKeywords",
        "upgradeUrl"
      ],
      "additionalProperties": false
    },
    "usage": {
      "type": "object",
      "properties": {
        "used": {
          "type": "number"
        },
        "limit": {
          "type": "number"
        },
        "period": {
          "type": "string",
          "enum": [
            "today",
            "month"
          ]
        }
      },
      "required": [
        "used",
        "limit",
        "period"
      ],
      "additionalProperties": false
    },
    "nextCheckAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "searchConsole": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "connected": {
              "type": "boolean"
            },
            "projects": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "projectId": {
                    "type": "string"
                  },
                  "projectName": {
                    "type": "string"
                  },
                  "linked": {
                    "type": "boolean"
                  },
                  "siteUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clicks": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "impressions": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "averagePosition": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "clicksDelta": {
                    "type": [
                      "number",
                      "null"
                    ]
                  }
                },
                "required": [
                  "projectId",
                  "projectName",
                  "linked",
                  "siteUrl",
                  "clicks",
                  "impressions",
                  "averagePosition",
                  "clicksDelta"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "connected",
            "projects"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "generatedAt",
    "since",
    "actions",
    "changes",
    "plan",
    "usage",
    "nextCheckAt",
    "searchConsole"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢find_quick_wins(projectId, limit)

Use when the user asks for low-hanging fruit, quick wins, or striking-distance keywords. Each result includes the estimated monthly clicks gained by moving up.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "actions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "actionKey": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "quick_win",
              "rank_drop",
              "research_idea",
              "competitor_gap",
              "ai_visibility"
            ]
          },
          "title": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "estimatedMonthlyClicks": {
            "type": [
              "number",
              "null"
            ]
          },
          "effort": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keywordId": {
            "type": [
              "string",
              "null"
            ]
          },
          "keyword": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "actionKey",
          "type",
          "title",
          "why",
          "estimatedMonthlyClicks",
          "effort",
          "nextSteps",
          "projectId",
          "projectName",
          "keywordId",
          "keyword"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "actions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢find_opportunities(projectId, kinds, limit)

Use for best opportunities across quick wins, research ideas, competitor gaps, rank drops, and AI Overview citation gaps. Filter with kinds when the user names one of those.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "kinds": {
      "minItems": 1,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "quick_win",
          "rank_drop",
          "research_idea",
          "competitor_gap",
          "ai_visibility"
        ]
      }
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "actions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "actionKey": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "quick_win",
              "rank_drop",
              "research_idea",
              "competitor_gap",
              "ai_visibility"
            ]
          },
          "title": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "estimatedMonthlyClicks": {
            "type": [
              "number",
              "null"
            ]
          },
          "effort": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keywordId": {
            "type": [
              "string",
              "null"
            ]
          },
          "keyword": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "actionKey",
          "type",
          "title",
          "why",
          "estimatedMonthlyClicks",
          "effort",
          "nextSteps",
          "projectId",
          "projectName",
          "keywordId",
          "keyword"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "actions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢list_projects

List the user's BudgetSEO projects, keyword counts, whether a project is paused by the plan, and how many keyword slots remain.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "projects": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "keywordCount": {
            "type": "number"
          },
          "isPlanLocked": {
            "type": "boolean"
          },
          "searchConsoleLinked": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "domain",
          "keywordCount",
          "isPlanLocked",
          "searchConsoleLinked"
        ],
        "additionalProperties": false
      }
    },
    "plan": {
      "type": "object",
      "properties": {
        "tier": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "maxKeywords": {
          "type": "number"
        },
        "keywordsUsed": {
          "type": "number"
        },
        "keywordSlotsRemaining": {
          "type": "number"
        }
      },
      "required": [
        "tier",
        "name",
        "maxKeywords",
        "keywordsUsed",
        "keywordSlotsRemaining"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "projects",
    "plan"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_rank_changes(projectId, days)

Winners and losers over a recent window. Use for what moved, what dropped, or a weekly review. days defaults to 7.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 90
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "since": {
      "type": "string"
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keywordId": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keyword": {
            "type": "string"
          },
          "previousPosition": {
            "type": [
              "number",
              "null"
            ]
          },
          "position": {
            "type": [
              "number",
              "null"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "up",
              "down",
              "new",
              "lost"
            ]
          },
          "places": {
            "type": [
              "number",
              "null"
            ]
          },
          "estimatedMonthlyClicksDelta": {
            "type": [
              "number",
              "null"
            ]
          },
          "rankingUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "keywordId",
          "projectId",
          "projectName",
          "keyword",
          "previousPosition",
          "position",
          "kind",
          "places",
          "estimatedMonthlyClicksDelta",
          "rankingUrl"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "since",
    "changes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_keyword_action_plan(keywordId)

Deep context for one tracked keyword: ranking URL, history, SERP features, competitors, and a checklist. Use after a briefing when an agent can edit the page. Confirm with the user before changing the site.

Input Schema

{
  "type": "object",
  "properties": {
    "keywordId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "keywordId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "keyword": {
      "type": "string"
    },
    "projectId": {
      "type": "string"
    },
    "projectName": {
      "type": "string"
    },
    "position": {
      "type": [
        "number",
        "null"
      ]
    },
    "previousPosition": {
      "type": [
        "number",
        "null"
      ]
    },
    "bestPosition": {
      "type": [
        "number",
        "null"
      ]
    },
    "rankingUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "searchVolume": {
      "type": [
        "number",
        "null"
      ]
    },
    "difficulty": {
      "type": [
        "number",
        "null"
      ]
    },
    "intent": {
      "type": [
        "string",
        "null"
      ]
    },
    "device": {
      "type": "string"
    },
    "serpFeatures": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "aiOverviewPresent": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "aiOverviewCited": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "history": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "checkedAt": {
            "type": "string"
          },
          "position": {
            "type": [
              "number",
              "null"
            ]
          },
          "rankingUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "checkedAt",
          "position",
          "rankingUrl"
        ],
        "additionalProperties": false
      }
    },
    "competitors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string"
          },
          "position": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "domain",
          "position"
        ],
        "additionalProperties": false
      }
    },
    "checklist": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "searchConsole": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "clicks": {
              "type": "number"
            },
            "impressions": {
              "type": "number"
            },
            "ctr": {
              "type": "number"
            },
            "averagePosition": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "clicks",
            "impressions",
            "ctr",
            "averagePosition"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "keyword",
    "projectId",
    "projectName",
    "position",
    "previousPosition",
    "bestPosition",
    "rankingUrl",
    "searchVolume",
    "difficulty",
    "intent",
    "device",
    "serpFeatures",
    "aiOverviewPresent",
    "aiOverviewCited",
    "history",
    "competitors",
    "checklist",
    "searchConsole"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_competitor_overview(projectId)

Competitors and how many tracked keywords each one outranks the user on. Uses saved competitor data only and never starts a paid lookup. keywordsAhead is null until that competitor has been checked.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "competitors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "competitorId": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "projectName": {
            "type": "string"
          },
          "keywordsAhead": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "competitorId",
          "domain",
          "projectId",
          "projectName",
          "keywordsAhead"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "competitors"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_ai_visibility(projectId)

Latest AI search snapshot and keywords where an AI Overview shows but does not cite the user. Pass projectId when the user has more than one project.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "available": {
      "type": "boolean"
    },
    "reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "latest": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string"
          },
          "mentions": {
            "type": "number"
          },
          "shareOfVoice": {
            "type": [
              "number",
              "null"
            ]
          },
          "aiSearchVolume": {
            "type": "number"
          },
          "capturedAt": {
            "type": "string"
          }
        },
        "required": [
          "platform",
          "mentions",
          "shareOfVoice",
          "aiSearchVolume",
          "capturedAt"
        ],
        "additionalProperties": false
      }
    },
    "citationGaps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "keywordId": {
            "type": "string"
          }
        },
        "required": [
          "keyword",
          "keywordId"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "available",
    "reason",
    "latest",
    "citationGaps"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_search_performance(projectId)

Real Google Search Console clicks, impressions, CTR, and average position for one project. Last 28 days, plus the previous 28 days. Does not spend lookup credits. If linked is false, the project is not connected and clicks must not be invented.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "projectId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "linked": {
      "type": "boolean"
    },
    "siteUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "lastSyncedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "windowDays": {
      "type": "number"
    },
    "property": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "current": {
              "type": "object",
              "properties": {
                "clicks": {
                  "type": "number"
                },
                "impressions": {
                  "type": "number"
                },
                "ctr": {
                  "type": "number"
                },
                "averagePosition": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "clicks",
                "impressions",
                "ctr",
                "averagePosition"
              ],
              "additionalProperties": false
            },
            "previous": {
              "type": "object",
              "properties": {
                "clicks": {
                  "type": "number"
                },
                "impressions": {
                  "type": "number"
                },
                "ctr": {
                  "type": "number"
                },
                "averagePosition": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "clicks",
                "impressions",
                "ctr",
                "averagePosition"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "current",
            "previous"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "trackedKeywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "clicks": {
            "type": "number"
          },
          "impressions": {
            "type": "number"
          },
          "ctr": {
            "type": "number"
          },
          "averagePosition": {
            "type": [
              "number",
              "null"
            ]
          },
          "keywordId": {
            "type": "string"
          },
          "keyword": {
            "type": "string"
          }
        },
        "required": [
          "query",
          "clicks",
          "impressions",
          "ctr",
          "averagePosition",
          "keywordId",
          "keyword"
        ],
        "additionalProperties": false
      }
    },
    "topQueries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "clicks": {
            "type": "number"
          },
          "impressions": {
            "type": "number"
          },
          "ctr": {
            "type": "number"
          },
          "averagePosition": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "query",
          "clicks",
          "impressions",
          "ctr",
          "averagePosition"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "linked",
    "siteUrl",
    "lastSyncedAt",
    "windowDays",
    "property",
    "trackedKeywords",
    "topQueries"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟡track_keywords(projectId, keywords, countryCode, device)

Add keywords to a project. Does not spend lookup credits; it uses the plan keyword slots. Confirm the keywords with the user first. countryCode defaults to the project market.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "keywords": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 20000
        },
        {
          "minItems": 1,
          "maxItems": 500,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        }
      ]
    },
    "countryCode": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "device": {
      "type": "string",
      "enum": [
        "desktop",
        "mobile"
      ]
    }
  },
  "required": [
    "projectId",
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "changed": {
      "type": "boolean"
    },
    "message": {
      "type": [
        "string",
        "null"
      ]
    },
    "projectId": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "changed",
    "message",
    "projectId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🔴untrack_keyword(keywordId)

Remove one tracked keyword and its history. This cannot be undone. Confirm with the user before calling it.

Input Schema

{
  "type": "object",
  "properties": {
    "keywordId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "keywordId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "changed": {
      "type": "boolean"
    },
    "projectId": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "changed",
    "projectId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟡update_recommendation(projectId, actionKey, status, note, snoozeUntil)

Mark a briefing action done, dismissed, or snoozed. Call this after the user finishes or rejects an action so later briefings skip it. snoozeUntil is YYYY-MM-DD.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "actionKey": {
      "type": "string",
      "pattern": "^[a-z0-9:_-]{1,160}$"
    },
    "status": {
      "type": "string",
      "enum": [
        "done",
        "dismissed",
        "snoozed"
      ]
    },
    "note": {
      "type": "string",
      "maxLength": 500
    },
    "snoozeUntil": {
      "type": "string"
    }
  },
  "required": [
    "projectId",
    "actionKey",
    "status"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "actionKey": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "done",
        "dismissed",
        "snoozed"
      ]
    },
    "snoozeUntil": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "actionKey",
    "status",
    "snoozeUntil"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟡research_keywords(projectId)

Find new keyword ideas for one project. This spends AI research usage and is available on Starter and Pro. Confirm with the user first. The project needs an audience set in the SEO Agent.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "projectId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "runId": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "tier": {
            "type": "string"
          },
          "searchVolume": {
            "type": [
              "number",
              "null"
            ]
          },
          "difficulty": {
            "type": [
              "number",
              "null"
            ]
          },
          "intent": {
            "type": [
              "string",
              "null"
            ]
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "keyword",
          "tier",
          "searchVolume",
          "difficulty",
          "intent",
          "reason"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "runId",
    "total",
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
⚪lookup_keywords(seed, countryCode)

Keyword ideas from one seed: volume, difficulty, and intent. Spends 6 lookup credits unless the result is already cached. Tell the user the cost and wait for a yes. This is not research_keywords.

Input Schema

{
  "type": "object",
  "properties": {
    "seed": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80
    },
    "countryCode": {
      "type": "string",
      "description": "Two-letter country code. Defaults to US."
    }
  },
  "required": [
    "seed"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "seed": {
      "type": "string"
    },
    "countryCode": {
      "type": "string"
    },
    "fromCache": {
      "type": "boolean"
    },
    "creditsSpent": {
      "type": "number"
    },
    "seedMetrics": {
      "type": "object",
      "properties": {
        "keyword": {
          "type": "string"
        },
        "searchVolume": {
          "type": [
            "number",
            "null"
          ]
        },
        "difficulty": {
          "type": [
            "number",
            "null"
          ]
        },
        "intent": {
          "type": [
            "string",
            "null"
          ]
        },
        "cpc": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "keyword",
        "searchVolume",
        "difficulty",
        "intent",
        "cpc"
      ],
      "additionalProperties": false
    },
    "ideas": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "searchVolume": {
            "type": [
              "number",
              "null"
            ]
          },
          "difficulty": {
            "type": [
              "number",
              "null"
            ]
          },
          "intent": {
            "type": [
              "string",
              "null"
            ]
          },
          "cpc": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "keyword",
          "searchVolume",
          "difficulty",
          "intent",
          "cpc"
        ],
        "additionalProperties": false
      }
    },
    "related": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "searchVolume": {
            "type": [
              "number",
              "null"
            ]
          },
          "difficulty": {
            "type": [
              "number",
              "null"
            ]
          },
          "intent": {
            "type": [
              "string",
              "null"
            ]
          },
          "cpc": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "keyword",
          "searchVolume",
          "difficulty",
          "intent",
          "cpc"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "seed",
    "countryCode",
    "fromCache",
    "creditsSpent",
    "seedMetrics",
    "ideas",
    "related"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢check_keywords(keywords, countryCode)

Volume, difficulty, and intent for keywords the user names. Spends 2 lookup credits. Tell the user the cost and wait for a yes. At most 20 keywords per call.

Input Schema

{
  "type": "object",
  "properties": {
    "keywords": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 2,
        "maxLength": 80
      }
    },
    "countryCode": {
      "type": "string",
      "description": "Two-letter country code. Defaults to US."
    }
  },
  "required": [
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "countryCode": {
      "type": "string"
    },
    "fromCache": {
      "type": "boolean"
    },
    "creditsSpent": {
      "type": "number"
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "searchVolume": {
            "type": [
              "number",
              "null"
            ]
          },
          "difficulty": {
            "type": [
              "number",
              "null"
            ]
          },
          "intent": {
            "type": [
              "string",
              "null"
            ]
          },
          "cpc": {
            "type": [
              "number",
              "null"
            ]
          },
          "aiOverview": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "required": [
          "keyword",
          "searchVolume",
          "difficulty",
          "intent",
          "cpc",
          "aiOverview"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "countryCode",
    "fromCache",
    "creditsSpent",
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
⚪lookup_domain(domain, countryCode)

Organic keywords, estimated traffic, and top ranking URLs for a domain. Spends 4 lookup credits unless the result is already cached. Tell the user the cost and wait for a yes. countryCode defaults to US.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "minLength": 3
    },
    "countryCode": {
      "type": "string",
      "description": "Two-letter country code. Defaults to US."
    }
  },
  "required": [
    "domain"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "countryCode": {
      "type": "string"
    },
    "fromCache": {
      "type": "boolean"
    },
    "creditsSpent": {
      "type": "number"
    },
    "organicKeywords": {
      "type": "number"
    },
    "estimatedTraffic": {
      "type": "number"
    },
    "estimatedTrafficValue": {
      "type": [
        "number",
        "null"
      ]
    },
    "top3": {
      "type": "number"
    },
    "top10": {
      "type": "number"
    },
    "movement": {
      "type": "object",
      "properties": {
        "new": {
          "type": "number"
        },
        "up": {
          "type": "number"
        },
        "down": {
          "type": "number"
        },
        "lost": {
          "type": "number"
        }
      },
      "required": [
        "new",
        "up",
        "down",
        "lost"
      ],
      "additionalProperties": false
    },
    "rankedKeywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string"
          },
          "position": {
            "type": [
              "number",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "searchVolume": {
            "type": [
              "number",
              "null"
            ]
          },
          "traffic": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "keyword",
          "position",
          "url",
          "searchVolume",
          "traffic"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "domain",
    "countryCode",
    "fromCache",
    "creditsSpent",
    "organicKeywords",
    "estimatedTraffic",
    "estimatedTrafficValue",
    "top3",
    "top10",
    "movement",
    "rankedKeywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢lookup_backlinks(domain)

Referring domains, backlink totals, and domain rank. Spends 3 lookup credits unless the result is already cached. Tell the user the cost and wait for a yes. spamScore is not a reason to disavow a list of URLs.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "minLength": 3
    }
  },
  "required": [
    "domain"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "fromCache": {
      "type": "boolean"
    },
    "creditsSpent": {
      "type": "number"
    },
    "domainRank": {
      "type": [
        "number",
        "null"
      ]
    },
    "backlinks": {
      "type": [
        "number",
        "null"
      ]
    },
    "referringDomains": {
      "type": [
        "number",
        "null"
      ]
    },
    "referringIps": {
      "type": [
        "number",
        "null"
      ]
    },
    "brokenBacklinks": {
      "type": [
        "number",
        "null"
      ]
    },
    "spamScore": {
      "type": [
        "number",
        "null"
      ]
    }
  },
  "required": [
    "domain",
    "fromCache",
    "creditsSpent",
    "domainRank",
    "backlinks",
    "referringDomains",
    "referringIps",
    "brokenBacklinks",
    "spamScore"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded17 tools