@tensorfeed/mcp-server 1.36.2 → 1.36.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/CHANGELOG.md +22 -0
- package/dist/index.js +118 -0
- package/package.json +1 -1
- package/server.json +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the [TensorFeed.ai MCP server](https://github.com/RipperMercs/tensorfeed-mcp). Free tools work without configuration; premium tools require a bearer token via the `TENSORFEED_TOKEN` env var. Buy credits at [tensorfeed.ai/developers/agent-payments](https://tensorfeed.ai/developers/agent-payments).
|
|
4
4
|
|
|
5
|
+
## 1.36.3 - 2026-05-31
|
|
6
|
+
|
|
7
|
+
Adds the Route Verdict wedge: TensorFeed's signed routing decision is now a
|
|
8
|
+
tool you can try free, then upgrade. Brings the catalog to 61 tools (37 free,
|
|
9
|
+
24 premium).
|
|
10
|
+
|
|
11
|
+
Free tool:
|
|
12
|
+
- `route_verdict_preview`: TensorFeed's signed routing decision that fuses
|
|
13
|
+
live pricing, contamination-discounted benchmarks, real production usage,
|
|
14
|
+
measured p95 latency, incident state, and deprecation flags into the single
|
|
15
|
+
best model for a task or a named model, with the reasoning. No key, 10 calls
|
|
16
|
+
per day per IP.
|
|
17
|
+
|
|
18
|
+
Premium tool:
|
|
19
|
+
- `route_verdict` (1 credit): the same decision plus ranked runners-up,
|
|
20
|
+
constraint filters (max p95 latency, budget, min quality, operational-only,
|
|
21
|
+
exclude-deprecated), and an AFTA-signed receipt over the exact inputs so you
|
|
22
|
+
can prove why you routed. Strict premium, no free trial.
|
|
23
|
+
|
|
24
|
+
The older `premium_routing` (a ranked list with a score breakdown) is
|
|
25
|
+
unchanged and remains available.
|
|
26
|
+
|
|
5
27
|
## 1.36.2 - 2026-05-31
|
|
6
28
|
|
|
7
29
|
Pricing-copy and catalog-accuracy corrections. No change to the free/paid
|
package/dist/index.js
CHANGED
|
@@ -584,6 +584,124 @@ registerTool('premium_routing', 'Get a ranked list of recommended AI models for
|
|
|
584
584
|
: '';
|
|
585
585
|
return { content: [{ type: 'text', text: `Routing for "${data.task}":\n\n${list}${billing}` }] };
|
|
586
586
|
});
|
|
587
|
+
registerTool('route_verdict_preview', "Free. TensorFeed's signed routing decision that fuses live pricing, contamination-discounted benchmarks, real production usage, MEASURED p95 latency, incident state, and deprecation flags into the single best model for a task or a named model, with the reasoning. For ranked runners-up, constraint filters, and an AFTA-signed receipt you can audit, use route_verdict. 10 calls per day per IP.", {
|
|
588
|
+
task: z.enum(['code', 'reasoning', 'creative', 'general']).optional().describe('Task type to route for (code, reasoning, creative, general). Provide task or model.'),
|
|
589
|
+
model: z.string().optional().describe('Model id or display name to narrow the verdict to one model (e.g. "Claude Opus 4.7" or "claude-opus-4-7"). Provide task or model.'),
|
|
590
|
+
}, async ({ task, model }) => {
|
|
591
|
+
if (!task && !model) {
|
|
592
|
+
return {
|
|
593
|
+
content: [
|
|
594
|
+
{
|
|
595
|
+
type: 'text',
|
|
596
|
+
text: 'Provide a task (code, reasoning, creative, general) or a model id/name to get a routing verdict.',
|
|
597
|
+
},
|
|
598
|
+
],
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
const params = new URLSearchParams();
|
|
602
|
+
if (task)
|
|
603
|
+
params.set('task', task);
|
|
604
|
+
if (model)
|
|
605
|
+
params.set('model', model);
|
|
606
|
+
const data = (await fetchJSON(`/preview/route-verdict?${params}`));
|
|
607
|
+
if (!data.verdict) {
|
|
608
|
+
return {
|
|
609
|
+
content: [{ type: 'text', text: `No routing verdict available for that query.\n${data.claim ?? ''}` }],
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
const v = data.verdict;
|
|
613
|
+
const t = data.trust;
|
|
614
|
+
const fresh = [
|
|
615
|
+
data.data_freshness.pricing ? `pricing ${data.data_freshness.pricing}` : null,
|
|
616
|
+
data.data_freshness.probe ? `latency ${data.data_freshness.probe}` : null,
|
|
617
|
+
data.data_freshness.status ? `status ${data.data_freshness.status}` : null,
|
|
618
|
+
]
|
|
619
|
+
.filter(Boolean)
|
|
620
|
+
.join(', ');
|
|
621
|
+
const trustLine = `Trust: usage ${t.usage_corroborated ? 'corroborated' : 'uncorroborated'}, benchmark contamination ${t.benchmark_contamination}, operational ${t.operational_layer}, latency ${t.latency_layer}`;
|
|
622
|
+
const rl = data.rate_limit ? `\nPreview: ${data.rate_limit.remaining} of ${data.rate_limit.limit} calls left today (${data.rate_limit.scope}).` : '';
|
|
623
|
+
return {
|
|
624
|
+
content: [
|
|
625
|
+
{
|
|
626
|
+
type: 'text',
|
|
627
|
+
text: `Route Verdict: ${v.model.name} (${v.model.provider})\n` +
|
|
628
|
+
`Why: ${v.why}\n` +
|
|
629
|
+
`Blended price: $${v.pricing.blended}/1M tokens (in $${v.pricing.input}, out $${v.pricing.output})\n` +
|
|
630
|
+
`${trustLine}${fresh ? `\nData freshness: ${fresh}` : ''}\n` +
|
|
631
|
+
`Upgrade: route_verdict (1 credit) adds ranked runners-up, constraint filters, and an AFTA-signed receipt you can audit.${rl}`,
|
|
632
|
+
},
|
|
633
|
+
],
|
|
634
|
+
};
|
|
635
|
+
});
|
|
636
|
+
// ── Tool: route_verdict (1 credit) ──────────────────────────────────
|
|
637
|
+
// The signed routing decision. Single best model plus ranked runners-up
|
|
638
|
+
// for a task or named model, with constraint filters and an AFTA-signed
|
|
639
|
+
// receipt over the exact inputs. Strict premium, no free trial. The free
|
|
640
|
+
// route_verdict_preview is the no-auth taste of the same engine.
|
|
641
|
+
registerTool('route_verdict', "Costs 1 credit ($0.02). The signed routing decision: TensorFeed's single best model plus ranked runners-up for your task or a named model, fused from live pricing, contamination-discounted benchmarks, real production usage, MEASURED p95 latency, incident state, and deprecation flags, with an AFTA-signed receipt over the exact inputs so you can prove why you routed. Versus the free route_verdict_preview it adds ranked runners-up, constraint filters (max p95 latency, budget, min quality, operational-only, exclude-deprecated), the signed receipt, and no rate limit. Get credits at tensorfeed.ai/developers/agent-payments. Strict premium, no free trial.", {
|
|
642
|
+
task: z.enum(['code', 'reasoning', 'creative', 'general']).optional().describe('Task type to route for (code, reasoning, creative, general). Provide task or model.'),
|
|
643
|
+
model: z.string().optional().describe('Model id or display name to narrow the verdict to one model. Provide task or model.'),
|
|
644
|
+
max_latency_p95_ms: z.number().optional().describe('Drop candidates whose measured p95 latency exceeds this value (ms).'),
|
|
645
|
+
budget: z.number().optional().describe('Max blended USD per 1M tokens'),
|
|
646
|
+
min_quality: z.number().min(0).max(1).optional().describe('Minimum trust-discounted quality score in [0, 1]'),
|
|
647
|
+
require_operational: z.boolean().optional().describe('Default true. Set false to keep candidates known down or in failover.'),
|
|
648
|
+
exclude_deprecated: z.boolean().optional().describe('Default true. Set false to keep deprecated or sunsetted models.'),
|
|
649
|
+
}, async ({ task, model, max_latency_p95_ms, budget, min_quality, require_operational, exclude_deprecated }) => {
|
|
650
|
+
if (!task && !model) {
|
|
651
|
+
return {
|
|
652
|
+
content: [
|
|
653
|
+
{
|
|
654
|
+
type: 'text',
|
|
655
|
+
text: 'Provide a task (code, reasoning, creative, general) or a model id/name to get a signed routing verdict.',
|
|
656
|
+
},
|
|
657
|
+
],
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
const params = new URLSearchParams();
|
|
661
|
+
if (task)
|
|
662
|
+
params.set('task', task);
|
|
663
|
+
if (model)
|
|
664
|
+
params.set('model', model);
|
|
665
|
+
if (typeof max_latency_p95_ms === 'number')
|
|
666
|
+
params.set('max_latency_p95_ms', String(max_latency_p95_ms));
|
|
667
|
+
if (typeof budget === 'number')
|
|
668
|
+
params.set('budget', String(budget));
|
|
669
|
+
if (typeof min_quality === 'number')
|
|
670
|
+
params.set('min_quality', String(min_quality));
|
|
671
|
+
if (typeof require_operational === 'boolean')
|
|
672
|
+
params.set('require_operational', String(require_operational));
|
|
673
|
+
if (typeof exclude_deprecated === 'boolean')
|
|
674
|
+
params.set('exclude_deprecated', String(exclude_deprecated));
|
|
675
|
+
const data = (await fetchJSON(`/premium/route-verdict?${params}`, { auth: true }));
|
|
676
|
+
if (!data.verdict) {
|
|
677
|
+
return {
|
|
678
|
+
content: [{ type: 'text', text: `No routing verdict matched your filters.\n${data.claim ?? ''}` }],
|
|
679
|
+
};
|
|
680
|
+
}
|
|
681
|
+
const v = data.verdict;
|
|
682
|
+
const t = data.trust;
|
|
683
|
+
const f = data.filters_applied;
|
|
684
|
+
const runners = (data.runners_up ?? [])
|
|
685
|
+
.map((r) => ` #${r.rank} ${r.model.name} (${r.model.provider}) blended $${r.pricing.blended}/1M\n ${r.why}`)
|
|
686
|
+
.join('\n');
|
|
687
|
+
const trustLine = `Trust: usage ${t.usage_corroborated ? 'corroborated' : 'uncorroborated'}, benchmark contamination ${t.benchmark_contamination}, operational ${t.operational_layer}, latency ${t.latency_layer}`;
|
|
688
|
+
const filterLine = `Filters: max p95 ${f.max_latency_p95_ms ?? 'none'}ms, require_operational ${f.require_operational}, exclude_deprecated ${f.exclude_deprecated}`;
|
|
689
|
+
const billing = data.billing
|
|
690
|
+
? `\n\nCharged ${data.billing.credits_charged} credit. Remaining: ${data.billing.credits_remaining}.`
|
|
691
|
+
: '';
|
|
692
|
+
return {
|
|
693
|
+
content: [
|
|
694
|
+
{
|
|
695
|
+
type: 'text',
|
|
696
|
+
text: `Route Verdict: ${v.model.name} (${v.model.provider}) score ${v.composite_score}\n` +
|
|
697
|
+
`Why: ${v.why}\n` +
|
|
698
|
+
`Blended price: $${v.pricing.blended}/1M tokens (in $${v.pricing.input}, out $${v.pricing.output})\n\n` +
|
|
699
|
+
`Runners-up:\n${runners || ' (none)'}\n\n` +
|
|
700
|
+
`${trustLine}\n${filterLine}\n\nClaim: ${data.claim}${billing}`,
|
|
701
|
+
},
|
|
702
|
+
],
|
|
703
|
+
};
|
|
704
|
+
});
|
|
587
705
|
// ── Tool: pricing_series_free (free, 7-day cap) ─────────────────────
|
|
588
706
|
registerTool('pricing_series_free', 'Daily price points for one AI model over the last 1 to 7 days, free. For windows up to 90 days use pricing_series (1 credit).', {
|
|
589
707
|
model: z.string().describe('Model id or display name (e.g. "Claude Opus 4.7" or "claude-opus-4-7")'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.36.
|
|
3
|
+
"version": "1.36.3",
|
|
4
4
|
"mcpName": "ai.tensorfeed/mcp-server",
|
|
5
5
|
"description": "MCP server for TensorFeed.ai - AI news, status, model data, and premium endpoints (routing, cost projection, forecast, history series, news search, webhook watches with digest tier, enriched directory) for AI agents",
|
|
6
6
|
"main": "dist/index.js",
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "ai.tensorfeed/mcp-server",
|
|
4
4
|
"title": "TensorFeed",
|
|
5
5
|
"description": "AI news, model pricing, service status, and machine-payable premium tools. AFTA-certified.",
|
|
6
|
-
"version": "1.36.
|
|
6
|
+
"version": "1.36.3",
|
|
7
7
|
"websiteUrl": "https://tensorfeed.ai/developers/agent-payments",
|
|
8
8
|
"repository": {
|
|
9
9
|
"url": "https://github.com/RipperMercs/tensorfeed-mcp",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"registryType": "npm",
|
|
21
21
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
22
22
|
"identifier": "@tensorfeed/mcp-server",
|
|
23
|
-
"version": "1.36.
|
|
23
|
+
"version": "1.36.3",
|
|
24
24
|
"runtimeHint": "npx",
|
|
25
25
|
"transport": {
|
|
26
26
|
"type": "stdio"
|
|
@@ -78,7 +78,8 @@
|
|
|
78
78
|
"get_x402_summary",
|
|
79
79
|
"get_x402_publishers",
|
|
80
80
|
"get_x402_leaderboard",
|
|
81
|
-
"get_x402_recent"
|
|
81
|
+
"get_x402_recent",
|
|
82
|
+
"route_verdict_preview"
|
|
82
83
|
],
|
|
83
84
|
"premiumTools": [
|
|
84
85
|
"premium_routing",
|
|
@@ -103,7 +104,8 @@
|
|
|
103
104
|
"get_account_usage",
|
|
104
105
|
"premium_ai_company",
|
|
105
106
|
"premium_x402_publisher_receipts",
|
|
106
|
-
"premium_x402_series"
|
|
107
|
+
"premium_x402_series",
|
|
108
|
+
"route_verdict"
|
|
107
109
|
]
|
|
108
110
|
}
|
|
109
111
|
}
|