Problem
get_rank_tracker lets an agent read existing rank-tracking results, but there's no way to add or remove tracked keywords via MCP — that's UI-only today. "Start tracking these 20 keywords for this project" is a common agent-shaped request (onboarding a new project, or reacting to fresh keyword research), and it currently has to stop and ask a human to add them by hand in the dashboard.
Proposal
add_rank_tracking_keywords — thin wrapper over RankTrackingService.addKeywords (src/server/features/rank-tracking/services/RankTrackingService.ts).
remove_rank_tracking_keywords — wrapper over RankTrackingService.removeKeywords.
- (only if a project has no tracker config yet)
create_rank_tracking_config / update_rank_tracking_config wrapping createConfig/updateConfig.
Pattern to follow: same shape as get-rank-tracker.ts (project-scoped auth via withMcpProjectAuth), but with readOnlyHint: false.
Cost transparency (the important part of this proposal): adding tracked keywords carries an ongoing DataForSEO credit cost — every scheduled check re-queries SERP position for every tracked keyword. RankTrackingService.estimateCost already exists for exactly this. The new tool should call it and return the estimate as part of its response, not add keywords silently and let the cost surprise show up later.
Scope: keyword add/remove only. Whether to also expose triggerCheck (manually kick off a check outside the schedule) is an open question for discussion — it would need to respect whatever rate-limit/cooldown logic already exists in rankCheckRunGuards.ts.
Prior art
Checked existing issues/PRs before writing this up — no existing issue or PR proposes MCP write access to rank tracking. Closest-but-unrelated hits: #37 / PR #40 (per-keyword tracking interval overrides — a different feature), #98 / PR #114 (create_project — unrelated tool, different feature area).
Notes
Happy to open a PR following the get-rank-tracker.ts pattern, including tests and the cost-estimate call, once aligned on scope — specifically whether triggerCheck belongs in the same PR or a follow-up.
Problem
get_rank_trackerlets an agent read existing rank-tracking results, but there's no way to add or remove tracked keywords via MCP — that's UI-only today. "Start tracking these 20 keywords for this project" is a common agent-shaped request (onboarding a new project, or reacting to fresh keyword research), and it currently has to stop and ask a human to add them by hand in the dashboard.Proposal
add_rank_tracking_keywords— thin wrapper overRankTrackingService.addKeywords(src/server/features/rank-tracking/services/RankTrackingService.ts).remove_rank_tracking_keywords— wrapper overRankTrackingService.removeKeywords.create_rank_tracking_config/update_rank_tracking_configwrappingcreateConfig/updateConfig.Pattern to follow: same shape as
get-rank-tracker.ts(project-scoped auth viawithMcpProjectAuth), but withreadOnlyHint: false.Cost transparency (the important part of this proposal): adding tracked keywords carries an ongoing DataForSEO credit cost — every scheduled check re-queries SERP position for every tracked keyword.
RankTrackingService.estimateCostalready exists for exactly this. The new tool should call it and return the estimate as part of its response, not add keywords silently and let the cost surprise show up later.Scope: keyword add/remove only. Whether to also expose
triggerCheck(manually kick off a check outside the schedule) is an open question for discussion — it would need to respect whatever rate-limit/cooldown logic already exists inrankCheckRunGuards.ts.Prior art
Checked existing issues/PRs before writing this up — no existing issue or PR proposes MCP write access to rank tracking. Closest-but-unrelated hits: #37 / PR #40 (per-keyword tracking interval overrides — a different feature), #98 / PR #114 (
create_project— unrelated tool, different feature area).Notes
Happy to open a PR following the
get-rank-tracker.tspattern, including tests and the cost-estimate call, once aligned on scope — specifically whethertriggerCheckbelongs in the same PR or a follow-up.