@tensorfeed/mcp-server 1.30.0 → 1.32.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/CHANGELOG.md +28 -0
- package/dist/index.js +6 -36
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
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.32.0 - 2026-05-14 (Off-thesis tool cull)
|
|
6
|
+
|
|
7
|
+
### Removed
|
|
8
|
+
- `mcp_registry_series` tool: dropped. MCP registry is open data; a 30/90-day TF capture didn't clear the "saves >$0.02 per call" bar that Gemini 3's external analysis articulated and that TF has been operating under for premium endpoints. Agents that need the time-series can scrape the registry's open API directly.
|
|
9
|
+
|
|
10
|
+
### Background
|
|
11
|
+
Premium endpoint audit (2026-05-14) through the lens "does this clearly save the agent more than 2¢ in tokens/latency/decision-time?" identified six TF Worker endpoints off-thesis: macro digest, FDA aggregate, EIA series, NASA POWER daily/hourly, and MCP registry series. All six pulled from the public manifest, OpenAPI, llms.txt, /developers, and /api/meta in the same commit. Only the MCP registry series has an MCP-server tool wrapper, so it's the only tool-side change in this release.
|
|
12
|
+
|
|
13
|
+
## 1.31.0 - 2026-05-14 (Commit B repricing)
|
|
14
|
+
|
|
15
|
+
### Changed (pricing)
|
|
16
|
+
Six tools mapping to strict-premium TF Worker endpoints are repriced from Tier 1 ($0.02) into higher tiers reflecting the curated-derived-metrics value they provide. Tool descriptions updated to advertise the new prices:
|
|
17
|
+
|
|
18
|
+
- `pricing_series`: 1 credit ($0.02) -> 2 credits ($0.04)
|
|
19
|
+
- `benchmark_series`: 1 credit ($0.02) -> 2 credits ($0.04)
|
|
20
|
+
- `status_uptime`: 1 credit ($0.02) -> 2 credits ($0.04)
|
|
21
|
+
- `status_leaderboard`: 1 credit ($0.02) -> 3 credits ($0.06)
|
|
22
|
+
- `provider_deepdive`: 1 credit ($0.02) -> 3 credits ($0.06)
|
|
23
|
+
- `probe_series_premium`: 1 credit ($0.02) -> 3 credits ($0.06)
|
|
24
|
+
|
|
25
|
+
Tier 2 ($0.04) tools are single-entity full-window historical lookups. Tier 3 ($0.06) tools are heavy multi-source aggregations and TF-unique measurements.
|
|
26
|
+
|
|
27
|
+
Rationale: per the 70/30 premium-lock framework, strict-premium endpoints carry TF's actual moat. The Tier 1 ($0.02) baseline price made sense during the demand-discovery temp-unlock; now that these endpoints are gated as strict-premium (v1.30.0) and the gate is observable, repricing into Tier 2/3 sets prices closer to the curated-derived-metrics market (Glassnode / Kaito comparables). Per-call USD cost is now legible alongside credit count in every affected tool description.
|
|
28
|
+
|
|
29
|
+
Worker changes accompanying this release: `worker/src/index.ts` updates the `requirePayment(..., tier)` and `logPremiumUsage(..., credits)` calls on the 8 strict-premium routes. Two of those routes are not exposed as MCP tools (premium_funding_exposure, premium_packages_momentum) but receive the same tier bump server-side.
|
|
30
|
+
|
|
31
|
+
No behavior change to free-trial-eligible tools (premium_routing stays at Tier 2 as before, all single-query lookups stay where they were). No change to the strict-premium gate itself (v1.30.0). No change to the on-chain x402 facilitator or credit-purchase minimums.
|
|
32
|
+
|
|
5
33
|
## 1.30.0 - 2026-05-14
|
|
6
34
|
|
|
7
35
|
### Changed
|
package/dist/index.js
CHANGED
|
@@ -628,7 +628,7 @@ registerTool('status_leaderboard_free', 'Cross-provider uptime leaderboard, rank
|
|
|
628
628
|
};
|
|
629
629
|
});
|
|
630
630
|
// ── Tool: pricing_series (1 credit) ─────────────────────────────────
|
|
631
|
-
registerTool('pricing_series', 'Daily price points for one AI model with min/max/delta summary. Default range = last 30 days, max 90 days. Costs
|
|
631
|
+
registerTool('pricing_series', 'Daily price points for one AI model with min/max/delta summary. Default range = last 30 days, max 90 days. Costs 2 credits ($0.04). Strict premium, no free trial; the 7-day-capped sibling pricing_series_free is the discovery option.', {
|
|
632
632
|
model: z.string().describe('Model id or display name (e.g. "Claude Opus 4.7" or "claude-opus-4-7")'),
|
|
633
633
|
from: z.string().optional().describe('Start date YYYY-MM-DD UTC (default: 30 days ago)'),
|
|
634
634
|
to: z.string().optional().describe('End date YYYY-MM-DD UTC (default: today)'),
|
|
@@ -653,7 +653,7 @@ registerTool('pricing_series', 'Daily price points for one AI model with min/max
|
|
|
653
653
|
};
|
|
654
654
|
});
|
|
655
655
|
// ── Tool: benchmark_series (1 credit) ───────────────────────────────
|
|
656
|
-
registerTool('benchmark_series', 'Score evolution for a single benchmark on one AI model. Costs
|
|
656
|
+
registerTool('benchmark_series', 'Score evolution for a single benchmark on one AI model. Costs 2 credits ($0.04). Strict premium, no free trial; the 7-day-capped sibling benchmark_series_free is the discovery option. Benchmark keys: swe_bench, mmlu_pro, gpqa_diamond, math, human_eval.', {
|
|
657
657
|
model: z.string().describe('Model id or display name'),
|
|
658
658
|
benchmark: z.string().describe('Benchmark key (e.g. swe_bench, mmlu_pro, gpqa_diamond, math, human_eval)'),
|
|
659
659
|
from: z.string().optional().describe('Start date YYYY-MM-DD UTC (default: 30 days ago)'),
|
|
@@ -679,7 +679,7 @@ registerTool('benchmark_series', 'Score evolution for a single benchmark on one
|
|
|
679
679
|
};
|
|
680
680
|
});
|
|
681
681
|
// ── Tool: status_uptime (1 credit) ──────────────────────────────────
|
|
682
|
-
registerTool('status_uptime', 'Daily uptime rollup for one provider with operational/degraded/down day counts and uptime % (degraded counts as half-credit). Costs
|
|
682
|
+
registerTool('status_uptime', 'Daily uptime rollup for one provider with operational/degraded/down day counts and uptime % (degraded counts as half-credit). Costs 2 credits ($0.04). Strict premium, no free trial; the 7-day-capped sibling status_uptime_free is the discovery option.', {
|
|
683
683
|
provider: z.string().describe('Provider name (e.g. anthropic, openai, google)'),
|
|
684
684
|
from: z.string().optional().describe('Start date YYYY-MM-DD UTC (default: 30 days ago)'),
|
|
685
685
|
to: z.string().optional().describe('End date YYYY-MM-DD UTC (default: today)'),
|
|
@@ -706,7 +706,7 @@ registerTool('status_uptime', 'Daily uptime rollup for one provider with operati
|
|
|
706
706
|
};
|
|
707
707
|
});
|
|
708
708
|
// ── Tool: status_leaderboard (1 credit) ─────────────────────────────
|
|
709
|
-
registerTool('status_leaderboard', 'Cross-provider uptime leaderboard for a custom date range up to 90 days. Same minute-resolution counter source as status_leaderboard_free, but adds incident_count and mttr_minutes (mean time to recover) per provider. Sorted by uptime % DESC. Costs
|
|
709
|
+
registerTool('status_leaderboard', 'Cross-provider uptime leaderboard for a custom date range up to 90 days. Same minute-resolution counter source as status_leaderboard_free, but adds incident_count and mttr_minutes (mean time to recover) per provider. Sorted by uptime % DESC. Costs 3 credits ($0.06). Strict premium, no free trial; the 7-day-capped sibling status_leaderboard_free is the discovery option.', {
|
|
710
710
|
from: z.string().optional().describe('Start date YYYY-MM-DD UTC (default: 30 days ago)'),
|
|
711
711
|
to: z.string().optional().describe('End date YYYY-MM-DD UTC (default: today)'),
|
|
712
712
|
}, async ({ from, to }) => {
|
|
@@ -828,7 +828,7 @@ registerTool('compare_models', 'Side-by-side comparison of 2-5 AI models. Return
|
|
|
828
828
|
};
|
|
829
829
|
});
|
|
830
830
|
// ── Tool: provider_deepdive (1 credit) ──────────────────────────────
|
|
831
|
-
registerTool('provider_deepdive', 'Everything about an AI provider in one call: live status, all models with pricing + tier + benchmark scores joined in, recent news mentions, and agent traffic. Costs
|
|
831
|
+
registerTool('provider_deepdive', 'Everything about an AI provider in one call: live status, all models with pricing + tier + benchmark scores joined in, recent news mentions, and agent traffic. Costs 3 credits ($0.06). Strict premium, no free trial. Aggregation IS the value; doing this from free endpoints would take 4 round-trips.', {
|
|
832
832
|
provider: z.string().describe('Provider id or display name (case-insensitive). Examples: anthropic, openai, google, mistral, cohere'),
|
|
833
833
|
}, async ({ provider }) => {
|
|
834
834
|
const data = (await fetchJSON(`/premium/providers/${encodeURIComponent(provider)}`, { auth: true }));
|
|
@@ -1078,7 +1078,7 @@ registerTool('probe_latest', 'Last 24 hours of measured LLM endpoint latency and
|
|
|
1078
1078
|
};
|
|
1079
1079
|
});
|
|
1080
1080
|
// ── Tool: probe_series (1 credit) ───────────────────────────────────
|
|
1081
|
-
registerTool('probe_series', 'Daily SLA series for one LLM provider, measured by TensorFeed. Returns per-day count, success rate, ttfb p50/p95/p99, total p50/p95/p99, and incident-hour count across the requested window. Provider status pages are politically managed; this is the measured truth. Pairs naturally with premium_routing for picking a model whose SLA you can verify. Costs
|
|
1081
|
+
registerTool('probe_series', 'Daily SLA series for one LLM provider, measured by TensorFeed. Returns per-day count, success rate, ttfb p50/p95/p99, total p50/p95/p99, and incident-hour count across the requested window. Provider status pages are politically managed; this is the measured truth. Pairs naturally with premium_routing for picking a model whose SLA you can verify. Costs 3 credits ($0.06). Strict premium, no free trial.', {
|
|
1082
1082
|
provider: z.enum(['anthropic', 'openai', 'google', 'mistral', 'cohere']).describe('LLM provider key'),
|
|
1083
1083
|
from: z.string().optional().describe('Inclusive start YYYY-MM-DD (default: 30 days before to)'),
|
|
1084
1084
|
to: z.string().optional().describe('Inclusive end YYYY-MM-DD (default: today UTC)'),
|
|
@@ -1139,36 +1139,6 @@ registerTool('mcp_registry_snapshot', 'Today\'s summary of the official Model Co
|
|
|
1139
1139
|
],
|
|
1140
1140
|
};
|
|
1141
1141
|
});
|
|
1142
|
-
// ── Tool: mcp_registry_series (1 credit) ────────────────────────────
|
|
1143
|
-
registerTool('mcp_registry_series', 'Multi-day series of MCP server registry growth and churn. Returns per-day total servers, active count, and daily added/removed counts across the requested window. The registry itself is open data, but a 30/90-day trend requires daily capture started weeks ago, which TensorFeed has been running. Costs 1 credit ($0.02).', {
|
|
1144
|
-
from: z.string().optional().describe('Inclusive start date YYYY-MM-DD (default: 30 days before to)'),
|
|
1145
|
-
to: z.string().optional().describe('Inclusive end date YYYY-MM-DD (default: today UTC)'),
|
|
1146
|
-
}, async ({ from, to }) => {
|
|
1147
|
-
const params = new URLSearchParams();
|
|
1148
|
-
if (from)
|
|
1149
|
-
params.set('from', from);
|
|
1150
|
-
if (to)
|
|
1151
|
-
params.set('to', to);
|
|
1152
|
-
const data = (await fetchJSON(`/premium/mcp/registry/series?${params}`, { auth: true }));
|
|
1153
|
-
const lines = data.points
|
|
1154
|
-
.map(p => p.has_data
|
|
1155
|
-
? ` ${p.date} total=${p.total_servers} +${p.added ?? 0}/-${p.removed ?? 0}`
|
|
1156
|
-
: ` ${p.date} (no snapshot captured)`)
|
|
1157
|
-
.join('\n');
|
|
1158
|
-
const w = data.delta_in_window;
|
|
1159
|
-
const summary = w.start_total !== null && w.end_total !== null
|
|
1160
|
-
? `Window ${data.from} -> ${data.to}: ${w.start_total} -> ${w.end_total} (net ${w.net >= 0 ? '+' : ''}${w.net})`
|
|
1161
|
-
: `Window ${data.from} -> ${data.to}: insufficient data`;
|
|
1162
|
-
const notes = data.notes.length ? '\nNotes: ' + data.notes.join('; ') : '';
|
|
1163
|
-
return {
|
|
1164
|
-
content: [
|
|
1165
|
-
{
|
|
1166
|
-
type: 'text',
|
|
1167
|
-
text: `${summary}\n\n${lines}${notes}\n\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
1168
|
-
},
|
|
1169
|
-
],
|
|
1170
|
-
};
|
|
1171
|
-
});
|
|
1172
1142
|
// ── Tool: get_ai_papers_trending (free) ─────────────────────────────
|
|
1173
1143
|
registerTool('get_ai_papers_trending', 'Daily curated AI/ML research papers ranked by citation count. Sourced from Semantic Scholar across five fan-out queries (large language model, transformer, RLHF, AI agents, diffusion model), deduped by paperId, top 30 returned. Each paper carries title, abstract, authors, year, venue, citation count, arxivId, doi, and fields of study. Refreshed daily at 11:00 UTC. Use this when an agent wants the citation-ranked top of the AI research literature. Free, no auth.', {}, async () => {
|
|
1174
1144
|
const data = (await fetchJSON('/papers/ai-trending'));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.32.0",
|
|
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",
|