@cite42/mcp 0.4.0 → 0.5.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/README.md +3 -3
- package/dist/stdio.cjs +7 -3
- package/dist/stdio.mjs +7 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Once connected, Claude Code, Claude Desktop, Codex CLI, or Cursor can:
|
|
|
6
6
|
|
|
7
7
|
- **Query AI models** (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews) and see each model's answer and the sources it cites
|
|
8
8
|
- **Track brand visibility** in AI answers: rankings, head-to-head comparisons, and sentiment
|
|
9
|
-
- **Schedule weekly or monthly trackers**: one measurement — rankings, comparisons, citations, or sentiment — over a list of prompts, with email
|
|
9
|
+
- **Schedule weekly or monthly trackers**: one measurement — rankings, comparisons, citations, or sentiment — over a list of prompts, with setup confirmation and a useful email after every run, then ask your agent for stored history
|
|
10
10
|
- **Pull SEO data**: keyword search volume, CPC, competition, and Google Trends
|
|
11
11
|
- **Mine Reddit and YouTube** for audience questions, pain points, and rising content
|
|
12
12
|
- **Run full research workflows**: content gaps, topic demand, AI prompt maps, competitor analysis, and content briefs in a single call
|
|
@@ -164,10 +164,10 @@ Cite42 exposes 26 MCP tools: 3 free account tools, 9 data tools, 6 research work
|
|
|
164
164
|
|
|
165
165
|
- `cite42_tracker_create`: create a draft weekly or monthly tracker — one measurement applied to a list of prompts. No prompt list yet? Run `cite42_map_ai_prompts` first. Creating a draft is free and does not schedule calls.
|
|
166
166
|
- `cite42_tracker_update`: replace the whole tracker definition — name, cadence, measurement, prompts and configuration. A tracker read returns the same shape, so read it, change what you need, and send it back. Updating is free.
|
|
167
|
-
- `cite42_tracker_activate`: activate or resume recurring runs. You must pass the exact `estimatedCostMicroPerRun` from the latest tracker record as `maxCostMicroPerRun`; activation authorizes billed scheduled runs until the tracker is paused. The response carries the balance, the cost per run and `runsDryAt` — the date the balance stops covering your active trackers — and activation is refused when the balance cannot cover even the next run.
|
|
167
|
+
- `cite42_tracker_activate`: activate or resume recurring runs. You must pass the exact `estimatedCostMicroPerRun` from the latest tracker record as `maxCostMicroPerRun`; activation authorizes billed scheduled runs until the tracker is paused. The response carries the balance, the cost per run and `runsDryAt` — the date the balance stops covering your active trackers — and activation is refused when the balance cannot cover even the next run. When tracker emails are on, activation also sends a setup summary.
|
|
168
168
|
- `cite42_tracker_pause`: stop future scheduled runs while preserving configuration and history. Pausing is free.
|
|
169
169
|
- `cite42_tracker_delete`: permanently delete a draft or paused tracker and its run history. Active trackers must be paused first, and deletion is rejected while a run is queued or running. Financial usage records remain available.
|
|
170
|
-
- `cite42_tracker_run`: queue one manual run of every saved prompt. Each prompt is billed as its own tool call at the normal rate.
|
|
170
|
+
- `cite42_tracker_run`: queue one manual run of every saved prompt. Each prompt is billed as its own tool call at the normal rate, and completion sends the same current-results email as a scheduled run—even for a baseline or an unchanged result.
|
|
171
171
|
- `cite42_trackers`: list trackers, schedules, statuses, cost estimates, and last/next run times. Reading the list is free.
|
|
172
172
|
- `cite42_tracker_report`: read bounded stored run history with results, changes, status, sampled time, and costs (latest 8 by default, up to 20). Reading stored reports is free.
|
|
173
173
|
|
package/dist/stdio.cjs
CHANGED
|
@@ -152,6 +152,7 @@ var FULL_SWEEP_DESCRIPTION = "Query all five AI surfaces instead of the three de
|
|
|
152
152
|
var MCP_USAGE_GUIDANCE = "Covers AI-search, citation, SEO, keyword, trend, and market-research data. If a plan needs more than 20 endpoint calls or may use more than 500 Cite42 credits, estimate the credits and ask the user before continuing. When a result contains cite42Credits, that figure is Cite42 credits, not a model or host balance. Free (0 credits): cite42_credits for the remaining balance, cite42_pricing for exact per-tool prices and cost estimates, cite42_usage for recent calls.";
|
|
153
153
|
var MODEL_PRICING = "Pricing is per selected AI surface. Omitting models queries the three default surfaces (chatgpt, perplexity, gemini); fullSweep: true queries all five, adding claude and google_ai_overview for more credits. Use the models field when the user names a surface or asks to reduce credit use, and call cite42_pricing for exact current rates.";
|
|
154
154
|
var DATA_PRICING = "Data tools have flat per-call prices; call cite42_pricing for exact current rates.";
|
|
155
|
+
var KEYWORDS_PRICING = "Pricing: billed by outcome \u2014 cheapest when the seed has no search volume, more when it has metrics, most with ideas:true. Call cite42_pricing for exact current rates.";
|
|
155
156
|
var WORKFLOW_PRICING = "Pricing: workflow cost is calculated from the tools that run successfully and the selected model rates.";
|
|
156
157
|
function workflowDescription(description) {
|
|
157
158
|
return `${description} ${MCP_USAGE_GUIDANCE} ${MODEL_PRICING} ${DATA_PRICING} ${WORKFLOW_PRICING}`;
|
|
@@ -288,10 +289,13 @@ var aivSentiment = (0, import_tools.createTool)({
|
|
|
288
289
|
var aivKeywords = (0, import_tools.createTool)({
|
|
289
290
|
id: "cite42_keywords",
|
|
290
291
|
mcp: readOnly("Get SEO keyword data"),
|
|
291
|
-
description: `Classic keyword data for a seed term. Omit ideas when the user only needs that seed's monthly search volume, CPC, or competition. Set ideas:true only when the user asks for related, alternative, or long-tail suggestions from provider candidates.
|
|
292
|
+
description: `Classic keyword data for a seed term. Omit ideas when the user only needs that seed's monthly search volume, CPC, or competition. Set ideas:true only when the user asks for related, alternative, or long-tail suggestions from provider candidates. Not a multi-model AI-search query. The reply echoes requestedKeyword and carries status "exact" or "no_data"; when the seed has no search volume, any related term that does appears under alternatives \u2014 never treat an alternative's metrics as the requested keyword's. ${KEYWORDS_PRICING} ${MCP_USAGE_GUIDANCE}`,
|
|
292
293
|
inputSchema: import_zod.z.object({
|
|
293
294
|
seed: queryText("Seed keyword or concise topic to fetch search volume, CPC, and competition for."),
|
|
294
295
|
country: import_zod.z.string().trim().max(8).optional().describe('ISO-2 country code for localized metrics. Defaults to "us".'),
|
|
296
|
+
language: import_zod.z.string().trim().max(8).optional().describe(
|
|
297
|
+
`Optional ISO-2 language code. Defaults to the country's primary search language, so country "de" searches in German. Only multilingual markets accept an override: us (en, es), ca (en, fr), in (en, hi). Every other country has a single search language and rejects anything else.`
|
|
298
|
+
),
|
|
295
299
|
ideas: import_zod.z.boolean().optional().describe(
|
|
296
300
|
"Omit for volume, CPC, and competition on the seed only. Set true only for related, alternative, or long-tail keyword ideas."
|
|
297
301
|
)
|
|
@@ -495,7 +499,7 @@ var aivTrackerActivate = (0, import_tools.createTool)({
|
|
|
495
499
|
openWorldHint: true,
|
|
496
500
|
idempotentHint: true
|
|
497
501
|
}),
|
|
498
|
-
description: `Activate or resume recurring weekly or monthly tool calls. maxCostMicroPerRun must equal the tracker estimate being accepted; activation authorizes future billed calls until the tracker is paused. The response carries a billing block with the balance, the cost per run, and runsDryAt \u2014 the date the balance stops covering the account's active trackers \u2014 so relay it. Activation is refused when the balance cannot cover even the next run; tell the user to top up at cite42.dev/app/billing. ${TRACKER_BILLING_DESCRIPTION}`,
|
|
502
|
+
description: `Activate or resume recurring weekly or monthly tool calls. maxCostMicroPerRun must equal the tracker estimate being accepted; activation authorizes future billed calls until the tracker is paused. The response carries a billing block with the balance, the cost per run, and runsDryAt \u2014 the date the balance stops covering the account's active trackers \u2014 so relay it. When tracker emails are enabled, activation sends a setup summary and every completed run sends current results and suggested next steps, even when nothing changed. Activation is refused when the balance cannot cover even the next run; tell the user to top up at cite42.dev/app/billing. ${TRACKER_BILLING_DESCRIPTION}`,
|
|
499
503
|
inputSchema: import_zod.z.object({
|
|
500
504
|
trackerId: trackerIdInput,
|
|
501
505
|
maxCostMicroPerRun: import_zod.z.number().int().nonnegative().describe("Exact estimatedCostMicroPerRun returned by the latest tracker record.")
|
|
@@ -596,7 +600,7 @@ if (!resolveApiKey()) {
|
|
|
596
600
|
);
|
|
597
601
|
process.exit(1);
|
|
598
602
|
}
|
|
599
|
-
buildCite42Server("0.
|
|
603
|
+
buildCite42Server("0.5.0").startStdio().catch((error) => {
|
|
600
604
|
console.error("[@cite42/mcp] Fatal error:", error);
|
|
601
605
|
process.exit(1);
|
|
602
606
|
});
|
package/dist/stdio.mjs
CHANGED
|
@@ -151,6 +151,7 @@ var FULL_SWEEP_DESCRIPTION = "Query all five AI surfaces instead of the three de
|
|
|
151
151
|
var MCP_USAGE_GUIDANCE = "Covers AI-search, citation, SEO, keyword, trend, and market-research data. If a plan needs more than 20 endpoint calls or may use more than 500 Cite42 credits, estimate the credits and ask the user before continuing. When a result contains cite42Credits, that figure is Cite42 credits, not a model or host balance. Free (0 credits): cite42_credits for the remaining balance, cite42_pricing for exact per-tool prices and cost estimates, cite42_usage for recent calls.";
|
|
152
152
|
var MODEL_PRICING = "Pricing is per selected AI surface. Omitting models queries the three default surfaces (chatgpt, perplexity, gemini); fullSweep: true queries all five, adding claude and google_ai_overview for more credits. Use the models field when the user names a surface or asks to reduce credit use, and call cite42_pricing for exact current rates.";
|
|
153
153
|
var DATA_PRICING = "Data tools have flat per-call prices; call cite42_pricing for exact current rates.";
|
|
154
|
+
var KEYWORDS_PRICING = "Pricing: billed by outcome \u2014 cheapest when the seed has no search volume, more when it has metrics, most with ideas:true. Call cite42_pricing for exact current rates.";
|
|
154
155
|
var WORKFLOW_PRICING = "Pricing: workflow cost is calculated from the tools that run successfully and the selected model rates.";
|
|
155
156
|
function workflowDescription(description) {
|
|
156
157
|
return `${description} ${MCP_USAGE_GUIDANCE} ${MODEL_PRICING} ${DATA_PRICING} ${WORKFLOW_PRICING}`;
|
|
@@ -287,10 +288,13 @@ var aivSentiment = createTool({
|
|
|
287
288
|
var aivKeywords = createTool({
|
|
288
289
|
id: "cite42_keywords",
|
|
289
290
|
mcp: readOnly("Get SEO keyword data"),
|
|
290
|
-
description: `Classic keyword data for a seed term. Omit ideas when the user only needs that seed's monthly search volume, CPC, or competition. Set ideas:true only when the user asks for related, alternative, or long-tail suggestions from provider candidates.
|
|
291
|
+
description: `Classic keyword data for a seed term. Omit ideas when the user only needs that seed's monthly search volume, CPC, or competition. Set ideas:true only when the user asks for related, alternative, or long-tail suggestions from provider candidates. Not a multi-model AI-search query. The reply echoes requestedKeyword and carries status "exact" or "no_data"; when the seed has no search volume, any related term that does appears under alternatives \u2014 never treat an alternative's metrics as the requested keyword's. ${KEYWORDS_PRICING} ${MCP_USAGE_GUIDANCE}`,
|
|
291
292
|
inputSchema: z.object({
|
|
292
293
|
seed: queryText("Seed keyword or concise topic to fetch search volume, CPC, and competition for."),
|
|
293
294
|
country: z.string().trim().max(8).optional().describe('ISO-2 country code for localized metrics. Defaults to "us".'),
|
|
295
|
+
language: z.string().trim().max(8).optional().describe(
|
|
296
|
+
`Optional ISO-2 language code. Defaults to the country's primary search language, so country "de" searches in German. Only multilingual markets accept an override: us (en, es), ca (en, fr), in (en, hi). Every other country has a single search language and rejects anything else.`
|
|
297
|
+
),
|
|
294
298
|
ideas: z.boolean().optional().describe(
|
|
295
299
|
"Omit for volume, CPC, and competition on the seed only. Set true only for related, alternative, or long-tail keyword ideas."
|
|
296
300
|
)
|
|
@@ -494,7 +498,7 @@ var aivTrackerActivate = createTool({
|
|
|
494
498
|
openWorldHint: true,
|
|
495
499
|
idempotentHint: true
|
|
496
500
|
}),
|
|
497
|
-
description: `Activate or resume recurring weekly or monthly tool calls. maxCostMicroPerRun must equal the tracker estimate being accepted; activation authorizes future billed calls until the tracker is paused. The response carries a billing block with the balance, the cost per run, and runsDryAt \u2014 the date the balance stops covering the account's active trackers \u2014 so relay it. Activation is refused when the balance cannot cover even the next run; tell the user to top up at cite42.dev/app/billing. ${TRACKER_BILLING_DESCRIPTION}`,
|
|
501
|
+
description: `Activate or resume recurring weekly or monthly tool calls. maxCostMicroPerRun must equal the tracker estimate being accepted; activation authorizes future billed calls until the tracker is paused. The response carries a billing block with the balance, the cost per run, and runsDryAt \u2014 the date the balance stops covering the account's active trackers \u2014 so relay it. When tracker emails are enabled, activation sends a setup summary and every completed run sends current results and suggested next steps, even when nothing changed. Activation is refused when the balance cannot cover even the next run; tell the user to top up at cite42.dev/app/billing. ${TRACKER_BILLING_DESCRIPTION}`,
|
|
498
502
|
inputSchema: z.object({
|
|
499
503
|
trackerId: trackerIdInput,
|
|
500
504
|
maxCostMicroPerRun: z.number().int().nonnegative().describe("Exact estimatedCostMicroPerRun returned by the latest tracker record.")
|
|
@@ -595,7 +599,7 @@ if (!resolveApiKey()) {
|
|
|
595
599
|
);
|
|
596
600
|
process.exit(1);
|
|
597
601
|
}
|
|
598
|
-
buildCite42Server("0.
|
|
602
|
+
buildCite42Server("0.5.0").startStdio().catch((error) => {
|
|
599
603
|
console.error("[@cite42/mcp] Fatal error:", error);
|
|
600
604
|
process.exit(1);
|
|
601
605
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cite42/mcp",
|
|
3
3
|
"mcpName": "dev.cite42/mcp",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "Cite42 MCP server: query the models behind ChatGPT, Claude, Perplexity & Gemini, plus Google AI Overviews, for brand rankings, AI citations, SEO keyword data, and Reddit/YouTube trends, and schedule weekly or monthly trackers that watch a list of prompts over time. Works with Claude Code, Claude Desktop, Codex CLI, Cursor, and any MCP client.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|