@mentionova/mcp-server 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +158 -0
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -249,6 +249,60 @@ server.tool(
|
|
|
249
249
|
}
|
|
250
250
|
);
|
|
251
251
|
|
|
252
|
+
// --- Write: Workspaces ---
|
|
253
|
+
|
|
254
|
+
server.tool(
|
|
255
|
+
"mentionova_create_workspace",
|
|
256
|
+
"Create a new workspace to track a brand's AI search visibility",
|
|
257
|
+
{
|
|
258
|
+
name: z.string().describe("Workspace name (e.g. brand or client name)"),
|
|
259
|
+
description: z.string().optional().describe("Description"),
|
|
260
|
+
website_url: z.string().optional().describe("Brand website URL"),
|
|
261
|
+
industry: z.string().optional().describe("Industry"),
|
|
262
|
+
competitor_domains: z.array(z.string()).optional().describe("Competitor website domains"),
|
|
263
|
+
competitor_names: z.array(z.string()).optional().describe("Competitor brand names"),
|
|
264
|
+
seed_keywords: z.array(z.string()).optional().describe("Initial keywords to track"),
|
|
265
|
+
brand_aliases: z.array(z.string()).optional().describe("Alternative brand names"),
|
|
266
|
+
},
|
|
267
|
+
async (params) => {
|
|
268
|
+
const data = await apiPost("/workspaces", params);
|
|
269
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
server.tool(
|
|
274
|
+
"mentionova_update_workspace",
|
|
275
|
+
"Update a workspace's name, competitors, keywords, or other settings",
|
|
276
|
+
{
|
|
277
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
278
|
+
name: z.string().optional().describe("New name"),
|
|
279
|
+
description: z.string().optional().describe("New description"),
|
|
280
|
+
website_url: z.string().optional().describe("New website URL"),
|
|
281
|
+
industry: z.string().optional().describe("New industry"),
|
|
282
|
+
competitor_domains: z.array(z.string()).optional().describe("New competitor domains"),
|
|
283
|
+
competitor_names: z.array(z.string()).optional().describe("New competitor names"),
|
|
284
|
+
seed_keywords: z.array(z.string()).optional().describe("New keywords"),
|
|
285
|
+
brand_aliases: z.array(z.string()).optional().describe("New brand aliases"),
|
|
286
|
+
client_context: z.string().optional().describe("Client context/brief"),
|
|
287
|
+
},
|
|
288
|
+
async ({ workspace_id, ...body }) => {
|
|
289
|
+
const data = await apiPatch(`/workspaces/${workspace_id}`, body);
|
|
290
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
291
|
+
}
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
server.tool(
|
|
295
|
+
"mentionova_delete_workspace",
|
|
296
|
+
"Delete a workspace and all its prompts, runs, citations, and data",
|
|
297
|
+
{
|
|
298
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
299
|
+
},
|
|
300
|
+
async ({ workspace_id }) => {
|
|
301
|
+
const data = await apiDelete(`/workspaces/${workspace_id}`);
|
|
302
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
303
|
+
}
|
|
304
|
+
);
|
|
305
|
+
|
|
252
306
|
// --- Write: Prompts ---
|
|
253
307
|
|
|
254
308
|
server.tool(
|
|
@@ -315,6 +369,110 @@ server.tool(
|
|
|
315
369
|
}
|
|
316
370
|
);
|
|
317
371
|
|
|
372
|
+
// --- Write: Runs ---
|
|
373
|
+
|
|
374
|
+
server.tool(
|
|
375
|
+
"mentionova_delete_run",
|
|
376
|
+
"Delete a specific run and its associated data",
|
|
377
|
+
{
|
|
378
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
379
|
+
run_id: z.string().describe("Run UUID to delete"),
|
|
380
|
+
},
|
|
381
|
+
async ({ workspace_id, run_id }) => {
|
|
382
|
+
const data = await apiDelete(`/workspaces/${workspace_id}/runs?run_id=${run_id}`);
|
|
383
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
384
|
+
}
|
|
385
|
+
);
|
|
386
|
+
|
|
387
|
+
// --- Write: Citations ---
|
|
388
|
+
|
|
389
|
+
server.tool(
|
|
390
|
+
"mentionova_delete_citation",
|
|
391
|
+
"Delete a specific citation",
|
|
392
|
+
{
|
|
393
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
394
|
+
citation_id: z.string().describe("Citation UUID to delete"),
|
|
395
|
+
},
|
|
396
|
+
async ({ workspace_id, citation_id }) => {
|
|
397
|
+
const data = await apiDelete(`/workspaces/${workspace_id}/citations?citation_id=${citation_id}`);
|
|
398
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
399
|
+
}
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
// --- Write: Grids ---
|
|
403
|
+
|
|
404
|
+
server.tool(
|
|
405
|
+
"mentionova_create_grid",
|
|
406
|
+
"Create a new content grid in a workspace",
|
|
407
|
+
{
|
|
408
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
409
|
+
name: z.string().describe("Grid name"),
|
|
410
|
+
description: z.string().optional().describe("Grid description"),
|
|
411
|
+
template_id: z.string().optional().describe("Template UUID to base grid on"),
|
|
412
|
+
},
|
|
413
|
+
async ({ workspace_id, ...body }) => {
|
|
414
|
+
const data = await apiPost(`/workspaces/${workspace_id}/grids`, body);
|
|
415
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
416
|
+
}
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
server.tool(
|
|
420
|
+
"mentionova_update_grid",
|
|
421
|
+
"Update a grid's name, description, or status",
|
|
422
|
+
{
|
|
423
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
424
|
+
grid_id: z.string().describe("Grid UUID"),
|
|
425
|
+
name: z.string().optional().describe("New name"),
|
|
426
|
+
description: z.string().optional().describe("New description"),
|
|
427
|
+
status: z.enum(["active", "archived"]).optional().describe("New status"),
|
|
428
|
+
},
|
|
429
|
+
async ({ workspace_id, ...body }) => {
|
|
430
|
+
const data = await apiPatch(`/workspaces/${workspace_id}/grids`, body);
|
|
431
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
432
|
+
}
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
server.tool(
|
|
436
|
+
"mentionova_delete_grid",
|
|
437
|
+
"Delete a grid",
|
|
438
|
+
{
|
|
439
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
440
|
+
grid_id: z.string().describe("Grid UUID to delete"),
|
|
441
|
+
},
|
|
442
|
+
async ({ workspace_id, grid_id }) => {
|
|
443
|
+
const data = await apiDelete(`/workspaces/${workspace_id}/grids?grid_id=${grid_id}`);
|
|
444
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
445
|
+
}
|
|
446
|
+
);
|
|
447
|
+
|
|
448
|
+
// --- Write: Alerts ---
|
|
449
|
+
|
|
450
|
+
server.tool(
|
|
451
|
+
"mentionova_mark_alert_read",
|
|
452
|
+
"Mark an alert/notification as read",
|
|
453
|
+
{
|
|
454
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
455
|
+
alert_id: z.string().describe("Alert UUID"),
|
|
456
|
+
},
|
|
457
|
+
async ({ workspace_id, alert_id }) => {
|
|
458
|
+
const data = await apiPatch(`/workspaces/${workspace_id}/alerts`, { alert_id });
|
|
459
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
|
|
463
|
+
server.tool(
|
|
464
|
+
"mentionova_delete_alert",
|
|
465
|
+
"Delete an alert/notification",
|
|
466
|
+
{
|
|
467
|
+
workspace_id: z.string().describe("Workspace UUID"),
|
|
468
|
+
alert_id: z.string().describe("Alert UUID to delete"),
|
|
469
|
+
},
|
|
470
|
+
async ({ workspace_id, alert_id }) => {
|
|
471
|
+
const data = await apiDelete(`/workspaces/${workspace_id}/alerts?alert_id=${alert_id}`);
|
|
472
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
473
|
+
}
|
|
474
|
+
);
|
|
475
|
+
|
|
318
476
|
// Start the server
|
|
319
477
|
const transport = new StdioServerTransport();
|
|
320
478
|
await server.connect(transport);
|