@frase/mcp-server 0.2.1 → 0.3.2
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/dist/api-client.d.ts +3 -90
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +2 -214
- package/dist/api-client.js.map +1 -1
- package/dist/cache.d.ts +2 -49
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +2 -94
- package/dist/cache.js.map +1 -1
- package/dist/cli/config-writer.d.ts.map +1 -1
- package/dist/cli/config-writer.js +52 -7
- package/dist/cli/config-writer.js.map +1 -1
- package/dist/config.d.ts +3 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -28
- package/dist/config.js.map +1 -1
- package/dist/formatter.d.ts +2 -44
- package/dist/formatter.d.ts.map +1 -1
- package/dist/formatter.js +2 -142
- package/dist/formatter.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mcp-audit.d.ts +3 -0
- package/dist/lib/mcp-audit.d.ts.map +1 -0
- package/dist/lib/mcp-audit.js +95 -0
- package/dist/lib/mcp-audit.js.map +1 -0
- package/dist/mcpb-bundle.js +30072 -0
- package/dist/prompts/cms-publishing.d.ts +16 -0
- package/dist/prompts/cms-publishing.d.ts.map +1 -0
- package/dist/prompts/cms-publishing.js +84 -0
- package/dist/prompts/cms-publishing.js.map +1 -0
- package/dist/prompts/competitive-intelligence.d.ts +16 -0
- package/dist/prompts/competitive-intelligence.d.ts.map +1 -0
- package/dist/prompts/competitive-intelligence.js +78 -0
- package/dist/prompts/competitive-intelligence.js.map +1 -0
- package/dist/prompts/content-governance.d.ts +16 -0
- package/dist/prompts/content-governance.d.ts.map +1 -0
- package/dist/prompts/content-governance.js +113 -0
- package/dist/prompts/content-governance.js.map +1 -0
- package/dist/prompts/content-pipeline.d.ts.map +1 -1
- package/dist/prompts/content-pipeline.js +10 -18
- package/dist/prompts/content-pipeline.js.map +1 -1
- package/dist/prompts/create-seo-article.d.ts.map +1 -1
- package/dist/prompts/create-seo-article.js +17 -42
- package/dist/prompts/create-seo-article.js.map +1 -1
- package/dist/prompts/geo-optimization.d.ts +17 -0
- package/dist/prompts/geo-optimization.d.ts.map +1 -0
- package/dist/prompts/geo-optimization.js +79 -0
- package/dist/prompts/geo-optimization.js.map +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +15 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/keyword-research.d.ts.map +1 -1
- package/dist/prompts/keyword-research.js +20 -31
- package/dist/prompts/keyword-research.js.map +1 -1
- package/dist/resources/briefs.d.ts.map +1 -1
- package/dist/resources/briefs.js +12 -6
- package/dist/resources/briefs.js.map +1 -1
- package/dist/tools/ai-visibility.d.ts.map +1 -1
- package/dist/tools/ai-visibility.js +67 -12
- package/dist/tools/ai-visibility.js.map +1 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/analytics.js +9 -4
- package/dist/tools/analytics.js.map +1 -1
- package/dist/tools/atomization.d.ts +8 -0
- package/dist/tools/atomization.d.ts.map +1 -0
- package/dist/tools/atomization.js +172 -0
- package/dist/tools/atomization.js.map +1 -0
- package/dist/tools/audits.d.ts +8 -5
- package/dist/tools/audits.d.ts.map +1 -1
- package/dist/tools/audits.js +113 -22
- package/dist/tools/audits.js.map +1 -1
- package/dist/tools/briefs.d.ts +40 -145
- package/dist/tools/briefs.d.ts.map +1 -1
- package/dist/tools/briefs.js +212 -163
- package/dist/tools/briefs.js.map +1 -1
- package/dist/tools/clusters.d.ts +9 -0
- package/dist/tools/clusters.d.ts.map +1 -0
- package/dist/tools/clusters.js +166 -0
- package/dist/tools/clusters.js.map +1 -0
- package/dist/tools/cms-connections.d.ts +7 -0
- package/dist/tools/cms-connections.d.ts.map +1 -0
- package/dist/tools/cms-connections.js +96 -0
- package/dist/tools/cms-connections.js.map +1 -0
- package/dist/tools/competitive-analysis.js +2 -2
- package/dist/tools/competitive-analysis.js.map +1 -1
- package/dist/tools/content.d.ts +36 -8
- package/dist/tools/content.d.ts.map +1 -1
- package/dist/tools/content.js +415 -30
- package/dist/tools/content.js.map +1 -1
- package/dist/tools/discover.d.ts +15 -0
- package/dist/tools/discover.d.ts.map +1 -0
- package/dist/tools/discover.js +180 -0
- package/dist/tools/discover.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jobs.d.ts +2 -2
- package/dist/tools/opportunities.d.ts +11 -0
- package/dist/tools/opportunities.d.ts.map +1 -0
- package/dist/tools/opportunities.js +122 -0
- package/dist/tools/opportunities.js.map +1 -0
- package/dist/tools/optimizations.d.ts +4 -0
- package/dist/tools/optimizations.d.ts.map +1 -1
- package/dist/tools/optimizations.js +359 -26
- package/dist/tools/optimizations.js.map +1 -1
- package/dist/tools/publish.d.ts +3 -3
- package/dist/tools/publish.js +6 -6
- package/dist/tools/publish.js.map +1 -1
- package/dist/tools/research.d.ts +18 -6
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +210 -19
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/rules.d.ts +76 -0
- package/dist/tools/rules.d.ts.map +1 -1
- package/dist/tools/rules.js +355 -12
- package/dist/tools/rules.js.map +1 -1
- package/dist/tools/serp.d.ts.map +1 -1
- package/dist/tools/serp.js +30 -18
- package/dist/tools/serp.js.map +1 -1
- package/dist/tools/site-health.d.ts +7 -0
- package/dist/tools/site-health.d.ts.map +1 -0
- package/dist/tools/site-health.js +120 -0
- package/dist/tools/site-health.js.map +1 -0
- package/dist/tools/templates.js +5 -5
- package/dist/tools/templates.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +24 -3
- package/dist/tools/webhooks.js.map +1 -1
- package/dist/types.d.ts +2 -180
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +30 -14
- package/server.json +4 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Publishing Prompt
|
|
3
|
+
*
|
|
4
|
+
* Multi-platform publishing workflow — check connections,
|
|
5
|
+
* verify content quality, publish, and set up monitoring.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpPromptDefinition } from "../types.js";
|
|
8
|
+
export declare const cmsPublishingPrompt: McpPromptDefinition;
|
|
9
|
+
export declare function getCmsPublishingMessages(args: Record<string, string>): Array<{
|
|
10
|
+
role: "user" | "assistant";
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=cms-publishing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms-publishing.d.ts","sourceRoot":"","sources":["../../src/prompts/cms-publishing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,mBAAmB,EAAE,mBA0BjC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC5E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAmDD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Publishing Prompt
|
|
3
|
+
*
|
|
4
|
+
* Multi-platform publishing workflow — check connections,
|
|
5
|
+
* verify content quality, publish, and set up monitoring.
|
|
6
|
+
*/
|
|
7
|
+
export const cmsPublishingPrompt = {
|
|
8
|
+
name: "cms_publishing",
|
|
9
|
+
description: "Multi-platform publishing workflow. Checks CMS connections (FraseCMS, WordPress, Webflow, Sanity), verifies content quality against optimization thresholds, publishes content, and sets up AI visibility monitoring post-publish.",
|
|
10
|
+
arguments: [
|
|
11
|
+
{
|
|
12
|
+
name: "content_id",
|
|
13
|
+
description: "Content ID to publish (required)",
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "site_id",
|
|
18
|
+
description: "Site ID with CMS connections (required)",
|
|
19
|
+
required: true,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "destination",
|
|
23
|
+
description: "Target CMS: frase, wordpress, webflow, sanity (optional — auto-detects if omitted)",
|
|
24
|
+
required: false,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "min_score",
|
|
28
|
+
description: "Minimum optimization score required before publishing (default: 70)",
|
|
29
|
+
required: false,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
export function getCmsPublishingMessages(args) {
|
|
34
|
+
const contentId = args.content_id || "";
|
|
35
|
+
const siteId = args.site_id || "";
|
|
36
|
+
const destination = args.destination || "";
|
|
37
|
+
const minScore = args.min_score || "70";
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
role: "user",
|
|
41
|
+
content: {
|
|
42
|
+
type: "text",
|
|
43
|
+
text: `Publish content "${contentId}" to CMS. Verify quality, publish, and set up post-publish monitoring.
|
|
44
|
+
|
|
45
|
+
**Configuration:**
|
|
46
|
+
- Content ID: ${contentId}
|
|
47
|
+
- Site ID: ${siteId}
|
|
48
|
+
${destination ? `- Target CMS: ${destination}` : "- Target CMS: auto-detect"}
|
|
49
|
+
- Minimum score: ${minScore}
|
|
50
|
+
|
|
51
|
+
**Execute these steps:**
|
|
52
|
+
|
|
53
|
+
**Step 1 — Check CMS Connections:** Use list_cms_connections with site_id "${siteId}". ${destination ? `Verify that "${destination}" is connected and active.` : "Identify available CMS platforms."} If no connections exist, report this and stop — a CMS connection must be set up first.
|
|
54
|
+
|
|
55
|
+
**Step 2 — Verify Content Quality:** Use start_optimization with content_id "${contentId}". Wait for analysis, then use get_optimization to check the current score.
|
|
56
|
+
- If score >= ${minScore}: proceed to publishing
|
|
57
|
+
- If score < ${minScore}: report the gap and apply the top 3 high-priority suggestions using apply_optimization. Re-score. If still below ${minScore} after 2 optimization rounds, warn but allow manual override decision.
|
|
58
|
+
|
|
59
|
+
**Step 3 — Check Content Rules:** Use list_rule_sets with site_id "${siteId}". If active rule sets exist, use evaluate_rules with content_id "${contentId}" and each active rule_set_id. Report any failures. Critical rule failures should block publishing.
|
|
60
|
+
|
|
61
|
+
**Step 4 — Get Content Details:** Use get_content with content_id "${contentId}" to confirm title, word count, and meta tags are set.
|
|
62
|
+
|
|
63
|
+
**Step 5 — Publish:** Use publish_content with:
|
|
64
|
+
- content_id: "${contentId}"
|
|
65
|
+
- destination: ${destination ? `"${destination}"` : "the first available connected CMS"}
|
|
66
|
+
- site_id: "${siteId}"
|
|
67
|
+
Report the published URL.
|
|
68
|
+
|
|
69
|
+
**Step 6 — Set Up AI Visibility Monitoring:** Use create_prompt with a natural question related to this content's topic and the site's brand name. This tracks whether AI search engines cite this content.
|
|
70
|
+
|
|
71
|
+
**Step 7 — Check Auto-Optimization:** Use get_auto_optimization_status with site_id "${siteId}". If auto-optimization is not enabled, recommend enabling it to detect content decay automatically.
|
|
72
|
+
|
|
73
|
+
**Provide a publishing report:**
|
|
74
|
+
- Content title and URL
|
|
75
|
+
- Final optimization score (SEO + GEO)
|
|
76
|
+
- Rule evaluation results (pass/fail)
|
|
77
|
+
- Published destination and URL
|
|
78
|
+
- AI visibility monitoring status
|
|
79
|
+
- Auto-optimization status`,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=cms-publishing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms-publishing.js","sourceRoot":"","sources":["../../src/prompts/cms-publishing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,oOAAoO;IACtO,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,oFAAoF;YACjG,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,qEAAqE;YAClF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,IAA4B;IAInE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAExC,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,oBAAoB,SAAS;;;gBAG3B,SAAS;aACZ,MAAM;EACjB,WAAW,CAAC,CAAC,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC,CAAC,2BAA2B;mBACzD,QAAQ;;;;6EAIkD,MAAM,MAAM,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,4BAA4B,CAAC,CAAC,CAAC,mCAAmC;;+EAErH,SAAS;gBACxE,QAAQ;eACT,QAAQ,qHAAqH,QAAQ;;qEAE/E,MAAM,qEAAqE,SAAS;;qEAEpF,SAAS;;;iBAG7D,SAAS;iBACT,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,mCAAmC;cACzE,MAAM;;;;;uFAKmE,MAAM;;;;;;;;2BAQlE;aACpB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Competitive Intelligence Prompt
|
|
3
|
+
*
|
|
4
|
+
* Full competitive analysis workflow — analyze competitors,
|
|
5
|
+
* detect opportunities, and organize content into topic clusters.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpPromptDefinition } from "../types.js";
|
|
8
|
+
export declare const competitiveIntelligencePrompt: McpPromptDefinition;
|
|
9
|
+
export declare function getCompetitiveIntelligenceMessages(args: Record<string, string>): Array<{
|
|
10
|
+
role: "user" | "assistant";
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=competitive-intelligence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitive-intelligence.d.ts","sourceRoot":"","sources":["../../src/prompts/competitive-intelligence.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,6BAA6B,EAAE,mBAqB3C,CAAC;AAEF,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACtF,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAmDD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Competitive Intelligence Prompt
|
|
3
|
+
*
|
|
4
|
+
* Full competitive analysis workflow — analyze competitors,
|
|
5
|
+
* detect opportunities, and organize content into topic clusters.
|
|
6
|
+
*/
|
|
7
|
+
export const competitiveIntelligencePrompt = {
|
|
8
|
+
name: "competitive_intelligence",
|
|
9
|
+
description: "Full competitive analysis workflow. Analyzes competitor pages, detects content opportunities (quick wins, growth, strategic), scores them by impact/effort/speed/strategic value, and organizes findings into topic clusters.",
|
|
10
|
+
arguments: [
|
|
11
|
+
{
|
|
12
|
+
name: "site_id",
|
|
13
|
+
description: "Site ID to analyze opportunities for (required)",
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "competitor_url",
|
|
18
|
+
description: "Competitor page URL to analyze (optional — if provided, starts with page-level analysis)",
|
|
19
|
+
required: false,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "keyword",
|
|
23
|
+
description: "Target keyword to focus analysis on (optional)",
|
|
24
|
+
required: false,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
export function getCompetitiveIntelligenceMessages(args) {
|
|
29
|
+
const siteId = args.site_id || "";
|
|
30
|
+
const competitorUrl = args.competitor_url || "";
|
|
31
|
+
const keyword = args.keyword || "";
|
|
32
|
+
const competitorStep = competitorUrl
|
|
33
|
+
? `**Step 1 — Analyze Competitor:** Use start_competitive_analysis with url "${competitorUrl}"${keyword ? `, industry or location context as appropriate` : ""}. This is async — poll with get_competitive_analysis using the returned ID until complete. Review the gap analysis: missing topics, thin sections, structural gaps, and content quality comparison.`
|
|
34
|
+
: `**Step 1 — Skip:** No competitor URL provided. Proceed to opportunity detection.`;
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
role: "user",
|
|
38
|
+
content: {
|
|
39
|
+
type: "text",
|
|
40
|
+
text: `Run a full competitive intelligence analysis for site "${siteId}".
|
|
41
|
+
|
|
42
|
+
**Configuration:**
|
|
43
|
+
- Site ID: ${siteId}
|
|
44
|
+
${competitorUrl ? `- Competitor URL: ${competitorUrl}` : ""}
|
|
45
|
+
${keyword ? `- Focus keyword: ${keyword}` : ""}
|
|
46
|
+
|
|
47
|
+
**Execute these steps:**
|
|
48
|
+
|
|
49
|
+
${competitorStep}
|
|
50
|
+
|
|
51
|
+
**Step 2 — Detect Opportunities:** Use list_opportunities with site_id "${siteId}". Review opportunities across three views:
|
|
52
|
+
- Quick wins: low effort, proven demand (call with view "quick-wins")
|
|
53
|
+
- Growth: medium effort, validated gaps (call with view "growth")
|
|
54
|
+
- Strategic: high effort, high reward (call with view "strategic")
|
|
55
|
+
Each opportunity has a composite score (Impact 35%, Effort 25%, Speed 20%, Strategic 20%).
|
|
56
|
+
|
|
57
|
+
**Step 3 — Deep-Dive Top Opportunities:** For the top 3-5 opportunities, use get_opportunity to review detailed scoring and recommendations.
|
|
58
|
+
|
|
59
|
+
**Step 4 — Check Existing Clusters:** Use list_clusters with site_id "${siteId}" to see how content is currently organized. Identify gaps in cluster coverage.
|
|
60
|
+
|
|
61
|
+
**Step 5 — Get Cluster Suggestions:** Use suggest_clusters with site_id "${siteId}" for AI-powered topic cluster recommendations. These suggest how to organize new and existing content for topical authority.
|
|
62
|
+
|
|
63
|
+
**Step 6 — SERP Context:** ${keyword ? `Use analyze_serp for "${keyword}" to understand the competitive landscape. Use get_search_intent to classify query intent.` : "For the top opportunity's keyword, use analyze_serp to understand the competitive landscape."}
|
|
64
|
+
|
|
65
|
+
**Step 7 — Create Actionable Briefs:** For the top 1-2 quick-win opportunities, use create_from_opportunity with the opportunity ID to auto-generate content briefs pre-populated with keyword data, competitor insights, and gap analysis.
|
|
66
|
+
|
|
67
|
+
**Provide a comprehensive report:**
|
|
68
|
+
- Competitive landscape summary
|
|
69
|
+
- Top 5 opportunities ranked by composite score
|
|
70
|
+
- Quick wins that can be executed immediately
|
|
71
|
+
- Cluster organization recommendations
|
|
72
|
+
- Briefs created and their IDs
|
|
73
|
+
- Strategic recommendations for long-term content investment`,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=competitive-intelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competitive-intelligence.js","sourceRoot":"","sources":["../../src/prompts/competitive-intelligence.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAChE,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,+NAA+N;IACjO,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,0FAA0F;YACvG,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gDAAgD;YAC7D,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,kCAAkC,CAAC,IAA4B;IAI7E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAEnC,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC,6EAA6E,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE,qMAAqM;QACnW,CAAC,CAAC,kFAAkF,CAAC;IAEvF,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,0DAA0D,MAAM;;;aAGjE,MAAM;EACjB,aAAa,CAAC,CAAC,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;EACzD,OAAO,CAAC,CAAC,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;;;;EAI5C,cAAc;;0EAE0D,MAAM;;;;;;;;wEAQR,MAAM;;2EAEH,MAAM;;6BAEpD,OAAO,CAAC,CAAC,CAAC,yBAAyB,OAAO,4FAA4F,CAAC,CAAC,CAAC,8FAA8F;;;;;;;;;;6DAUvM;aACtD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Governance Prompt
|
|
3
|
+
*
|
|
4
|
+
* Template + rules + playbook automation workflow.
|
|
5
|
+
* Sets up content quality standards and automated workflows.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpPromptDefinition } from "../types.js";
|
|
8
|
+
export declare const contentGovernancePrompt: McpPromptDefinition;
|
|
9
|
+
export declare function getContentGovernanceMessages(args: Record<string, string>): Array<{
|
|
10
|
+
role: "user" | "assistant";
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=content-governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-governance.d.ts","sourceRoot":"","sources":["../../src/prompts/content-governance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,uBAAuB,EAAE,mBA0BrC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAChF,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAkFD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Governance Prompt
|
|
3
|
+
*
|
|
4
|
+
* Template + rules + playbook automation workflow.
|
|
5
|
+
* Sets up content quality standards and automated workflows.
|
|
6
|
+
*/
|
|
7
|
+
export const contentGovernancePrompt = {
|
|
8
|
+
name: "content_governance",
|
|
9
|
+
description: "Set up and run content governance using templates, rules, and playbooks. Creates quality standards (SEO/GEO score thresholds, term compliance, word counts), applies content templates, and configures automated playbook workflows with human review gates.",
|
|
10
|
+
arguments: [
|
|
11
|
+
{
|
|
12
|
+
name: "site_id",
|
|
13
|
+
description: "Site ID to set up governance for (required)",
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "action",
|
|
18
|
+
description: "What to do: 'setup' (create rules + templates), 'evaluate' (check content against rules), 'run_playbook' (execute automated workflow). Default: setup.",
|
|
19
|
+
required: false,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "content_id",
|
|
23
|
+
description: "Content ID to evaluate (required when action is 'evaluate')",
|
|
24
|
+
required: false,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "topic",
|
|
28
|
+
description: "Topic for playbook execution (required when action is 'run_playbook')",
|
|
29
|
+
required: false,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
export function getContentGovernanceMessages(args) {
|
|
34
|
+
const siteId = args.site_id || "";
|
|
35
|
+
const action = args.action || "setup";
|
|
36
|
+
const contentId = args.content_id || "";
|
|
37
|
+
const topic = args.topic || "";
|
|
38
|
+
if (action === "evaluate" && contentId) {
|
|
39
|
+
return [
|
|
40
|
+
{
|
|
41
|
+
role: "user",
|
|
42
|
+
content: {
|
|
43
|
+
type: "text",
|
|
44
|
+
text: `Evaluate content "${contentId}" against all active content governance rules.
|
|
45
|
+
|
|
46
|
+
**Steps:**
|
|
47
|
+
1. Use list_rule_sets with site_id "${siteId}" to find active rule sets
|
|
48
|
+
2. For each active rule set, use evaluate_rules with content_id "${contentId}" and the rule_set_id
|
|
49
|
+
3. Report pass/fail for each rule with specific details on failures
|
|
50
|
+
4. For failing rules, provide actionable recommendations to fix
|
|
51
|
+
5. If SEO/GEO score thresholds fail, run start_optimization and show the current score vs required threshold`,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
if (action === "run_playbook" && topic) {
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
role: "user",
|
|
60
|
+
content: {
|
|
61
|
+
type: "text",
|
|
62
|
+
text: `Run a content playbook for topic "${topic}" on site "${siteId}".
|
|
63
|
+
|
|
64
|
+
**Steps:**
|
|
65
|
+
1. Use list_playbooks with site_id "${siteId}" to find available playbooks
|
|
66
|
+
2. Select the most appropriate playbook for the topic
|
|
67
|
+
3. Use run_playbook with the playbook_id, topic "${topic}", and site_id "${siteId}"
|
|
68
|
+
4. Monitor progress using get_playbook_run_status (poll every 10 seconds)
|
|
69
|
+
5. Report each step's completion status
|
|
70
|
+
6. If a human_review step is encountered, pause and report what needs review
|
|
71
|
+
7. Provide a final summary with all created artifact IDs (brief, content, optimization)`,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
// Default: setup
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
role: "user",
|
|
80
|
+
content: {
|
|
81
|
+
type: "text",
|
|
82
|
+
text: `Set up content governance for site "${siteId}". Create quality rules, review templates, and configure playbook automation.
|
|
83
|
+
|
|
84
|
+
**Execute these steps:**
|
|
85
|
+
|
|
86
|
+
**Step 1 — Review Existing Setup:**
|
|
87
|
+
- Use list_rule_sets with site_id "${siteId}" to see current rules
|
|
88
|
+
- Use list_templates with site_id "${siteId}" to see available templates
|
|
89
|
+
- Use list_playbooks with site_id "${siteId}" to see configured playbooks
|
|
90
|
+
|
|
91
|
+
**Step 2 — Recommend Rule Set:** Based on the site's content, recommend a rule set configuration covering:
|
|
92
|
+
- SEO score threshold (minimum 70 recommended)
|
|
93
|
+
- GEO score threshold (minimum 60 recommended for AI visibility)
|
|
94
|
+
- Word count minimums (300+ for standard content, 1500+ for pillar content)
|
|
95
|
+
- Meta tag requirements (title and description required)
|
|
96
|
+
- Internal link minimum (at least 2 per article)
|
|
97
|
+
Present the recommendations and ask whether to create the rule set.
|
|
98
|
+
|
|
99
|
+
**Step 3 — Review Templates:** Check if the site has content templates. If templates exist, list them. If not, suggest extracting a template from the best-performing content using extract_template.
|
|
100
|
+
|
|
101
|
+
**Step 4 — Review Playbooks:** Check available playbooks. Report their step configurations and suggest improvements if any steps are missing (e.g., no rule_check step before publish, no optimization step).
|
|
102
|
+
|
|
103
|
+
**Provide a governance status report:**
|
|
104
|
+
- Active rule sets and their rules
|
|
105
|
+
- Available templates
|
|
106
|
+
- Configured playbooks
|
|
107
|
+
- Recommendations for improvements
|
|
108
|
+
- Coverage gaps (e.g., "no GEO score threshold configured")`,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=content-governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-governance.js","sourceRoot":"","sources":["../../src/prompts/content-governance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAwB;IAC1D,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,8PAA8P;IAChQ,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wJAAwJ;YACrK,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,uEAAuE;YACpF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,IAA4B;IAIvE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAE/B,IAAI,MAAM,KAAK,UAAU,IAAI,SAAS,EAAE,CAAC;QACvC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qBAAqB,SAAS;;;sCAGR,MAAM;mEACuB,SAAS;;;6GAGiC;iBACpG;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,cAAc,IAAI,KAAK,EAAE,CAAC;QACvC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qCAAqC,KAAK,cAAc,MAAM;;;sCAGxC,MAAM;;mDAEO,KAAK,mBAAmB,MAAM;;;;wFAIO;iBAC/E;aACF;SACF,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uCAAuC,MAAM;;;;;qCAKtB,MAAM;qCACN,MAAM;qCACN,MAAM;;;;;;;;;;;;;;;;;;;4DAmBiB;aACrD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-pipeline.d.ts","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,mBAoCnC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,
|
|
1
|
+
{"version":3,"file":"content-pipeline.d.ts","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,mBAoCnC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAoDD"}
|
|
@@ -34,7 +34,7 @@ export const contentPipelinePrompt = {
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
name: "content_type",
|
|
37
|
-
description: "Type of content: blog, guide,
|
|
37
|
+
description: "Type of content: blog, guide, comparison, landing, product (default: blog)",
|
|
38
38
|
required: false,
|
|
39
39
|
},
|
|
40
40
|
{
|
|
@@ -72,32 +72,24 @@ export function getContentPipelineMessages(args) {
|
|
|
72
72
|
|
|
73
73
|
**Execute these steps in order:**
|
|
74
74
|
|
|
75
|
-
**Step 1 — Research:** Use start_research with
|
|
75
|
+
**Step 1 — Research:** Use start_research with query "${topic}" and site_id "${siteId}". This runs keywords, SERP analysis, content gaps, evidence, and AI visibility in parallel. Wait for completion using get_job_status (poll every 5 seconds). Then retrieve results with get_research to confirm keywords, competitors, and gaps were found. If research fails after 3 polls with "failed" status, report the error and stop.
|
|
76
76
|
|
|
77
|
-
**Step 2 —
|
|
78
|
-
|
|
79
|
-
**Step 3 — Competitor Analysis:** Use analyze_competitors for "${topic}" to identify content gaps and opportunities in the top-ranking pages. If this fails, continue — competitor data enriches but isn't required.
|
|
80
|
-
|
|
81
|
-
**Step 4 — Create Brief:** Use create_brief with:
|
|
82
|
-
- topic: "${topic}"
|
|
83
|
-
- generate_outline: true
|
|
77
|
+
**Step 2 — Create Brief:** Use create_brief with:
|
|
78
|
+
- research_session_id: the ID from Step 1
|
|
84
79
|
- content_type: "${contentType}"
|
|
85
|
-
-
|
|
86
|
-
- target_language: "${targetLanguage}"
|
|
87
|
-
- target_country: "${targetCountry}"
|
|
88
|
-
Wait for the brief to complete using get_job_status (poll every 5 seconds, up to 60 polls / 5 minutes). Then use get_brief to retrieve the full outline. If brief generation fails or times out, report the error and stop — content cannot be generated without a brief.
|
|
80
|
+
This creates a research-backed brief using the full research context (keywords, SERP headings, content gaps, evidence, AI visibility, search intent). Wait for the brief to be ready using get_job_status with type "brief" (poll every 5 seconds, up to 60 polls / 5 minutes). Then use get_brief to retrieve the full outline. If brief generation fails or times out, report the error and stop.
|
|
89
81
|
|
|
90
|
-
**Step
|
|
82
|
+
**Step 3 — Generate Content:** Use generate_content with the brief ID. Wait for completion using get_job_status (poll every 10 seconds, up to 30 polls / 5 minutes). Retrieve the generated content with get_content. If content generation fails or times out, report the error and stop.
|
|
91
83
|
|
|
92
|
-
**Step
|
|
84
|
+
**Step 4 — Optimize:** Use start_optimization with the content ID. Wait for analysis to complete (poll every 5 seconds), then use get_optimization to review the score and suggestions.
|
|
93
85
|
- If the score is below ${targetScore}: apply the highest-priority suggestions using apply_optimization (one call per suggestion_id), then re-run start_optimization and check the new score.
|
|
94
86
|
- Repeat this cycle up to 3 times or until the score meets the target.
|
|
95
87
|
- Report the final score.
|
|
96
|
-
- If optimization fails, skip to Step
|
|
88
|
+
- If optimization fails, skip to Step 5 — content can still be published as a draft for manual optimization.
|
|
97
89
|
|
|
98
|
-
**Step
|
|
90
|
+
**Step 5 — Publish:** Use list_cms_connections with site_id "${siteId}" to check available platforms. If a CMS is connected, use publish_content with the content ID, destination "frase_cms" (or the connected platform), site_id "${siteId}", and status "draft". Report the published URL. If no CMS connection exists, skip publishing and note this in the report.
|
|
99
91
|
|
|
100
|
-
**Step
|
|
92
|
+
**Step 6 — Monitor:** Use create_prompt with prompt_text set to a natural question about "${topic}" (min 10 chars, e.g., "What is the best approach to ${topic}?") and target_brand set to the site's brand name. This tracks whether AI search engines (ChatGPT, Perplexity, Claude, etc.) cite this content. If monitoring setup fails, note it in the report — it can be configured manually later.
|
|
101
93
|
|
|
102
94
|
**After all steps, provide a summary report:**
|
|
103
95
|
- Topic and URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-pipeline.js","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,mNAAmN;IACrN,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"content-pipeline.js","sourceRoot":"","sources":["../../src/prompts/content-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,mNAAmN;IACrN,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,iFAAiF;YAC9F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,IAA4B;IAIrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IAElD,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,sCAAsC,KAAK;;;aAG5C,MAAM;kBACD,WAAW;+BACE,WAAW;cAC5B,cAAc;aACf,aAAa;;;;wDAI8B,KAAK,kBAAkB,MAAM;;;;mBAIlE,WAAW;;;;;;0BAMJ,WAAW;;;;;+DAK0B,MAAM,iKAAiK,MAAM;;4FAEhJ,KAAK,wDAAwD,KAAK;;;;;;;gCAO9H;aACzB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-seo-article.d.ts","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"create-seo-article.d.ts","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,sBAAsB,EAAE,mBA2BpC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC/E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CA4DD"}
|
|
@@ -12,36 +12,21 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export const createSeoArticlePrompt = {
|
|
14
14
|
name: "create_seo_article",
|
|
15
|
-
description: "Create a complete SEO article from scratch.
|
|
15
|
+
description: "Create a complete SEO article from scratch. Researches the topic, creates a research-backed brief with outline, generates optimized content, scores and revises until quality threshold is met, publishes to CMS, and sets up AI visibility monitoring.",
|
|
16
16
|
arguments: [
|
|
17
17
|
{
|
|
18
18
|
name: "topic",
|
|
19
19
|
description: "The topic or title for the article (required)",
|
|
20
20
|
required: true,
|
|
21
21
|
},
|
|
22
|
-
{
|
|
23
|
-
name: "keywords",
|
|
24
|
-
description: "Target keywords to optimize for (comma-separated)",
|
|
25
|
-
required: false,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: "content_type",
|
|
29
|
-
description: "Type of content: blog, guide, listicle, comparison, landing (default: blog)",
|
|
30
|
-
required: false,
|
|
31
|
-
},
|
|
32
22
|
{
|
|
33
23
|
name: "site_id",
|
|
34
|
-
description: "Site ID to associate and
|
|
35
|
-
required:
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
name: "target_language",
|
|
39
|
-
description: "ISO 639-1 language code (e.g., 'en', 'de', 'es'). Defaults to 'en'.",
|
|
40
|
-
required: false,
|
|
24
|
+
description: "Site ID to associate research and content with (required). Use list_sites to find your site ID.",
|
|
25
|
+
required: true,
|
|
41
26
|
},
|
|
42
27
|
{
|
|
43
|
-
name: "
|
|
44
|
-
description: "
|
|
28
|
+
name: "content_type",
|
|
29
|
+
description: "Type of content: blog, guide, comparison, landing, product (default: blog)",
|
|
45
30
|
required: false,
|
|
46
31
|
},
|
|
47
32
|
{
|
|
@@ -53,18 +38,9 @@ export const createSeoArticlePrompt = {
|
|
|
53
38
|
};
|
|
54
39
|
export function getCreateSeoArticleMessages(args) {
|
|
55
40
|
const topic = args.topic || "the requested topic";
|
|
56
|
-
const keywords = args.keywords ? args.keywords.split(",").map((k) => k.trim()) : [];
|
|
57
41
|
const contentType = args.content_type || "blog";
|
|
58
|
-
const siteId = args.site_id ||
|
|
59
|
-
const targetLanguage = args.target_language || null;
|
|
60
|
-
const targetCountry = args.target_country || null;
|
|
42
|
+
const siteId = args.site_id || "";
|
|
61
43
|
const targetScore = args.target_score || "70";
|
|
62
|
-
const keywordText = keywords.length > 0
|
|
63
|
-
? `\n- Target keywords: ${keywords.join(", ")}`
|
|
64
|
-
: "";
|
|
65
|
-
const siteText = siteId ? `\n- Site ID: ${siteId}` : "";
|
|
66
|
-
const languageText = targetLanguage ? `\n- Language: ${targetLanguage}` : "";
|
|
67
|
-
const countryText = targetCountry ? `\n- Country: ${targetCountry}` : "";
|
|
68
44
|
return [
|
|
69
45
|
{
|
|
70
46
|
role: "user",
|
|
@@ -73,24 +49,25 @@ export function getCreateSeoArticleMessages(args) {
|
|
|
73
49
|
text: `Please help me create a complete SEO article about "${topic}".
|
|
74
50
|
|
|
75
51
|
Article specifications:
|
|
76
|
-
- Content type: ${contentType}
|
|
52
|
+
- Content type: ${contentType}
|
|
53
|
+
- Site ID: ${siteId}
|
|
77
54
|
- Target optimization score: ${targetScore}+
|
|
78
55
|
|
|
79
56
|
Please follow these steps:
|
|
80
57
|
|
|
81
|
-
1. **Research the topic** using start_research
|
|
58
|
+
1. **Research the topic** using start_research with query "${topic}" and site_id "${siteId}". Wait for completion using get_job_status (poll every 5 seconds). Then retrieve results with get_research to see keywords, competitors, content gaps, and search intent.
|
|
82
59
|
|
|
83
|
-
2. **Create a
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
|
|
60
|
+
2. **Create a research-backed brief** using create_brief with:
|
|
61
|
+
- research_session_id: the ID from step 1
|
|
62
|
+
- content_type: "${contentType}"
|
|
63
|
+
This generates a detailed outline from the full research context (keywords, SERP headings, gaps, evidence, AI visibility).
|
|
87
64
|
|
|
88
|
-
3. **Wait for the brief** to be ready using get_job_status, then get the full brief with get_brief
|
|
65
|
+
3. **Wait for the brief** to be ready using get_job_status with type "brief", then get the full brief with get_brief.
|
|
89
66
|
|
|
90
67
|
4. **Review the outline** and let me know what was generated, including:
|
|
91
68
|
- The suggested outline structure
|
|
92
69
|
- Key topics to cover
|
|
93
|
-
-
|
|
70
|
+
- Research insights used
|
|
94
71
|
|
|
95
72
|
5. **Ask for my approval** before generating the final content
|
|
96
73
|
|
|
@@ -105,16 +82,14 @@ Please follow these steps:
|
|
|
105
82
|
- Re-score until the target is met or no more high-priority suggestions remain
|
|
106
83
|
- Report the final optimization score
|
|
107
84
|
|
|
108
|
-
|
|
85
|
+
9. **Publish to CMS**:
|
|
109
86
|
- Use list_cms_connections with site_id "${siteId}" to check available platforms
|
|
110
87
|
- Use publish_content with content_id, destination "frase_cms" (or the connected platform), site_id "${siteId}", and status "draft"
|
|
111
88
|
- Confirm the published URL
|
|
112
89
|
|
|
113
90
|
10. **Set up AI visibility monitoring**:
|
|
114
91
|
- Use create_prompt with prompt_text set to a natural question about "${topic}" (min 10 chars) and target_brand set to the site's brand name
|
|
115
|
-
- Confirm the monitoring is active
|
|
116
|
-
- Use create_prompt with prompt_text set to a natural question about "${topic}" (min 10 chars) and target_brand set to your brand name
|
|
117
|
-
- Confirm the monitoring is active`}
|
|
92
|
+
- Confirm the monitoring is active
|
|
118
93
|
|
|
119
94
|
Please start with the research step and guide me through this process.`,
|
|
120
95
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-seo-article.js","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"create-seo-article.js","sourceRoot":"","sources":["../../src/prompts/create-seo-article.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,yPAAyP;IAC3P,SAAS,EAAE;QACT;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iGAAiG;YAC9G,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,4EAA4E;YAC9E,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,IAA4B;IAItE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAE9C,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,KAAK;;;kBAGxD,WAAW;aAChB,MAAM;+BACY,WAAW;;;;6DAImB,KAAK,kBAAkB,MAAM;;;;sBAIpE,WAAW;;;;;;;;;;;;;;;;;;;6BAmBJ,WAAW;;;;;8CAKM,MAAM;0GACsD,MAAM;;;;4EAIpC,KAAK;;;uEAGV;aAChE;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GEO Optimization Prompt
|
|
3
|
+
*
|
|
4
|
+
* Optimize content for AI engine citation (GEO/AEO).
|
|
5
|
+
* Analyzes content quotability, structures for AI extraction,
|
|
6
|
+
* and tracks before/after AI visibility changes.
|
|
7
|
+
*/
|
|
8
|
+
import type { McpPromptDefinition } from "../types.js";
|
|
9
|
+
export declare const geoOptimizationPrompt: McpPromptDefinition;
|
|
10
|
+
export declare function getGeoOptimizationMessages(args: Record<string, string>): Array<{
|
|
11
|
+
role: "user" | "assistant";
|
|
12
|
+
content: {
|
|
13
|
+
type: "text";
|
|
14
|
+
text: string;
|
|
15
|
+
};
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=geo-optimization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo-optimization.d.ts","sourceRoot":"","sources":["../../src/prompts/geo-optimization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,mBAqBnC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC9E,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC,CAAC,CAkDD"}
|