@frase/mcp-server 0.1.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/CHANGELOG.md +44 -0
- package/README.md +262 -0
- package/dist/api-client.d.ts +93 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +213 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cache.d.ts +52 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +97 -0
- package/dist/cache.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/formatter.d.ts +47 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +136 -0
- package/dist/formatter.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +292 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/competitor-analysis.d.ts +18 -0
- package/dist/prompts/competitor-analysis.d.ts.map +1 -0
- package/dist/prompts/competitor-analysis.js +71 -0
- package/dist/prompts/competitor-analysis.js.map +1 -0
- package/dist/prompts/content-audit.d.ts +18 -0
- package/dist/prompts/content-audit.d.ts.map +1 -0
- package/dist/prompts/content-audit.js +67 -0
- package/dist/prompts/content-audit.js.map +1 -0
- package/dist/prompts/create-seo-article.d.ts +19 -0
- package/dist/prompts/create-seo-article.d.ts.map +1 -0
- package/dist/prompts/create-seo-article.js +78 -0
- package/dist/prompts/create-seo-article.js.map +1 -0
- package/dist/prompts/index.d.ts +18 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +52 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/keyword-research.d.ts +18 -0
- package/dist/prompts/keyword-research.d.ts.map +1 -0
- package/dist/prompts/keyword-research.js +72 -0
- package/dist/prompts/keyword-research.js.map +1 -0
- package/dist/prompts/optimize-content.d.ts +18 -0
- package/dist/prompts/optimize-content.d.ts.map +1 -0
- package/dist/prompts/optimize-content.js +59 -0
- package/dist/prompts/optimize-content.js.map +1 -0
- package/dist/resources/briefs.d.ts +26 -0
- package/dist/resources/briefs.d.ts.map +1 -0
- package/dist/resources/briefs.js +144 -0
- package/dist/resources/briefs.js.map +1 -0
- package/dist/resources/content.d.ts +26 -0
- package/dist/resources/content.d.ts.map +1 -0
- package/dist/resources/content.js +128 -0
- package/dist/resources/content.js.map +1 -0
- package/dist/resources/index.d.ts +32 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +85 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/sites.d.ts +26 -0
- package/dist/resources/sites.d.ts.map +1 -0
- package/dist/resources/sites.js +108 -0
- package/dist/resources/sites.js.map +1 -0
- package/dist/tools/ai-visibility.d.ts +25 -0
- package/dist/tools/ai-visibility.d.ts.map +1 -0
- package/dist/tools/ai-visibility.js +537 -0
- package/dist/tools/ai-visibility.js.map +1 -0
- package/dist/tools/analytics.d.ts +17 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +311 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/audits.d.ts +73 -0
- package/dist/tools/audits.d.ts.map +1 -0
- package/dist/tools/audits.js +345 -0
- package/dist/tools/audits.js.map +1 -0
- package/dist/tools/briefs.d.ts +63 -0
- package/dist/tools/briefs.d.ts.map +1 -0
- package/dist/tools/briefs.js +276 -0
- package/dist/tools/briefs.js.map +1 -0
- package/dist/tools/content.d.ts +51 -0
- package/dist/tools/content.d.ts.map +1 -0
- package/dist/tools/content.js +233 -0
- package/dist/tools/content.js.map +1 -0
- package/dist/tools/index.d.ts +29 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +96 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/jobs.d.ts +22 -0
- package/dist/tools/jobs.d.ts.map +1 -0
- package/dist/tools/jobs.js +124 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/optimizations.d.ts +19 -0
- package/dist/tools/optimizations.d.ts.map +1 -0
- package/dist/tools/optimizations.js +339 -0
- package/dist/tools/optimizations.js.map +1 -0
- package/dist/tools/research.d.ts +41 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +151 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/serp.d.ts +15 -0
- package/dist/tools/serp.d.ts.map +1 -0
- package/dist/tools/serp.js +267 -0
- package/dist/tools/serp.js.map +1 -0
- package/dist/tools/sites.d.ts +31 -0
- package/dist/tools/sites.d.ts.map +1 -0
- package/dist/tools/sites.js +83 -0
- package/dist/tools/sites.js.map +1 -0
- package/dist/tools/webhooks.d.ts +19 -0
- package/dist/tools/webhooks.d.ts.map +1 -0
- package/dist/tools/webhooks.js +350 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/types.d.ts +167 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
6
|
+
declare const listResearchInputSchema: z.ZodObject<{
|
|
7
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
page_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
page: number;
|
|
11
|
+
page_size: number;
|
|
12
|
+
}, {
|
|
13
|
+
page?: number | undefined;
|
|
14
|
+
page_size?: number | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export type ListResearchInput = z.infer<typeof listResearchInputSchema>;
|
|
17
|
+
export declare const listResearchTool: McpToolDefinition;
|
|
18
|
+
export declare function executeListResearch(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
19
|
+
declare const startResearchInputSchema: z.ZodObject<{
|
|
20
|
+
query: z.ZodString;
|
|
21
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
22
|
+
language: z.ZodOptional<z.ZodString>;
|
|
23
|
+
country: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
type: string;
|
|
26
|
+
query: string;
|
|
27
|
+
language?: string | undefined;
|
|
28
|
+
country?: string | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
query: string;
|
|
31
|
+
type?: string | undefined;
|
|
32
|
+
language?: string | undefined;
|
|
33
|
+
country?: string | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export type StartResearchInput = z.infer<typeof startResearchInputSchema>;
|
|
36
|
+
export declare const startResearchTool: McpToolDefinition;
|
|
37
|
+
export declare function executeStartResearch(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
38
|
+
export declare const researchTools: McpToolDefinition[];
|
|
39
|
+
export declare const researchExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=research.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAC;AAe9G,QAAA,MAAM,uBAAuB;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,gBAAgB,EAAE,iBAiB9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA0CrB;AAMD,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,iBAAiB,EAAE,iBA0B/B,CAAC;AAaF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAMD,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAA0C,CAAC;AAExF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAI9D,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { CACHE_TTL } from "../cache.js";
|
|
6
|
+
import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, truncate, } from "../formatter.js";
|
|
7
|
+
// ============================================
|
|
8
|
+
// list_research
|
|
9
|
+
// ============================================
|
|
10
|
+
const listResearchInputSchema = z.object({
|
|
11
|
+
page: z.number().min(1).optional().default(1),
|
|
12
|
+
page_size: z.number().min(1).max(100).optional().default(20),
|
|
13
|
+
});
|
|
14
|
+
export const listResearchTool = {
|
|
15
|
+
name: "list_research",
|
|
16
|
+
description: "List research sessions in your account. Research provides AI-powered insights on topics.",
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: "object",
|
|
19
|
+
properties: {
|
|
20
|
+
page: {
|
|
21
|
+
type: "number",
|
|
22
|
+
description: "Page number (default: 1)",
|
|
23
|
+
},
|
|
24
|
+
page_size: {
|
|
25
|
+
type: "number",
|
|
26
|
+
description: "Items per page, max 100 (default: 20)",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export async function executeListResearch(input, context) {
|
|
32
|
+
const parsed = listResearchInputSchema.safeParse(input || {});
|
|
33
|
+
if (!parsed.success) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const { page, page_size } = parsed.data;
|
|
40
|
+
try {
|
|
41
|
+
const response = await context.client.get("/research", { page, page_size }, CACHE_TTL.lists);
|
|
42
|
+
const headers = ["Query", "Status", "Type", "Language", "Created"];
|
|
43
|
+
const rows = response.data.map((r) => [
|
|
44
|
+
truncate(r.query, 40),
|
|
45
|
+
formatStatus(r.status),
|
|
46
|
+
r.type || "general",
|
|
47
|
+
r.language || "-",
|
|
48
|
+
formatDate(r.created_at),
|
|
49
|
+
]);
|
|
50
|
+
const table = formatTable(headers, rows);
|
|
51
|
+
const pagination = formatPagination(response.pagination);
|
|
52
|
+
return {
|
|
53
|
+
success: true,
|
|
54
|
+
markdown: `## Research (Page ${page})\n\n${table}${pagination}`,
|
|
55
|
+
data: response,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
markdown: `**Error:** Failed to list research - ${message}`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ============================================
|
|
67
|
+
// start_research
|
|
68
|
+
// ============================================
|
|
69
|
+
const startResearchInputSchema = z.object({
|
|
70
|
+
query: z.string().min(1).max(500),
|
|
71
|
+
type: z.string().optional().default("general"),
|
|
72
|
+
language: z.string().length(2).optional(),
|
|
73
|
+
country: z.string().length(2).optional(),
|
|
74
|
+
});
|
|
75
|
+
export const startResearchTool = {
|
|
76
|
+
name: "start_research",
|
|
77
|
+
description: "Start a new research session on a topic. Returns immediately with a job ID - use get_job_status to check progress.",
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: "object",
|
|
80
|
+
properties: {
|
|
81
|
+
query: {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "The topic or question to research (required, max 500 chars)",
|
|
84
|
+
},
|
|
85
|
+
type: {
|
|
86
|
+
type: "string",
|
|
87
|
+
description: "Type of research (default: general)",
|
|
88
|
+
},
|
|
89
|
+
language: {
|
|
90
|
+
type: "string",
|
|
91
|
+
description: "Language code (ISO 639-1, e.g., 'en', 'es', 'fr')",
|
|
92
|
+
},
|
|
93
|
+
country: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: "Country code (ISO 3166-1, e.g., 'us', 'uk', 'de')",
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
required: ["query"],
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
export async function executeStartResearch(input, context) {
|
|
102
|
+
const parsed = startResearchInputSchema.safeParse(input);
|
|
103
|
+
if (!parsed.success) {
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const data = parsed.data;
|
|
110
|
+
try {
|
|
111
|
+
const response = await context.client.post("/research", {
|
|
112
|
+
query: data.query,
|
|
113
|
+
type: data.type,
|
|
114
|
+
language: data.language,
|
|
115
|
+
country: data.country,
|
|
116
|
+
});
|
|
117
|
+
const research = response.data;
|
|
118
|
+
let markdown = `## Research Started\n\n`;
|
|
119
|
+
markdown += formatKeyValue({
|
|
120
|
+
ID: research.id,
|
|
121
|
+
Query: research.query,
|
|
122
|
+
Status: research.status,
|
|
123
|
+
Type: research.type,
|
|
124
|
+
Language: research.language,
|
|
125
|
+
Country: research.country,
|
|
126
|
+
});
|
|
127
|
+
markdown += `\n\n**Research is processing.** Check status with:\n`;
|
|
128
|
+
markdown += `\`get_job_status\` with \`id: "${research.id}"\` and \`type: "research"\``;
|
|
129
|
+
return {
|
|
130
|
+
success: true,
|
|
131
|
+
markdown,
|
|
132
|
+
data: response,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
markdown: `**Error:** Failed to start research - ${message}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// ============================================
|
|
144
|
+
// Export all research tools
|
|
145
|
+
// ============================================
|
|
146
|
+
export const researchTools = [listResearchTool, startResearchTool];
|
|
147
|
+
export const researchExecutors = {
|
|
148
|
+
list_research: executeListResearch,
|
|
149
|
+
start_research: executeStartResearch,
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SERP tools
|
|
3
|
+
*
|
|
4
|
+
* Search engine results page analysis
|
|
5
|
+
*/
|
|
6
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
7
|
+
export declare const analyzeSerpTool: McpToolDefinition;
|
|
8
|
+
export declare function executeAnalyzeSerp(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
9
|
+
export declare const analyzeCompetitorsTool: McpToolDefinition;
|
|
10
|
+
export declare function executeAnalyzeCompetitors(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
11
|
+
export declare const getSearchIntentTool: McpToolDefinition;
|
|
12
|
+
export declare function executeGetSearchIntent(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
13
|
+
export declare const serpTools: McpToolDefinition[];
|
|
14
|
+
export declare const serpExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
15
|
+
//# sourceMappingURL=serp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serp.d.ts","sourceRoot":"","sources":["../../src/tools/serp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EAEX,MAAM,aAAa,CAAC;AAkErB,eAAO,MAAM,eAAe,EAAE,iBAqB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqErB;AAaD,eAAO,MAAM,sBAAsB,EAAE,iBA0BpC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAmErB;AAUD,eAAO,MAAM,mBAAmB,EAAE,iBAajC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsDrB;AAMD,eAAO,MAAM,SAAS,EAAE,iBAAiB,EAIxC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAChC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAK9D,CAAC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SERP tools
|
|
3
|
+
*
|
|
4
|
+
* Search engine results page analysis
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { formatTable, formatKeyValue, truncate, } from "../formatter.js";
|
|
8
|
+
// ============================================
|
|
9
|
+
// analyze_serp
|
|
10
|
+
// ============================================
|
|
11
|
+
const analyzeSerpInputSchema = z.object({
|
|
12
|
+
query: z.string().min(1).max(200),
|
|
13
|
+
country: z.string().length(2).optional().default("us"),
|
|
14
|
+
language: z.string().length(2).optional().default("en"),
|
|
15
|
+
});
|
|
16
|
+
export const analyzeSerpTool = {
|
|
17
|
+
name: "analyze_serp",
|
|
18
|
+
description: "Analyze search engine results for a query. Returns top results, featured snippets, and related searches.",
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
query: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "The search query to analyze (required)",
|
|
25
|
+
},
|
|
26
|
+
country: {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "Two-letter country code (default: us)",
|
|
29
|
+
},
|
|
30
|
+
language: {
|
|
31
|
+
type: "string",
|
|
32
|
+
description: "Two-letter language code (default: en)",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: ["query"],
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export async function executeAnalyzeSerp(input, context) {
|
|
39
|
+
const parsed = analyzeSerpInputSchema.safeParse(input);
|
|
40
|
+
if (!parsed.success) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const { query, country, language } = parsed.data;
|
|
47
|
+
try {
|
|
48
|
+
const response = await context.client.post("/serp/analyze", { query, country, language });
|
|
49
|
+
const data = response.data;
|
|
50
|
+
let markdown = `## SERP Analysis: ${data.query}\n\n`;
|
|
51
|
+
if (data.search_intent) {
|
|
52
|
+
markdown += `**Search Intent:** ${data.search_intent}\n\n`;
|
|
53
|
+
}
|
|
54
|
+
if (data.featured_snippet) {
|
|
55
|
+
markdown += `### Featured Snippet (${data.featured_snippet.type})\n\n`;
|
|
56
|
+
markdown += `> ${truncate(data.featured_snippet.content, 200)}\n\n`;
|
|
57
|
+
}
|
|
58
|
+
markdown += "### Top Results\n\n";
|
|
59
|
+
if (data.results.length > 0) {
|
|
60
|
+
const headers = ["Pos", "Domain", "Title"];
|
|
61
|
+
const rows = data.results.slice(0, 10).map((r) => [
|
|
62
|
+
r.position.toString(),
|
|
63
|
+
r.domain,
|
|
64
|
+
truncate(r.title, 50),
|
|
65
|
+
]);
|
|
66
|
+
markdown += formatTable(headers, rows);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
markdown += "_No results found._\n";
|
|
70
|
+
}
|
|
71
|
+
if (data.people_also_ask.length > 0) {
|
|
72
|
+
markdown += "\n\n### People Also Ask\n\n";
|
|
73
|
+
for (const question of data.people_also_ask.slice(0, 5)) {
|
|
74
|
+
markdown += `- ${question}\n`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (data.related_searches.length > 0) {
|
|
78
|
+
markdown += "\n\n### Related Searches\n\n";
|
|
79
|
+
for (const search of data.related_searches.slice(0, 8)) {
|
|
80
|
+
markdown += `- ${search}\n`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
markdown,
|
|
86
|
+
data: response,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
markdown: `**Error:** Failed to analyze SERP - ${message}`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ============================================
|
|
98
|
+
// analyze_competitors
|
|
99
|
+
// ============================================
|
|
100
|
+
const analyzeCompetitorsInputSchema = z.object({
|
|
101
|
+
query: z.string().min(1).max(200),
|
|
102
|
+
urls: z.array(z.string().url()).optional(),
|
|
103
|
+
country: z.string().length(2).optional().default("us"),
|
|
104
|
+
language: z.string().length(2).optional().default("en"),
|
|
105
|
+
});
|
|
106
|
+
export const analyzeCompetitorsTool = {
|
|
107
|
+
name: "analyze_competitors",
|
|
108
|
+
description: "Analyze competitor content for a search query. Returns detailed analysis of top-ranking pages.",
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: "object",
|
|
111
|
+
properties: {
|
|
112
|
+
query: {
|
|
113
|
+
type: "string",
|
|
114
|
+
description: "The search query (required)",
|
|
115
|
+
},
|
|
116
|
+
urls: {
|
|
117
|
+
type: "array",
|
|
118
|
+
items: { type: "string" },
|
|
119
|
+
description: "Specific competitor URLs to analyze (optional)",
|
|
120
|
+
},
|
|
121
|
+
country: {
|
|
122
|
+
type: "string",
|
|
123
|
+
description: "Two-letter country code (default: us)",
|
|
124
|
+
},
|
|
125
|
+
language: {
|
|
126
|
+
type: "string",
|
|
127
|
+
description: "Two-letter language code (default: en)",
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
required: ["query"],
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
export async function executeAnalyzeCompetitors(input, context) {
|
|
134
|
+
const parsed = analyzeCompetitorsInputSchema.safeParse(input);
|
|
135
|
+
if (!parsed.success) {
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const { query, urls, country, language } = parsed.data;
|
|
142
|
+
try {
|
|
143
|
+
const response = await context.client.post("/serp/competitors", { query, urls, country, language });
|
|
144
|
+
const data = response.data;
|
|
145
|
+
let markdown = `## Competitor Analysis: ${data.query}\n\n`;
|
|
146
|
+
if (data.competitors.length === 0) {
|
|
147
|
+
return {
|
|
148
|
+
success: true,
|
|
149
|
+
markdown: markdown + "_No competitor data available._",
|
|
150
|
+
data: response,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
for (const comp of data.competitors.slice(0, 5)) {
|
|
154
|
+
markdown += `### #${comp.position}: ${comp.domain}\n\n`;
|
|
155
|
+
markdown += formatKeyValue({
|
|
156
|
+
url: truncate(comp.url, 60),
|
|
157
|
+
title: truncate(comp.title, 50),
|
|
158
|
+
word_count: comp.word_count,
|
|
159
|
+
content_type: comp.content_type,
|
|
160
|
+
});
|
|
161
|
+
if (comp.strengths.length > 0) {
|
|
162
|
+
markdown += "\n\n**Strengths:**\n";
|
|
163
|
+
for (const s of comp.strengths.slice(0, 3)) {
|
|
164
|
+
markdown += `- ${s}\n`;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (comp.weaknesses.length > 0) {
|
|
168
|
+
markdown += "\n**Weaknesses:**\n";
|
|
169
|
+
for (const w of comp.weaknesses.slice(0, 3)) {
|
|
170
|
+
markdown += `- ${w}\n`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
markdown += "\n---\n\n";
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
success: true,
|
|
177
|
+
markdown,
|
|
178
|
+
data: response,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
markdown: `**Error:** Failed to analyze competitors - ${message}`,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// ============================================
|
|
190
|
+
// get_search_intent
|
|
191
|
+
// ============================================
|
|
192
|
+
const getSearchIntentInputSchema = z.object({
|
|
193
|
+
query: z.string().min(1).max(200),
|
|
194
|
+
});
|
|
195
|
+
export const getSearchIntentTool = {
|
|
196
|
+
name: "get_search_intent",
|
|
197
|
+
description: "Analyze the search intent behind a query. Returns intent classification and content recommendations.",
|
|
198
|
+
inputSchema: {
|
|
199
|
+
type: "object",
|
|
200
|
+
properties: {
|
|
201
|
+
query: {
|
|
202
|
+
type: "string",
|
|
203
|
+
description: "The search query to analyze (required)",
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
required: ["query"],
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
export async function executeGetSearchIntent(input, context) {
|
|
210
|
+
const parsed = getSearchIntentInputSchema.safeParse(input);
|
|
211
|
+
if (!parsed.success) {
|
|
212
|
+
return {
|
|
213
|
+
success: false,
|
|
214
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
const { query } = parsed.data;
|
|
218
|
+
try {
|
|
219
|
+
const response = await context.client.post("/serp/intent", { query });
|
|
220
|
+
const data = response.data;
|
|
221
|
+
let markdown = `## Search Intent Analysis: ${data.query}\n\n`;
|
|
222
|
+
markdown += formatKeyValue({
|
|
223
|
+
primary_intent: data.primary_intent,
|
|
224
|
+
confidence: `${(data.confidence * 100).toFixed(0)}%`,
|
|
225
|
+
recommended_content_type: data.recommended_content_type,
|
|
226
|
+
recommended_format: data.recommended_format,
|
|
227
|
+
});
|
|
228
|
+
if (data.secondary_intents.length > 0) {
|
|
229
|
+
markdown += "\n\n### Secondary Intents\n\n";
|
|
230
|
+
for (const intent of data.secondary_intents) {
|
|
231
|
+
markdown += `- ${intent}\n`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (data.key_topics.length > 0) {
|
|
235
|
+
markdown += "\n\n### Key Topics to Cover\n\n";
|
|
236
|
+
for (const topic of data.key_topics) {
|
|
237
|
+
markdown += `- ${topic}\n`;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
success: true,
|
|
242
|
+
markdown,
|
|
243
|
+
data: response,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
248
|
+
return {
|
|
249
|
+
success: false,
|
|
250
|
+
markdown: `**Error:** Failed to analyze search intent - ${message}`,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// ============================================
|
|
255
|
+
// Export all
|
|
256
|
+
// ============================================
|
|
257
|
+
export const serpTools = [
|
|
258
|
+
analyzeSerpTool,
|
|
259
|
+
analyzeCompetitorsTool,
|
|
260
|
+
getSearchIntentTool,
|
|
261
|
+
];
|
|
262
|
+
export const serpExecutors = {
|
|
263
|
+
analyze_serp: executeAnalyzeSerp,
|
|
264
|
+
analyze_competitors: executeAnalyzeCompetitors,
|
|
265
|
+
get_search_intent: executeGetSearchIntent,
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=serp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serp.js","sourceRoot":"","sources":["../../src/tools/serp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sites tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Input schema for list_sites
|
|
8
|
+
*/
|
|
9
|
+
declare const listSitesInputSchema: z.ZodObject<{
|
|
10
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
11
|
+
page_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
page: number;
|
|
14
|
+
page_size: number;
|
|
15
|
+
}, {
|
|
16
|
+
page?: number | undefined;
|
|
17
|
+
page_size?: number | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export type ListSitesInput = z.infer<typeof listSitesInputSchema>;
|
|
20
|
+
/**
|
|
21
|
+
* Tool definition for list_sites
|
|
22
|
+
*/
|
|
23
|
+
export declare const listSitesTool: McpToolDefinition;
|
|
24
|
+
/**
|
|
25
|
+
* Execute list_sites
|
|
26
|
+
*/
|
|
27
|
+
export declare function executeListSites(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
28
|
+
export declare const siteTools: McpToolDefinition[];
|
|
29
|
+
export declare const siteExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=sites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAA8B,MAAM,aAAa,CAAC;AAQ1G;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;EAGxB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,iBAiB3B,CAAC;AAEF;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA2CrB;AAMD,eAAO,MAAM,SAAS,EAAE,iBAAiB,EAAoB,CAAC;AAE9D,eAAO,MAAM,aAAa,EAAE,MAAM,CAChC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAG9D,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sites tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { CACHE_TTL } from "../cache.js";
|
|
6
|
+
import { formatTable, formatDate, formatPagination } from "../formatter.js";
|
|
7
|
+
// ============================================
|
|
8
|
+
// list_sites
|
|
9
|
+
// ============================================
|
|
10
|
+
/**
|
|
11
|
+
* Input schema for list_sites
|
|
12
|
+
*/
|
|
13
|
+
const listSitesInputSchema = z.object({
|
|
14
|
+
page: z.number().min(1).optional().default(1),
|
|
15
|
+
page_size: z.number().min(1).max(100).optional().default(20),
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Tool definition for list_sites
|
|
19
|
+
*/
|
|
20
|
+
export const listSitesTool = {
|
|
21
|
+
name: "list_sites",
|
|
22
|
+
description: "List all sites in your Frase account. Sites are domains you've connected for SEO tracking and content optimization.",
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
page: {
|
|
27
|
+
type: "number",
|
|
28
|
+
description: "Page number (default: 1)",
|
|
29
|
+
},
|
|
30
|
+
page_size: {
|
|
31
|
+
type: "number",
|
|
32
|
+
description: "Items per page, max 100 (default: 20)",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Execute list_sites
|
|
39
|
+
*/
|
|
40
|
+
export async function executeListSites(input, context) {
|
|
41
|
+
// Validate input
|
|
42
|
+
const parsed = listSitesInputSchema.safeParse(input || {});
|
|
43
|
+
if (!parsed.success) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const { page, page_size } = parsed.data;
|
|
50
|
+
try {
|
|
51
|
+
const response = await context.client.get("/sites", { page, page_size }, CACHE_TTL.lists);
|
|
52
|
+
// Format as markdown table
|
|
53
|
+
const headers = ["Name", "Domain", "GSC", "Created"];
|
|
54
|
+
const rows = response.data.map((site) => [
|
|
55
|
+
site.name,
|
|
56
|
+
site.domain,
|
|
57
|
+
site.gsc_connected ? "✅" : "❌",
|
|
58
|
+
formatDate(site.created_at),
|
|
59
|
+
]);
|
|
60
|
+
const table = formatTable(headers, rows);
|
|
61
|
+
const pagination = formatPagination(response.pagination);
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
markdown: `## Sites (Page ${page})\n\n${table}${pagination}`,
|
|
65
|
+
data: response,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
markdown: `**Error:** Failed to list sites - ${message}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ============================================
|
|
77
|
+
// Export all site tools
|
|
78
|
+
// ============================================
|
|
79
|
+
export const siteTools = [listSitesTool];
|
|
80
|
+
export const siteExecutors = {
|
|
81
|
+
list_sites: executeListSites,
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=sites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook tools
|
|
3
|
+
*
|
|
4
|
+
* Manage webhooks for event notifications
|
|
5
|
+
*/
|
|
6
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
7
|
+
export declare const listWebhooksTool: McpToolDefinition;
|
|
8
|
+
export declare function executeListWebhooks(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
9
|
+
export declare const createWebhookTool: McpToolDefinition;
|
|
10
|
+
export declare function executeCreateWebhook(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
11
|
+
export declare const getWebhookTool: McpToolDefinition;
|
|
12
|
+
export declare function executeGetWebhook(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
13
|
+
export declare const updateWebhookTool: McpToolDefinition;
|
|
14
|
+
export declare function executeUpdateWebhook(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
15
|
+
export declare const deleteWebhookTool: McpToolDefinition;
|
|
16
|
+
export declare function executeDeleteWebhook(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
17
|
+
export declare const webhookTools: McpToolDefinition[];
|
|
18
|
+
export declare const webhookExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
19
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EAGX,MAAM,aAAa,CAAC;AAkDrB,eAAO,MAAM,gBAAgB,EAAE,iBAgB9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA0CrB;AAaD,eAAO,MAAM,iBAAiB,EAAE,iBA6B/B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAUD,eAAO,MAAM,cAAc,EAAE,iBAa5B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA+CrB;AAcD,eAAO,MAAM,iBAAiB,EAAE,iBAkC/B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAUD,eAAO,MAAM,iBAAiB,EAAE,iBAa/B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAMD,eAAO,MAAM,YAAY,EAAE,iBAAiB,EAM3C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAO9D,CAAC"}
|