@heyseo/mcp-server 0.1.3 → 0.2.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.
- package/README.md +73 -19
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/index.d.ts +41 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/site.d.ts +42 -0
- package/dist/tools/site.d.ts.map +1 -0
- package/dist/tools/site.js +167 -0
- package/dist/tools/site.js.map +1 -0
- package/dist/tools/workflows.d.ts +53 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +162 -0
- package/dist/tools/workflows.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +68 -0
- package/dist/utils/response-formatter.d.ts.map +1 -0
- package/dist/utils/response-formatter.js +128 -0
- package/dist/utils/response-formatter.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="https://heyseo.app/img/logo.svg" alt="HeySeo Logo" width="200" />
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
# HeySeo MCP Server
|
|
5
|
+
|
|
6
|
+
Connect your LLM to your SEO data. Query Google Search Console, Google Analytics 4, and PageSpeed Insights directly from Claude, ChatGPT, Cursor, or any MCP-compatible client.
|
|
7
|
+
</div>
|
|
4
8
|
|
|
5
9
|
## Quick Start
|
|
6
10
|
|
|
@@ -144,6 +148,16 @@ Restart Claude Desktop, Cursor, or your MCP client to load the new server.
|
|
|
144
148
|
|
|
145
149
|
## Available Tools
|
|
146
150
|
|
|
151
|
+
### Site Management
|
|
152
|
+
|
|
153
|
+
**Select a site before running SEO operations.** The MCP server requires explicit site selection to ensure data isolation and prevent accidental cross-site operations.
|
|
154
|
+
|
|
155
|
+
| Tool | Description |
|
|
156
|
+
|------|-------------|
|
|
157
|
+
| `heyseo_list_sites` | List all available sites and their connection status (GSC/GA4) |
|
|
158
|
+
| `heyseo_select_site` | Select a specific site for all subsequent operations |
|
|
159
|
+
| `heyseo_get_current_site` | Get information about the currently selected site |
|
|
160
|
+
|
|
147
161
|
### Google Search Console
|
|
148
162
|
|
|
149
163
|
| Tool | Description |
|
|
@@ -220,6 +234,25 @@ Pre-built prompts for common SEO tasks:
|
|
|
220
234
|
|
|
221
235
|
## Usage Examples
|
|
222
236
|
|
|
237
|
+
### Site Selection (Start here!)
|
|
238
|
+
|
|
239
|
+
Before performing any SEO operations, you must select a site:
|
|
240
|
+
|
|
241
|
+
**List available sites:**
|
|
242
|
+
> "Show me all my connected sites"
|
|
243
|
+
|
|
244
|
+
**Select a site:**
|
|
245
|
+
> "Select the site with ID: abc123def456"
|
|
246
|
+
>
|
|
247
|
+
> Or ask Claude to list sites and select one for you
|
|
248
|
+
|
|
249
|
+
**Check current site:**
|
|
250
|
+
> "What site am I currently working with?"
|
|
251
|
+
|
|
252
|
+
### SEO Operations
|
|
253
|
+
|
|
254
|
+
Once a site is selected, you can perform SEO operations:
|
|
255
|
+
|
|
223
256
|
**Get top keywords:**
|
|
224
257
|
> "What are my top 10 keywords this month?"
|
|
225
258
|
|
|
@@ -249,6 +282,44 @@ Pre-built prompts for common SEO tasks:
|
|
|
249
282
|
|
|
250
283
|
---
|
|
251
284
|
|
|
285
|
+
## Site Selection Workflow
|
|
286
|
+
|
|
287
|
+
The HeySeo MCP server uses explicit site selection to prevent data isolation issues:
|
|
288
|
+
|
|
289
|
+
### Typical Workflow
|
|
290
|
+
|
|
291
|
+
1. **Initialize**: User starts a conversation with Claude
|
|
292
|
+
2. **List Sites**: User asks to see available sites
|
|
293
|
+
```
|
|
294
|
+
→ heyseo_list_sites
|
|
295
|
+
← Returns all available sites with IDs and connection status
|
|
296
|
+
```
|
|
297
|
+
3. **Select Site**: User chooses which site to work with
|
|
298
|
+
```
|
|
299
|
+
→ heyseo_select_site { siteId: "your-site-id" }
|
|
300
|
+
← Confirms selection and shows site details
|
|
301
|
+
```
|
|
302
|
+
4. **Verify Selection**: (Optional) User confirms the current site
|
|
303
|
+
```
|
|
304
|
+
→ heyseo_get_current_site
|
|
305
|
+
← Returns details of the selected site
|
|
306
|
+
```
|
|
307
|
+
5. **Perform Operations**: All subsequent SEO operations use the selected site
|
|
308
|
+
```
|
|
309
|
+
→ heyseo_query_gsc { siteId: <auto-filled>, ... }
|
|
310
|
+
→ heyseo_top_keywords { siteId: <auto-filled>, ... }
|
|
311
|
+
→ etc.
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Benefits
|
|
315
|
+
|
|
316
|
+
- **Data Isolation**: Prevents accidentally querying wrong site's data
|
|
317
|
+
- **Explicit Selection**: User clearly knows which site they're working with
|
|
318
|
+
- **Session Persistence**: Selection persists across multiple operations
|
|
319
|
+
- **Safety**: Perfect for users managing multiple sites
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
252
323
|
## Environment Variables
|
|
253
324
|
|
|
254
325
|
| Variable | Required | Default | Description |
|
|
@@ -263,23 +334,6 @@ Pre-built prompts for common SEO tasks:
|
|
|
263
334
|
|
|
264
335
|
---
|
|
265
336
|
|
|
266
|
-
## Development
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
# Clone the repo
|
|
270
|
-
git clone https://github.com/heyseo/mcp-server
|
|
271
|
-
cd mcp-server
|
|
272
|
-
|
|
273
|
-
# Install dependencies
|
|
274
|
-
npm install
|
|
275
|
-
|
|
276
|
-
# Build
|
|
277
|
-
npm run build
|
|
278
|
-
|
|
279
|
-
# Test locally
|
|
280
|
-
HEYSEO_API_KEY=your_key node dist/index.js
|
|
281
|
-
```
|
|
282
|
-
|
|
283
337
|
## License
|
|
284
338
|
|
|
285
339
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
10
10
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
11
11
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ErrorCode, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
12
12
|
import { createApiClient } from './utils/api-client.js';
|
|
13
|
-
import { allTools, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, executeQueryGA4, executeLandingPages, executeTrafficSources, executeAnalyzePageSpeed, executeBulkPageSpeed, executeComparePeriod, executeWeekOverWeek, executeFindOpportunities, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, analyzePageSpeedSchema, bulkPageSpeedSchema, comparePeriodSchema, weekOverWeekSchema, findOpportunitiesSchema, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, } from './tools/index.js';
|
|
13
|
+
import { allTools, executeListSites, executeSelectSite, executeGetCurrentSite, selectSiteSchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, executeQueryGA4, executeLandingPages, executeTrafficSources, executeAnalyzePageSpeed, executeBulkPageSpeed, executeComparePeriod, executeWeekOverWeek, executeFindOpportunities, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, analyzePageSpeedSchema, bulkPageSpeedSchema, comparePeriodSchema, weekOverWeekSchema, findOpportunitiesSchema, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, } from './tools/index.js';
|
|
14
14
|
import { listResources, fetchResource, resourceTemplates } from './resources/index.js';
|
|
15
15
|
import { promptTemplates, generatePromptMessages } from './prompts/index.js';
|
|
16
16
|
// Server info
|
|
@@ -22,6 +22,7 @@ const SERVER_VERSION = '0.1.0';
|
|
|
22
22
|
class HeySeoMCPServer {
|
|
23
23
|
server;
|
|
24
24
|
client = null;
|
|
25
|
+
selectedSiteId = null;
|
|
25
26
|
constructor() {
|
|
26
27
|
this.server = new Server({
|
|
27
28
|
name: SERVER_NAME,
|
|
@@ -62,6 +63,24 @@ class HeySeoMCPServer {
|
|
|
62
63
|
try {
|
|
63
64
|
let result;
|
|
64
65
|
switch (name) {
|
|
66
|
+
// Site Management Tools
|
|
67
|
+
case 'heyseo_list_sites': {
|
|
68
|
+
result = await executeListSites(client);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
case 'heyseo_select_site': {
|
|
72
|
+
const parsed = selectSiteSchema.parse(args);
|
|
73
|
+
result = await executeSelectSite(client, parsed.siteId);
|
|
74
|
+
// Update the selected site if valid
|
|
75
|
+
if (JSON.parse(result).success) {
|
|
76
|
+
this.selectedSiteId = parsed.siteId;
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'heyseo_get_current_site': {
|
|
81
|
+
result = await executeGetCurrentSite(client, this.selectedSiteId || undefined);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
65
84
|
// GSC Tools
|
|
66
85
|
case 'heyseo_query_gsc': {
|
|
67
86
|
const parsed = queryGSCSchema.parse(args);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,cAAc;AACd,MAAM,WAAW,GAAG,YAAY,CAAC;AACjC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,eAAe;IACX,MAAM,CAAS;IACf,MAAM,GAA2B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -2,16 +2,56 @@
|
|
|
2
2
|
* Tool Registry
|
|
3
3
|
* Exports all tools for the HeySeo MCP server
|
|
4
4
|
*/
|
|
5
|
+
import { siteTools, listSitesSchema, getCurrentSiteSchema, selectSiteSchema, executeListSites, executeSelectSite, executeGetCurrentSite } from './site.js';
|
|
5
6
|
import { gscTools, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory } from './gsc.js';
|
|
6
7
|
import { ga4Tools, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, executeQueryGA4, executeLandingPages, executeTrafficSources } from './ga4.js';
|
|
7
8
|
import { pagespeedTools, analyzePageSpeedSchema, bulkPageSpeedSchema, executeAnalyzePageSpeed, executeBulkPageSpeed } from './pagespeed.js';
|
|
8
9
|
import { comparisonTools, comparePeriodSchema, findOpportunitiesSchema, weekOverWeekSchema, executeComparePeriod, executeFindOpportunities, executeWeekOverWeek } from './comparison.js';
|
|
9
10
|
import { taskTools, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks } from './tasks.js';
|
|
10
|
-
export { gscTools, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, ga4Tools, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, executeQueryGA4, executeLandingPages, executeTrafficSources, pagespeedTools, analyzePageSpeedSchema, bulkPageSpeedSchema, executeAnalyzePageSpeed, executeBulkPageSpeed, comparisonTools, comparePeriodSchema, findOpportunitiesSchema, weekOverWeekSchema, executeComparePeriod, executeFindOpportunities, executeWeekOverWeek, taskTools, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, };
|
|
11
|
+
export { siteTools, listSitesSchema, getCurrentSiteSchema, selectSiteSchema, executeListSites, executeSelectSite, executeGetCurrentSite, gscTools, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, ga4Tools, queryGA4Schema, landingPagesSchema, trafficSourcesSchema, executeQueryGA4, executeLandingPages, executeTrafficSources, pagespeedTools, analyzePageSpeedSchema, bulkPageSpeedSchema, executeAnalyzePageSpeed, executeBulkPageSpeed, comparisonTools, comparePeriodSchema, findOpportunitiesSchema, weekOverWeekSchema, executeComparePeriod, executeFindOpportunities, executeWeekOverWeek, taskTools, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, };
|
|
11
12
|
/**
|
|
12
13
|
* All tool definitions for MCP registration
|
|
13
14
|
*/
|
|
14
15
|
export declare const allTools: ({
|
|
16
|
+
inputSchema: {
|
|
17
|
+
[x: string]: unknown;
|
|
18
|
+
type: "object";
|
|
19
|
+
properties?: {
|
|
20
|
+
[x: string]: object;
|
|
21
|
+
} | undefined;
|
|
22
|
+
required?: string[] | undefined;
|
|
23
|
+
};
|
|
24
|
+
name: string;
|
|
25
|
+
description?: string | undefined;
|
|
26
|
+
outputSchema?: {
|
|
27
|
+
[x: string]: unknown;
|
|
28
|
+
type: "object";
|
|
29
|
+
properties?: {
|
|
30
|
+
[x: string]: object;
|
|
31
|
+
} | undefined;
|
|
32
|
+
required?: string[] | undefined;
|
|
33
|
+
} | undefined;
|
|
34
|
+
annotations?: {
|
|
35
|
+
title?: string | undefined;
|
|
36
|
+
readOnlyHint?: boolean | undefined;
|
|
37
|
+
destructiveHint?: boolean | undefined;
|
|
38
|
+
idempotentHint?: boolean | undefined;
|
|
39
|
+
openWorldHint?: boolean | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
execution?: {
|
|
42
|
+
taskSupport?: "optional" | "required" | "forbidden" | undefined;
|
|
43
|
+
} | undefined;
|
|
44
|
+
_meta?: {
|
|
45
|
+
[x: string]: unknown;
|
|
46
|
+
} | undefined;
|
|
47
|
+
icons?: {
|
|
48
|
+
src: string;
|
|
49
|
+
mimeType?: string | undefined;
|
|
50
|
+
sizes?: string[] | undefined;
|
|
51
|
+
theme?: "light" | "dark" | undefined;
|
|
52
|
+
}[] | undefined;
|
|
53
|
+
title?: string | undefined;
|
|
54
|
+
} | {
|
|
15
55
|
name: string;
|
|
16
56
|
description: string;
|
|
17
57
|
inputSchema: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAEL,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EAErB,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EAErB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EAEpB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EAEnB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,GACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Tool Registry
|
|
3
3
|
* Exports all tools for the HeySeo MCP server
|
|
4
4
|
*/
|
|
5
|
+
// Site Tools
|
|
6
|
+
import { siteTools, listSitesSchema, getCurrentSiteSchema, selectSiteSchema, executeListSites, executeSelectSite, executeGetCurrentSite, } from './site.js';
|
|
5
7
|
// GSC Tools
|
|
6
8
|
import { gscTools, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory, } from './gsc.js';
|
|
7
9
|
// GA4 Tools
|
|
@@ -14,6 +16,8 @@ import { comparisonTools, comparePeriodSchema, findOpportunitiesSchema, weekOver
|
|
|
14
16
|
import { taskTools, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, deleteTaskSchema, bulkCreateTasksSchema, bulkUpdateTasksSchema, executeCreateTask, executeListTasks, executeGetTask, executeUpdateTask, executeDeleteTask, executeBulkCreateTasks, executeBulkUpdateTasks, } from './tasks.js';
|
|
15
17
|
// Re-export everything
|
|
16
18
|
export {
|
|
19
|
+
// Site
|
|
20
|
+
siteTools, listSitesSchema, getCurrentSiteSchema, selectSiteSchema, executeListSites, executeSelectSite, executeGetCurrentSite,
|
|
17
21
|
// GSC
|
|
18
22
|
gscTools, queryGSCSchema, topKeywordsSchema, topPagesSchema, rankingHistorySchema, executeQueryGSC, executeTopKeywords, executeTopPages, executeRankingHistory,
|
|
19
23
|
// GA4
|
|
@@ -28,6 +32,8 @@ taskTools, createTaskSchema, listTasksSchema, getTaskSchema, updateTaskSchema, d
|
|
|
28
32
|
* All tool definitions for MCP registration
|
|
29
33
|
*/
|
|
30
34
|
export const allTools = [
|
|
35
|
+
// Site
|
|
36
|
+
...siteTools,
|
|
31
37
|
// GSC
|
|
32
38
|
...gscTools,
|
|
33
39
|
// GA4
|
|
@@ -43,6 +49,9 @@ export const allTools = [
|
|
|
43
49
|
* Tool name to category mapping
|
|
44
50
|
*/
|
|
45
51
|
export const toolCategories = {
|
|
52
|
+
heyseo_list_sites: 'site',
|
|
53
|
+
heyseo_select_site: 'site',
|
|
54
|
+
heyseo_get_current_site: 'site',
|
|
46
55
|
heyseo_query_gsc: 'gsc',
|
|
47
56
|
heyseo_top_keywords: 'gsc',
|
|
48
57
|
heyseo_top_pages: 'gsc',
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAuB;IAC5D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,8CAA8C;iBACxD;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YAC/C,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;SAC1C,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,cAAc,CAAC,MAAM;aAC7B;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;SACvE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAuB,EAAE,MAAe;IAClF,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sEAAsE;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,iBAAiB,MAAM,aAAa;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;gBACzC,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;aAC1C;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;SAC7E,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAuB,EAAE,MAAc;IAC7E,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,iBAAiB,MAAM,4DAA4D;aAC3F,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE;oBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;oBACzC,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,KAAK;iBAC1C;gBACD,OAAO,EAAE,+BAA+B,IAAI,CAAC,IAAI,iDAAiD;aACnG;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;SACxE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CAC3E,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,kHAAkH;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,4HAA4H;QACzI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,gGAAgG;QAC7G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oDAAoD;iBAClE;aACF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Formatter Utility
|
|
3
|
+
* Provides standardized response formatting functions for MCP tool responses
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Standardized response format for all MCP tool responses
|
|
7
|
+
*/
|
|
8
|
+
export interface FormattedResponse {
|
|
9
|
+
success: boolean;
|
|
10
|
+
summary?: string;
|
|
11
|
+
data: unknown;
|
|
12
|
+
meta?: {
|
|
13
|
+
period?: {
|
|
14
|
+
startDate?: string;
|
|
15
|
+
endDate?: string;
|
|
16
|
+
};
|
|
17
|
+
totalResults?: number;
|
|
18
|
+
rowCount?: number;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
};
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for formatting responses
|
|
25
|
+
*/
|
|
26
|
+
export interface FormatResponseOptions {
|
|
27
|
+
summary?: string;
|
|
28
|
+
period?: {
|
|
29
|
+
startDate?: string;
|
|
30
|
+
endDate?: string;
|
|
31
|
+
};
|
|
32
|
+
totalResults?: number;
|
|
33
|
+
rowCount?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Format a successful response into standardized JSON format
|
|
37
|
+
*
|
|
38
|
+
* @param success - Whether the operation was successful
|
|
39
|
+
* @param data - The response data
|
|
40
|
+
* @param options - Optional formatting options
|
|
41
|
+
* @returns JSON string of FormattedResponse
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatResponse(success: boolean, data: unknown, options?: FormatResponseOptions): string;
|
|
44
|
+
/**
|
|
45
|
+
* Format an error response into standardized JSON format
|
|
46
|
+
*
|
|
47
|
+
* @param message - The error message
|
|
48
|
+
* @param context - Optional context information
|
|
49
|
+
* @returns JSON string of FormattedResponse with success=false
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatErrorResponse(message: string, context?: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Get actionable suggestions based on error message
|
|
54
|
+
* Helps LLM agents self-correct
|
|
55
|
+
*
|
|
56
|
+
* @param errorMessage - The error message to analyze
|
|
57
|
+
* @returns Actionable suggestion string
|
|
58
|
+
*/
|
|
59
|
+
export declare function getSuggestion(errorMessage: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Truncate text to a maximum length and add ellipsis with details
|
|
62
|
+
*
|
|
63
|
+
* @param text - The text to truncate
|
|
64
|
+
* @param maxLength - Maximum length before truncation (default: 25000)
|
|
65
|
+
* @returns Truncated text with ellipsis message if over limit
|
|
66
|
+
*/
|
|
67
|
+
export declare function truncateText(text: string, maxLength?: number): string;
|
|
68
|
+
//# sourceMappingURL=response-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/response-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE;YACP,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAgCR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB7E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAyD1D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,MAAM,CAO5E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Formatter Utility
|
|
3
|
+
* Provides standardized response formatting functions for MCP tool responses
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Format a successful response into standardized JSON format
|
|
7
|
+
*
|
|
8
|
+
* @param success - Whether the operation was successful
|
|
9
|
+
* @param data - The response data
|
|
10
|
+
* @param options - Optional formatting options
|
|
11
|
+
* @returns JSON string of FormattedResponse
|
|
12
|
+
*/
|
|
13
|
+
export function formatResponse(success, data, options = {}) {
|
|
14
|
+
const response = {
|
|
15
|
+
success,
|
|
16
|
+
data,
|
|
17
|
+
};
|
|
18
|
+
// Add summary if provided
|
|
19
|
+
if (options.summary !== undefined) {
|
|
20
|
+
response.summary = options.summary;
|
|
21
|
+
}
|
|
22
|
+
// Build meta object if any meta options are provided
|
|
23
|
+
const metaEntries = [];
|
|
24
|
+
if (options.period !== undefined) {
|
|
25
|
+
metaEntries.push(['period', options.period]);
|
|
26
|
+
}
|
|
27
|
+
if (options.totalResults !== undefined) {
|
|
28
|
+
metaEntries.push(['totalResults', options.totalResults]);
|
|
29
|
+
}
|
|
30
|
+
if (options.rowCount !== undefined) {
|
|
31
|
+
metaEntries.push(['rowCount', options.rowCount]);
|
|
32
|
+
}
|
|
33
|
+
// Only add meta if there are entries
|
|
34
|
+
if (metaEntries.length > 0) {
|
|
35
|
+
response.meta = Object.fromEntries(metaEntries);
|
|
36
|
+
}
|
|
37
|
+
return JSON.stringify(response, null, 2);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format an error response into standardized JSON format
|
|
41
|
+
*
|
|
42
|
+
* @param message - The error message
|
|
43
|
+
* @param context - Optional context information
|
|
44
|
+
* @returns JSON string of FormattedResponse with success=false
|
|
45
|
+
*/
|
|
46
|
+
export function formatErrorResponse(message, context) {
|
|
47
|
+
const suggestion = getSuggestion(message);
|
|
48
|
+
const response = {
|
|
49
|
+
success: false,
|
|
50
|
+
data: null,
|
|
51
|
+
error: message,
|
|
52
|
+
};
|
|
53
|
+
// Add context and suggestion in meta if provided or available
|
|
54
|
+
const metaEntries = [];
|
|
55
|
+
if (context !== undefined) {
|
|
56
|
+
metaEntries.push(['context', context]);
|
|
57
|
+
}
|
|
58
|
+
if (suggestion) {
|
|
59
|
+
metaEntries.push(['suggestion', suggestion]);
|
|
60
|
+
}
|
|
61
|
+
if (metaEntries.length > 0) {
|
|
62
|
+
response.meta = Object.fromEntries(metaEntries);
|
|
63
|
+
}
|
|
64
|
+
return JSON.stringify(response, null, 2);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get actionable suggestions based on error message
|
|
68
|
+
* Helps LLM agents self-correct
|
|
69
|
+
*
|
|
70
|
+
* @param errorMessage - The error message to analyze
|
|
71
|
+
* @returns Actionable suggestion string
|
|
72
|
+
*/
|
|
73
|
+
export function getSuggestion(errorMessage) {
|
|
74
|
+
const lowerError = errorMessage.toLowerCase();
|
|
75
|
+
// Rate limit errors
|
|
76
|
+
if (lowerError.includes('rate limit') || lowerError.includes('429')) {
|
|
77
|
+
return 'Consider batching requests or implementing exponential backoff. Try again after the rate limit window resets. Check the error details for reset time.';
|
|
78
|
+
}
|
|
79
|
+
// API key errors
|
|
80
|
+
if (lowerError.includes('api key') ||
|
|
81
|
+
lowerError.includes('unauthorized') ||
|
|
82
|
+
lowerError.includes('401') ||
|
|
83
|
+
lowerError.includes('authentication')) {
|
|
84
|
+
return 'Verify that your API key is valid and has not expired. Check that the API key is properly set in the environment or configuration. Ensure you have the required permissions.';
|
|
85
|
+
}
|
|
86
|
+
// Site/resource not found errors
|
|
87
|
+
if (lowerError.includes('site') ||
|
|
88
|
+
lowerError.includes('not found') ||
|
|
89
|
+
lowerError.includes('404') ||
|
|
90
|
+
lowerError.includes('does not exist')) {
|
|
91
|
+
return 'Verify that the site ID is correct and that the site is connected to your account. Check that you have access to this site. Try listing all available sites to confirm the ID.';
|
|
92
|
+
}
|
|
93
|
+
// Date range errors
|
|
94
|
+
if (lowerError.includes('date') ||
|
|
95
|
+
lowerError.includes('start') ||
|
|
96
|
+
lowerError.includes('end')) {
|
|
97
|
+
return 'Check that start date is before end date. Ensure dates are in valid format (YYYY-MM-DD). Verify that the date range contains data for the requested period.';
|
|
98
|
+
}
|
|
99
|
+
// Invalid parameter errors
|
|
100
|
+
if (lowerError.includes('parameter') ||
|
|
101
|
+
lowerError.includes('invalid') ||
|
|
102
|
+
lowerError.includes('required')) {
|
|
103
|
+
return 'Review the required parameters and ensure they are provided correctly. Check the tool documentation for valid parameter values and formats. Ensure all mandatory parameters are included.';
|
|
104
|
+
}
|
|
105
|
+
// Server errors
|
|
106
|
+
if (lowerError.includes('server') ||
|
|
107
|
+
lowerError.includes('500') ||
|
|
108
|
+
lowerError.includes('503')) {
|
|
109
|
+
return 'The server is temporarily unavailable. Try again in a few moments. If the problem persists, check the service status page.';
|
|
110
|
+
}
|
|
111
|
+
// Generic fallback
|
|
112
|
+
return 'Please check the error details above. Review the tool documentation and verify your parameters are correct. Try again or contact support if the issue persists.';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Truncate text to a maximum length and add ellipsis with details
|
|
116
|
+
*
|
|
117
|
+
* @param text - The text to truncate
|
|
118
|
+
* @param maxLength - Maximum length before truncation (default: 25000)
|
|
119
|
+
* @returns Truncated text with ellipsis message if over limit
|
|
120
|
+
*/
|
|
121
|
+
export function truncateText(text, maxLength = 25000) {
|
|
122
|
+
if (text.length <= maxLength) {
|
|
123
|
+
return text;
|
|
124
|
+
}
|
|
125
|
+
const omittedChars = text.length - maxLength;
|
|
126
|
+
return text.slice(0, maxLength) + `\n\n... (truncated, ${omittedChars} characters omitted)`;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=response-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-formatter.js","sourceRoot":"","sources":["../../src/utils/response-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkCH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,IAAa,EACb,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAsB;QAClC,OAAO;QACP,IAAI;KACL,CAAC;IAEF,0BAA0B;IAC1B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAA6B,EAAE,CAAC;IAEjD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAgB;IACnE,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAsB;QAClC,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,8DAA8D;IAC9D,MAAM,WAAW,GAA6B,EAAE,CAAC;IAEjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAE9C,oBAAoB;IACpB,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,uJAAuJ,CAAC;IACjK,CAAC;IAED,iBAAiB;IACjB,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACrC,CAAC;QACD,OAAO,8KAA8K,CAAC;IACxL,CAAC;IAED,iCAAiC;IACjC,IACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACrC,CAAC;QACD,OAAO,gLAAgL,CAAC;IAC1L,CAAC;IAED,oBAAoB;IACpB,IACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5B,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1B,CAAC;QACD,OAAO,6JAA6J,CAAC;IACvK,CAAC;IAED,2BAA2B;IAC3B,IACE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC/B,CAAC;QACD,OAAO,2LAA2L,CAAC;IACrM,CAAC;IAED,gBAAgB;IAChB,IACE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1B,CAAC;QACD,OAAO,4HAA4H,CAAC;IACtI,CAAC;IAED,mBAAmB;IACnB,OAAO,iKAAiK,CAAC;AAC3K,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,YAAoB,KAAK;IAClE,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,uBAAuB,YAAY,sBAAsB,CAAC;AAC9F,CAAC"}
|