@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,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registry
|
|
3
|
+
*
|
|
4
|
+
* All MCP tools are registered here. Each tool module exports:
|
|
5
|
+
* - Tool definitions (McpToolDefinition[])
|
|
6
|
+
* - Executors (Record<string, ToolExecutor>)
|
|
7
|
+
*/
|
|
8
|
+
// Import tool modules
|
|
9
|
+
import { siteTools, siteExecutors } from "./sites.js";
|
|
10
|
+
import { briefTools, briefExecutors } from "./briefs.js";
|
|
11
|
+
import { contentTools, contentExecutors } from "./content.js";
|
|
12
|
+
import { researchTools, researchExecutors } from "./research.js";
|
|
13
|
+
import { jobTools, jobExecutors } from "./jobs.js";
|
|
14
|
+
// Phase 3 tool modules
|
|
15
|
+
import { auditTools, auditExecutors } from "./audits.js";
|
|
16
|
+
import { serpTools, serpExecutors } from "./serp.js";
|
|
17
|
+
import { aiVisibilityTools, aiVisibilityExecutors } from "./ai-visibility.js";
|
|
18
|
+
import { analyticsTools, analyticsExecutors } from "./analytics.js";
|
|
19
|
+
import { optimizationTools, optimizationExecutors } from "./optimizations.js";
|
|
20
|
+
import { webhookTools, webhookExecutors } from "./webhooks.js";
|
|
21
|
+
// ============================================
|
|
22
|
+
// Tool Registry
|
|
23
|
+
// ============================================
|
|
24
|
+
/**
|
|
25
|
+
* All available MCP tools
|
|
26
|
+
*/
|
|
27
|
+
export const ALL_TOOLS = [
|
|
28
|
+
// Sites (Phase 1)
|
|
29
|
+
...siteTools,
|
|
30
|
+
// Briefs (Phase 2)
|
|
31
|
+
...briefTools,
|
|
32
|
+
// Content (Phase 2)
|
|
33
|
+
...contentTools,
|
|
34
|
+
// Research (Phase 2)
|
|
35
|
+
...researchTools,
|
|
36
|
+
// Jobs (Phase 2)
|
|
37
|
+
...jobTools,
|
|
38
|
+
// Audits (Phase 3)
|
|
39
|
+
...auditTools,
|
|
40
|
+
// SERP (Phase 3)
|
|
41
|
+
...serpTools,
|
|
42
|
+
// AI Visibility (Phase 3)
|
|
43
|
+
...aiVisibilityTools,
|
|
44
|
+
// Analytics (Phase 3)
|
|
45
|
+
...analyticsTools,
|
|
46
|
+
// Optimizations (Phase 3)
|
|
47
|
+
...optimizationTools,
|
|
48
|
+
// Webhooks (Phase 3)
|
|
49
|
+
...webhookTools,
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Tool executor mapping
|
|
53
|
+
*/
|
|
54
|
+
export const TOOL_EXECUTORS = {
|
|
55
|
+
// Sites (Phase 1)
|
|
56
|
+
...siteExecutors,
|
|
57
|
+
// Briefs (Phase 2)
|
|
58
|
+
...briefExecutors,
|
|
59
|
+
// Content (Phase 2)
|
|
60
|
+
...contentExecutors,
|
|
61
|
+
// Research (Phase 2)
|
|
62
|
+
...researchExecutors,
|
|
63
|
+
// Jobs (Phase 2)
|
|
64
|
+
...jobExecutors,
|
|
65
|
+
// Audits (Phase 3)
|
|
66
|
+
...auditExecutors,
|
|
67
|
+
// SERP (Phase 3)
|
|
68
|
+
...serpExecutors,
|
|
69
|
+
// AI Visibility (Phase 3)
|
|
70
|
+
...aiVisibilityExecutors,
|
|
71
|
+
// Analytics (Phase 3)
|
|
72
|
+
...analyticsExecutors,
|
|
73
|
+
// Optimizations (Phase 3)
|
|
74
|
+
...optimizationExecutors,
|
|
75
|
+
// Webhooks (Phase 3)
|
|
76
|
+
...webhookExecutors,
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Get tool definition by name
|
|
80
|
+
*/
|
|
81
|
+
export function getToolByName(name) {
|
|
82
|
+
return ALL_TOOLS.find((tool) => tool.name === name);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get tool executor by name
|
|
86
|
+
*/
|
|
87
|
+
export function getToolExecutor(name) {
|
|
88
|
+
return TOOL_EXECUTORS[name];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get total tool count
|
|
92
|
+
*/
|
|
93
|
+
export function getToolCount() {
|
|
94
|
+
return ALL_TOOLS.length;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEnD,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE/D,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,kBAAkB;IAClB,GAAG,SAAS;IAEZ,mBAAmB;IACnB,GAAG,UAAU;IAEb,oBAAoB;IACpB,GAAG,YAAY;IAEf,qBAAqB;IACrB,GAAG,aAAa;IAEhB,iBAAiB;IACjB,GAAG,QAAQ;IAEX,mBAAmB;IACnB,GAAG,UAAU;IAEb,iBAAiB;IACjB,GAAG,SAAS;IAEZ,0BAA0B;IAC1B,GAAG,iBAAiB;IAEpB,sBAAsB;IACtB,GAAG,cAAc;IAEjB,0BAA0B;IAC1B,GAAG,iBAAiB;IAEpB,qBAAqB;IACrB,GAAG,YAAY;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAGvB;IACF,kBAAkB;IAClB,GAAG,aAAa;IAEhB,mBAAmB;IACnB,GAAG,cAAc;IAEjB,oBAAoB;IACpB,GAAG,gBAAgB;IAEnB,qBAAqB;IACrB,GAAG,iBAAiB;IAEpB,iBAAiB;IACjB,GAAG,YAAY;IAEf,mBAAmB;IACnB,GAAG,cAAc;IAEjB,iBAAiB;IACjB,GAAG,aAAa;IAEhB,0BAA0B;IAC1B,GAAG,qBAAqB;IAExB,sBAAsB;IACtB,GAAG,kBAAkB;IAErB,0BAA0B;IAC1B,GAAG,qBAAqB;IAExB,qBAAqB;IACrB,GAAG,gBAAgB;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY;IAEZ,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,MAAM,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job status tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
6
|
+
declare const getJobStatusInputSchema: z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
type: z.ZodOptional<z.ZodEnum<["audit", "research", "content", "brief", "optimization", "atomization"]>>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
id: string;
|
|
11
|
+
type?: "research" | "audit" | "content" | "brief" | "optimization" | "atomization" | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
id: string;
|
|
14
|
+
type?: "research" | "audit" | "content" | "brief" | "optimization" | "atomization" | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export type GetJobStatusInput = z.infer<typeof getJobStatusInputSchema>;
|
|
17
|
+
export declare const getJobStatusTool: McpToolDefinition;
|
|
18
|
+
export declare function executeGetJobStatus(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
19
|
+
export declare const jobTools: McpToolDefinition[];
|
|
20
|
+
export declare const jobExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAa,MAAM,aAAa,CAAC;AAOzF,QAAA,MAAM,uBAAuB;;;;;;;;;EAK3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,gBAAgB,EAAE,iBAoB9B,CAAC;AAcF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8FrB;AAMD,eAAO,MAAM,QAAQ,EAAE,iBAAiB,EAAuB,CAAC;AAEhE,eAAO,MAAM,YAAY,EAAE,MAAM,CAC/B,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAG9D,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job status tools
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { formatKeyValue, formatDate } from "../formatter.js";
|
|
6
|
+
// ============================================
|
|
7
|
+
// get_job_status
|
|
8
|
+
// ============================================
|
|
9
|
+
const getJobStatusInputSchema = z.object({
|
|
10
|
+
id: z.string().min(1),
|
|
11
|
+
type: z
|
|
12
|
+
.enum(["audit", "research", "content", "brief", "optimization", "atomization"])
|
|
13
|
+
.optional(),
|
|
14
|
+
});
|
|
15
|
+
export const getJobStatusTool = {
|
|
16
|
+
name: "get_job_status",
|
|
17
|
+
description: "Check the status of an async job (audit, research, content generation, brief outline, optimization). " +
|
|
18
|
+
"Specify the type for faster lookup, or omit to search all types.",
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
id: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "The job/resource ID to check",
|
|
25
|
+
},
|
|
26
|
+
type: {
|
|
27
|
+
type: "string",
|
|
28
|
+
enum: ["audit", "research", "content", "brief", "optimization", "atomization"],
|
|
29
|
+
description: "The type of job (optional, for faster lookup)",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["id"],
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
export async function executeGetJobStatus(input, context) {
|
|
36
|
+
const parsed = getJobStatusInputSchema.safeParse(input);
|
|
37
|
+
if (!parsed.success) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const { id, type } = parsed.data;
|
|
44
|
+
try {
|
|
45
|
+
const params = {};
|
|
46
|
+
if (type)
|
|
47
|
+
params.type = type;
|
|
48
|
+
const response = await context.client.get(`/jobs/${id}/status`, params
|
|
49
|
+
// Don't cache job status - we want fresh data
|
|
50
|
+
);
|
|
51
|
+
const job = response.data;
|
|
52
|
+
// Determine if job is complete
|
|
53
|
+
const isComplete = ["completed", "ready", "published", "draft", "failed"].includes(job.status.toLowerCase());
|
|
54
|
+
const isFailed = job.status.toLowerCase() === "failed" || !!job.error;
|
|
55
|
+
const isProcessing = !isComplete;
|
|
56
|
+
// Format status with appropriate indicator
|
|
57
|
+
let statusDisplay = job.status;
|
|
58
|
+
if (isComplete && !isFailed) {
|
|
59
|
+
statusDisplay = `✅ ${job.status}`;
|
|
60
|
+
}
|
|
61
|
+
else if (isFailed) {
|
|
62
|
+
statusDisplay = `❌ ${job.status}`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
statusDisplay = `🔄 ${job.status}`;
|
|
66
|
+
}
|
|
67
|
+
let markdown = `## Job Status\n\n`;
|
|
68
|
+
markdown += formatKeyValue({
|
|
69
|
+
ID: job.id,
|
|
70
|
+
Type: job.type,
|
|
71
|
+
Status: statusDisplay,
|
|
72
|
+
Progress: job.progress !== undefined ? `${job.progress}%` : undefined,
|
|
73
|
+
Created: formatDate(job.created_at),
|
|
74
|
+
Updated: job.updated_at ? formatDate(job.updated_at) : undefined,
|
|
75
|
+
Completed: job.completed_at ? formatDate(job.completed_at) : undefined,
|
|
76
|
+
});
|
|
77
|
+
// Error message
|
|
78
|
+
if (job.error) {
|
|
79
|
+
markdown += `\n\n**Error:** ${job.error}`;
|
|
80
|
+
}
|
|
81
|
+
// Metadata
|
|
82
|
+
if (job.metadata && Object.keys(job.metadata).length > 0) {
|
|
83
|
+
markdown += `\n\n### Details\n\n`;
|
|
84
|
+
markdown += formatKeyValue(Object.fromEntries(Object.entries(job.metadata).map(([k, v]) => [k, String(v)])));
|
|
85
|
+
}
|
|
86
|
+
// Next steps
|
|
87
|
+
if (isProcessing) {
|
|
88
|
+
markdown += `\n\n*Job is still processing. Check again in a few moments.*`;
|
|
89
|
+
}
|
|
90
|
+
else if (isComplete && !isFailed) {
|
|
91
|
+
markdown += `\n\n*Job completed successfully.*`;
|
|
92
|
+
// Suggest next action based on type
|
|
93
|
+
if (job.type === "brief") {
|
|
94
|
+
markdown += ` Use \`get_brief\` with \`id: "${job.id}"\` to see the outline.`;
|
|
95
|
+
}
|
|
96
|
+
else if (job.type === "research") {
|
|
97
|
+
markdown += ` Use \`get_research\` with \`id: "${job.id}"\` to see the results.`;
|
|
98
|
+
}
|
|
99
|
+
else if (job.type === "content") {
|
|
100
|
+
markdown += ` Use \`get_content\` with \`id: "${job.id}"\` to see the content.`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
markdown,
|
|
106
|
+
data: response,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
markdown: `**Error:** Failed to get job status - ${message}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// ============================================
|
|
118
|
+
// Export all job tools
|
|
119
|
+
// ============================================
|
|
120
|
+
export const jobTools = [getJobStatusTool];
|
|
121
|
+
export const jobExecutors = {
|
|
122
|
+
get_job_status: executeGetJobStatus,
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimization tools
|
|
3
|
+
*
|
|
4
|
+
* Content optimization suggestions and applications
|
|
5
|
+
*/
|
|
6
|
+
import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
|
|
7
|
+
export declare const listOptimizationsTool: McpToolDefinition;
|
|
8
|
+
export declare function executeListOptimizations(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
9
|
+
export declare const startOptimizationTool: McpToolDefinition;
|
|
10
|
+
export declare function executeStartOptimization(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
11
|
+
export declare const getOptimizationTool: McpToolDefinition;
|
|
12
|
+
export declare function executeGetOptimization(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
13
|
+
export declare const applyOptimizationTool: McpToolDefinition;
|
|
14
|
+
export declare function executeApplyOptimization(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
15
|
+
export declare const getOptimizationInsightsTool: McpToolDefinition;
|
|
16
|
+
export declare function executeGetOptimizationInsights(input: unknown, context: ToolContext): Promise<ToolResult>;
|
|
17
|
+
export declare const optimizationTools: McpToolDefinition[];
|
|
18
|
+
export declare const optimizationExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
|
|
19
|
+
//# sourceMappingURL=optimizations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizations.d.ts","sourceRoot":"","sources":["../../src/tools/optimizations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EAIX,MAAM,aAAa,CAAC;AAkDrB,eAAO,MAAM,qBAAqB,EAAE,iBAyBnC,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAUD,eAAO,MAAM,qBAAqB,EAAE,iBAanC,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAUD,eAAO,MAAM,mBAAmB,EAAE,iBAajC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAyDrB;AAWD,eAAO,MAAM,qBAAqB,EAAE,iBAkBnC,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAUD,eAAO,MAAM,2BAA2B,EAAE,iBAYzC,CAAC;AAEF,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgDrB;AAMD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAMhD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAO9D,CAAC"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimization tools
|
|
3
|
+
*
|
|
4
|
+
* Content optimization suggestions and applications
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { CACHE_TTL } from "../cache.js";
|
|
8
|
+
import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, } from "../formatter.js";
|
|
9
|
+
// ============================================
|
|
10
|
+
// list_optimizations
|
|
11
|
+
// ============================================
|
|
12
|
+
const listOptimizationsInputSchema = z.object({
|
|
13
|
+
page: z.number().min(1).optional().default(1),
|
|
14
|
+
page_size: z.number().min(1).max(100).optional().default(20),
|
|
15
|
+
status: z.enum(["pending", "analyzing", "ready", "applied", "dismissed", "failed"]).optional(),
|
|
16
|
+
content_id: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
export const listOptimizationsTool = {
|
|
19
|
+
name: "list_optimizations",
|
|
20
|
+
description: "List content optimization sessions. Each session contains suggestions to improve your content.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
page: {
|
|
25
|
+
type: "number",
|
|
26
|
+
description: "Page number (default: 1)",
|
|
27
|
+
},
|
|
28
|
+
page_size: {
|
|
29
|
+
type: "number",
|
|
30
|
+
description: "Items per page, max 100 (default: 20)",
|
|
31
|
+
},
|
|
32
|
+
status: {
|
|
33
|
+
type: "string",
|
|
34
|
+
enum: ["pending", "analyzing", "ready", "applied", "dismissed", "failed"],
|
|
35
|
+
description: "Filter by status",
|
|
36
|
+
},
|
|
37
|
+
content_id: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Filter by content ID",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export async function executeListOptimizations(input, context) {
|
|
45
|
+
const parsed = listOptimizationsInputSchema.safeParse(input || {});
|
|
46
|
+
if (!parsed.success) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const { page, page_size, status, content_id } = parsed.data;
|
|
53
|
+
try {
|
|
54
|
+
const params = { page, page_size };
|
|
55
|
+
if (status)
|
|
56
|
+
params.status = status;
|
|
57
|
+
if (content_id)
|
|
58
|
+
params.content_id = content_id;
|
|
59
|
+
const response = await context.client.get("/optimizations", params, CACHE_TTL.lists);
|
|
60
|
+
const headers = ["Content ID", "Status", "Suggestions", "Applied", "Created"];
|
|
61
|
+
const rows = response.data.map((opt) => [
|
|
62
|
+
opt.content_id,
|
|
63
|
+
formatStatus(opt.status),
|
|
64
|
+
opt.suggestions_count.toString(),
|
|
65
|
+
opt.applied_count.toString(),
|
|
66
|
+
formatDate(opt.created_at),
|
|
67
|
+
]);
|
|
68
|
+
const table = formatTable(headers, rows);
|
|
69
|
+
const pagination = formatPagination(response.pagination);
|
|
70
|
+
return {
|
|
71
|
+
success: true,
|
|
72
|
+
markdown: `## Optimizations (Page ${page})\n\n${table}${pagination}`,
|
|
73
|
+
data: response,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
markdown: `**Error:** Failed to list optimizations - ${message}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ============================================
|
|
85
|
+
// start_optimization
|
|
86
|
+
// ============================================
|
|
87
|
+
const startOptimizationInputSchema = z.object({
|
|
88
|
+
content_id: z.string().min(1),
|
|
89
|
+
});
|
|
90
|
+
export const startOptimizationTool = {
|
|
91
|
+
name: "start_optimization",
|
|
92
|
+
description: "Start a new optimization analysis for a piece of content. This will analyze the content and generate improvement suggestions.",
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: "object",
|
|
95
|
+
properties: {
|
|
96
|
+
content_id: {
|
|
97
|
+
type: "string",
|
|
98
|
+
description: "The ID of the content to optimize (required)",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
required: ["content_id"],
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
export async function executeStartOptimization(input, context) {
|
|
105
|
+
const parsed = startOptimizationInputSchema.safeParse(input);
|
|
106
|
+
if (!parsed.success) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const { content_id } = parsed.data;
|
|
113
|
+
try {
|
|
114
|
+
const response = await context.client.post("/optimizations", { content_id });
|
|
115
|
+
const opt = response.data;
|
|
116
|
+
const details = formatKeyValue({
|
|
117
|
+
id: opt.id,
|
|
118
|
+
content_id: opt.content_id,
|
|
119
|
+
status: opt.status,
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
success: true,
|
|
123
|
+
markdown: `## Optimization Started\n\n${details}\n\n**Note:** The optimization is now analyzing your content. Use \`get_optimization\` with id \`${opt.id}\` to see suggestions when ready.`,
|
|
124
|
+
data: response,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
markdown: `**Error:** Failed to start optimization - ${message}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ============================================
|
|
136
|
+
// get_optimization
|
|
137
|
+
// ============================================
|
|
138
|
+
const getOptimizationInputSchema = z.object({
|
|
139
|
+
id: z.string().min(1),
|
|
140
|
+
});
|
|
141
|
+
export const getOptimizationTool = {
|
|
142
|
+
name: "get_optimization",
|
|
143
|
+
description: "Get details of an optimization session, including all suggestions.",
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: "object",
|
|
146
|
+
properties: {
|
|
147
|
+
id: {
|
|
148
|
+
type: "string",
|
|
149
|
+
description: "The optimization ID (required)",
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
required: ["id"],
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
export async function executeGetOptimization(input, context) {
|
|
156
|
+
const parsed = getOptimizationInputSchema.safeParse(input);
|
|
157
|
+
if (!parsed.success) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const { id } = parsed.data;
|
|
164
|
+
try {
|
|
165
|
+
const response = await context.client.get(`/optimizations/${id}`, {}, CACHE_TTL.resources);
|
|
166
|
+
const opt = response.data;
|
|
167
|
+
let markdown = `## Optimization: ${opt.content?.title || opt.content_id}\n\n`;
|
|
168
|
+
markdown += formatKeyValue({
|
|
169
|
+
id: opt.id,
|
|
170
|
+
content_id: opt.content_id,
|
|
171
|
+
status: opt.status,
|
|
172
|
+
suggestions: opt.suggestions_count,
|
|
173
|
+
applied: opt.applied_count,
|
|
174
|
+
analyzed: opt.analyzed_at ? formatDate(opt.analyzed_at) : null,
|
|
175
|
+
});
|
|
176
|
+
if (opt.suggestions && opt.suggestions.length > 0) {
|
|
177
|
+
markdown += "\n\n### Suggestions\n\n";
|
|
178
|
+
for (const suggestion of opt.suggestions) {
|
|
179
|
+
const status = suggestion.applied ? "Applied" : "Pending";
|
|
180
|
+
markdown += `#### ${suggestion.title}\n\n`;
|
|
181
|
+
markdown += `**Type:** ${suggestion.type} | **Priority:** ${suggestion.priority} | **Status:** ${status}\n\n`;
|
|
182
|
+
markdown += `${suggestion.description}\n\n`;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else if (opt.status === "analyzing") {
|
|
186
|
+
markdown += "\n\n_Analysis in progress. Check back soon for suggestions._";
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
markdown += "\n\n_No suggestions generated._";
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
success: true,
|
|
193
|
+
markdown,
|
|
194
|
+
data: response,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
199
|
+
return {
|
|
200
|
+
success: false,
|
|
201
|
+
markdown: `**Error:** Failed to get optimization - ${message}`,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ============================================
|
|
206
|
+
// apply_optimization
|
|
207
|
+
// ============================================
|
|
208
|
+
const applyOptimizationInputSchema = z.object({
|
|
209
|
+
id: z.string().min(1),
|
|
210
|
+
suggestion_ids: z.array(z.string()).optional(),
|
|
211
|
+
});
|
|
212
|
+
export const applyOptimizationTool = {
|
|
213
|
+
name: "apply_optimization",
|
|
214
|
+
description: "Apply optimization suggestions to the content. Optionally specify which suggestions to apply.",
|
|
215
|
+
inputSchema: {
|
|
216
|
+
type: "object",
|
|
217
|
+
properties: {
|
|
218
|
+
id: {
|
|
219
|
+
type: "string",
|
|
220
|
+
description: "The optimization ID (required)",
|
|
221
|
+
},
|
|
222
|
+
suggestion_ids: {
|
|
223
|
+
type: "array",
|
|
224
|
+
items: { type: "string" },
|
|
225
|
+
description: "Specific suggestion IDs to apply (optional, applies all if not specified)",
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
required: ["id"],
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
export async function executeApplyOptimization(input, context) {
|
|
232
|
+
const parsed = applyOptimizationInputSchema.safeParse(input);
|
|
233
|
+
if (!parsed.success) {
|
|
234
|
+
return {
|
|
235
|
+
success: false,
|
|
236
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const { id, suggestion_ids } = parsed.data;
|
|
240
|
+
try {
|
|
241
|
+
const body = {};
|
|
242
|
+
if (suggestion_ids)
|
|
243
|
+
body.suggestion_ids = suggestion_ids;
|
|
244
|
+
const response = await context.client.post(`/optimizations/${id}/apply`, body);
|
|
245
|
+
const opt = response.data;
|
|
246
|
+
return {
|
|
247
|
+
success: true,
|
|
248
|
+
markdown: `## Optimization Applied\n\n${formatKeyValue({
|
|
249
|
+
id: opt.id,
|
|
250
|
+
status: opt.status,
|
|
251
|
+
applied: opt.applied_count,
|
|
252
|
+
})}\n\n**Note:** The suggestions have been applied to your content.`,
|
|
253
|
+
data: response,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
258
|
+
return {
|
|
259
|
+
success: false,
|
|
260
|
+
markdown: `**Error:** Failed to apply optimization - ${message}`,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// ============================================
|
|
265
|
+
// get_optimization_insights
|
|
266
|
+
// ============================================
|
|
267
|
+
const getOptimizationInsightsInputSchema = z.object({
|
|
268
|
+
limit: z.number().min(1).max(50).optional().default(10),
|
|
269
|
+
});
|
|
270
|
+
export const getOptimizationInsightsTool = {
|
|
271
|
+
name: "get_optimization_insights",
|
|
272
|
+
description: "Get optimization insights - common issues and opportunities across your content.",
|
|
273
|
+
inputSchema: {
|
|
274
|
+
type: "object",
|
|
275
|
+
properties: {
|
|
276
|
+
limit: {
|
|
277
|
+
type: "number",
|
|
278
|
+
description: "Max insights to return (default: 10)",
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
export async function executeGetOptimizationInsights(input, context) {
|
|
284
|
+
const parsed = getOptimizationInsightsInputSchema.safeParse(input || {});
|
|
285
|
+
if (!parsed.success) {
|
|
286
|
+
return {
|
|
287
|
+
success: false,
|
|
288
|
+
markdown: `**Error:** Invalid input - ${parsed.error.message}`,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
const { limit } = parsed.data;
|
|
292
|
+
try {
|
|
293
|
+
const response = await context.client.get("/optimizations/insights", { limit }, CACHE_TTL.resources);
|
|
294
|
+
const insights = response.data;
|
|
295
|
+
if (insights.length === 0) {
|
|
296
|
+
return {
|
|
297
|
+
success: true,
|
|
298
|
+
markdown: "## Optimization Insights\n\n_No insights available. Run optimizations on your content to generate insights._",
|
|
299
|
+
data: response,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
let markdown = "## Optimization Insights\n\n";
|
|
303
|
+
for (const insight of insights) {
|
|
304
|
+
markdown += `### ${insight.title}\n\n`;
|
|
305
|
+
markdown += `**Type:** ${insight.type} | **Priority:** ${insight.priority} | **Affected Content:** ${insight.affected_content_count}\n\n`;
|
|
306
|
+
markdown += `${insight.description}\n\n`;
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
success: true,
|
|
310
|
+
markdown,
|
|
311
|
+
data: response,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
316
|
+
return {
|
|
317
|
+
success: false,
|
|
318
|
+
markdown: `**Error:** Failed to get optimization insights - ${message}`,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// ============================================
|
|
323
|
+
// Export all
|
|
324
|
+
// ============================================
|
|
325
|
+
export const optimizationTools = [
|
|
326
|
+
listOptimizationsTool,
|
|
327
|
+
startOptimizationTool,
|
|
328
|
+
getOptimizationTool,
|
|
329
|
+
applyOptimizationTool,
|
|
330
|
+
getOptimizationInsightsTool,
|
|
331
|
+
];
|
|
332
|
+
export const optimizationExecutors = {
|
|
333
|
+
list_optimizations: executeListOptimizations,
|
|
334
|
+
start_optimization: executeStartOptimization,
|
|
335
|
+
get_optimization: executeGetOptimization,
|
|
336
|
+
apply_optimization: executeApplyOptimization,
|
|
337
|
+
get_optimization_insights: executeGetOptimizationInsights,
|
|
338
|
+
};
|
|
339
|
+
//# sourceMappingURL=optimizations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizations.js","sourceRoot":"","sources":["../../src/tools/optimizations.ts"],"names":[],"mappings":"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"}
|