@heyseo/mcp-server 0.1.3 → 0.2.1

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 (63) hide show
  1. package/README.md +165 -34
  2. package/dist/index.js +492 -274
  3. package/dist/index.js.map +1 -1
  4. package/dist/prompts/index.d.ts.map +1 -1
  5. package/dist/prompts/index.js +93 -0
  6. package/dist/prompts/index.js.map +1 -1
  7. package/dist/resources/index.d.ts +1 -1
  8. package/dist/resources/index.d.ts.map +1 -1
  9. package/dist/resources/index.js +135 -4
  10. package/dist/resources/index.js.map +1 -1
  11. package/dist/tools/comparison.d.ts +1 -1
  12. package/dist/tools/index.d.ts +75 -456
  13. package/dist/tools/index.d.ts.map +1 -1
  14. package/dist/tools/index.js +65 -1
  15. package/dist/tools/index.js.map +1 -1
  16. package/dist/tools/indexing.d.ts +94 -0
  17. package/dist/tools/indexing.d.ts.map +1 -0
  18. package/dist/tools/indexing.js +99 -0
  19. package/dist/tools/indexing.js.map +1 -0
  20. package/dist/tools/insights.d.ts +38 -0
  21. package/dist/tools/insights.d.ts.map +1 -0
  22. package/dist/tools/insights.js +58 -0
  23. package/dist/tools/insights.js.map +1 -0
  24. package/dist/tools/memory.d.ts +329 -0
  25. package/dist/tools/memory.d.ts.map +1 -0
  26. package/dist/tools/memory.js +242 -0
  27. package/dist/tools/memory.js.map +1 -0
  28. package/dist/tools/onpage.d.ts +37 -0
  29. package/dist/tools/onpage.d.ts.map +1 -0
  30. package/dist/tools/onpage.js +46 -0
  31. package/dist/tools/onpage.js.map +1 -0
  32. package/dist/tools/reports.d.ts +74 -0
  33. package/dist/tools/reports.d.ts.map +1 -0
  34. package/dist/tools/reports.js +92 -0
  35. package/dist/tools/reports.js.map +1 -0
  36. package/dist/tools/serp.d.ts +55 -0
  37. package/dist/tools/serp.d.ts.map +1 -0
  38. package/dist/tools/serp.js +47 -0
  39. package/dist/tools/serp.js.map +1 -0
  40. package/dist/tools/site.d.ts +42 -0
  41. package/dist/tools/site.d.ts.map +1 -0
  42. package/dist/tools/site.js +167 -0
  43. package/dist/tools/site.js.map +1 -0
  44. package/dist/tools/sitemaps.d.ts +30 -0
  45. package/dist/tools/sitemaps.d.ts.map +1 -0
  46. package/dist/tools/sitemaps.js +44 -0
  47. package/dist/tools/sitemaps.js.map +1 -0
  48. package/dist/tools/tasks.d.ts +14 -14
  49. package/dist/tools/workflows.d.ts +53 -0
  50. package/dist/tools/workflows.d.ts.map +1 -0
  51. package/dist/tools/workflows.js +162 -0
  52. package/dist/tools/workflows.js.map +1 -0
  53. package/dist/types.d.ts +138 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/utils/api-client.d.ts +55 -1
  56. package/dist/utils/api-client.d.ts.map +1 -1
  57. package/dist/utils/api-client.js +126 -1
  58. package/dist/utils/api-client.js.map +1 -1
  59. package/dist/utils/response-formatter.d.ts +68 -0
  60. package/dist/utils/response-formatter.d.ts.map +1 -0
  61. package/dist/utils/response-formatter.js +128 -0
  62. package/dist/utils/response-formatter.js.map +1 -0
  63. package/package.json +2 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Site Management Tools
3
+ * Tools for selecting and managing the current working site in the MCP context
4
+ */
5
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
6
+ import { z } from 'zod';
7
+ import { HeySeoApiClient } from '../utils/api-client.js';
8
+ /**
9
+ * List all available sites
10
+ */
11
+ export declare function executeListSites(client: HeySeoApiClient): Promise<string>;
12
+ /**
13
+ * Get current selected site
14
+ */
15
+ export declare function executeGetCurrentSite(client: HeySeoApiClient, siteId?: string): Promise<string>;
16
+ /**
17
+ * Validate and confirm site selection
18
+ */
19
+ export declare function executeSelectSite(client: HeySeoApiClient, siteId: string): Promise<string>;
20
+ /**
21
+ * Site management tool schemas
22
+ */
23
+ export declare const listSitesSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
24
+ export declare const getCurrentSiteSchema: z.ZodObject<{
25
+ siteId: z.ZodOptional<z.ZodString>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ siteId?: string | undefined;
28
+ }, {
29
+ siteId?: string | undefined;
30
+ }>;
31
+ export declare const selectSiteSchema: z.ZodObject<{
32
+ siteId: z.ZodString;
33
+ }, "strip", z.ZodTypeAny, {
34
+ siteId: string;
35
+ }, {
36
+ siteId: string;
37
+ }>;
38
+ /**
39
+ * Site management tool definitions
40
+ */
41
+ export declare const siteTools: Tool[];
42
+ //# sourceMappingURL=site.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../src/tools/site.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC/E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCrG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgChG;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,gDAAe,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,IAAI,EAsC3B,CAAC"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Site Management Tools
3
+ * Tools for selecting and managing the current working site in the MCP context
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * List all available sites
8
+ */
9
+ export async function executeListSites(client) {
10
+ try {
11
+ const sites = await client.getSites();
12
+ if (!sites || sites.length === 0) {
13
+ return JSON.stringify({
14
+ success: true,
15
+ data: {
16
+ sites: [],
17
+ message: 'No sites available. Please add a site first.'
18
+ }
19
+ });
20
+ }
21
+ const formattedSites = sites.map((site) => ({
22
+ id: site.id,
23
+ name: site.name,
24
+ url: site.url,
25
+ gscConnected: site.gscConnected !== false,
26
+ ga4Connected: site.ga4Connected !== false
27
+ }));
28
+ return JSON.stringify({
29
+ success: true,
30
+ data: {
31
+ sites: formattedSites,
32
+ count: formattedSites.length
33
+ }
34
+ });
35
+ }
36
+ catch (error) {
37
+ return JSON.stringify({
38
+ success: false,
39
+ error: error instanceof Error ? error.message : 'Failed to list sites'
40
+ });
41
+ }
42
+ }
43
+ /**
44
+ * Get current selected site
45
+ */
46
+ export async function executeGetCurrentSite(client, siteId) {
47
+ try {
48
+ if (!siteId) {
49
+ return JSON.stringify({
50
+ success: false,
51
+ error: 'No site currently selected. Use heyseo_select_site to choose a site.'
52
+ });
53
+ }
54
+ const sites = await client.getSites();
55
+ const site = sites?.find((s) => s.id === siteId);
56
+ if (!site) {
57
+ return JSON.stringify({
58
+ success: false,
59
+ error: `Site with ID "${siteId}" not found`
60
+ });
61
+ }
62
+ return JSON.stringify({
63
+ success: true,
64
+ data: {
65
+ id: site.id,
66
+ name: site.name,
67
+ url: site.url,
68
+ gscConnected: site.gscConnected !== false,
69
+ ga4Connected: site.ga4Connected !== false
70
+ }
71
+ });
72
+ }
73
+ catch (error) {
74
+ return JSON.stringify({
75
+ success: false,
76
+ error: error instanceof Error ? error.message : 'Failed to get current site'
77
+ });
78
+ }
79
+ }
80
+ /**
81
+ * Validate and confirm site selection
82
+ */
83
+ export async function executeSelectSite(client, siteId) {
84
+ try {
85
+ const sites = await client.getSites();
86
+ const site = sites?.find((s) => s.id === siteId);
87
+ if (!site) {
88
+ return JSON.stringify({
89
+ success: false,
90
+ error: `Site with ID "${siteId}" not found. Use heyseo_list_sites to see available sites.`
91
+ });
92
+ }
93
+ return JSON.stringify({
94
+ success: true,
95
+ data: {
96
+ selected: true,
97
+ site: {
98
+ id: site.id,
99
+ name: site.name,
100
+ url: site.url,
101
+ gscConnected: site.gscConnected !== false,
102
+ ga4Connected: site.ga4Connected !== false
103
+ },
104
+ message: `Successfully selected site: ${site.name}. All subsequent operations will use this site.`
105
+ }
106
+ });
107
+ }
108
+ catch (error) {
109
+ return JSON.stringify({
110
+ success: false,
111
+ error: error instanceof Error ? error.message : 'Failed to select site'
112
+ });
113
+ }
114
+ }
115
+ /**
116
+ * Site management tool schemas
117
+ */
118
+ export const listSitesSchema = z.object({});
119
+ export const getCurrentSiteSchema = z.object({
120
+ siteId: z.string().optional().describe('The currently selected site ID')
121
+ });
122
+ export const selectSiteSchema = z.object({
123
+ siteId: z.string().describe('The ID of the site to select for operations')
124
+ });
125
+ /**
126
+ * Site management tool definitions
127
+ */
128
+ export const siteTools = [
129
+ {
130
+ name: 'heyseo_list_sites',
131
+ description: 'List all available sites for the current company. Shows site names, URLs, and connection status for GSC and GA4.',
132
+ inputSchema: {
133
+ type: 'object',
134
+ properties: {},
135
+ required: []
136
+ }
137
+ },
138
+ {
139
+ name: 'heyseo_select_site',
140
+ description: 'Select a specific site to work with for all subsequent SEO operations. This determines which site\'s data will be queried.',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {
144
+ siteId: {
145
+ type: 'string',
146
+ description: 'The ID of the site to select'
147
+ }
148
+ },
149
+ required: ['siteId']
150
+ }
151
+ },
152
+ {
153
+ name: 'heyseo_get_current_site',
154
+ description: 'Get information about the currently selected site. Returns site details and connection status.',
155
+ inputSchema: {
156
+ type: 'object',
157
+ properties: {
158
+ siteId: {
159
+ type: 'string',
160
+ description: 'The currently selected site ID (stored in context)'
161
+ }
162
+ },
163
+ required: []
164
+ }
165
+ }
166
+ ];
167
+ //# sourceMappingURL=site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/tools/site.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Sitemaps Tools
3
+ * Tools for viewing sitemaps registered in Google Search Console
4
+ */
5
+ import { z } from 'zod';
6
+ import type { HeySeoApiClient } from '../utils/api-client.js';
7
+ export declare const listSitemapsSchema: z.ZodObject<{
8
+ siteId: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ siteId: string;
11
+ }, {
12
+ siteId: string;
13
+ }>;
14
+ export type ListSitemapsInput = z.infer<typeof listSitemapsSchema>;
15
+ export declare function executeListSitemaps(client: HeySeoApiClient, input: ListSitemapsInput): Promise<string>;
16
+ export declare const sitemapTools: {
17
+ name: string;
18
+ description: string;
19
+ inputSchema: {
20
+ type: string;
21
+ properties: {
22
+ siteId: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ }[];
30
+ //# sourceMappingURL=sitemaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemaps.d.ts","sourceRoot":"","sources":["../../src/tools/sitemaps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;GAcxB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Sitemaps Tools
3
+ * Tools for viewing sitemaps registered in Google Search Console
4
+ */
5
+ import { z } from 'zod';
6
+ export const listSitemapsSchema = z.object({
7
+ siteId: z.string().describe('The ID of the site'),
8
+ });
9
+ export async function executeListSitemaps(client, input) {
10
+ try {
11
+ const result = await client.getSitemaps(input.siteId);
12
+ if (!result.sitemaps || result.sitemaps.length === 0) {
13
+ return JSON.stringify({
14
+ success: true,
15
+ message: 'No sitemaps found registered in Google Search Console for this site.',
16
+ sitemaps: [],
17
+ });
18
+ }
19
+ return JSON.stringify({
20
+ success: true,
21
+ total: result.sitemaps.length,
22
+ sitemaps: result.sitemaps,
23
+ }, null, 2);
24
+ }
25
+ catch (error) {
26
+ return JSON.stringify({ success: false, error: error instanceof Error ? error.message : 'Unknown error' });
27
+ }
28
+ }
29
+ export const sitemapTools = [
30
+ {
31
+ name: 'heyseo_list_sitemaps',
32
+ description: `List all sitemaps registered in Google Search Console for a site.
33
+
34
+ Returns sitemap URLs with their last download date, submission date, pending status, type (sitemap/sitemap index), and any errors or warnings.`,
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ siteId: { type: 'string', description: 'The ID of the site' },
39
+ },
40
+ required: ['siteId'],
41
+ },
42
+ },
43
+ ];
44
+ //# sourceMappingURL=sitemaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemaps.js","sourceRoot":"","sources":["../../src/tools/sitemaps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAClD,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAuB,EACvB,KAAwB;IAExB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,sEAAsE;gBAC/E,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE;;+IAE8H;QAC3I,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;aAC9D;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
@@ -11,17 +11,17 @@ export declare const createTaskSchema: z.ZodObject<{
11
11
  priority: z.ZodDefault<z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>>;
12
12
  category: z.ZodDefault<z.ZodOptional<z.ZodEnum<["technical", "content", "links", "ux"]>>>;
13
13
  }, "strip", z.ZodTypeAny, {
14
+ siteId: string;
14
15
  title: string;
15
- priority: "high" | "medium" | "low";
16
16
  category: "technical" | "content" | "links" | "ux";
17
- siteId: string;
17
+ priority: "high" | "medium" | "low";
18
18
  description?: string | undefined;
19
19
  }, {
20
- title: string;
21
20
  siteId: string;
21
+ title: string;
22
22
  description?: string | undefined;
23
- priority?: "high" | "medium" | "low" | undefined;
24
23
  category?: "technical" | "content" | "links" | "ux" | undefined;
24
+ priority?: "high" | "medium" | "low" | undefined;
25
25
  }>;
26
26
  export declare const listTasksSchema: z.ZodObject<{
27
27
  siteId: z.ZodString;
@@ -31,13 +31,13 @@ export declare const listTasksSchema: z.ZodObject<{
31
31
  }, "strip", z.ZodTypeAny, {
32
32
  siteId: string;
33
33
  status?: "todo" | "in_progress" | "done" | undefined;
34
- priority?: "high" | "medium" | "low" | undefined;
35
34
  category?: "technical" | "content" | "links" | "ux" | undefined;
35
+ priority?: "high" | "medium" | "low" | undefined;
36
36
  }, {
37
37
  siteId: string;
38
38
  status?: "todo" | "in_progress" | "done" | undefined;
39
- priority?: "high" | "medium" | "low" | undefined;
40
39
  category?: "technical" | "content" | "links" | "ux" | undefined;
40
+ priority?: "high" | "medium" | "low" | undefined;
41
41
  }>;
42
42
  export declare const getTaskSchema: z.ZodObject<{
43
43
  taskId: z.ZodString;
@@ -55,18 +55,18 @@ export declare const updateTaskSchema: z.ZodObject<{
55
55
  category: z.ZodOptional<z.ZodEnum<["technical", "content", "links", "ux"]>>;
56
56
  }, "strip", z.ZodTypeAny, {
57
57
  taskId: string;
58
- title?: string | undefined;
59
58
  description?: string | undefined;
60
59
  status?: "todo" | "in_progress" | "done" | undefined;
61
- priority?: "high" | "medium" | "low" | undefined;
60
+ title?: string | undefined;
62
61
  category?: "technical" | "content" | "links" | "ux" | undefined;
62
+ priority?: "high" | "medium" | "low" | undefined;
63
63
  }, {
64
64
  taskId: string;
65
- title?: string | undefined;
66
65
  description?: string | undefined;
67
66
  status?: "todo" | "in_progress" | "done" | undefined;
68
- priority?: "high" | "medium" | "low" | undefined;
67
+ title?: string | undefined;
69
68
  category?: "technical" | "content" | "links" | "ux" | undefined;
69
+ priority?: "high" | "medium" | "low" | undefined;
70
70
  }>;
71
71
  export declare const deleteTaskSchema: z.ZodObject<{
72
72
  taskId: z.ZodString;
@@ -84,21 +84,21 @@ export declare const bulkCreateTasksSchema: z.ZodObject<{
84
84
  category: z.ZodDefault<z.ZodOptional<z.ZodEnum<["technical", "content", "links", "ux"]>>>;
85
85
  }, "strip", z.ZodTypeAny, {
86
86
  title: string;
87
- priority: "high" | "medium" | "low";
88
87
  category: "technical" | "content" | "links" | "ux";
88
+ priority: "high" | "medium" | "low";
89
89
  description?: string | undefined;
90
90
  }, {
91
91
  title: string;
92
92
  description?: string | undefined;
93
- priority?: "high" | "medium" | "low" | undefined;
94
93
  category?: "technical" | "content" | "links" | "ux" | undefined;
94
+ priority?: "high" | "medium" | "low" | undefined;
95
95
  }>, "many">;
96
96
  }, "strip", z.ZodTypeAny, {
97
97
  siteId: string;
98
98
  tasks: {
99
99
  title: string;
100
- priority: "high" | "medium" | "low";
101
100
  category: "technical" | "content" | "links" | "ux";
101
+ priority: "high" | "medium" | "low";
102
102
  description?: string | undefined;
103
103
  }[];
104
104
  }, {
@@ -106,8 +106,8 @@ export declare const bulkCreateTasksSchema: z.ZodObject<{
106
106
  tasks: {
107
107
  title: string;
108
108
  description?: string | undefined;
109
- priority?: "high" | "medium" | "low" | undefined;
110
109
  category?: "technical" | "content" | "links" | "ux" | undefined;
110
+ priority?: "high" | "medium" | "low" | undefined;
111
111
  }[];
112
112
  }>;
113
113
  export declare const bulkUpdateTasksSchema: z.ZodObject<{
@@ -0,0 +1,53 @@
1
+ /**
2
+ * SEO Audit Workflow Tools
3
+ * Composite workflow tools for high-level site analysis
4
+ */
5
+ import { z } from 'zod';
6
+ import type { HeySeoApiClient } from '../utils/api-client.js';
7
+ export declare const siteAuditSchema: z.ZodObject<{
8
+ siteId: z.ZodString;
9
+ days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ siteId: string;
12
+ days: number;
13
+ }, {
14
+ siteId: string;
15
+ days?: number | undefined;
16
+ }>;
17
+ export type SiteAuditInput = z.infer<typeof siteAuditSchema>;
18
+ /**
19
+ * Execute site audit workflow
20
+ * Performs comprehensive SEO audit including GSC, GA4, and opportunities analysis
21
+ */
22
+ export declare function executeSiteAudit(client: HeySeoApiClient, input: SiteAuditInput): Promise<string>;
23
+ /**
24
+ * Workflow tool definitions for MCP
25
+ */
26
+ export declare const workflowTools: {
27
+ name: string;
28
+ description: string;
29
+ inputSchema: {
30
+ type: string;
31
+ properties: {
32
+ siteId: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ days: {
37
+ type: string;
38
+ minimum: number;
39
+ maximum: number;
40
+ default: number;
41
+ description: string;
42
+ };
43
+ };
44
+ required: string[];
45
+ };
46
+ hints: {
47
+ readOnlyHint: boolean;
48
+ destructiveHint: boolean;
49
+ idempotentHint: boolean;
50
+ openWorldHint: boolean;
51
+ };
52
+ }[];
53
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,eAAO,MAAM,eAAe;;;;;;;;;EAS1B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAgHjB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BzB,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * SEO Audit Workflow Tools
3
+ * Composite workflow tools for high-level site analysis
4
+ */
5
+ import { z } from 'zod';
6
+ import { formatResponse, formatErrorResponse } from '../utils/response-formatter.js';
7
+ // Schema for site audit workflow
8
+ export const siteAuditSchema = z.object({
9
+ siteId: z.string().describe('The ID of the site to audit'),
10
+ days: z
11
+ .number()
12
+ .min(7)
13
+ .max(90)
14
+ .optional()
15
+ .default(28)
16
+ .describe('Number of days to analyze'),
17
+ });
18
+ /**
19
+ * Execute site audit workflow
20
+ * Performs comprehensive SEO audit including GSC, GA4, and opportunities analysis
21
+ */
22
+ export async function executeSiteAudit(client, input) {
23
+ try {
24
+ // Calculate date range
25
+ const endDate = new Date().toISOString().split('T')[0];
26
+ const startDate = new Date(Date.now() - input.days * 24 * 60 * 60 * 1000)
27
+ .toISOString()
28
+ .split('T')[0];
29
+ // Fetch all data in parallel
30
+ const [site, overview, topKeywords, topPages, opportunities] = await Promise.all([
31
+ client.getSite(input.siteId),
32
+ client.getSiteOverview(input.siteId, { startDate, endDate }),
33
+ client.getTopKeywords(input.siteId, { startDate, endDate, limit: 10 }),
34
+ client.getTopPages(input.siteId, { startDate, endDate, limit: 10 }),
35
+ client.getOpportunities(input.siteId),
36
+ ]);
37
+ // Extract and format GSC metrics
38
+ const gscRow = overview.gsc.rows[0];
39
+ const gscMetrics = {
40
+ clicks: gscRow?.clicks || 0,
41
+ impressions: gscRow?.impressions || 0,
42
+ ctr: gscRow ? `${(gscRow.ctr * 100).toFixed(2)}%` : '0%',
43
+ avgPosition: gscRow?.position.toFixed(1) || 'N/A',
44
+ };
45
+ // Extract and format GA4 metrics
46
+ const ga4Row = overview.ga4[0];
47
+ const ga4Metrics = {
48
+ sessions: ga4Row?.metrics?.sessions || 0,
49
+ activeUsers: ga4Row?.metrics?.activeUsers || 0,
50
+ bounceRate: ga4Row?.metrics?.bounceRate
51
+ ? `${(ga4Row.metrics.bounceRate * 100).toFixed(1)}%`
52
+ : '0%',
53
+ engagementRate: ga4Row?.metrics?.engagementRate
54
+ ? `${(ga4Row.metrics.engagementRate * 100).toFixed(1)}%`
55
+ : '0%',
56
+ };
57
+ // Format top keywords
58
+ const topKeywordsList = topKeywords.rows.slice(0, 10).map((row, index) => ({
59
+ rank: index + 1,
60
+ keyword: row.keys[0] || 'N/A',
61
+ clicks: row.clicks || 0,
62
+ position: row.position.toFixed(1),
63
+ }));
64
+ // Format top pages
65
+ const topPagesList = topPages.rows.slice(0, 10).map((row, index) => ({
66
+ rank: index + 1,
67
+ page: row.keys[0] || 'N/A',
68
+ clicks: row.clicks || 0,
69
+ position: row.position.toFixed(1),
70
+ }));
71
+ // Count opportunities by type and find high-priority items
72
+ const opportunitiesByType = {
73
+ keyword: 0,
74
+ page: 0,
75
+ technical: 0,
76
+ content: 0,
77
+ };
78
+ const highPriorityOpportunities = [];
79
+ for (const opp of opportunities) {
80
+ const type = opp.type;
81
+ if (type in opportunitiesByType) {
82
+ opportunitiesByType[type]++;
83
+ }
84
+ if (opp.priority === 'high' && highPriorityOpportunities.length < 5) {
85
+ highPriorityOpportunities.push({
86
+ type: opp.type,
87
+ title: opp.title,
88
+ priority: opp.priority,
89
+ });
90
+ }
91
+ }
92
+ // Build audit report
93
+ const auditReport = {
94
+ siteInfo: {
95
+ name: site.name || 'N/A',
96
+ url: site.url || 'N/A',
97
+ gscConnected: site.gscConnected,
98
+ ga4Connected: site.ga4Connected,
99
+ },
100
+ period: {
101
+ startDate,
102
+ endDate,
103
+ days: input.days,
104
+ },
105
+ metrics: {
106
+ gsc: gscMetrics,
107
+ ga4: ga4Metrics,
108
+ },
109
+ topKeywords: topKeywordsList,
110
+ topPages: topPagesList,
111
+ opportunities: {
112
+ total: opportunities.length,
113
+ byType: opportunitiesByType,
114
+ topPriority: highPriorityOpportunities,
115
+ },
116
+ };
117
+ return formatResponse(true, auditReport, {
118
+ summary: `Site audit for ${site.name || site.url} completed`,
119
+ period: { startDate, endDate },
120
+ });
121
+ }
122
+ catch (error) {
123
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
124
+ return formatErrorResponse(errorMessage, 'siteAudit');
125
+ }
126
+ }
127
+ /**
128
+ * Workflow tool definitions for MCP
129
+ */
130
+ export const workflowTools = [
131
+ {
132
+ name: 'heyseo_site_audit',
133
+ description: `Perform comprehensive SEO audit for a site.
134
+
135
+ Analyzes GSC performance data, GA4 user engagement metrics, top keywords and pages, and SEO opportunities.
136
+ Returns a complete site health assessment with actionable insights.`,
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: {
140
+ siteId: {
141
+ type: 'string',
142
+ description: 'The ID of the site to audit',
143
+ },
144
+ days: {
145
+ type: 'number',
146
+ minimum: 7,
147
+ maximum: 90,
148
+ default: 28,
149
+ description: 'Number of days to analyze',
150
+ },
151
+ },
152
+ required: ['siteId'],
153
+ },
154
+ hints: {
155
+ readOnlyHint: true,
156
+ destructiveHint: false,
157
+ idempotentHint: true,
158
+ openWorldHint: true,
159
+ },
160
+ },
161
+ ];
162
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"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"}