budgetSEO MCP
An official MCP server provided by budgetSEO that allows AI agents like Claude, ChatGPT, and Cursor to access live SEO data including rankings, keyword opportunities, and competitor analysis. It supports reading tools that do not consume lookup credits and integrates with various SEO audit skills for tasks like technical audits, content optimization, and traffic monitoring.
Endpoint and access
OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.
https://www.budgetseo.ai/api/mcpWhat you can do with it
- Read live budgetSEO rankings and quick wins
- Analyze competitor data and keyword opportunities
- Perform technical SEO audits and on-page consistency checks
- Monitor traffic drops and diagnose click declines
Source and maintenance
Protocol and capabilities
- Server
- budgetseo 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 17 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Sign-in required
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
17 advertised
get_seo_briefing — SEO briefing
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"since": {
"type": "string"
},
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generatedAt",
"since",
"actions",
"changes",
"plan",
"usage",
"nextCheckAt",
"searchConsole"
],
"properties": {
"plan": {
"type": "object",
"required": [
"tier",
"name",
"schedule",
"keywordSlotsRemaining",
"maxKeywords",
"upgradeUrl"
],
"properties": {
"name": {
"type": "string"
},
"tier": {
"type": "string"
},
"schedule": {
"type": "string"
},
"upgradeUrl": {
"type": "string"
},
"maxKeywords": {
"type": "number"
},
"keywordSlotsRemaining": {
"type": "number"
}
},
"additionalProperties": false
},
"since": {
"type": "string"
},
"usage": {
"type": "object",
"required": [
"used",
"limit",
"period"
],
"properties": {
"used": {
"type": "number"
},
"limit": {
"type": "number"
},
"period": {
"enum": [
"today",
"month"
],
"type": "string"
}
},
"additionalProperties": false
},
"actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"actionKey",
"type",
"title",
"why",
"estimatedMonthlyClicks",
"effort",
"nextSteps",
"projectId",
"projectName",
"keywordId",
"keyword"
],
"properties": {
"why": {
"type": "string"
},
"type": {
"enum": [
"quick_win",
"rank_drop",
"research_idea",
"competitor_gap",
"ai_visibility"
],
"type": "string"
},
"title": {
"type": "string"
},
"effort": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"keyword": {
"type": [
"string",
"null"
]
},
"actionKey": {
"type": "string"
},
"keywordId": {
"type": [
"string",
"null"
]
},
"nextSteps": {
"type": "array",
"items": {
"type": "string"
}
},
"projectId": {
"type": "string"
},
"projectName": {
"type": "string"
},
"estimatedMonthlyClicks": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"keywordId",
"projectId",
"projectName",
"keyword",
"previousPosition",
"position",
"kind",
"places",
"estimatedMonthlyClicksDelta",
"rankingUrl"
],
"properties": {
"kind": {
"enum": [
"up",
"down",
"new",
"lost"
],
"type": "string"
},
"places": {
"type": [
"number",
"null"
]
},
"keyword": {
"type": "string"
},
"position": {
"type": [
"number",
"null"
]
},
"keywordId": {
"type": "string"
},
"projectId": {
"type": "string"
},
"rankingUrl": {
"type": [
"string",
"null"
]
},
"projectName": {
"type": "string"
},
"previousPosition": {
"type": [
"number",
"null"
]
},
"estimatedMonthlyClicksDelta": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"generatedAt": {
"type": "string"
},
"nextCheckAt": {
"type": [
"string",
"null"
]
},
"searchConsole": {
"anyOf": [
{
"type": "object",
"required": [
"connected",
"projects"
],
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"required": [
"projectId",
"projectName",
"linked",
"siteUrl",
"clicks",
"impressions",
"averagePosition",
"clicksDelta"
],
"properties": {
"clicks": {
"type": [
"number",
"null"
]
},
"linked": {
"type": "boolean"
},
"siteUrl": {
"type": [
"string",
"null"
]
},
"projectId": {
"type": "string"
},
"clicksDelta": {
"type": [
"number",
"null"
]
},
"impressions": {
"type": [
"number",
"null"
]
},
"projectName": {
"type": "string"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"connected": {
"type": "boolean"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}find_quick_wins — Low-hanging fruit
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1
},
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"actions"
],
"properties": {
"actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"actionKey",
"type",
"title",
"why",
"estimatedMonthlyClicks",
"effort",
"nextSteps",
"projectId",
"projectName",
"keywordId",
"keyword"
],
"properties": {
"why": {
"type": "string"
},
"type": {
"enum": [
"quick_win",
"rank_drop",
"research_idea",
"competitor_gap",
"ai_visibility"
],
"type": "string"
},
"title": {
"type": "string"
},
"effort": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"keyword": {
"type": [
"string",
"null"
]
},
"actionKey": {
"type": "string"
},
"keywordId": {
"type": [
"string",
"null"
]
},
"nextSteps": {
"type": "array",
"items": {
"type": "string"
}
},
"projectId": {
"type": "string"
},
"projectName": {
"type": "string"
},
"estimatedMonthlyClicks": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}find_opportunities — SEO opportunities
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"kinds": {
"type": "array",
"items": {
"enum": [
"quick_win",
"rank_drop",
"research_idea",
"competitor_gap",
"ai_visibility"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1
},
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"actions"
],
"properties": {
"actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"actionKey",
"type",
"title",
"why",
"estimatedMonthlyClicks",
"effort",
"nextSteps",
"projectId",
"projectName",
"keywordId",
"keyword"
],
"properties": {
"why": {
"type": "string"
},
"type": {
"enum": [
"quick_win",
"rank_drop",
"research_idea",
"competitor_gap",
"ai_visibility"
],
"type": "string"
},
"title": {
"type": "string"
},
"effort": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"keyword": {
"type": [
"string",
"null"
]
},
"actionKey": {
"type": "string"
},
"keywordId": {
"type": [
"string",
"null"
]
},
"nextSteps": {
"type": "array",
"items": {
"type": "string"
}
},
"projectId": {
"type": "string"
},
"projectName": {
"type": "string"
},
"estimatedMonthlyClicks": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}list_projects — List projects
List the user's BudgetSEO projects, keyword counts, whether a project is paused by the plan, and how many keyword slots remain.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projects",
"plan"
],
"properties": {
"plan": {
"type": "object",
"required": [
"tier",
"name",
"maxKeywords",
"keywordsUsed",
"keywordSlotsRemaining"
],
"properties": {
"name": {
"type": "string"
},
"tier": {
"type": "string"
},
"maxKeywords": {
"type": "number"
},
"keywordsUsed": {
"type": "number"
},
"keywordSlotsRemaining": {
"type": "number"
}
},
"additionalProperties": false
},
"projects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"domain",
"keywordCount",
"isPlanLocked",
"searchConsoleLinked"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"isPlanLocked": {
"type": "boolean"
},
"keywordCount": {
"type": "number"
},
"searchConsoleLinked": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_rank_changes — Rank changes
Winners and losers over a recent window. Use for what moved, what dropped, or a weekly review. days defaults to 7.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1
},
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"since",
"changes"
],
"properties": {
"since": {
"type": "string"
},
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"keywordId",
"projectId",
"projectName",
"keyword",
"previousPosition",
"position",
"kind",
"places",
"estimatedMonthlyClicksDelta",
"rankingUrl"
],
"properties": {
"kind": {
"enum": [
"up",
"down",
"new",
"lost"
],
"type": "string"
},
"places": {
"type": [
"number",
"null"
]
},
"keyword": {
"type": "string"
},
"position": {
"type": [
"number",
"null"
]
},
"keywordId": {
"type": "string"
},
"projectId": {
"type": "string"
},
"rankingUrl": {
"type": [
"string",
"null"
]
},
"projectName": {
"type": "string"
},
"previousPosition": {
"type": [
"number",
"null"
]
},
"estimatedMonthlyClicksDelta": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_keyword_action_plan — Keyword action plan
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keywordId"
],
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keyword",
"projectId",
"projectName",
"position",
"previousPosition",
"bestPosition",
"rankingUrl",
"searchVolume",
"difficulty",
"intent",
"device",
"serpFeatures",
"aiOverviewPresent",
"aiOverviewCited",
"history",
"competitors",
"checklist",
"searchConsole"
],
"properties": {
"device": {
"type": "string"
},
"intent": {
"type": [
"string",
"null"
]
},
"history": {
"type": "array",
"items": {
"type": "object",
"required": [
"checkedAt",
"position",
"rankingUrl"
],
"properties": {
"position": {
"type": [
"number",
"null"
]
},
"checkedAt": {
"type": "string"
},
"rankingUrl": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"keyword": {
"type": "string"
},
"position": {
"type": [
"number",
"null"
]
},
"checklist": {
"type": "array",
"items": {
"type": "string"
}
},
"projectId": {
"type": "string"
},
"difficulty": {
"type": [
"number",
"null"
]
},
"rankingUrl": {
"type": [
"string",
"null"
]
},
"competitors": {
"type": "array",
"items": {
"type": "object",
"required": [
"domain",
"position"
],
"properties": {
"domain": {
"type": "string"
},
"position": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"projectName": {
"type": "string"
},
"bestPosition": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
},
"serpFeatures": {
"type": "array",
"items": {
"type": "string"
}
},
"searchConsole": {
"anyOf": [
{
"type": "object",
"required": [
"clicks",
"impressions",
"ctr",
"averagePosition"
],
"properties": {
"ctr": {
"type": "number"
},
"clicks": {
"type": "number"
},
"impressions": {
"type": "number"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"aiOverviewCited": {
"type": [
"boolean",
"null"
]
},
"previousPosition": {
"type": [
"number",
"null"
]
},
"aiOverviewPresent": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_competitor_overview — Competitor overview
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"competitors"
],
"properties": {
"competitors": {
"type": "array",
"items": {
"type": "object",
"required": [
"competitorId",
"domain",
"projectId",
"projectName",
"keywordsAhead"
],
"properties": {
"domain": {
"type": "string"
},
"projectId": {
"type": "string"
},
"projectName": {
"type": "string"
},
"competitorId": {
"type": "string"
},
"keywordsAhead": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_ai_visibility — AI visibility
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"available",
"reason",
"latest",
"citationGaps"
],
"properties": {
"latest": {
"type": "array",
"items": {
"type": "object",
"required": [
"platform",
"mentions",
"shareOfVoice",
"aiSearchVolume",
"capturedAt"
],
"properties": {
"mentions": {
"type": "number"
},
"platform": {
"type": "string"
},
"capturedAt": {
"type": "string"
},
"shareOfVoice": {
"type": [
"number",
"null"
]
},
"aiSearchVolume": {
"type": "number"
}
},
"additionalProperties": false
}
},
"reason": {
"type": [
"string",
"null"
]
},
"available": {
"type": "boolean"
},
"citationGaps": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"keywordId"
],
"properties": {
"keyword": {
"type": "string"
},
"keywordId": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_search_performance — Search Console performance
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"linked",
"siteUrl",
"lastSyncedAt",
"windowDays",
"property",
"trackedKeywords",
"topQueries"
],
"properties": {
"linked": {
"type": "boolean"
},
"siteUrl": {
"type": [
"string",
"null"
]
},
"property": {
"anyOf": [
{
"type": "object",
"required": [
"current",
"previous"
],
"properties": {
"current": {
"type": "object",
"required": [
"clicks",
"impressions",
"ctr",
"averagePosition"
],
"properties": {
"ctr": {
"type": "number"
},
"clicks": {
"type": "number"
},
"impressions": {
"type": "number"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
},
"previous": {
"type": "object",
"required": [
"clicks",
"impressions",
"ctr",
"averagePosition"
],
"properties": {
"ctr": {
"type": "number"
},
"clicks": {
"type": "number"
},
"impressions": {
"type": "number"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"topQueries": {
"type": "array",
"items": {
"type": "object",
"required": [
"query",
"clicks",
"impressions",
"ctr",
"averagePosition"
],
"properties": {
"ctr": {
"type": "number"
},
"query": {
"type": "string"
},
"clicks": {
"type": "number"
},
"impressions": {
"type": "number"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"windowDays": {
"type": "number"
},
"lastSyncedAt": {
"type": [
"string",
"null"
]
},
"trackedKeywords": {
"type": "array",
"items": {
"type": "object",
"required": [
"query",
"clicks",
"impressions",
"ctr",
"averagePosition",
"keywordId",
"keyword"
],
"properties": {
"ctr": {
"type": "number"
},
"query": {
"type": "string"
},
"clicks": {
"type": "number"
},
"keyword": {
"type": "string"
},
"keywordId": {
"type": "string"
},
"impressions": {
"type": "number"
},
"averagePosition": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}track_keywords — Track keywords
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"keywords"
],
"properties": {
"device": {
"enum": [
"desktop",
"mobile"
],
"type": "string"
},
"keywords": {
"anyOf": [
{
"type": "string",
"maxLength": 20000,
"minLength": 1
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"minItems": 1
}
]
},
"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)$"
},
"countryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"changed",
"message",
"projectId"
],
"properties": {
"changed": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"projectId": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}untrack_keyword — Stop tracking a keyword
Remove one tracked keyword and its history. This cannot be undone. Confirm with the user before calling it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keywordId"
],
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"changed",
"projectId"
],
"properties": {
"changed": {
"type": "boolean"
},
"projectId": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": true
}update_recommendation — Remember a recommendation
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"actionKey",
"status"
],
"properties": {
"note": {
"type": "string",
"maxLength": 500
},
"status": {
"enum": [
"done",
"dismissed",
"snoozed"
],
"type": "string"
},
"actionKey": {
"type": "string",
"pattern": "^[a-z0-9:_-]{1,160}$"
},
"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)$"
},
"snoozeUntil": {
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"actionKey",
"status",
"snoozeUntil"
],
"properties": {
"status": {
"enum": [
"done",
"dismissed",
"snoozed"
],
"type": "string"
},
"actionKey": {
"type": "string"
},
"snoozeUntil": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}research_keywords — Research keywords
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"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)$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"runId",
"total",
"keywords"
],
"properties": {
"runId": {
"type": "string"
},
"total": {
"type": "number"
},
"keywords": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"tier",
"searchVolume",
"difficulty",
"intent",
"reason"
],
"properties": {
"tier": {
"type": "string"
},
"intent": {
"type": [
"string",
"null"
]
},
"reason": {
"type": "string"
},
"keyword": {
"type": "string"
},
"difficulty": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}lookup_keywords — Look up keyword ideas
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"seed"
],
"properties": {
"seed": {
"type": "string",
"maxLength": 80,
"minLength": 2
},
"countryCode": {
"type": "string",
"description": "Two-letter country code. Defaults to US."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"seed",
"countryCode",
"fromCache",
"creditsSpent",
"seedMetrics",
"ideas",
"related"
],
"properties": {
"seed": {
"type": "string"
},
"ideas": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"searchVolume",
"difficulty",
"intent",
"cpc"
],
"properties": {
"cpc": {
"type": [
"number",
"null"
]
},
"intent": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": "string"
},
"difficulty": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"related": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"searchVolume",
"difficulty",
"intent",
"cpc"
],
"properties": {
"cpc": {
"type": [
"number",
"null"
]
},
"intent": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": "string"
},
"difficulty": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"fromCache": {
"type": "boolean"
},
"countryCode": {
"type": "string"
},
"seedMetrics": {
"type": "object",
"required": [
"keyword",
"searchVolume",
"difficulty",
"intent",
"cpc"
],
"properties": {
"cpc": {
"type": [
"number",
"null"
]
},
"intent": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": "string"
},
"difficulty": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
},
"creditsSpent": {
"type": "number"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}check_keywords — Check named keywords
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keywords"
],
"properties": {
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 2
},
"maxItems": 20,
"minItems": 1
},
"countryCode": {
"type": "string",
"description": "Two-letter country code. Defaults to US."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"countryCode",
"fromCache",
"creditsSpent",
"keywords"
],
"properties": {
"keywords": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"searchVolume",
"difficulty",
"intent",
"cpc",
"aiOverview"
],
"properties": {
"cpc": {
"type": [
"number",
"null"
]
},
"intent": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": "string"
},
"aiOverview": {
"type": [
"boolean",
"null"
]
},
"difficulty": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"fromCache": {
"type": "boolean"
},
"countryCode": {
"type": "string"
},
"creditsSpent": {
"type": "number"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}lookup_domain — Look up a domain
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"minLength": 3
},
"countryCode": {
"type": "string",
"description": "Two-letter country code. Defaults to US."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain",
"countryCode",
"fromCache",
"creditsSpent",
"organicKeywords",
"estimatedTraffic",
"estimatedTrafficValue",
"top3",
"top10",
"movement",
"rankedKeywords"
],
"properties": {
"top3": {
"type": "number"
},
"top10": {
"type": "number"
},
"domain": {
"type": "string"
},
"movement": {
"type": "object",
"required": [
"new",
"up",
"down",
"lost"
],
"properties": {
"up": {
"type": "number"
},
"new": {
"type": "number"
},
"down": {
"type": "number"
},
"lost": {
"type": "number"
}
},
"additionalProperties": false
},
"fromCache": {
"type": "boolean"
},
"countryCode": {
"type": "string"
},
"creditsSpent": {
"type": "number"
},
"rankedKeywords": {
"type": "array",
"items": {
"type": "object",
"required": [
"keyword",
"position",
"url",
"searchVolume",
"traffic"
],
"properties": {
"url": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": "string"
},
"traffic": {
"type": [
"number",
"null"
]
},
"position": {
"type": [
"number",
"null"
]
},
"searchVolume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
},
"organicKeywords": {
"type": "number"
},
"estimatedTraffic": {
"type": "number"
},
"estimatedTrafficValue": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}lookup_backlinks — Look up backlinks
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"minLength": 3
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain",
"fromCache",
"creditsSpent",
"domainRank",
"backlinks",
"referringDomains",
"referringIps",
"brokenBacklinks",
"spamScore"
],
"properties": {
"domain": {
"type": "string"
},
"backlinks": {
"type": [
"number",
"null"
]
},
"fromCache": {
"type": "boolean"
},
"spamScore": {
"type": [
"number",
"null"
]
},
"domainRank": {
"type": [
"number",
"null"
]
},
"creditsSpent": {
"type": "number"
},
"referringIps": {
"type": [
"number",
"null"
]
},
"brokenBacklinks": {
"type": [
"number",
"null"
]
},
"referringDomains": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}Prompts
Sign-in required
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 544 ms
- 95th percentile latency
- 544 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 544 ms · metadata changed · refuses unauthenticated prompts/list (HTTP 401)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http budgetseo-mcp https://www.budgetseo.ai/api/mcpCodex
codex mcp add budgetseo-mcp --url https://www.budgetseo.ai/api/mcpCursor
{
"mcpServers": {
"budgetseo-mcp": {
"url": "https://www.budgetseo.ai/api/mcp"
}
}
}Cline
{
"mcpServers": {
"budgetseo-mcp": {
"type": "streamableHttp",
"url": "https://www.budgetseo.ai/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"budgetseo-mcp": {
"type": "http",
"url": "https://www.budgetseo.ai/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http budgetseo-mcp https://www.budgetseo.ai/api/mcpClaude Desktop
{
"mcpServers": {
"budgetseo-mcp": {
"url": "https://www.budgetseo.ai/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"budgetseo-mcp": {
"serverUrl": "https://www.budgetseo.ai/api/mcp"
}
}
}Let your agent find its tools
Find servers like budgetSEO MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run budgetSEO MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.