@heyseo/mcp-server 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +119 -22
  2. package/dist/index.js +382 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/chat.d.ts +44 -0
  5. package/dist/tools/chat.d.ts.map +1 -0
  6. package/dist/tools/chat.js +37 -0
  7. package/dist/tools/chat.js.map +1 -0
  8. package/dist/tools/conversations.d.ts +95 -0
  9. package/dist/tools/conversations.d.ts.map +1 -0
  10. package/dist/tools/conversations.js +110 -0
  11. package/dist/tools/conversations.js.map +1 -0
  12. package/dist/tools/dataforseo.d.ts +49 -0
  13. package/dist/tools/dataforseo.d.ts.map +1 -0
  14. package/dist/tools/dataforseo.js +37 -0
  15. package/dist/tools/dataforseo.js.map +1 -0
  16. package/dist/tools/index.d.ts +1618 -75
  17. package/dist/tools/index.d.ts.map +1 -1
  18. package/dist/tools/index.js +105 -20
  19. package/dist/tools/index.js.map +1 -1
  20. package/dist/tools/indexing.d.ts +134 -0
  21. package/dist/tools/indexing.d.ts.map +1 -1
  22. package/dist/tools/indexing.js +163 -0
  23. package/dist/tools/indexing.js.map +1 -1
  24. package/dist/tools/insights.d.ts +25 -2
  25. package/dist/tools/insights.d.ts.map +1 -1
  26. package/dist/tools/insights.js +27 -0
  27. package/dist/tools/insights.js.map +1 -1
  28. package/dist/tools/knowledge.d.ts +98 -0
  29. package/dist/tools/knowledge.d.ts.map +1 -0
  30. package/dist/tools/knowledge.js +69 -0
  31. package/dist/tools/knowledge.js.map +1 -0
  32. package/dist/tools/memory.d.ts +273 -0
  33. package/dist/tools/memory.d.ts.map +1 -1
  34. package/dist/tools/memory.js +153 -0
  35. package/dist/tools/memory.js.map +1 -1
  36. package/dist/tools/notifications.d.ts +75 -0
  37. package/dist/tools/notifications.d.ts.map +1 -0
  38. package/dist/tools/notifications.js +62 -0
  39. package/dist/tools/notifications.js.map +1 -0
  40. package/dist/tools/onpage.d.ts +36 -2
  41. package/dist/tools/onpage.d.ts.map +1 -1
  42. package/dist/tools/onpage.js +29 -0
  43. package/dist/tools/onpage.js.map +1 -1
  44. package/dist/tools/pagespeed.d.ts +39 -0
  45. package/dist/tools/pagespeed.d.ts.map +1 -1
  46. package/dist/tools/pagespeed.js +29 -0
  47. package/dist/tools/pagespeed.js.map +1 -1
  48. package/dist/tools/reports.d.ts +174 -0
  49. package/dist/tools/reports.d.ts.map +1 -1
  50. package/dist/tools/reports.js +142 -0
  51. package/dist/tools/reports.js.map +1 -1
  52. package/dist/tools/serp.d.ts +85 -2
  53. package/dist/tools/serp.d.ts.map +1 -1
  54. package/dist/tools/serp.js +58 -0
  55. package/dist/tools/serp.js.map +1 -1
  56. package/dist/tools/site.d.ts +47 -0
  57. package/dist/tools/site.d.ts.map +1 -1
  58. package/dist/tools/site.js +88 -1
  59. package/dist/tools/site.js.map +1 -1
  60. package/dist/tools/sitemaps.d.ts +44 -2
  61. package/dist/tools/sitemaps.d.ts.map +1 -1
  62. package/dist/tools/sitemaps.js +56 -0
  63. package/dist/tools/sitemaps.js.map +1 -1
  64. package/dist/tools/tasks.d.ts +56 -2
  65. package/dist/tools/tasks.d.ts.map +1 -1
  66. package/dist/tools/tasks.js +46 -0
  67. package/dist/tools/tasks.js.map +1 -1
  68. package/dist/utils/api-client.d.ts +48 -0
  69. package/dist/utils/api-client.d.ts.map +1 -1
  70. package/dist/utils/api-client.js +274 -0
  71. package/dist/utils/api-client.js.map +1 -1
  72. package/package.json +1 -1
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
 
4
4
  # HeySeo MCP Server
5
5
 
6
- Connect your LLM to your SEO data. Query Google Search Console, Google Analytics 4, PageSpeed Insights, SERP data, indexing health, AI insights, and more directly from Claude, ChatGPT, Cursor, or any MCP-compatible client.
6
+ Connect your LLM to your SEO data. Query Google Search Console, Google Analytics 4, PageSpeed Insights, SERP data, indexing health, AI insights, and more - directly from Claude, ChatGPT, Cursor, or any MCP-compatible client.
7
7
 
8
- **35 tools** | **10 resources** | **12 prompts**
8
+ **72 tools** | **10 resources** | **12 prompts**
9
9
  </div>
10
10
 
11
11
  ## Quick Start
@@ -159,6 +159,9 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
159
159
  | `heyseo_list_sites` | List all available sites and their connection status (GSC/GA4) |
160
160
  | `heyseo_select_site` | Select a specific site for all subsequent operations |
161
161
  | `heyseo_get_current_site` | Get information about the currently selected site |
162
+ | `heyseo_update_site` | Update site settings (name, URL) |
163
+ | `heyseo_delete_site` | Delete a site from your account |
164
+ | `heyseo_sync_analytics` | Trigger an analytics data sync for a site |
162
165
 
163
166
  ### Google Search Console
164
167
 
@@ -183,6 +186,7 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
183
186
  |------|-------------|
184
187
  | `heyseo_pagespeed` | Run PageSpeed Insights analysis with Core Web Vitals |
185
188
  | `heyseo_pagespeed_bulk` | Analyze multiple pages at once |
189
+ | `heyseo_pagespeed_history` | Get PageSpeed analysis history for a site |
186
190
 
187
191
  ### Comparison & Opportunities
188
192
 
@@ -201,6 +205,7 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
201
205
  | `heyseo_get_task` | Get detailed information about a specific task |
202
206
  | `heyseo_update_task` | Update task title, description, status, priority, or category |
203
207
  | `heyseo_delete_task` | Delete a task from the Kanban board |
208
+ | `heyseo_move_task` | Move or reorder a task on the Kanban board |
204
209
  | `heyseo_bulk_create_tasks` | Create multiple tasks at once (up to 10) |
205
210
  | `heyseo_bulk_update_tasks` | Update multiple tasks at once (up to 10) |
206
211
 
@@ -210,6 +215,11 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
210
215
  |------|-------------|
211
216
  | `heyseo_list_reports` | List AI-generated SEO reports (weekly/monthly) |
212
217
  | `heyseo_get_report` | Get full report details including metrics and AI analysis |
218
+ | `heyseo_generate_report` | Generate a new SEO report on demand |
219
+ | `heyseo_delete_report` | Delete a report |
220
+ | `heyseo_report_settings` | Get report schedule settings for a site |
221
+ | `heyseo_update_report_settings` | Update report schedule (day, time, frequency) |
222
+ | `heyseo_send_test_report` | Send a test report email to verify setup |
213
223
 
214
224
  ### Indexing Health
215
225
 
@@ -218,39 +228,91 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
218
228
  | `heyseo_indexing_status` | Get indexing health summary (indexed/not-indexed counts, health score) |
219
229
  | `heyseo_indexing_pages` | List pages with their indexing verdict and coverage state |
220
230
  | `heyseo_submit_for_indexing` | Submit a page to Google's Indexing API for faster indexing |
231
+ | `heyseo_indexing_check` | Trigger an indexing check for all monitored pages |
232
+ | `heyseo_indexing_history` | Get indexing check history over time |
233
+ | `heyseo_indexing_settings` | Get indexing monitoring settings |
234
+ | `heyseo_update_indexing_settings` | Update indexing monitoring settings |
235
+ | `heyseo_indexing_submissions` | Get indexing submission history |
236
+ | `heyseo_remove_indexing_page` | Remove a page from indexing monitoring |
221
237
 
222
238
  ### SEO Memory
223
239
 
224
240
  | Tool | Description |
225
241
  |------|-------------|
226
242
  | `heyseo_get_memory` | Get full SEO memory context (strategy, goals, learnings, health trend) |
227
- | `heyseo_update_strategy` | Update SEO strategy summary, create goals, or update goal progress |
228
- | `heyseo_record_action` | Record an SEO action taken on the site with hypothesis and metrics to track |
229
- | `heyseo_add_learning` | Add a key fact or success pattern to the site's learning memory |
243
+ | `heyseo_update_strategy` | Update SEO strategy summary |
244
+ | `heyseo_record_action` | Record an SEO action with hypothesis and metrics to track |
245
+ | `heyseo_add_learning` | Add a key fact or success pattern to site memory |
246
+ | `heyseo_delete_goal` | Delete a goal |
247
+ | `heyseo_memory_snapshots` | Get performance snapshots over time |
248
+ | `heyseo_generate_snapshot` | Generate a new performance snapshot |
249
+ | `heyseo_queue_action` | Queue an action for future implementation |
250
+ | `heyseo_update_queued_action` | Update a queued action's status or priority |
230
251
 
231
252
  ### AI Insights
232
253
 
233
254
  | Tool | Description |
234
255
  |------|-------------|
235
- | `heyseo_get_insights` | Get AI-generated insights (anomalies, opportunities, alerts, trends, milestones) |
256
+ | `heyseo_get_insights` | Get AI-generated insights (anomalies, opportunities, alerts, trends) |
257
+ | `heyseo_generate_insights` | Generate new AI insights on demand |
258
+
259
+ ### AI Knowledge
260
+
261
+ | Tool | Description |
262
+ |------|-------------|
263
+ | `heyseo_get_knowledge` | Get the AI knowledge base for a site |
264
+ | `heyseo_update_knowledge` | Update AI knowledge (business context, competitors, goals) |
265
+
266
+ ### AI Chat
267
+
268
+ | Tool | Description |
269
+ |------|-------------|
270
+ | `heyseo_chat` | Send a message to the AI assistant about your SEO data |
271
+
272
+ ### Conversations
273
+
274
+ | Tool | Description |
275
+ |------|-------------|
276
+ | `heyseo_list_conversations` | List AI chat conversations |
277
+ | `heyseo_get_conversation` | Get a conversation with all messages |
278
+ | `heyseo_create_conversation` | Create a new conversation |
279
+ | `heyseo_delete_conversation` | Delete a conversation |
236
280
 
237
281
  ### On-Page Audit
238
282
 
239
283
  | Tool | Description |
240
284
  |------|-------------|
241
- | `heyseo_onpage_audit` | Run a full on-page SEO audit on any URL (score, meta tags, headings, links, images, issues) |
285
+ | `heyseo_onpage_audit` | Run a full on-page SEO audit on any URL |
286
+ | `heyseo_onpage_history` | Get on-page audit history for a site |
242
287
 
243
288
  ### SERP Analysis
244
289
 
245
290
  | Tool | Description |
246
291
  |------|-------------|
247
292
  | `heyseo_serp_search` | Search Google SERP for a keyword with organic results, featured snippets, and PAA |
293
+ | `heyseo_serp_history` | Get SERP search history |
294
+ | `heyseo_serp_batch` | Batch SERP preview for multiple keywords at once |
248
295
 
249
296
  ### Sitemaps
250
297
 
251
298
  | Tool | Description |
252
299
  |------|-------------|
253
- | `heyseo_list_sitemaps` | List sitemaps registered in Google Search Console with status and errors |
300
+ | `heyseo_list_sitemaps` | List sitemaps registered in Google Search Console |
301
+ | `heyseo_submit_sitemap` | Submit a sitemap to Google Search Console |
302
+ | `heyseo_delete_sitemap` | Delete a sitemap from Google Search Console |
303
+
304
+ ### DataForSEO
305
+
306
+ | Tool | Description |
307
+ |------|-------------|
308
+ | `heyseo_keyword_volume` | Get keyword search volume data for one or more keywords |
309
+
310
+ ### Notifications
311
+
312
+ | Tool | Description |
313
+ |------|-------------|
314
+ | `heyseo_notification_settings` | Get notification settings |
315
+ | `heyseo_update_notification_settings` | Update notification preferences |
254
316
 
255
317
  ---
256
318
 
@@ -306,9 +368,6 @@ Before performing any SEO operations, you must select a site:
306
368
  **Select a site:**
307
369
  > "Select the site with ID: abc123def456"
308
370
 
309
- **Check current site:**
310
- > "What site am I currently working with?"
311
-
312
371
  ### Performance Analysis
313
372
 
314
373
  > "What are my top 10 keywords this month?"
@@ -337,13 +396,19 @@ Before performing any SEO operations, you must select a site:
337
396
 
338
397
  > "Submit my /new-landing-page for indexing"
339
398
 
399
+ > "Run an indexing check on all monitored pages"
400
+
401
+ > "Show me the indexing submission history"
402
+
340
403
  ### Reports & Insights
341
404
 
342
405
  > "Show me my latest SEO reports"
343
406
 
407
+ > "Generate a new weekly report"
408
+
344
409
  > "What AI insights do you have for my site?"
345
410
 
346
- > "Give me an insights briefing"
411
+ > "Generate fresh insights for my site"
347
412
 
348
413
  ### Strategy & Memory
349
414
 
@@ -357,6 +422,18 @@ Before performing any SEO operations, you must select a site:
357
422
 
358
423
  > "Add a learning: long-form guides rank better for informational queries"
359
424
 
425
+ > "Take a performance snapshot"
426
+
427
+ > "Queue an action to rewrite our FAQ page"
428
+
429
+ ### AI Chat & Knowledge
430
+
431
+ > "Chat with the AI about my site's SEO performance"
432
+
433
+ > "Show me the AI knowledge base for this site"
434
+
435
+ > "Update the knowledge base with our business context"
436
+
360
437
  ### Task Management
361
438
 
362
439
  > "Review my SEO tasks and help me prioritize them"
@@ -365,10 +442,18 @@ Before performing any SEO operations, you must select a site:
365
442
 
366
443
  > "Mark all the technical tasks as done"
367
444
 
445
+ > "Move the title tag task to in-progress"
446
+
447
+ ### Keyword Research
448
+
449
+ > "Get search volume for 'seo tools', 'seo software', 'seo platform'"
450
+
368
451
  ### Sitemaps
369
452
 
370
453
  > "List my sitemaps from Google Search Console"
371
454
 
455
+ > "Submit a new sitemap at /sitemap.xml"
456
+
372
457
  ---
373
458
 
374
459
  ## API Key Scopes
@@ -378,20 +463,32 @@ When creating an API key, you can restrict access to specific features:
378
463
  | Scope | Description |
379
464
  |-------|-------------|
380
465
  | `sites:read` | Read site information |
466
+ | `sites:write` | Update or delete sites |
381
467
  | `gsc:read` | Read Google Search Console data |
382
468
  | `ga4:read` | Read Google Analytics 4 data |
383
- | `pagespeed:read` | Run PageSpeed analyses |
469
+ | `pagespeed:read` | Run PageSpeed analyses and view history |
384
470
  | `tasks:read` | Read tasks |
385
- | `tasks:write` | Create, update, delete tasks |
386
- | `reports:read` | Read AI-generated reports |
387
- | `indexing:read` | Read indexing status and pages |
388
- | `indexing:write` | Submit pages for indexing |
389
- | `memory:read` | Read SEO memory context |
390
- | `memory:write` | Update strategy, goals, actions, learnings |
471
+ | `tasks:write` | Create, update, delete, move tasks |
472
+ | `reports:read` | Read AI-generated reports and settings |
473
+ | `reports:write` | Generate, delete reports and update settings |
474
+ | `indexing:read` | Read indexing status, pages, history, settings |
475
+ | `indexing:write` | Submit for indexing, run checks, update settings, remove pages |
476
+ | `memory:read` | Read SEO memory, snapshots |
477
+ | `memory:write` | Update strategy, goals, actions, learnings, snapshots |
391
478
  | `insights:read` | Read AI-generated insights |
392
- | `onpage:read` | Run on-page audits |
393
- | `serp:read` | Search Google SERP |
479
+ | `insights:write` | Generate new insights |
480
+ | `knowledge:read` | Read AI knowledge base |
481
+ | `knowledge:write` | Update AI knowledge |
482
+ | `onpage:read` | Run on-page audits and view history |
483
+ | `serp:read` | Search Google SERP and view history |
394
484
  | `sitemaps:read` | Read GSC sitemaps |
485
+ | `sitemaps:write` | Submit or delete GSC sitemaps |
486
+ | `chat:write` | Send messages to AI assistant |
487
+ | `conversations:read` | Read conversations |
488
+ | `conversations:write` | Create or delete conversations |
489
+ | `notifications:read` | Read notification settings |
490
+ | `notifications:write` | Update notification settings |
491
+ | `dataforseo:read` | Access keyword volume data |
395
492
 
396
493
  Use `all` scope for full access.
397
494
 
@@ -402,7 +499,7 @@ Use `all` scope for full access.
402
499
  | Variable | Required | Default | Description |
403
500
  |----------|----------|---------|-------------|
404
501
  | `HEYSEO_API_KEY` | Yes | - | Your HeySeo API key |
405
- | `HEYSEO_API_URL` | No | `https://www.heyseo.app` | Custom API URL |
502
+ | `HEYSEO_API_URL` | No | `https://my.heyseo.app` | Custom API URL |
406
503
 
407
504
  ## Rate Limits
408
505
 
package/dist/index.js CHANGED
@@ -11,8 +11,11 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
11
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
12
  import { z } from 'zod';
13
13
  import { createApiClient } from './utils/api-client.js';
14
- import { executeListSites, executeSelectSite, executeGetCurrentSite, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, executeQueryGA4, executeLandingPages, executeTrafficSources, executeAnalyzePageSpeed, executeBulkPageSpeed, executeComparePeriod, executeWeekOverWeek, executeFindOpportunities, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, executeListReports, executeGetReport, executeIndexingStatus, executeIndexingPages, executeSubmitForIndexing, executeGetMemory, executeUpdateStrategy, executeRecordAction, executeAddLearning, executeGetInsights, executeOnpageAudit, executeSerpSearch, executeListSitemaps, } from './tools/index.js';
15
- import { selectSiteSchema, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, analyzePageSpeedSchema, bulkPageSpeedSchema, comparePeriodSchema, weekOverWeekSchema, findOpportunitiesSchema, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, listReportsSchema, getReportSchema, indexingStatusSchema, indexingPagesSchema, submitForIndexingSchema, getMemorySchema, updateStrategySchema, recordActionSchema, addLearningSchema, getInsightsSchema, onpageAuditSchema, serpSearchSchema, listSitemapsSchema, } from './tools/index.js';
14
+ import {
15
+ // Execute functions
16
+ executeListSites, executeSelectSite, executeGetCurrentSite, executeUpdateSite, executeDeleteSite, executeSyncAnalytics, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, executeQueryGA4, executeLandingPages, executeTrafficSources, executeAnalyzePageSpeed, executeBulkPageSpeed, executePagespeedHistory, executeComparePeriod, executeWeekOverWeek, executeFindOpportunities, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, executeMoveTask, executeListReports, executeGetReport, executeGenerateReport, executeDeleteReport, executeReportSettings, executeUpdateReportSettings, executeSendTestReport, executeIndexingStatus, executeIndexingPages, executeSubmitForIndexing, executeIndexingCheck, executeIndexingHistory, executeIndexingSettings, executeUpdateIndexingSettings, executeIndexingSubmissions, executeRemoveIndexingPage, executeGetMemory, executeUpdateStrategy, executeRecordAction, executeAddLearning, executeDeleteGoal, executeMemorySnapshots, executeGenerateSnapshot, executeQueueAction, executeUpdateQueuedAction, executeGetInsights, executeGenerateInsights, executeOnpageAudit, executeOnpageHistory, executeSerpSearch, executeSerpHistory, executeSerpBatch, executeListSitemaps, executeSubmitSitemap, executeDeleteSitemap, executeGetKnowledge, executeUpdateKnowledge, executeNotificationSettings, executeUpdateNotificationSettings, executeKeywordVolume, executeChat, executeListConversations, executeGetConversation, executeCreateConversation, executeDeleteConversation,
17
+ // Schemas
18
+ selectSiteSchema, updateSiteSchema, deleteSiteSchema, syncAnalyticsSchema, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, analyzePageSpeedSchema, bulkPageSpeedSchema, pagespeedHistorySchema, comparePeriodSchema, weekOverWeekSchema, findOpportunitiesSchema, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, moveTaskSchema, listReportsSchema, getReportSchema, generateReportSchema, deleteReportSchema, reportSettingsSchema, updateReportSettingsSchema, sendTestReportSchema, indexingStatusSchema, indexingPagesSchema, submitForIndexingSchema, indexingCheckSchema, indexingHistorySchema, indexingSettingsSchema, updateIndexingSettingsSchema, indexingSubmissionsSchema, removeIndexingPageSchema, getMemorySchema, updateStrategySchema, recordActionSchema, addLearningSchema, deleteGoalSchema, memorySnapshotsSchema, generateSnapshotSchema, queueActionSchema, updateQueuedActionSchema, getInsightsSchema, generateInsightsSchema, onpageAuditSchema, onpageHistorySchema, serpSearchSchema, serpHistorySchema, serpBatchSchema, listSitemapsSchema, submitSitemapSchema, deleteSitemapSchema, getKnowledgeSchema, updateKnowledgeSchema, updateNotificationSettingsSchema, keywordVolumeSchema, chatSchema, listConversationsSchema, getConversationSchema, createConversationSchema, deleteConversationSchema, } from './tools/index.js';
16
19
  import { listResources } from './resources/index.js';
17
20
  import { generatePromptMessages } from './prompts/index.js';
18
21
  Sentry.init({
@@ -393,6 +396,383 @@ server.registerTool('heyseo_list_sitemaps', {
393
396
  return { content: [{ type: 'text', text: result }] };
394
397
  });
395
398
  // ──────────────────────────────────────────
399
+ // Site Tools (extended)
400
+ // ──────────────────────────────────────────
401
+ server.registerTool('heyseo_update_site', {
402
+ title: 'Update Site',
403
+ description: 'Update site settings',
404
+ inputSchema: updateSiteSchema.shape,
405
+ }, async (args) => {
406
+ const client = getClient();
407
+ const result = await executeUpdateSite(client, args);
408
+ return { content: [{ type: 'text', text: result }] };
409
+ });
410
+ server.registerTool('heyseo_delete_site', {
411
+ title: 'Delete Site',
412
+ description: 'Delete a site',
413
+ inputSchema: deleteSiteSchema.shape,
414
+ }, async (args) => {
415
+ const client = getClient();
416
+ const result = await executeDeleteSite(client, args);
417
+ return { content: [{ type: 'text', text: result }] };
418
+ });
419
+ server.registerTool('heyseo_sync_analytics', {
420
+ title: 'Sync Analytics',
421
+ description: 'Trigger analytics data sync for a site',
422
+ inputSchema: syncAnalyticsSchema.shape,
423
+ }, async (args) => {
424
+ const client = getClient();
425
+ const result = await executeSyncAnalytics(client, args);
426
+ return { content: [{ type: 'text', text: result }] };
427
+ });
428
+ // ──────────────────────────────────────────
429
+ // PageSpeed Tools (extended)
430
+ // ──────────────────────────────────────────
431
+ server.registerTool('heyseo_pagespeed_history', {
432
+ title: 'PageSpeed History',
433
+ description: 'Get PageSpeed analysis history',
434
+ inputSchema: pagespeedHistorySchema.shape,
435
+ }, async (args) => {
436
+ const client = getClient();
437
+ const result = await executePagespeedHistory(client, args);
438
+ return { content: [{ type: 'text', text: result }] };
439
+ });
440
+ // ──────────────────────────────────────────
441
+ // Task Tools (extended)
442
+ // ──────────────────────────────────────────
443
+ server.registerTool('heyseo_move_task', {
444
+ title: 'Move Task',
445
+ description: 'Move or reorder a task on the Kanban board',
446
+ inputSchema: moveTaskSchema.shape,
447
+ }, async (args) => {
448
+ const client = getClient();
449
+ const result = await executeMoveTask(client, args);
450
+ return { content: [{ type: 'text', text: result }] };
451
+ });
452
+ // ──────────────────────────────────────────
453
+ // Reports Tools (extended)
454
+ // ──────────────────────────────────────────
455
+ server.registerTool('heyseo_generate_report', {
456
+ title: 'Generate Report',
457
+ description: 'Generate a new SEO report',
458
+ inputSchema: generateReportSchema.shape,
459
+ }, async (args) => {
460
+ const client = getClient();
461
+ const result = await executeGenerateReport(client, args);
462
+ return { content: [{ type: 'text', text: result }] };
463
+ });
464
+ server.registerTool('heyseo_delete_report', {
465
+ title: 'Delete Report',
466
+ description: 'Delete a report',
467
+ inputSchema: deleteReportSchema.shape,
468
+ }, async (args) => {
469
+ const client = getClient();
470
+ const result = await executeDeleteReport(client, args);
471
+ return { content: [{ type: 'text', text: result }] };
472
+ });
473
+ server.registerTool('heyseo_report_settings', {
474
+ title: 'Report Settings',
475
+ description: 'Get report schedule settings',
476
+ inputSchema: reportSettingsSchema.shape,
477
+ }, async (args) => {
478
+ const client = getClient();
479
+ const result = await executeReportSettings(client, args);
480
+ return { content: [{ type: 'text', text: result }] };
481
+ });
482
+ server.registerTool('heyseo_update_report_settings', {
483
+ title: 'Update Report Settings',
484
+ description: 'Update report schedule settings',
485
+ inputSchema: updateReportSettingsSchema.shape,
486
+ }, async (args) => {
487
+ const client = getClient();
488
+ const result = await executeUpdateReportSettings(client, args);
489
+ return { content: [{ type: 'text', text: result }] };
490
+ });
491
+ server.registerTool('heyseo_send_test_report', {
492
+ title: 'Send Test Report',
493
+ description: 'Send a test report email',
494
+ inputSchema: sendTestReportSchema.shape,
495
+ }, async (args) => {
496
+ const client = getClient();
497
+ const result = await executeSendTestReport(client, args);
498
+ return { content: [{ type: 'text', text: result }] };
499
+ });
500
+ // ──────────────────────────────────────────
501
+ // Indexing Tools (extended)
502
+ // ──────────────────────────────────────────
503
+ server.registerTool('heyseo_indexing_check', {
504
+ title: 'Indexing Check',
505
+ description: 'Trigger an indexing check for a site',
506
+ inputSchema: indexingCheckSchema.shape,
507
+ }, async (args) => {
508
+ const client = getClient();
509
+ const result = await executeIndexingCheck(client, args);
510
+ return { content: [{ type: 'text', text: result }] };
511
+ });
512
+ server.registerTool('heyseo_indexing_history', {
513
+ title: 'Indexing History',
514
+ description: 'Get indexing check history',
515
+ inputSchema: indexingHistorySchema.shape,
516
+ }, async (args) => {
517
+ const client = getClient();
518
+ const result = await executeIndexingHistory(client, args);
519
+ return { content: [{ type: 'text', text: result }] };
520
+ });
521
+ server.registerTool('heyseo_indexing_settings', {
522
+ title: 'Indexing Settings',
523
+ description: 'Get indexing monitoring settings',
524
+ inputSchema: indexingSettingsSchema.shape,
525
+ }, async (args) => {
526
+ const client = getClient();
527
+ const result = await executeIndexingSettings(client, args);
528
+ return { content: [{ type: 'text', text: result }] };
529
+ });
530
+ server.registerTool('heyseo_update_indexing_settings', {
531
+ title: 'Update Indexing Settings',
532
+ description: 'Update indexing monitoring settings',
533
+ inputSchema: updateIndexingSettingsSchema.shape,
534
+ }, async (args) => {
535
+ const client = getClient();
536
+ const result = await executeUpdateIndexingSettings(client, args);
537
+ return { content: [{ type: 'text', text: result }] };
538
+ });
539
+ server.registerTool('heyseo_indexing_submissions', {
540
+ title: 'Indexing Submissions',
541
+ description: 'Get indexing submission history',
542
+ inputSchema: indexingSubmissionsSchema.shape,
543
+ }, async (args) => {
544
+ const client = getClient();
545
+ const result = await executeIndexingSubmissions(client, args);
546
+ return { content: [{ type: 'text', text: result }] };
547
+ });
548
+ server.registerTool('heyseo_remove_indexing_page', {
549
+ title: 'Remove Indexing Page',
550
+ description: 'Remove a page from indexing monitoring',
551
+ inputSchema: removeIndexingPageSchema.shape,
552
+ }, async (args) => {
553
+ const client = getClient();
554
+ const result = await executeRemoveIndexingPage(client, args);
555
+ return { content: [{ type: 'text', text: result }] };
556
+ });
557
+ // ──────────────────────────────────────────
558
+ // Memory Tools (extended)
559
+ // ──────────────────────────────────────────
560
+ server.registerTool('heyseo_delete_goal', {
561
+ title: 'Delete Goal',
562
+ description: 'Delete a goal',
563
+ inputSchema: deleteGoalSchema.shape,
564
+ }, async (args) => {
565
+ const client = getClient();
566
+ const result = await executeDeleteGoal(client, args);
567
+ return { content: [{ type: 'text', text: result }] };
568
+ });
569
+ server.registerTool('heyseo_memory_snapshots', {
570
+ title: 'Memory Snapshots',
571
+ description: 'Get performance snapshots',
572
+ inputSchema: memorySnapshotsSchema.shape,
573
+ }, async (args) => {
574
+ const client = getClient();
575
+ const result = await executeMemorySnapshots(client, args);
576
+ return { content: [{ type: 'text', text: result }] };
577
+ });
578
+ server.registerTool('heyseo_generate_snapshot', {
579
+ title: 'Generate Snapshot',
580
+ description: 'Generate a new performance snapshot',
581
+ inputSchema: generateSnapshotSchema.shape,
582
+ }, async (args) => {
583
+ const client = getClient();
584
+ const result = await executeGenerateSnapshot(client, args);
585
+ return { content: [{ type: 'text', text: result }] };
586
+ });
587
+ server.registerTool('heyseo_queue_action', {
588
+ title: 'Queue Action',
589
+ description: 'Queue an action for future implementation',
590
+ inputSchema: queueActionSchema.shape,
591
+ }, async (args) => {
592
+ const client = getClient();
593
+ const result = await executeQueueAction(client, args);
594
+ return { content: [{ type: 'text', text: result }] };
595
+ });
596
+ server.registerTool('heyseo_update_queued_action', {
597
+ title: 'Update Queued Action',
598
+ description: 'Update a queued action',
599
+ inputSchema: updateQueuedActionSchema.shape,
600
+ }, async (args) => {
601
+ const client = getClient();
602
+ const result = await executeUpdateQueuedAction(client, args);
603
+ return { content: [{ type: 'text', text: result }] };
604
+ });
605
+ // ──────────────────────────────────────────
606
+ // Insights Tools (extended)
607
+ // ──────────────────────────────────────────
608
+ server.registerTool('heyseo_generate_insights', {
609
+ title: 'Generate Insights',
610
+ description: 'Generate new AI insights',
611
+ inputSchema: generateInsightsSchema.shape,
612
+ }, async (args) => {
613
+ const client = getClient();
614
+ const result = await executeGenerateInsights(client, args);
615
+ return { content: [{ type: 'text', text: result }] };
616
+ });
617
+ // ──────────────────────────────────────────
618
+ // On-Page Tools (extended)
619
+ // ──────────────────────────────────────────
620
+ server.registerTool('heyseo_onpage_history', {
621
+ title: 'On-Page History',
622
+ description: 'Get on-page audit history',
623
+ inputSchema: onpageHistorySchema.shape,
624
+ }, async (args) => {
625
+ const client = getClient();
626
+ const result = await executeOnpageHistory(client, args);
627
+ return { content: [{ type: 'text', text: result }] };
628
+ });
629
+ // ──────────────────────────────────────────
630
+ // SERP Tools (extended)
631
+ // ──────────────────────────────────────────
632
+ server.registerTool('heyseo_serp_history', {
633
+ title: 'SERP History',
634
+ description: 'Get SERP search history',
635
+ inputSchema: serpHistorySchema.shape,
636
+ }, async (args) => {
637
+ const client = getClient();
638
+ const result = await executeSerpHistory(client, args);
639
+ return { content: [{ type: 'text', text: result }] };
640
+ });
641
+ server.registerTool('heyseo_serp_batch', {
642
+ title: 'SERP Batch',
643
+ description: 'Batch SERP preview for multiple keywords',
644
+ inputSchema: serpBatchSchema.shape,
645
+ }, async (args) => {
646
+ const client = getClient();
647
+ const result = await executeSerpBatch(client, args);
648
+ return { content: [{ type: 'text', text: result }] };
649
+ });
650
+ // ──────────────────────────────────────────
651
+ // Sitemaps Tools (extended)
652
+ // ──────────────────────────────────────────
653
+ server.registerTool('heyseo_submit_sitemap', {
654
+ title: 'Submit Sitemap',
655
+ description: 'Submit a sitemap to GSC',
656
+ inputSchema: submitSitemapSchema.shape,
657
+ }, async (args) => {
658
+ const client = getClient();
659
+ const result = await executeSubmitSitemap(client, args);
660
+ return { content: [{ type: 'text', text: result }] };
661
+ });
662
+ server.registerTool('heyseo_delete_sitemap', {
663
+ title: 'Delete Sitemap',
664
+ description: 'Delete a sitemap from GSC',
665
+ inputSchema: deleteSitemapSchema.shape,
666
+ }, async (args) => {
667
+ const client = getClient();
668
+ const result = await executeDeleteSitemap(client, args);
669
+ return { content: [{ type: 'text', text: result }] };
670
+ });
671
+ // ──────────────────────────────────────────
672
+ // Knowledge Tools
673
+ // ──────────────────────────────────────────
674
+ server.registerTool('heyseo_get_knowledge', {
675
+ title: 'Get Knowledge',
676
+ description: 'Get AI knowledge base for a site',
677
+ inputSchema: getKnowledgeSchema.shape,
678
+ }, async (args) => {
679
+ const client = getClient();
680
+ const result = await executeGetKnowledge(client, args);
681
+ return { content: [{ type: 'text', text: result }] };
682
+ });
683
+ server.registerTool('heyseo_update_knowledge', {
684
+ title: 'Update Knowledge',
685
+ description: 'Update AI knowledge base',
686
+ inputSchema: updateKnowledgeSchema.shape,
687
+ }, async (args) => {
688
+ const client = getClient();
689
+ const result = await executeUpdateKnowledge(client, args);
690
+ return { content: [{ type: 'text', text: result }] };
691
+ });
692
+ // ──────────────────────────────────────────
693
+ // Notification Tools
694
+ // ──────────────────────────────────────────
695
+ server.registerTool('heyseo_notification_settings', {
696
+ title: 'Notification Settings',
697
+ description: 'Get notification settings',
698
+ }, async () => {
699
+ const client = getClient();
700
+ const result = await executeNotificationSettings(client, {});
701
+ return { content: [{ type: 'text', text: result }] };
702
+ });
703
+ server.registerTool('heyseo_update_notification_settings', {
704
+ title: 'Update Notification Settings',
705
+ description: 'Update notification settings',
706
+ inputSchema: updateNotificationSettingsSchema.shape,
707
+ }, async (args) => {
708
+ const client = getClient();
709
+ const result = await executeUpdateNotificationSettings(client, args);
710
+ return { content: [{ type: 'text', text: result }] };
711
+ });
712
+ // ──────────────────────────────────────────
713
+ // DataForSEO Tools
714
+ // ──────────────────────────────────────────
715
+ server.registerTool('heyseo_keyword_volume', {
716
+ title: 'Keyword Volume',
717
+ description: 'Get keyword search volume data',
718
+ inputSchema: keywordVolumeSchema.shape,
719
+ }, async (args) => {
720
+ const client = getClient();
721
+ const result = await executeKeywordVolume(client, args);
722
+ return { content: [{ type: 'text', text: result }] };
723
+ });
724
+ // ──────────────────────────────────────────
725
+ // Chat Tools
726
+ // ──────────────────────────────────────────
727
+ server.registerTool('heyseo_chat', {
728
+ title: 'Chat',
729
+ description: 'Send a message to the AI assistant about your SEO data',
730
+ inputSchema: chatSchema.shape,
731
+ }, async (args) => {
732
+ const client = getClient();
733
+ const result = await executeChat(client, args);
734
+ return { content: [{ type: 'text', text: result }] };
735
+ });
736
+ // ──────────────────────────────────────────
737
+ // Conversation Tools
738
+ // ──────────────────────────────────────────
739
+ server.registerTool('heyseo_list_conversations', {
740
+ title: 'List Conversations',
741
+ description: 'List AI chat conversations',
742
+ inputSchema: listConversationsSchema.shape,
743
+ }, async (args) => {
744
+ const client = getClient();
745
+ const result = await executeListConversations(client, args);
746
+ return { content: [{ type: 'text', text: result }] };
747
+ });
748
+ server.registerTool('heyseo_get_conversation', {
749
+ title: 'Get Conversation',
750
+ description: 'Get a conversation with messages',
751
+ inputSchema: getConversationSchema.shape,
752
+ }, async (args) => {
753
+ const client = getClient();
754
+ const result = await executeGetConversation(client, args);
755
+ return { content: [{ type: 'text', text: result }] };
756
+ });
757
+ server.registerTool('heyseo_create_conversation', {
758
+ title: 'Create Conversation',
759
+ description: 'Create a new conversation',
760
+ inputSchema: createConversationSchema.shape,
761
+ }, async (args) => {
762
+ const client = getClient();
763
+ const result = await executeCreateConversation(client, args);
764
+ return { content: [{ type: 'text', text: result }] };
765
+ });
766
+ server.registerTool('heyseo_delete_conversation', {
767
+ title: 'Delete Conversation',
768
+ description: 'Delete a conversation',
769
+ inputSchema: deleteConversationSchema.shape,
770
+ }, async (args) => {
771
+ const client = getClient();
772
+ const result = await executeDeleteConversation(client, args);
773
+ return { content: [{ type: 'text', text: result }] };
774
+ });
775
+ // ──────────────────────────────────────────
396
776
  // Resources
397
777
  // ──────────────────────────────────────────
398
778
  server.registerResource('site-list', 'heyseo://sites', {