rankcontrol 0.8.1 → 0.8.3
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/package.json +1 -1
- package/src/cli.mjs +7 -2
- package/src/client.mjs +1 -0
- package/src/mcp.mjs +15 -8
package/package.json
CHANGED
package/src/cli.mjs
CHANGED
|
@@ -63,6 +63,11 @@ export function runCli(argv) {
|
|
|
63
63
|
.description("Composite visibility score blending AI citation rate with Google and Bing rank share, with subscores")
|
|
64
64
|
.action(() => api.visibilityScore().then(out).catch(fail));
|
|
65
65
|
|
|
66
|
+
program
|
|
67
|
+
.command("expedition")
|
|
68
|
+
.description("First-run setup progress: five acts with per-step completion and the current act")
|
|
69
|
+
.action(() => api.expedition().then(out).catch(fail));
|
|
70
|
+
|
|
66
71
|
program
|
|
67
72
|
.command("visibility")
|
|
68
73
|
.description("Daily AI visibility score trend from the stored weekly citation checks")
|
|
@@ -414,7 +419,7 @@ export function runCli(argv) {
|
|
|
414
419
|
program
|
|
415
420
|
.command("generate <contentId>")
|
|
416
421
|
.description("Write a planned article's body now, keeping its publish slot (past-due or ≤3 days ahead; dry run unless --confirm)")
|
|
417
|
-
.option("--confirm", "Actually start generation (
|
|
422
|
+
.option("--confirm", "Actually start generation (costly)")
|
|
418
423
|
.action((contentId, opts) =>
|
|
419
424
|
api.generateContent(contentId, !!opts.confirm).then(out).catch(fail)
|
|
420
425
|
);
|
|
@@ -531,7 +536,7 @@ export function runCli(argv) {
|
|
|
531
536
|
|
|
532
537
|
program
|
|
533
538
|
.command("repurpose-generate <contentId>")
|
|
534
|
-
.description("Draft social posts for a published article (dry run unless --confirm;
|
|
539
|
+
.description("Draft social posts for a published article (dry run unless --confirm; costly)")
|
|
535
540
|
.option(
|
|
536
541
|
"--platforms <a,b>",
|
|
537
542
|
"Subset: linkedin,twitter,pinterest,instagram,facebook,threads,youtube,tiktok"
|
package/src/client.mjs
CHANGED
|
@@ -103,6 +103,7 @@ export const api = {
|
|
|
103
103
|
return request("GET", `/api/v1/citations${qs ? `?${qs}` : ""}`);
|
|
104
104
|
},
|
|
105
105
|
visibilityScore: () => request("GET", "/api/v1/visibility/score"),
|
|
106
|
+
expedition: () => request("GET", "/api/v1/expedition"),
|
|
106
107
|
planningCapacity: () => request("GET", "/api/v1/content/planning-capacity"),
|
|
107
108
|
jobs: (limit = 20) => request("GET", `/api/v1/jobs?limit=${limit}`),
|
|
108
109
|
content: () => request("GET", "/api/v1/content"),
|
package/src/mcp.mjs
CHANGED
|
@@ -29,7 +29,7 @@ const plannedTitle = z.object({
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
export async function startMcpServer() {
|
|
32
|
-
const server = new McpServer({ name: "rankcontrol", version: "0.8.
|
|
32
|
+
const server = new McpServer({ name: "rankcontrol", version: "0.8.3" });
|
|
33
33
|
|
|
34
34
|
server.tool(
|
|
35
35
|
"get_overview_funnel",
|
|
@@ -40,7 +40,7 @@ export async function startMcpServer() {
|
|
|
40
40
|
|
|
41
41
|
server.tool(
|
|
42
42
|
"get_visibility_trend",
|
|
43
|
-
"Daily AI visibility score series
|
|
43
|
+
"Daily AI visibility score series across the 6 tracked AI engines, from RankControl's stored weekly citation checks.",
|
|
44
44
|
{ days: z.enum(["30", "60", "90"]).optional().describe("Window size in days, default 30") },
|
|
45
45
|
run(({ days }) => api.visibilityTrend(days ? Number(days) : 30))
|
|
46
46
|
);
|
|
@@ -62,6 +62,13 @@ export async function startMcpServer() {
|
|
|
62
62
|
run(() => api.visibilityScore())
|
|
63
63
|
);
|
|
64
64
|
|
|
65
|
+
server.tool(
|
|
66
|
+
"get_setup_progress",
|
|
67
|
+
"First-run setup progress for the workspace: five acts from first article live through analytics, each with per-step completion, plus the current act. Use to tell the user what remains to finish setting up.",
|
|
68
|
+
{},
|
|
69
|
+
run(() => api.expedition())
|
|
70
|
+
);
|
|
71
|
+
|
|
65
72
|
server.tool(
|
|
66
73
|
"get_citability_report",
|
|
67
74
|
"Published pages ranked by citability score (how extractable each page is for AI answers), worst first, each with its top open fixes. Use to decide which articles to improve.",
|
|
@@ -339,7 +346,7 @@ export async function startMcpServer() {
|
|
|
339
346
|
|
|
340
347
|
server.tool(
|
|
341
348
|
"find_outreach_contact",
|
|
342
|
-
"Find an outreach email for one prospect
|
|
349
|
+
"Find an outreach email for one prospect site. Returns the stored contact or found:false. Capped at 5/min.",
|
|
343
350
|
{ backlinkId: z.string().describe("Prospect id from list_outreach_prospects") },
|
|
344
351
|
run(({ backlinkId }) => api.outreachFindContact(backlinkId))
|
|
345
352
|
);
|
|
@@ -353,7 +360,7 @@ export async function startMcpServer() {
|
|
|
353
360
|
|
|
354
361
|
server.tool(
|
|
355
362
|
"queue_outreach_email",
|
|
356
|
-
"Queue an outreach email to a prospect. It sends from the workspace's own connected mailbox, paced
|
|
363
|
+
"Queue an outreach email to a prospect. It sends from the workspace's own connected mailbox, paced automatically with a daily cap. Uses the stored draft unless subject/body are given. Dry-run unless confirm is true — a confirmed queue leads to a REAL email being sent.",
|
|
357
364
|
{
|
|
358
365
|
backlinkId: z.string().describe("Prospect id from list_outreach_prospects"),
|
|
359
366
|
subject: z.string().optional().describe("Override the drafted subject"),
|
|
@@ -379,7 +386,7 @@ export async function startMcpServer() {
|
|
|
379
386
|
|
|
380
387
|
server.tool(
|
|
381
388
|
"plan_content",
|
|
382
|
-
"Generate candidate article titles (capacity-gated). This DOES NOT put anything on the calendar: review the returned titles, then call commit_planned_titles with the keepers.
|
|
389
|
+
"Generate candidate article titles (capacity-gated). This DOES NOT put anything on the calendar: review the returned titles, then call commit_planned_titles with the keepers. Costly; capped at 5/min.",
|
|
383
390
|
{
|
|
384
391
|
topics: z.array(z.string()).optional().describe("Brand topics to focus on; omit for auto"),
|
|
385
392
|
contentTypes: z.array(z.string()).optional(),
|
|
@@ -413,7 +420,7 @@ export async function startMcpServer() {
|
|
|
413
420
|
|
|
414
421
|
server.tool(
|
|
415
422
|
"generate_article",
|
|
416
|
-
"Write a PLANNED article's body immediately instead of waiting for the scheduled pipeline (generate-only: its publish slot is unchanged). Allowed for past-due slots and up to 3 days ahead. Defaults to a DRY RUN; a human should approve before calling again with confirm=true since generation
|
|
423
|
+
"Write a PLANNED article's body immediately instead of waiting for the scheduled pipeline (generate-only: its publish slot is unchanged). Allowed for past-due slots and up to 3 days ahead. Defaults to a DRY RUN; a human should approve before calling again with confirm=true since generation is costly.",
|
|
417
424
|
{
|
|
418
425
|
contentId: z.string().describe("The planned content page id"),
|
|
419
426
|
confirm: z.boolean().optional().describe("Set true to actually start generation (default: dry run)"),
|
|
@@ -432,7 +439,7 @@ export async function startMcpServer() {
|
|
|
432
439
|
|
|
433
440
|
server.tool(
|
|
434
441
|
"get_article_settings",
|
|
435
|
-
"The workspace article policy: per-article defaults (auto-write, auto-publish, images, title-in-hero, section infographics, Related Reading, YouTube, emojis, link counts, global instructions) plus the flexible-scheduling flag.",
|
|
442
|
+
"The workspace article policy: per-article defaults (auto-write, auto-publish, images, title-in-hero, section infographics, Related Reading, YouTube, emojis, link counts, global instructions) plus the flexible-scheduling flag. News and trending articles always publish manually, regardless of auto-publish.",
|
|
436
443
|
{},
|
|
437
444
|
run(() => api.articleSettings())
|
|
438
445
|
);
|
|
@@ -529,7 +536,7 @@ export async function startMcpServer() {
|
|
|
529
536
|
|
|
530
537
|
server.tool(
|
|
531
538
|
"generate_repurpose_drafts",
|
|
532
|
-
"Draft platform-native social posts for a published article. Regeneration replaces unposted drafts for the chosen platforms. Defaults to a DRY RUN; confirm=true generates (
|
|
539
|
+
"Draft platform-native social posts for a published article. Regeneration replaces unposted drafts for the chosen platforms. Defaults to a DRY RUN; confirm=true generates (costly).",
|
|
533
540
|
{
|
|
534
541
|
contentId: z.string(),
|
|
535
542
|
platforms: z
|