@tensorfeed/mcp-server 1.29.0 → 1.30.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 +9 -0
- package/dist/index.js +17 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
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.30.0 - 2026-05-14
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Every paid tool description now advertises the USD price alongside the credit cost. "Costs 1 credit." -> "Costs 1 credit ($0.02).". Lets agents budget calls without needing to look up credit-to-USD conversion separately. No behavior change; pure description metadata.
|
|
9
|
+
|
|
10
|
+
### Changed (strict-premium tier)
|
|
11
|
+
- Six tools now flagged as "Strict premium, no free trial" in their descriptions: `pricing_series`, `benchmark_series`, `status_uptime`, `status_leaderboard`, `provider_deepdive`, `probe_series_premium`. These map to TF Worker paths in the strict-premium set (worker/src/strict-premium-endpoints.ts) which bypasses the per-IP 100-call/day free trial. Their free 7-day-capped siblings (`pricing_series_free`, `benchmark_series_free`, `status_uptime_free`, `status_leaderboard_free`) remain the discovery option. Agents that hit these without auth get a 402 immediately with a strict-premium-specific message, not the free-trial advert.
|
|
12
|
+
- Rationale: per the TF 70/30 premium-lock framework, full-window historical time-series and heavy aggregations are TF's moat and warrant strict gating during the demand-discovery phase. Pricing per call is unchanged at this version; repricing into a higher tier is a separate future decision.
|
|
13
|
+
|
|
5
14
|
## 1.29.0 - 2026-05-13
|
|
6
15
|
|
|
7
16
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -511,7 +511,7 @@ registerTool('get_account_usage', 'Show per-endpoint usage for the configured Te
|
|
|
511
511
|
};
|
|
512
512
|
});
|
|
513
513
|
// ── Tool: premium_routing (1 credit) ────────────────────────────────
|
|
514
|
-
registerTool('premium_routing', 'Get a ranked list of recommended AI models for a task with full score breakdown (quality, availability, cost, latency). Costs 1 credit.', {
|
|
514
|
+
registerTool('premium_routing', 'Get a ranked list of recommended AI models for a task with full score breakdown (quality, availability, cost, latency). Costs 1 credit ($0.02).', {
|
|
515
515
|
task: z.enum(['code', 'reasoning', 'creative', 'general']).optional().describe('Task type the model needs to be good at (default: general)'),
|
|
516
516
|
budget: z.number().optional().describe('Max blended USD per 1M tokens'),
|
|
517
517
|
min_quality: z.number().min(0).max(1).optional().describe('Minimum quality score in [0, 1]'),
|
|
@@ -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.', {
|
|
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.', {
|
|
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. 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 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.', {
|
|
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.', {
|
|
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.', {
|
|
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.', {
|
|
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.', {
|
|
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 }) => {
|
|
@@ -732,7 +732,7 @@ registerTool('status_leaderboard', 'Cross-provider uptime leaderboard for a cust
|
|
|
732
732
|
};
|
|
733
733
|
});
|
|
734
734
|
// ── Tool: premium_agents_directory (1 credit) ───────────────────────
|
|
735
|
-
registerTool('premium_agents_directory', 'Enriched AI agents catalog joined with live status, recent news, agent traffic, flagship pricing, and a 0-100 trending_score. Costs 1 credit.', {
|
|
735
|
+
registerTool('premium_agents_directory', 'Enriched AI agents catalog joined with live status, recent news, agent traffic, flagship pricing, and a 0-100 trending_score. Costs 1 credit ($0.02).', {
|
|
736
736
|
category: z.string().optional().describe('coding, research, general, creative, frameworks'),
|
|
737
737
|
status: z.enum(['operational', 'degraded', 'down', 'unknown']).optional(),
|
|
738
738
|
open_source: z.boolean().optional(),
|
|
@@ -765,7 +765,7 @@ registerTool('premium_agents_directory', 'Enriched AI agents catalog joined with
|
|
|
765
765
|
};
|
|
766
766
|
});
|
|
767
767
|
// ── Tool: whats_new (1 credit) ──────────────────────────────────────
|
|
768
|
-
registerTool('whats_new', 'Agent morning brief: pricing changes, new/removed models, status incidents, and top news from the last 1-7 days. The tool to call when your agent boots up. Costs 1 credit.', {
|
|
768
|
+
registerTool('whats_new', 'Agent morning brief: pricing changes, new/removed models, status incidents, and top news from the last 1-7 days. The tool to call when your agent boots up. Costs 1 credit ($0.02).', {
|
|
769
769
|
days: z.number().min(1).max(7).optional().describe('Window length in days (default 1)'),
|
|
770
770
|
news_limit: z.number().min(1).max(25).optional().describe('Max news headlines (default 10)'),
|
|
771
771
|
}, async ({ days, news_limit }) => {
|
|
@@ -801,7 +801,7 @@ registerTool('whats_new', 'Agent morning brief: pricing changes, new/removed mod
|
|
|
801
801
|
};
|
|
802
802
|
});
|
|
803
803
|
// ── Tool: compare_models (1 credit) ─────────────────────────────────
|
|
804
|
-
registerTool('compare_models', 'Side-by-side comparison of 2-5 AI models. Returns pricing, benchmarks (normalized to a union of keys with null for missing scores), provider status, and recent news per model, plus rankings (cheapest blended, most context, per-benchmark leaderboard). Costs 1 credit.', {
|
|
804
|
+
registerTool('compare_models', 'Side-by-side comparison of 2-5 AI models. Returns pricing, benchmarks (normalized to a union of keys with null for missing scores), provider status, and recent news per model, plus rankings (cheapest blended, most context, per-benchmark leaderboard). Costs 1 credit ($0.02).', {
|
|
805
805
|
ids: z.string().describe('Comma-separated list of 2-5 model ids or display names. Examples: "Claude Opus 4.7,GPT-5.5,Gemini 3" or "opus-4-7,gpt-5-5"'),
|
|
806
806
|
}, async ({ ids }) => {
|
|
807
807
|
const data = (await fetchJSON(`/premium/compare/models?ids=${encodeURIComponent(ids)}`, { auth: true }));
|
|
@@ -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. 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 1 credit ($0.02). 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 }));
|
|
@@ -858,7 +858,7 @@ registerTool('provider_deepdive', 'Everything about an AI provider in one call:
|
|
|
858
858
|
};
|
|
859
859
|
});
|
|
860
860
|
// ── Tool: cost_projection (1 credit) ────────────────────────────────
|
|
861
|
-
registerTool('cost_projection', 'Project the cost of a token-usage workload across 1-10 AI models. Returns daily/weekly/monthly/yearly totals per model and a ranking by cheapest monthly. Costs 1 credit.', {
|
|
861
|
+
registerTool('cost_projection', 'Project the cost of a token-usage workload across 1-10 AI models. Returns daily/weekly/monthly/yearly totals per model and a ranking by cheapest monthly. Costs 1 credit ($0.02).', {
|
|
862
862
|
models: z.string().describe('One model or comma-separated list of up to 10 (e.g. "Claude Opus 4.7,GPT-5.5,Gemini 3"). Names or ids both work.'),
|
|
863
863
|
input_tokens_per_day: z.number().min(0).describe('Expected daily input token volume'),
|
|
864
864
|
output_tokens_per_day: z.number().min(0).describe('Expected daily output token volume'),
|
|
@@ -893,7 +893,7 @@ registerTool('cost_projection', 'Project the cost of a token-usage workload acro
|
|
|
893
893
|
};
|
|
894
894
|
});
|
|
895
895
|
// ── Tool: news_search (1 credit) ────────────────────────────────────
|
|
896
|
-
registerTool('news_search', 'Full-text search over the TensorFeed news article corpus with optional date range, provider, and category filters. Relevance scoring with recency boost. Costs 1 credit.', {
|
|
896
|
+
registerTool('news_search', 'Full-text search over the TensorFeed news article corpus with optional date range, provider, and category filters. Relevance scoring with recency boost. Costs 1 credit ($0.02).', {
|
|
897
897
|
q: z.string().optional().describe('Free-text query, e.g. "claude opus pricing". Omit to browse latest filtered articles.'),
|
|
898
898
|
from: z.string().optional().describe('Start date YYYY-MM-DD UTC (inclusive)'),
|
|
899
899
|
to: z.string().optional().describe('End date YYYY-MM-DD UTC (inclusive end-of-day)'),
|
|
@@ -947,7 +947,7 @@ registerTool('list_watches', 'List the active webhook watches owned by the confi
|
|
|
947
947
|
return { content: [{ type: 'text', text: `${data.count} active watches:\n\n${rows}` }] };
|
|
948
948
|
});
|
|
949
949
|
// ── Tool: create_price_watch (1 credit) ─────────────────────────────
|
|
950
|
-
registerTool('create_price_watch', 'Register a webhook watch on a model price change. Costs 1 credit. Watch lives 90 days. Each fire is an HMAC-signed POST to callback_url.', {
|
|
950
|
+
registerTool('create_price_watch', 'Register a webhook watch on a model price change. Costs 1 credit ($0.02). Watch lives 90 days. Each fire is an HMAC-signed POST to callback_url.', {
|
|
951
951
|
model: z.string().describe('Model name (e.g. "Claude Opus 4.7")'),
|
|
952
952
|
field: z.enum(['inputPrice', 'outputPrice', 'blended']).describe('Which price field to watch'),
|
|
953
953
|
op: z.enum(['lt', 'gt', 'changes']).describe('Trigger: lt = below threshold, gt = above, changes = any change'),
|
|
@@ -972,7 +972,7 @@ registerTool('create_price_watch', 'Register a webhook watch on a model price ch
|
|
|
972
972
|
};
|
|
973
973
|
}, CREATE_TOOL);
|
|
974
974
|
// ── Tool: create_status_watch (1 credit) ────────────────────────────
|
|
975
|
-
registerTool('create_status_watch', 'Register a webhook watch on a service status transition (e.g. anthropic becomes down). Costs 1 credit. Watch lives 90 days.', {
|
|
975
|
+
registerTool('create_status_watch', 'Register a webhook watch on a service status transition (e.g. anthropic becomes down). Costs 1 credit ($0.02). Watch lives 90 days.', {
|
|
976
976
|
provider: z.string().describe('Provider name (e.g. anthropic, openai)'),
|
|
977
977
|
op: z.enum(['becomes', 'changes']).describe('becomes = transitions to a specific value; changes = any transition'),
|
|
978
978
|
value: z.enum(['operational', 'degraded', 'down']).optional().describe('Required when op is becomes'),
|
|
@@ -996,7 +996,7 @@ registerTool('create_status_watch', 'Register a webhook watch on a service statu
|
|
|
996
996
|
};
|
|
997
997
|
}, CREATE_TOOL);
|
|
998
998
|
// ── Tool: create_digest_watch (1 credit) ────────────────────────────
|
|
999
|
-
registerTool('create_digest_watch', 'Register a scheduled digest webhook that fires daily or weekly with a curated summary of pricing changes (regardless of whether anything dramatic happened). Costs 1 credit. Watch lives 90 days. Set-and-forget for agents that want a periodic snapshot without subscribing to realtime transitions.', {
|
|
999
|
+
registerTool('create_digest_watch', 'Register a scheduled digest webhook that fires daily or weekly with a curated summary of pricing changes (regardless of whether anything dramatic happened). Costs 1 credit ($0.02). Watch lives 90 days. Set-and-forget for agents that want a periodic snapshot without subscribing to realtime transitions.', {
|
|
1000
1000
|
cadence: z.enum(['daily', 'weekly']).describe('How often the digest fires'),
|
|
1001
1001
|
callback_url: z.string().describe('HTTPS URL to POST to when the digest fires'),
|
|
1002
1002
|
secret: z.string().optional().describe('Optional HMAC shared secret'),
|
|
@@ -1018,7 +1018,7 @@ registerTool('create_digest_watch', 'Register a scheduled digest webhook that fi
|
|
|
1018
1018
|
};
|
|
1019
1019
|
}, CREATE_TOOL);
|
|
1020
1020
|
// ── Tool: create_leaderboard_rank_watch (1 credit) ──────────────────
|
|
1021
|
-
registerTool('create_leaderboard_rank_watch', 'Register a webhook that fires when a provider crosses a rank threshold on the cross-provider 7-day uptime leaderboard. Rank 1 = best (highest uptime). drops_below: was rank<=N, now rank>N (got worse). rises_above: was rank>=N, now rank<N (got better). changes: any rank movement. Costs 1 credit at registration. Watch lives 90 days.', {
|
|
1021
|
+
registerTool('create_leaderboard_rank_watch', 'Register a webhook that fires when a provider crosses a rank threshold on the cross-provider 7-day uptime leaderboard. Rank 1 = best (highest uptime). drops_below: was rank<=N, now rank>N (got worse). rises_above: was rank>=N, now rank<N (got better). changes: any rank movement. Costs 1 credit ($0.02) at registration. Watch lives 90 days.', {
|
|
1022
1022
|
provider: z.string().describe('Provider name or slug (case-insensitive). e.g. claude, openai, gemini, bedrock, azure'),
|
|
1023
1023
|
op: z.enum(['drops_below', 'rises_above', 'changes']).describe('Trigger condition'),
|
|
1024
1024
|
threshold: z.number().int().min(1).optional().describe('Required for drops_below / rises_above. Integer rank position.'),
|
|
@@ -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.', {
|
|
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.', {
|
|
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)'),
|
|
@@ -1140,7 +1140,7 @@ registerTool('mcp_registry_snapshot', 'Today\'s summary of the official Model Co
|
|
|
1140
1140
|
};
|
|
1141
1141
|
});
|
|
1142
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.', {
|
|
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
1144
|
from: z.string().optional().describe('Inclusive start date YYYY-MM-DD (default: 30 days before to)'),
|
|
1145
1145
|
to: z.string().optional().describe('Inclusive end date YYYY-MM-DD (default: today UTC)'),
|
|
1146
1146
|
}, async ({ from, to }) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.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",
|