@frase/mcp-server 0.2.1 → 0.3.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.
Files changed (86) hide show
  1. package/dist/api-client.d.ts +3 -90
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +2 -214
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/cache.d.ts +2 -49
  6. package/dist/cache.d.ts.map +1 -1
  7. package/dist/cache.js +2 -94
  8. package/dist/cache.js.map +1 -1
  9. package/dist/cli/config-writer.d.ts.map +1 -1
  10. package/dist/cli/config-writer.js +52 -7
  11. package/dist/cli/config-writer.js.map +1 -1
  12. package/dist/config.d.ts +3 -14
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +2 -28
  15. package/dist/config.js.map +1 -1
  16. package/dist/formatter.d.ts +2 -44
  17. package/dist/formatter.d.ts.map +1 -1
  18. package/dist/formatter.js +2 -142
  19. package/dist/formatter.js.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/prompts/cms-publishing.d.ts +16 -0
  23. package/dist/prompts/cms-publishing.d.ts.map +1 -0
  24. package/dist/prompts/cms-publishing.js +84 -0
  25. package/dist/prompts/cms-publishing.js.map +1 -0
  26. package/dist/prompts/competitive-intelligence.d.ts +16 -0
  27. package/dist/prompts/competitive-intelligence.d.ts.map +1 -0
  28. package/dist/prompts/competitive-intelligence.js +78 -0
  29. package/dist/prompts/competitive-intelligence.js.map +1 -0
  30. package/dist/prompts/content-governance.d.ts +16 -0
  31. package/dist/prompts/content-governance.d.ts.map +1 -0
  32. package/dist/prompts/content-governance.js +113 -0
  33. package/dist/prompts/content-governance.js.map +1 -0
  34. package/dist/prompts/geo-optimization.d.ts +17 -0
  35. package/dist/prompts/geo-optimization.d.ts.map +1 -0
  36. package/dist/prompts/geo-optimization.js +79 -0
  37. package/dist/prompts/geo-optimization.js.map +1 -0
  38. package/dist/prompts/index.d.ts.map +1 -1
  39. package/dist/prompts/index.js +15 -0
  40. package/dist/prompts/index.js.map +1 -1
  41. package/dist/tools/atomization.d.ts +8 -0
  42. package/dist/tools/atomization.d.ts.map +1 -0
  43. package/dist/tools/atomization.js +172 -0
  44. package/dist/tools/atomization.js.map +1 -0
  45. package/dist/tools/audits.d.ts.map +1 -1
  46. package/dist/tools/audits.js +1 -2
  47. package/dist/tools/audits.js.map +1 -1
  48. package/dist/tools/briefs.d.ts +2 -2
  49. package/dist/tools/briefs.d.ts.map +1 -1
  50. package/dist/tools/briefs.js +63 -4
  51. package/dist/tools/briefs.js.map +1 -1
  52. package/dist/tools/clusters.d.ts +9 -0
  53. package/dist/tools/clusters.d.ts.map +1 -0
  54. package/dist/tools/clusters.js +166 -0
  55. package/dist/tools/clusters.js.map +1 -0
  56. package/dist/tools/cms-connections.d.ts +7 -0
  57. package/dist/tools/cms-connections.d.ts.map +1 -0
  58. package/dist/tools/cms-connections.js +96 -0
  59. package/dist/tools/cms-connections.js.map +1 -0
  60. package/dist/tools/competitive-analysis.js +2 -2
  61. package/dist/tools/competitive-analysis.js.map +1 -1
  62. package/dist/tools/content.d.ts +2 -2
  63. package/dist/tools/content.d.ts.map +1 -1
  64. package/dist/tools/content.js +73 -9
  65. package/dist/tools/content.js.map +1 -1
  66. package/dist/tools/discover.d.ts +15 -0
  67. package/dist/tools/discover.d.ts.map +1 -0
  68. package/dist/tools/discover.js +180 -0
  69. package/dist/tools/discover.js.map +1 -0
  70. package/dist/tools/index.d.ts.map +1 -1
  71. package/dist/tools/index.js +32 -0
  72. package/dist/tools/index.js.map +1 -1
  73. package/dist/tools/jobs.d.ts +2 -2
  74. package/dist/tools/opportunities.d.ts +11 -0
  75. package/dist/tools/opportunities.d.ts.map +1 -0
  76. package/dist/tools/opportunities.js +122 -0
  77. package/dist/tools/opportunities.js.map +1 -0
  78. package/dist/tools/site-health.d.ts +7 -0
  79. package/dist/tools/site-health.d.ts.map +1 -0
  80. package/dist/tools/site-health.js +120 -0
  81. package/dist/tools/site-health.js.map +1 -0
  82. package/dist/types.d.ts +2 -180
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js +1 -1
  85. package/package.json +26 -7
  86. package/server.json +4 -4
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Opportunities tools — unified opportunity detection
3
+ *
4
+ * Sources: GSC data, competitor gaps, decay alerts, programmatic patterns
5
+ * Scoring: Impact 35%, Effort 25%, Speed 20%, Strategic 20%
6
+ * Views: quick-wins, growth, strategic
7
+ */
8
+ import { z } from "zod";
9
+ import { formatTable, formatKeyValue } from "../formatter.js";
10
+ // ============================================
11
+ // list_opportunities
12
+ // ============================================
13
+ const listOpportunitiesSchema = z.object({
14
+ site_id: z.string().min(1),
15
+ view: z.enum(["quick-wins", "growth", "strategic", "all"]).optional().default("all"),
16
+ limit: z.number().min(1).max(100).optional().default(20),
17
+ });
18
+ const listOpportunitiesTool = {
19
+ name: "list_opportunities",
20
+ description: "Get unified content opportunities scored by Impact (35%), Effort (25%), Speed (20%), and Strategic value (20%). Views: quick-wins (low effort, proven demand), growth (medium effort, validated gaps), strategic (high effort, high reward).",
21
+ inputSchema: {
22
+ type: "object",
23
+ properties: {
24
+ site_id: { type: "string", description: "Site ID (required)" },
25
+ view: {
26
+ type: "string",
27
+ enum: ["quick-wins", "growth", "strategic", "all"],
28
+ description: "Opportunity view (default: all)",
29
+ },
30
+ limit: { type: "number", description: "Max results (default: 20, max: 100)" },
31
+ },
32
+ required: ["site_id"],
33
+ },
34
+ };
35
+ async function executeListOpportunities(input, context) {
36
+ const parsed = listOpportunitiesSchema.safeParse(input || {});
37
+ if (!parsed.success)
38
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
39
+ try {
40
+ const response = await context.client.get("/opportunities", { site_id: parsed.data.site_id, view: parsed.data.view, limit: parsed.data.limit });
41
+ const opps = response.data || [];
42
+ const headers = ["ID", "Title", "Type", "Score", "Impact", "Effort"];
43
+ const rows = opps.map((o) => [o.id, o.title.slice(0, 35), o.type, String(o.score), String(o.impact), o.effort]);
44
+ const table = formatTable(headers, rows);
45
+ return { success: true, markdown: `## Opportunities (${parsed.data.view})\n\n${table}`, data: response };
46
+ }
47
+ catch (error) {
48
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
49
+ }
50
+ }
51
+ // ============================================
52
+ // get_opportunity
53
+ // ============================================
54
+ const getOpportunitySchema = z.object({ id: z.string().min(1) });
55
+ const getOpportunityTool = {
56
+ name: "get_opportunity",
57
+ description: "Get opportunity details with full scoring breakdown (impact, effort, speed, strategic value) and recommended actions.",
58
+ inputSchema: {
59
+ type: "object",
60
+ properties: { id: { type: "string", description: "Opportunity ID (required)" } },
61
+ required: ["id"],
62
+ },
63
+ };
64
+ async function executeGetOpportunity(input, context) {
65
+ const parsed = getOpportunitySchema.safeParse(input);
66
+ if (!parsed.success)
67
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
68
+ try {
69
+ const response = await context.client.get(`/opportunities/${parsed.data.id}`);
70
+ const o = response.data;
71
+ let markdown = `## Opportunity: ${o.title}\n\n`;
72
+ markdown += formatKeyValue(o);
73
+ return { success: true, markdown, data: response };
74
+ }
75
+ catch (error) {
76
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
77
+ }
78
+ }
79
+ // ============================================
80
+ // create_from_opportunity
81
+ // ============================================
82
+ const createFromOpportunitySchema = z.object({ id: z.string().min(1) });
83
+ const createFromOpportunityTool = {
84
+ name: "create_from_opportunity",
85
+ description: "Generate a content brief directly from an opportunity — pre-fills topic, keywords, and competitive context.",
86
+ inputSchema: {
87
+ type: "object",
88
+ properties: { id: { type: "string", description: "Opportunity ID (required)" } },
89
+ required: ["id"],
90
+ },
91
+ };
92
+ async function executeCreateFromOpportunity(input, context) {
93
+ const parsed = createFromOpportunitySchema.safeParse(input);
94
+ if (!parsed.success)
95
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
96
+ try {
97
+ const response = await context.client.post(`/opportunities/${parsed.data.id}/brief`, {});
98
+ const b = response.data;
99
+ return {
100
+ success: true,
101
+ markdown: `## Brief Created from Opportunity\n\n${formatKeyValue({ "Brief ID": b.brief_id, Topic: b.topic })}\n\nUse \`get_brief\` with \`id: "${b.brief_id}"\` to view the full brief.`,
102
+ data: response,
103
+ };
104
+ }
105
+ catch (error) {
106
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
107
+ }
108
+ }
109
+ // ============================================
110
+ // Exports
111
+ // ============================================
112
+ export const opportunityTools = [
113
+ listOpportunitiesTool,
114
+ getOpportunityTool,
115
+ createFromOpportunityTool,
116
+ ];
117
+ export const opportunityExecutors = {
118
+ list_opportunities: executeListOpportunities,
119
+ get_opportunity: executeGetOpportunity,
120
+ create_from_opportunity: executeCreateFromOpportunity,
121
+ };
122
+ //# sourceMappingURL=opportunities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunities.js","sourceRoot":"","sources":["../../src/tools/opportunities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Site Health tools — health scores, link graphs, cannibalization detection
3
+ */
4
+ import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
5
+ export declare const siteHealthTools: McpToolDefinition[];
6
+ export declare const siteHealthExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
7
+ //# sourceMappingURL=site-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-health.d.ts","sourceRoot":"","sources":["../../src/tools/site-health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiI9E,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAI9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAI7G,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Site Health tools — health scores, link graphs, cannibalization detection
3
+ */
4
+ import { z } from "zod";
5
+ import { formatTable, formatKeyValue } from "../formatter.js";
6
+ import { CACHE_TTL } from "../cache.js";
7
+ // ============================================
8
+ // get_site_health
9
+ // ============================================
10
+ const getSiteHealthSchema = z.object({ site_id: z.string().min(1) });
11
+ const getSiteHealthTool = {
12
+ name: "get_site_health",
13
+ description: "Get overall site health score, issue counts by severity, and page statistics. Use this before diving into specific issues.",
14
+ inputSchema: {
15
+ type: "object",
16
+ properties: { site_id: { type: "string", description: "Site ID (required)" } },
17
+ required: ["site_id"],
18
+ },
19
+ };
20
+ async function executeGetSiteHealth(input, context) {
21
+ const parsed = getSiteHealthSchema.safeParse(input);
22
+ if (!parsed.success)
23
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
24
+ try {
25
+ const response = await context.client.get("/site-health", { site_id: parsed.data.site_id }, CACHE_TTL.resources);
26
+ const h = response.data;
27
+ return {
28
+ success: true,
29
+ markdown: `## Site Health\n\n${formatKeyValue({
30
+ "Health Score": `${h.health_score}/100`,
31
+ "Total Pages": h.total_pages,
32
+ "Issues": h.issues_count,
33
+ "Critical": h.critical_issues,
34
+ "Warnings": h.warnings,
35
+ })}`,
36
+ data: response,
37
+ };
38
+ }
39
+ catch (error) {
40
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
41
+ }
42
+ }
43
+ // ============================================
44
+ // get_cannibalization
45
+ // ============================================
46
+ const getCannibalizationSchema = z.object({ site_id: z.string().min(1) });
47
+ const getCannibalizationTool = {
48
+ name: "get_cannibalization",
49
+ description: "Detect pages competing for the same keywords. Shows keyword groups with conflicting pages and their positions.",
50
+ inputSchema: {
51
+ type: "object",
52
+ properties: { site_id: { type: "string", description: "Site ID (required)" } },
53
+ required: ["site_id"],
54
+ },
55
+ };
56
+ async function executeGetCannibalization(input, context) {
57
+ const parsed = getCannibalizationSchema.safeParse(input);
58
+ if (!parsed.success)
59
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
60
+ try {
61
+ const response = await context.client.get("/site-health/cannibalization", { site_id: parsed.data.site_id }, CACHE_TTL.resources);
62
+ const groups = response.data || [];
63
+ if (groups.length === 0) {
64
+ return { success: true, markdown: `## Cannibalization Report\n\n_No cannibalization issues detected._`, data: response };
65
+ }
66
+ let markdown = `## Cannibalization Report\n\n**${groups.length} keyword conflicts found:**\n\n`;
67
+ for (const g of groups.slice(0, 20)) {
68
+ markdown += `### "${g.keyword}"\n`;
69
+ const headers = ["URL", "Position"];
70
+ const rows = g.pages.map((p) => [p.url, String(p.position)]);
71
+ markdown += formatTable(headers, rows) + "\n\n";
72
+ }
73
+ return { success: true, markdown, data: response };
74
+ }
75
+ catch (error) {
76
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
77
+ }
78
+ }
79
+ // ============================================
80
+ // get_link_graph
81
+ // ============================================
82
+ const getLinkGraphSchema = z.object({ site_id: z.string().min(1) });
83
+ const getLinkGraphTool = {
84
+ name: "get_link_graph",
85
+ description: "Get internal link structure analysis — orphan pages, most-linked pages, link depth distribution, and broken links.",
86
+ inputSchema: {
87
+ type: "object",
88
+ properties: { site_id: { type: "string", description: "Site ID (required)" } },
89
+ required: ["site_id"],
90
+ },
91
+ };
92
+ async function executeGetLinkGraph(input, context) {
93
+ const parsed = getLinkGraphSchema.safeParse(input);
94
+ if (!parsed.success)
95
+ return { success: false, markdown: `**Error:** ${parsed.error.message}` };
96
+ try {
97
+ const response = await context.client.get("/site-health/links", { site_id: parsed.data.site_id }, CACHE_TTL.resources);
98
+ const data = response.data;
99
+ let markdown = `## Internal Link Analysis\n\n`;
100
+ markdown += `\`\`\`json\n${JSON.stringify(data, null, 2)}\n\`\`\``;
101
+ return { success: true, markdown, data: response };
102
+ }
103
+ catch (error) {
104
+ return { success: false, markdown: `**Error:** ${error instanceof Error ? error.message : "Unknown error"}` };
105
+ }
106
+ }
107
+ // ============================================
108
+ // Exports
109
+ // ============================================
110
+ export const siteHealthTools = [
111
+ getSiteHealthTool,
112
+ getCannibalizationTool,
113
+ getLinkGraphTool,
114
+ ];
115
+ export const siteHealthExecutors = {
116
+ get_site_health: executeGetSiteHealth,
117
+ get_cannibalization: executeGetCannibalization,
118
+ get_link_graph: executeGetLinkGraph,
119
+ };
120
+ //# sourceMappingURL=site-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-health.js","sourceRoot":"","sources":["../../src/tools/site-health.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,183 +1,5 @@
1
1
  /**
2
- * Type definitions for Frase MCP Server
2
+ * Type definitions re-exported from @frase/core
3
3
  */
4
- import type { FraseApiClient } from "./api-client.js";
5
- import type { Config } from "./config.js";
6
- /**
7
- * Context passed to tool executors
8
- */
9
- export interface ToolContext {
10
- client: FraseApiClient;
11
- config: Config;
12
- }
13
- /**
14
- * Result of a tool execution
15
- */
16
- export interface ToolResult {
17
- success: boolean;
18
- markdown: string;
19
- data?: unknown;
20
- }
21
- /**
22
- * MCP Tool definition
23
- */
24
- export interface McpToolDefinition {
25
- name: string;
26
- description: string;
27
- inputSchema: {
28
- type: "object";
29
- properties: Record<string, unknown>;
30
- required?: string[];
31
- };
32
- }
33
- /**
34
- * MCP Resource definition
35
- */
36
- export interface McpResourceDefinition {
37
- uri: string;
38
- name: string;
39
- description: string;
40
- mimeType: string;
41
- }
42
- /**
43
- * MCP Prompt definition
44
- */
45
- export interface McpPromptDefinition {
46
- name: string;
47
- description: string;
48
- arguments?: {
49
- name: string;
50
- description: string;
51
- required?: boolean;
52
- }[];
53
- }
54
- /**
55
- * Tool executor function type
56
- */
57
- export type ToolExecutor = (input: unknown, context: ToolContext) => Promise<ToolResult>;
58
- /**
59
- * Site from API
60
- */
61
- export interface Site {
62
- id: string;
63
- name: string;
64
- domain: string;
65
- created_at: string;
66
- updated_at: string | null;
67
- }
68
- /**
69
- * Brief from API
70
- */
71
- export interface Brief {
72
- id: string;
73
- topic: string;
74
- target_keywords: string[];
75
- content_type: string;
76
- status: "draft" | "pending" | "research" | "ready" | "generating" | "completed";
77
- search_intent: string | null;
78
- target_word_count: number | null;
79
- site_id: string | null;
80
- editor_metadata?: Record<string, unknown>;
81
- created_at: string;
82
- updated_at: string | null;
83
- }
84
- /**
85
- * Content from API
86
- */
87
- export interface Content {
88
- id: string;
89
- title: string;
90
- status: "draft" | "generating" | "review" | "published" | "archived";
91
- word_count: number | null;
92
- site_id: string | null;
93
- editor_metadata?: Record<string, unknown>;
94
- created_at: string;
95
- updated_at: string | null;
96
- published_at: string | null;
97
- }
98
- /**
99
- * Research session from API
100
- */
101
- export interface Research {
102
- id: string;
103
- query: string;
104
- status: string;
105
- type: string;
106
- language: string | null;
107
- country: string | null;
108
- site_id: string | null;
109
- created_at: string;
110
- }
111
- /**
112
- * Audit from API
113
- */
114
- export interface Audit {
115
- id: string;
116
- site_id: string;
117
- status: string;
118
- pages_crawled: number;
119
- pages_total: number;
120
- created_at: string;
121
- completed_at: string | null;
122
- }
123
- /**
124
- * Job status from API
125
- */
126
- export interface JobStatus {
127
- id: string;
128
- type: string;
129
- status: string;
130
- progress?: number;
131
- message?: string;
132
- created_at: string;
133
- updated_at: string | null;
134
- completed_at: string | null;
135
- }
136
- /**
137
- * Optimization from API
138
- */
139
- export interface Optimization {
140
- id: string;
141
- content_id: string;
142
- alert_id: string | null;
143
- status: "pending" | "analyzing" | "ready" | "applied" | "auto_applying" | "dismissed" | "failed";
144
- suggestions_count: number;
145
- applied_count: number;
146
- error: string | null;
147
- created_at: string;
148
- updated_at: string;
149
- analyzed_at: string | null;
150
- }
151
- /**
152
- * Competitive Analysis from API
153
- */
154
- export interface CompetitiveAnalysis {
155
- id: string;
156
- url: string;
157
- status: "pending" | "crawling_page" | "fetching_rankings" | "analyzing_competitors" | "generating_report" | "ready" | "failed";
158
- opportunity_score: number | null;
159
- error: string | null;
160
- created_at: string;
161
- completed_at: string | null;
162
- }
163
- /**
164
- * Paginated response from API
165
- */
166
- export interface PaginatedApiResponse<T> {
167
- data: T[];
168
- pagination: {
169
- page: number;
170
- page_size: number;
171
- total: number;
172
- has_more: boolean;
173
- };
174
- request_id: string;
175
- }
176
- /**
177
- * Single item response from API
178
- */
179
- export interface SingleApiResponse<T> {
180
- data: T;
181
- request_id: string;
182
- }
4
+ export type { ToolContext, ToolResult, McpToolDefinition, McpResourceDefinition, McpPromptDefinition, ToolExecutor, Site, Brief, Content, Research, Audit, JobStatus, Optimization, CompetitiveAnalysis, SerpAnalysis, AiVisibility, AnalyticsMetric, AnalyticsOverview, Webhook, RuleSet, Playbook, PlaybookRun, Template, Atomization, Opportunity, TopicCluster, SiteHealth, CmsConnection, AutoOptimizationStatus, PaginatedApiResponse, SingleApiResponse, } from "@frase/core";
183
5
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
package/dist/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Type definitions for Frase MCP Server
2
+ * Type definitions re-exported from @frase/core
3
3
  */
4
4
  export {};
5
5
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@frase/mcp-server",
3
- "version": "0.2.1",
4
- "description": "Frase MCP Server - Use Claude Desktop to interact with your Frase account",
3
+ "version": "0.3.0",
4
+ "description": "Frase MCP Server — The complete content platform for AI agents. Research, write, optimize, and host SEO & GEO-optimized content with built-in AI search visibility monitoring. Includes Frase CMS for auto-optimized web hosting, 95 tools, 9 agent skills, and 7 workflows. The only MCP server that creates, optimizes, publishes, AND monitors content across Google and AI search engines (ChatGPT, Perplexity, Claude, Gemini, AI Overviews). Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, Lovable, Replit, and any MCP-compatible tool.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -45,6 +45,7 @@
45
45
  "build:mcpb": "npm run build && mcpb pack"
46
46
  },
47
47
  "dependencies": {
48
+ "@frase/core": "^0.1.0",
48
49
  "@modelcontextprotocol/sdk": "^1.0.0",
49
50
  "dotenv": "^16.4.7",
50
51
  "zod": "^3.24.1"
@@ -61,20 +62,38 @@
61
62
  },
62
63
  "keywords": [
63
64
  "mcp",
65
+ "mcp-server",
64
66
  "frase",
65
67
  "seo",
66
- "content",
67
- "claude",
68
- "ai"
68
+ "geo",
69
+ "aeo",
70
+ "ai-visibility",
71
+ "ai-search",
72
+ "content-automation",
73
+ "content-optimization",
74
+ "content-hosting",
75
+ "headless-cms",
76
+ "blog-hosting",
77
+ "content-pipeline",
78
+ "ai-agent",
79
+ "claude-code",
80
+ "cursor",
81
+ "windsurf",
82
+ "lovable",
83
+ "replit",
84
+ "chatgpt",
85
+ "perplexity",
86
+ "gemini",
87
+ "ai-overviews"
69
88
  ],
70
89
  "repository": {
71
90
  "type": "git",
72
- "url": "https://github.com/frase-io/frase.git",
91
+ "url": "https://github.com/frase-io/newfrase.git",
73
92
  "directory": "packages/customer-mcp-server"
74
93
  },
75
94
  "homepage": "https://frase.io",
76
95
  "bugs": {
77
- "url": "https://github.com/frase-io/frase/issues"
96
+ "url": "https://github.com/frase-io/newfrase/issues"
78
97
  },
79
98
  "license": "MIT",
80
99
  "author": {
package/server.json CHANGED
@@ -2,18 +2,18 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.frase/mcp-server",
4
4
  "title": "Frase SEO",
5
- "description": "Connect to your Frase account — manage content briefs, research, site audits, AI visibility tracking, SERP analysis, and SEO optimization with 70+ tools.",
6
- "version": "0.2.1",
5
+ "description": "Connect to your Frase account — manage content briefs, research, site audits, AI visibility tracking, SERP analysis, and SEO optimization with 95 tools.",
6
+ "version": "0.3.0",
7
7
  "websiteUrl": "https://frase.io/agents",
8
8
  "repository": {
9
- "url": "https://github.com/frase-io/frase.git",
9
+ "url": "https://github.com/frase-io/newfrase.git",
10
10
  "source": "github"
11
11
  },
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@frase/mcp-server",
16
- "version": "0.2.1",
16
+ "version": "0.3.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },