@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.
Files changed (115) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +262 -0
  3. package/dist/api-client.d.ts +93 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +213 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cache.d.ts +52 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +97 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/config.d.ts +17 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +31 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/formatter.d.ts +47 -0
  16. package/dist/formatter.d.ts.map +1 -0
  17. package/dist/formatter.js +136 -0
  18. package/dist/formatter.js.map +1 -0
  19. package/dist/index.d.ts +32 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +292 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/prompts/competitor-analysis.d.ts +18 -0
  24. package/dist/prompts/competitor-analysis.d.ts.map +1 -0
  25. package/dist/prompts/competitor-analysis.js +71 -0
  26. package/dist/prompts/competitor-analysis.js.map +1 -0
  27. package/dist/prompts/content-audit.d.ts +18 -0
  28. package/dist/prompts/content-audit.d.ts.map +1 -0
  29. package/dist/prompts/content-audit.js +67 -0
  30. package/dist/prompts/content-audit.js.map +1 -0
  31. package/dist/prompts/create-seo-article.d.ts +19 -0
  32. package/dist/prompts/create-seo-article.d.ts.map +1 -0
  33. package/dist/prompts/create-seo-article.js +78 -0
  34. package/dist/prompts/create-seo-article.js.map +1 -0
  35. package/dist/prompts/index.d.ts +18 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +52 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/prompts/keyword-research.d.ts +18 -0
  40. package/dist/prompts/keyword-research.d.ts.map +1 -0
  41. package/dist/prompts/keyword-research.js +72 -0
  42. package/dist/prompts/keyword-research.js.map +1 -0
  43. package/dist/prompts/optimize-content.d.ts +18 -0
  44. package/dist/prompts/optimize-content.d.ts.map +1 -0
  45. package/dist/prompts/optimize-content.js +59 -0
  46. package/dist/prompts/optimize-content.js.map +1 -0
  47. package/dist/resources/briefs.d.ts +26 -0
  48. package/dist/resources/briefs.d.ts.map +1 -0
  49. package/dist/resources/briefs.js +144 -0
  50. package/dist/resources/briefs.js.map +1 -0
  51. package/dist/resources/content.d.ts +26 -0
  52. package/dist/resources/content.d.ts.map +1 -0
  53. package/dist/resources/content.js +128 -0
  54. package/dist/resources/content.js.map +1 -0
  55. package/dist/resources/index.d.ts +32 -0
  56. package/dist/resources/index.d.ts.map +1 -0
  57. package/dist/resources/index.js +85 -0
  58. package/dist/resources/index.js.map +1 -0
  59. package/dist/resources/sites.d.ts +26 -0
  60. package/dist/resources/sites.d.ts.map +1 -0
  61. package/dist/resources/sites.js +108 -0
  62. package/dist/resources/sites.js.map +1 -0
  63. package/dist/tools/ai-visibility.d.ts +25 -0
  64. package/dist/tools/ai-visibility.d.ts.map +1 -0
  65. package/dist/tools/ai-visibility.js +537 -0
  66. package/dist/tools/ai-visibility.js.map +1 -0
  67. package/dist/tools/analytics.d.ts +17 -0
  68. package/dist/tools/analytics.d.ts.map +1 -0
  69. package/dist/tools/analytics.js +311 -0
  70. package/dist/tools/analytics.js.map +1 -0
  71. package/dist/tools/audits.d.ts +73 -0
  72. package/dist/tools/audits.d.ts.map +1 -0
  73. package/dist/tools/audits.js +345 -0
  74. package/dist/tools/audits.js.map +1 -0
  75. package/dist/tools/briefs.d.ts +63 -0
  76. package/dist/tools/briefs.d.ts.map +1 -0
  77. package/dist/tools/briefs.js +276 -0
  78. package/dist/tools/briefs.js.map +1 -0
  79. package/dist/tools/content.d.ts +51 -0
  80. package/dist/tools/content.d.ts.map +1 -0
  81. package/dist/tools/content.js +233 -0
  82. package/dist/tools/content.js.map +1 -0
  83. package/dist/tools/index.d.ts +29 -0
  84. package/dist/tools/index.d.ts.map +1 -0
  85. package/dist/tools/index.js +96 -0
  86. package/dist/tools/index.js.map +1 -0
  87. package/dist/tools/jobs.d.ts +22 -0
  88. package/dist/tools/jobs.d.ts.map +1 -0
  89. package/dist/tools/jobs.js +124 -0
  90. package/dist/tools/jobs.js.map +1 -0
  91. package/dist/tools/optimizations.d.ts +19 -0
  92. package/dist/tools/optimizations.d.ts.map +1 -0
  93. package/dist/tools/optimizations.js +339 -0
  94. package/dist/tools/optimizations.js.map +1 -0
  95. package/dist/tools/research.d.ts +41 -0
  96. package/dist/tools/research.d.ts.map +1 -0
  97. package/dist/tools/research.js +151 -0
  98. package/dist/tools/research.js.map +1 -0
  99. package/dist/tools/serp.d.ts +15 -0
  100. package/dist/tools/serp.d.ts.map +1 -0
  101. package/dist/tools/serp.js +267 -0
  102. package/dist/tools/serp.js.map +1 -0
  103. package/dist/tools/sites.d.ts +31 -0
  104. package/dist/tools/sites.d.ts.map +1 -0
  105. package/dist/tools/sites.js +83 -0
  106. package/dist/tools/sites.js.map +1 -0
  107. package/dist/tools/webhooks.d.ts +19 -0
  108. package/dist/tools/webhooks.d.ts.map +1 -0
  109. package/dist/tools/webhooks.js +350 -0
  110. package/dist/tools/webhooks.js.map +1 -0
  111. package/dist/types.d.ts +167 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +5 -0
  114. package/dist/types.js.map +1 -0
  115. package/package.json +67 -0
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Webhook tools
3
+ *
4
+ * Manage webhooks for event notifications
5
+ */
6
+ import { z } from "zod";
7
+ import { CACHE_TTL } from "../cache.js";
8
+ import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, truncate, } from "../formatter.js";
9
+ const WEBHOOK_EVENTS = [
10
+ "content.created",
11
+ "content.updated",
12
+ "content.published",
13
+ "content.deleted",
14
+ "brief.created",
15
+ "brief.completed",
16
+ "audit.completed",
17
+ "research.completed",
18
+ "optimization.ready",
19
+ "alert.created",
20
+ ];
21
+ // ============================================
22
+ // list_webhooks
23
+ // ============================================
24
+ const listWebhooksInputSchema = z.object({
25
+ page: z.number().min(1).optional().default(1),
26
+ page_size: z.number().min(1).max(100).optional().default(20),
27
+ });
28
+ export const listWebhooksTool = {
29
+ name: "list_webhooks",
30
+ description: "List all webhooks configured for your account. Webhooks send HTTP notifications when events occur.",
31
+ inputSchema: {
32
+ type: "object",
33
+ properties: {
34
+ page: {
35
+ type: "number",
36
+ description: "Page number (default: 1)",
37
+ },
38
+ page_size: {
39
+ type: "number",
40
+ description: "Items per page, max 100 (default: 20)",
41
+ },
42
+ },
43
+ },
44
+ };
45
+ export async function executeListWebhooks(input, context) {
46
+ const parsed = listWebhooksInputSchema.safeParse(input || {});
47
+ if (!parsed.success) {
48
+ return {
49
+ success: false,
50
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
51
+ };
52
+ }
53
+ const { page, page_size } = parsed.data;
54
+ try {
55
+ const response = await context.client.get("/webhooks", { page, page_size }, CACHE_TTL.lists);
56
+ const headers = ["Name", "URL", "Events", "Status", "Last Triggered"];
57
+ const rows = response.data.map((wh) => [
58
+ wh.name || "Webhook",
59
+ truncate(wh.url, 40),
60
+ wh.events.length.toString(),
61
+ formatStatus(wh.status),
62
+ wh.last_triggered_at ? formatDate(wh.last_triggered_at) : "Never",
63
+ ]);
64
+ const table = formatTable(headers, rows);
65
+ const pagination = formatPagination(response.pagination);
66
+ return {
67
+ success: true,
68
+ markdown: `## Webhooks (Page ${page})\n\n${table}${pagination}`,
69
+ data: response,
70
+ };
71
+ }
72
+ catch (error) {
73
+ const message = error instanceof Error ? error.message : "Unknown error";
74
+ return {
75
+ success: false,
76
+ markdown: `**Error:** Failed to list webhooks - ${message}`,
77
+ };
78
+ }
79
+ }
80
+ // ============================================
81
+ // create_webhook
82
+ // ============================================
83
+ const createWebhookInputSchema = z.object({
84
+ url: z.string().url(),
85
+ events: z.array(z.enum(WEBHOOK_EVENTS)).min(1),
86
+ name: z.string().max(100).optional(),
87
+ secret: z.string().optional(),
88
+ });
89
+ export const createWebhookTool = {
90
+ name: "create_webhook",
91
+ description: "Create a new webhook to receive event notifications.",
92
+ inputSchema: {
93
+ type: "object",
94
+ properties: {
95
+ url: {
96
+ type: "string",
97
+ description: "The URL to send webhook payloads to (required)",
98
+ },
99
+ events: {
100
+ type: "array",
101
+ items: {
102
+ type: "string",
103
+ enum: [...WEBHOOK_EVENTS],
104
+ },
105
+ description: `Events to subscribe to (required). Options: ${WEBHOOK_EVENTS.join(", ")}`,
106
+ },
107
+ name: {
108
+ type: "string",
109
+ description: "Optional name for the webhook",
110
+ },
111
+ secret: {
112
+ type: "string",
113
+ description: "Optional secret for HMAC signature verification",
114
+ },
115
+ },
116
+ required: ["url", "events"],
117
+ },
118
+ };
119
+ export async function executeCreateWebhook(input, context) {
120
+ const parsed = createWebhookInputSchema.safeParse(input);
121
+ if (!parsed.success) {
122
+ return {
123
+ success: false,
124
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
125
+ };
126
+ }
127
+ const { url, events, name, secret } = parsed.data;
128
+ try {
129
+ const response = await context.client.post("/webhooks", { url, events, name, secret });
130
+ const webhook = response.data;
131
+ const details = formatKeyValue({
132
+ id: webhook.id,
133
+ name: webhook.name || "Webhook",
134
+ url: webhook.url,
135
+ events: webhook.events.join(", "),
136
+ status: webhook.status,
137
+ });
138
+ return {
139
+ success: true,
140
+ markdown: `## Webhook Created\n\n${details}`,
141
+ data: response,
142
+ };
143
+ }
144
+ catch (error) {
145
+ const message = error instanceof Error ? error.message : "Unknown error";
146
+ return {
147
+ success: false,
148
+ markdown: `**Error:** Failed to create webhook - ${message}`,
149
+ };
150
+ }
151
+ }
152
+ // ============================================
153
+ // get_webhook
154
+ // ============================================
155
+ const getWebhookInputSchema = z.object({
156
+ id: z.string().min(1),
157
+ });
158
+ export const getWebhookTool = {
159
+ name: "get_webhook",
160
+ description: "Get details of a specific webhook.",
161
+ inputSchema: {
162
+ type: "object",
163
+ properties: {
164
+ id: {
165
+ type: "string",
166
+ description: "The webhook ID (required)",
167
+ },
168
+ },
169
+ required: ["id"],
170
+ },
171
+ };
172
+ export async function executeGetWebhook(input, context) {
173
+ const parsed = getWebhookInputSchema.safeParse(input);
174
+ if (!parsed.success) {
175
+ return {
176
+ success: false,
177
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
178
+ };
179
+ }
180
+ const { id } = parsed.data;
181
+ try {
182
+ const response = await context.client.get(`/webhooks/${id}`, {}, CACHE_TTL.resources);
183
+ const webhook = response.data;
184
+ let markdown = `## Webhook: ${webhook.name || "Webhook"}\n\n`;
185
+ markdown += formatKeyValue({
186
+ id: webhook.id,
187
+ url: webhook.url,
188
+ status: webhook.status,
189
+ events: webhook.events.join(", "),
190
+ failure_count: webhook.failure_count,
191
+ last_triggered: webhook.last_triggered_at ? formatDate(webhook.last_triggered_at) : "Never",
192
+ created: formatDate(webhook.created_at),
193
+ });
194
+ if (webhook.secret) {
195
+ markdown += "\n\n**Note:** This webhook has a secret configured for signature verification.";
196
+ }
197
+ return {
198
+ success: true,
199
+ markdown,
200
+ data: response,
201
+ };
202
+ }
203
+ catch (error) {
204
+ const message = error instanceof Error ? error.message : "Unknown error";
205
+ return {
206
+ success: false,
207
+ markdown: `**Error:** Failed to get webhook - ${message}`,
208
+ };
209
+ }
210
+ }
211
+ // ============================================
212
+ // update_webhook
213
+ // ============================================
214
+ const updateWebhookInputSchema = z.object({
215
+ id: z.string().min(1),
216
+ url: z.string().url().optional(),
217
+ events: z.array(z.enum(WEBHOOK_EVENTS)).min(1).optional(),
218
+ name: z.string().max(100).optional(),
219
+ status: z.enum(["active", "paused"]).optional(),
220
+ });
221
+ export const updateWebhookTool = {
222
+ name: "update_webhook",
223
+ description: "Update an existing webhook.",
224
+ inputSchema: {
225
+ type: "object",
226
+ properties: {
227
+ id: {
228
+ type: "string",
229
+ description: "The webhook ID (required)",
230
+ },
231
+ url: {
232
+ type: "string",
233
+ description: "New URL for the webhook",
234
+ },
235
+ events: {
236
+ type: "array",
237
+ items: {
238
+ type: "string",
239
+ enum: [...WEBHOOK_EVENTS],
240
+ },
241
+ description: "New list of events to subscribe to",
242
+ },
243
+ name: {
244
+ type: "string",
245
+ description: "New name for the webhook",
246
+ },
247
+ status: {
248
+ type: "string",
249
+ enum: ["active", "paused"],
250
+ description: "Set webhook status (active or paused)",
251
+ },
252
+ },
253
+ required: ["id"],
254
+ },
255
+ };
256
+ export async function executeUpdateWebhook(input, context) {
257
+ const parsed = updateWebhookInputSchema.safeParse(input);
258
+ if (!parsed.success) {
259
+ return {
260
+ success: false,
261
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
262
+ };
263
+ }
264
+ const { id, ...updates } = parsed.data;
265
+ try {
266
+ const response = await context.client.patch(`/webhooks/${id}`, updates);
267
+ const webhook = response.data;
268
+ const details = formatKeyValue({
269
+ id: webhook.id,
270
+ name: webhook.name || "Webhook",
271
+ url: webhook.url,
272
+ status: webhook.status,
273
+ events: webhook.events.join(", "),
274
+ });
275
+ return {
276
+ success: true,
277
+ markdown: `## Webhook Updated\n\n${details}`,
278
+ data: response,
279
+ };
280
+ }
281
+ catch (error) {
282
+ const message = error instanceof Error ? error.message : "Unknown error";
283
+ return {
284
+ success: false,
285
+ markdown: `**Error:** Failed to update webhook - ${message}`,
286
+ };
287
+ }
288
+ }
289
+ // ============================================
290
+ // delete_webhook
291
+ // ============================================
292
+ const deleteWebhookInputSchema = z.object({
293
+ id: z.string().min(1),
294
+ });
295
+ export const deleteWebhookTool = {
296
+ name: "delete_webhook",
297
+ description: "Delete a webhook.",
298
+ inputSchema: {
299
+ type: "object",
300
+ properties: {
301
+ id: {
302
+ type: "string",
303
+ description: "The webhook ID (required)",
304
+ },
305
+ },
306
+ required: ["id"],
307
+ },
308
+ };
309
+ export async function executeDeleteWebhook(input, context) {
310
+ const parsed = deleteWebhookInputSchema.safeParse(input);
311
+ if (!parsed.success) {
312
+ return {
313
+ success: false,
314
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
315
+ };
316
+ }
317
+ const { id } = parsed.data;
318
+ try {
319
+ await context.client.delete(`/webhooks/${id}`);
320
+ return {
321
+ success: true,
322
+ markdown: `## Webhook Deleted\n\nWebhook \`${id}\` has been deleted.`,
323
+ };
324
+ }
325
+ catch (error) {
326
+ const message = error instanceof Error ? error.message : "Unknown error";
327
+ return {
328
+ success: false,
329
+ markdown: `**Error:** Failed to delete webhook - ${message}`,
330
+ };
331
+ }
332
+ }
333
+ // ============================================
334
+ // Export all
335
+ // ============================================
336
+ export const webhookTools = [
337
+ listWebhooksTool,
338
+ createWebhookTool,
339
+ getWebhookTool,
340
+ updateWebhookTool,
341
+ deleteWebhookTool,
342
+ ];
343
+ export const webhookExecutors = {
344
+ list_webhooks: executeListWebhooks,
345
+ create_webhook: executeCreateWebhook,
346
+ get_webhook: executeGetWebhook,
347
+ update_webhook: executeUpdateWebhook,
348
+ delete_webhook: executeDeleteWebhook,
349
+ };
350
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Type definitions for Frase MCP Server
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
+ gsc_connected: boolean;
66
+ created_at: string;
67
+ updated_at: string | null;
68
+ }
69
+ /**
70
+ * Brief from API
71
+ */
72
+ export interface Brief {
73
+ id: string;
74
+ topic: string;
75
+ target_keywords: string[];
76
+ content_type: string;
77
+ status: "draft" | "pending" | "research" | "ready" | "generating" | "completed";
78
+ search_intent: string | null;
79
+ target_word_count: number | null;
80
+ created_at: string;
81
+ updated_at: string | null;
82
+ }
83
+ /**
84
+ * Content from API
85
+ */
86
+ export interface Content {
87
+ id: string;
88
+ title: string;
89
+ status: "draft" | "generating" | "review" | "published" | "archived";
90
+ word_count: number | null;
91
+ created_at: string;
92
+ updated_at: string | null;
93
+ published_at: string | null;
94
+ }
95
+ /**
96
+ * Research session from API
97
+ */
98
+ export interface Research {
99
+ id: string;
100
+ query: string;
101
+ status: string;
102
+ type: string;
103
+ language: string | null;
104
+ country: string | null;
105
+ created_at: string;
106
+ }
107
+ /**
108
+ * Audit from API
109
+ */
110
+ export interface Audit {
111
+ id: string;
112
+ site_id: string;
113
+ status: string;
114
+ pages_crawled: number;
115
+ pages_total: number;
116
+ created_at: string;
117
+ completed_at: string | null;
118
+ }
119
+ /**
120
+ * Job status from API
121
+ */
122
+ export interface JobStatus {
123
+ id: string;
124
+ type: string;
125
+ status: string;
126
+ progress?: number;
127
+ message?: string;
128
+ created_at: string;
129
+ updated_at: string | null;
130
+ completed_at: string | null;
131
+ }
132
+ /**
133
+ * Optimization from API
134
+ */
135
+ export interface Optimization {
136
+ id: string;
137
+ content_id: string;
138
+ alert_id: string | null;
139
+ status: "pending" | "analyzing" | "ready" | "applied" | "dismissed" | "failed";
140
+ suggestions_count: number;
141
+ applied_count: number;
142
+ error: string | null;
143
+ created_at: string;
144
+ updated_at: string;
145
+ analyzed_at: string | null;
146
+ }
147
+ /**
148
+ * Paginated response from API
149
+ */
150
+ export interface PaginatedApiResponse<T> {
151
+ data: T[];
152
+ pagination: {
153
+ page: number;
154
+ page_size: number;
155
+ total: number;
156
+ has_more: boolean;
157
+ };
158
+ request_id: string;
159
+ }
160
+ /**
161
+ * Single item response from API
162
+ */
163
+ export interface SingleApiResponse<T> {
164
+ data: T;
165
+ request_id: string;
166
+ }
167
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for Frase MCP Server
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@frase/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "Frase MCP Server - Use Claude Desktop to interact with your Frase account",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "frase-mcp": "./dist/index.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx watch src/index.ts",
14
+ "start": "node dist/index.js",
15
+ "lint": "eslint src/",
16
+ "typecheck": "tsc --noEmit",
17
+ "test": "vitest",
18
+ "test:run": "vitest run",
19
+ "test:coverage": "vitest run --coverage",
20
+ "test:integration": "vitest run --config vitest.integration.config.ts",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "^1.0.0",
25
+ "dotenv": "^16.4.7",
26
+ "zod": "^3.24.1"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.10.2",
30
+ "tsx": "^4.19.2",
31
+ "typescript": "^5.7.2",
32
+ "vitest": "^2.1.8"
33
+ },
34
+ "engines": {
35
+ "node": ">=20.0.0"
36
+ },
37
+ "keywords": [
38
+ "mcp",
39
+ "frase",
40
+ "seo",
41
+ "content",
42
+ "claude",
43
+ "ai"
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/frase-io/frase.git",
48
+ "directory": "packages/customer-mcp-server"
49
+ },
50
+ "homepage": "https://frase.io",
51
+ "bugs": {
52
+ "url": "https://github.com/frase-io/frase/issues"
53
+ },
54
+ "license": "MIT",
55
+ "author": {
56
+ "name": "Frase",
57
+ "url": "https://frase.io"
58
+ },
59
+ "files": [
60
+ "dist",
61
+ "README.md",
62
+ "CHANGELOG.md"
63
+ ],
64
+ "publishConfig": {
65
+ "access": "public"
66
+ }
67
+ }