rankcontrol 0.8.0 → 0.8.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/README.md +1 -1
- package/package.json +1 -1
- package/src/cli.mjs +3 -3
- package/src/mcp.mjs +8 -8
package/README.md
CHANGED
|
@@ -154,7 +154,7 @@ Or in `.mcp.json` / Cursor `mcp.json`:
|
|
|
154
154
|
| Tool | What it does |
|
|
155
155
|
|---|---|
|
|
156
156
|
| `get_overview_funnel` | AI crawls / AI visits, last 30 days |
|
|
157
|
-
| `get_visibility_score` | Composite score
|
|
157
|
+
| `get_visibility_score` | Composite score blending AI citations with Google and Bing rank share, with subscores |
|
|
158
158
|
| `get_visibility_trend` | Daily visibility score from stored weekly citation checks |
|
|
159
159
|
| `get_share_of_voice` | Your citation rate vs competitor mention rates + your share |
|
|
160
160
|
| `get_citation_sources` | Cited domains typed brand / competitive / UGC / editorial |
|
package/package.json
CHANGED
package/src/cli.mjs
CHANGED
|
@@ -60,7 +60,7 @@ export function runCli(argv) {
|
|
|
60
60
|
|
|
61
61
|
program
|
|
62
62
|
.command("score")
|
|
63
|
-
.description("Composite visibility score
|
|
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
66
|
program
|
|
@@ -414,7 +414,7 @@ export function runCli(argv) {
|
|
|
414
414
|
program
|
|
415
415
|
.command("generate <contentId>")
|
|
416
416
|
.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 (
|
|
417
|
+
.option("--confirm", "Actually start generation (costly)")
|
|
418
418
|
.action((contentId, opts) =>
|
|
419
419
|
api.generateContent(contentId, !!opts.confirm).then(out).catch(fail)
|
|
420
420
|
);
|
|
@@ -531,7 +531,7 @@ export function runCli(argv) {
|
|
|
531
531
|
|
|
532
532
|
program
|
|
533
533
|
.command("repurpose-generate <contentId>")
|
|
534
|
-
.description("Draft social posts for a published article (dry run unless --confirm;
|
|
534
|
+
.description("Draft social posts for a published article (dry run unless --confirm; costly)")
|
|
535
535
|
.option(
|
|
536
536
|
"--platforms <a,b>",
|
|
537
537
|
"Subset: linkedin,twitter,pinterest,instagram,facebook,threads,youtube,tiktok"
|
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.2" });
|
|
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
|
);
|
|
@@ -57,7 +57,7 @@ export async function startMcpServer() {
|
|
|
57
57
|
|
|
58
58
|
server.tool(
|
|
59
59
|
"get_visibility_score",
|
|
60
|
-
"Composite visibility score for the workspace
|
|
60
|
+
"Composite AI visibility score for the workspace, blending AI citation rate across the tracked models with Google and Bing rank share. Returns the composite and per-pillar subscores (the AI pillar includes a per-model breakdown).",
|
|
61
61
|
{},
|
|
62
62
|
run(() => api.visibilityScore())
|
|
63
63
|
);
|
|
@@ -339,7 +339,7 @@ export async function startMcpServer() {
|
|
|
339
339
|
|
|
340
340
|
server.tool(
|
|
341
341
|
"find_outreach_contact",
|
|
342
|
-
"Find an outreach email for one prospect
|
|
342
|
+
"Find an outreach email for one prospect site. Returns the stored contact or found:false. Capped at 5/min.",
|
|
343
343
|
{ backlinkId: z.string().describe("Prospect id from list_outreach_prospects") },
|
|
344
344
|
run(({ backlinkId }) => api.outreachFindContact(backlinkId))
|
|
345
345
|
);
|
|
@@ -353,7 +353,7 @@ export async function startMcpServer() {
|
|
|
353
353
|
|
|
354
354
|
server.tool(
|
|
355
355
|
"queue_outreach_email",
|
|
356
|
-
"Queue an outreach email to a prospect. It sends from the workspace's own connected mailbox, paced
|
|
356
|
+
"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
357
|
{
|
|
358
358
|
backlinkId: z.string().describe("Prospect id from list_outreach_prospects"),
|
|
359
359
|
subject: z.string().optional().describe("Override the drafted subject"),
|
|
@@ -379,7 +379,7 @@ export async function startMcpServer() {
|
|
|
379
379
|
|
|
380
380
|
server.tool(
|
|
381
381
|
"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.
|
|
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. Costly; capped at 5/min.",
|
|
383
383
|
{
|
|
384
384
|
topics: z.array(z.string()).optional().describe("Brand topics to focus on; omit for auto"),
|
|
385
385
|
contentTypes: z.array(z.string()).optional(),
|
|
@@ -413,7 +413,7 @@ export async function startMcpServer() {
|
|
|
413
413
|
|
|
414
414
|
server.tool(
|
|
415
415
|
"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
|
|
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 is costly.",
|
|
417
417
|
{
|
|
418
418
|
contentId: z.string().describe("The planned content page id"),
|
|
419
419
|
confirm: z.boolean().optional().describe("Set true to actually start generation (default: dry run)"),
|
|
@@ -529,7 +529,7 @@ export async function startMcpServer() {
|
|
|
529
529
|
|
|
530
530
|
server.tool(
|
|
531
531
|
"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 (
|
|
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 (costly).",
|
|
533
533
|
{
|
|
534
534
|
contentId: z.string(),
|
|
535
535
|
platforms: z
|