@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 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 1 credit ($0.02). Strict premium, no free trial; the 7-day-capped sibling pricing_series_free is the discovery option.', {
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 1 credit ($0.02). 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.', {
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 1 credit ($0.02). Strict premium, no free trial; the 7-day-capped sibling status_uptime_free is the discovery option.', {
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 1 credit ($0.02). Strict premium, no free trial; the 7-day-capped sibling status_leaderboard_free is the discovery option.', {
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 1 credit ($0.02). Strict premium, no free trial. Aggregation IS the value; doing this from free endpoints would take 4 round-trips.', {
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 1 credit ($0.02). Strict premium, no free trial.', {
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.30.0",
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",