@tensorfeed/mcp-server 1.9.0 → 1.10.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 +8 -0
- package/LICENSE +21 -0
- package/README.md +4 -3
- package/dist/index.js +61 -75
- package/package.json +8 -1
- package/server.json +6 -6
- package/src/index.ts +0 -1043
- package/tsconfig.json +0 -15
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the [TensorFeed.ai MCP server](https://github.com/RipperMercs/tensorfeed/tree/main/mcp-server). 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.10.0 - 2026-04-29
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `mcp_registry_snapshot` tool — today's summary of the official Model Context Protocol server registry: total servers, by-status breakdown, top namespaces, 1-day deltas (newly added, reactivated, deprecated). Free, no auth.
|
|
9
|
+
- `mcp_registry_series` tool — multi-day time series of MCP registry growth and churn. Range capped at 90 days, default 30 days back. 1 credit per call.
|
|
10
|
+
|
|
11
|
+
The new tools are backed by a fresh daily cron capture of registry.modelcontextprotocol.io. The registry itself is open data, but a 30/90-day trend requires daily capture started weeks before the question is asked.
|
|
12
|
+
|
|
5
13
|
## 1.7.0 - 2026-04-27
|
|
6
14
|
|
|
7
15
|
### Added
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Pizza Robot Studios LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ A [Model Context Protocol](https://modelcontextprotocol.io) server that gives AI
|
|
|
11
11
|
| `is_service_down` | Check if a specific AI service is down |
|
|
12
12
|
| `get_model_pricing` | Compare pricing across all major AI model providers |
|
|
13
13
|
| `get_ai_today` | Summary of top AI stories from the last 24 hours |
|
|
14
|
+
| `get_agent_activity` | Live AI bot traffic on TensorFeed.ai with top-bot breakdown |
|
|
15
|
+
| `mcp_registry_snapshot` | Today's summary of the official MCP server registry: total servers, top namespaces, newly added/reactivated/deprecated names |
|
|
14
16
|
|
|
15
17
|
## Premium Tools (paid in USDC on Base)
|
|
16
18
|
|
|
@@ -24,14 +26,13 @@ These tools require a `TENSORFEED_TOKEN` env var. Buy credits at [tensorfeed.ai/
|
|
|
24
26
|
| `pricing_series` | 1 credit | Daily price points for one model with min/max/delta summary |
|
|
25
27
|
| `benchmark_series` | 1 credit | Score evolution for a benchmark on one model |
|
|
26
28
|
| `status_uptime` | 1 credit | Daily uptime % for one provider with incident-day list |
|
|
27
|
-
| `history_compare` | 1 credit | Diff two daily snapshots: added, removed, changed entries |
|
|
28
29
|
| `premium_agents_directory` | 1 credit | Enriched agents catalog with live status, news, traffic, trending_score |
|
|
29
30
|
| `news_search` | 1 credit | Full-text news search with date/provider/category filters and relevance scoring |
|
|
30
31
|
| `cost_projection` | 1 credit | Project workload cost across 1-10 AI models with 4 time horizons and cheapest-monthly ranking |
|
|
31
|
-
| `forecast` | 1 credit | Linear-regression forecast for a price field or benchmark score with 95% CI and confidence label |
|
|
32
32
|
| `provider_deepdive` | 1 credit | One provider's full profile: status, all models with benchmarks joined, recent news, traffic |
|
|
33
33
|
| `compare_models` | 1 credit | Side-by-side comparison of 2-5 models with normalized benchmarks and rankings |
|
|
34
34
|
| `whats_new` | 1 credit | Agent morning brief: pricing changes, incidents, top news from last 1-7 days |
|
|
35
|
+
| `mcp_registry_series` | 1 credit | Multi-day MCP registry growth and churn series, 90-day max range |
|
|
35
36
|
| `list_watches` | Free | List active webhook watches owned by the token |
|
|
36
37
|
| `create_price_watch` | 1 credit | Register a webhook watch on a model price change |
|
|
37
38
|
| `create_status_watch` | 1 credit | Register a webhook watch on a service status transition |
|
|
@@ -104,7 +105,7 @@ Premium tier (with `TENSORFEED_TOKEN` set):
|
|
|
104
105
|
|
|
105
106
|
Premium tools cost 1 credit per call. Credits are 50 per $1 USDC at base rate, with volume discounts at $5 (10%), $30 (25%), and $200 (40%). See [tensorfeed.ai/developers/agent-payments](https://tensorfeed.ai/developers/agent-payments) for the full payment flow and trust attestation.
|
|
106
107
|
|
|
107
|
-
|
|
108
|
+
No refunds: all credit purchases are final per Section 17.5 of the [Terms](https://tensorfeed.ai/terms#premium). Credits do not expire and are jointly redeemable on tensorfeed.ai and terminalfeed.io, so the safe pattern is to buy small ($1 USDC for 50 credits) and top up as call volume is calibrated. Premium access is unavailable in OFAC-sanctioned jurisdictions; see Section 17.9.
|
|
108
109
|
|
|
109
110
|
## Data Source
|
|
110
111
|
|
package/dist/index.js
CHANGED
|
@@ -294,48 +294,6 @@ server.tool('status_uptime', 'Daily uptime rollup for one provider with operatio
|
|
|
294
294
|
],
|
|
295
295
|
};
|
|
296
296
|
});
|
|
297
|
-
// ── Tool: history_compare (1 credit) ────────────────────────────────
|
|
298
|
-
server.tool('history_compare', 'Diff two daily snapshots: returns added, removed, and changed entries with deltas. Costs 1 credit.', {
|
|
299
|
-
from: z.string().describe('Earlier snapshot date YYYY-MM-DD'),
|
|
300
|
-
to: z.string().describe('Later snapshot date YYYY-MM-DD'),
|
|
301
|
-
type: z.enum(['pricing', 'benchmarks']).optional().describe('Snapshot type (default: pricing)'),
|
|
302
|
-
}, async ({ from, to, type }) => {
|
|
303
|
-
const params = new URLSearchParams({ from, to, type: type ?? 'pricing' });
|
|
304
|
-
const data = (await fetchJSON(`/premium/history/compare?${params}`, { auth: true }));
|
|
305
|
-
if (data.type === 'pricing') {
|
|
306
|
-
const changes = data.changed
|
|
307
|
-
.map(c => ` ${c.model} ${c.field}: ${c.from} -> ${c.to} (${c.delta_pct ?? 'n/a'}%)`)
|
|
308
|
-
.join('\n');
|
|
309
|
-
return {
|
|
310
|
-
content: [
|
|
311
|
-
{
|
|
312
|
-
type: 'text',
|
|
313
|
-
text: `Pricing diff ${from} -> ${to}\n` +
|
|
314
|
-
` added: ${data.added.length} (${data.added.map(a => a.model).join(', ') || 'none'})\n` +
|
|
315
|
-
` removed: ${data.removed.length} (${data.removed.map(r => r.model).join(', ') || 'none'})\n` +
|
|
316
|
-
` unchanged: ${data.unchanged_count}\n\n` +
|
|
317
|
-
(changes || ' no field changes') +
|
|
318
|
-
`\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
319
|
-
},
|
|
320
|
-
],
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
const changes = data.changed
|
|
324
|
-
.map(c => ` ${c.model} ${c.benchmark}: ${c.from} -> ${c.to} (delta ${c.delta_pp} pp)`)
|
|
325
|
-
.join('\n');
|
|
326
|
-
return {
|
|
327
|
-
content: [
|
|
328
|
-
{
|
|
329
|
-
type: 'text',
|
|
330
|
-
text: `Benchmark diff ${from} -> ${to}\n` +
|
|
331
|
-
` added: ${data.added_models.length} (${data.added_models.join(', ') || 'none'})\n` +
|
|
332
|
-
` removed: ${data.removed_models.length} (${data.removed_models.join(', ') || 'none'})\n\n` +
|
|
333
|
-
(changes || ' no score changes') +
|
|
334
|
-
`\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
335
|
-
},
|
|
336
|
-
],
|
|
337
|
-
};
|
|
338
|
-
});
|
|
339
297
|
// ── Tool: premium_agents_directory (1 credit) ───────────────────────
|
|
340
298
|
server.tool('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.', {
|
|
341
299
|
category: z.string().optional().describe('coding, research, general, creative, frameworks'),
|
|
@@ -462,39 +420,6 @@ server.tool('provider_deepdive', 'Everything about an AI provider in one call: l
|
|
|
462
420
|
],
|
|
463
421
|
};
|
|
464
422
|
});
|
|
465
|
-
// ── Tool: forecast (1 credit) ───────────────────────────────────────
|
|
466
|
-
server.tool('forecast', 'Conservative statistical forecast for an AI model price or benchmark series. Linear least-squares fit on 7-90 days of history projected forward 1-30 days with a 95% prediction interval and confidence label. Costs 1 credit.', {
|
|
467
|
-
target: z.enum(['price', 'benchmark']).describe('Forecast a price field or a benchmark score'),
|
|
468
|
-
model: z.string().describe('Model id or display name'),
|
|
469
|
-
field: z.enum(['inputPrice', 'outputPrice', 'blended']).optional().describe('Required when target=price'),
|
|
470
|
-
benchmark: z.string().optional().describe('Required when target=benchmark (e.g. swe_bench, mmlu_pro)'),
|
|
471
|
-
lookback: z.number().min(7).max(90).optional().describe('Days of history to fit on (default 30)'),
|
|
472
|
-
horizon: z.number().min(1).max(30).optional().describe('Days into the future to project (default 7)'),
|
|
473
|
-
}, async ({ target, model, field, benchmark, lookback, horizon }) => {
|
|
474
|
-
const params = new URLSearchParams({ target, model });
|
|
475
|
-
if (field)
|
|
476
|
-
params.set('field', field);
|
|
477
|
-
if (benchmark)
|
|
478
|
-
params.set('benchmark', benchmark);
|
|
479
|
-
if (typeof lookback === 'number')
|
|
480
|
-
params.set('lookback', String(lookback));
|
|
481
|
-
if (typeof horizon === 'number')
|
|
482
|
-
params.set('horizon', String(horizon));
|
|
483
|
-
const data = (await fetchJSON(`/premium/forecast?${params}`, { auth: true }));
|
|
484
|
-
const what = target === 'price' ? `${data.model} ${data.field}` : `${data.model} ${data.benchmark}`;
|
|
485
|
-
const trendLine = `current=${data.current_value}, slope=${data.trend.slope_per_day}/day, r2=${data.trend.r_squared}, confidence=${data.confidence.label} (${data.confidence.score})`;
|
|
486
|
-
const forecastLines = data.forecast
|
|
487
|
-
.map(p => ` ${p.date}: ${p.predicted} (95% CI [${p.lower}, ${p.upper}])`)
|
|
488
|
-
.join('\n');
|
|
489
|
-
return {
|
|
490
|
-
content: [
|
|
491
|
-
{
|
|
492
|
-
type: 'text',
|
|
493
|
-
text: `Forecast: ${what}\n${trendLine}\n\n${forecastLines}\n\nNotes: ${data.notes.join(' ')}\n\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
494
|
-
},
|
|
495
|
-
],
|
|
496
|
-
};
|
|
497
|
-
});
|
|
498
423
|
// ── Tool: cost_projection (1 credit) ────────────────────────────────
|
|
499
424
|
server.tool('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.', {
|
|
500
425
|
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.'),
|
|
@@ -662,6 +587,67 @@ server.tool('delete_watch', 'Delete one of your active webhook watches by id. Fr
|
|
|
662
587
|
await fetchJSON(`/premium/watches/${watch_id}`, { method: 'DELETE', auth: true });
|
|
663
588
|
return { content: [{ type: 'text', text: `Deleted watch ${watch_id}.` }] };
|
|
664
589
|
});
|
|
590
|
+
// ── Tool: mcp_registry_snapshot (free) ──────────────────────────────
|
|
591
|
+
server.tool('mcp_registry_snapshot', 'Today\'s summary of the official Model Context Protocol server registry. Returns total servers, by-status breakdown, top namespaces, and 1-day deltas (newly added, reactivated, deprecated). Captured daily at 9:30 AM UTC from registry.modelcontextprotocol.io. Useful when an agent wants to see how the MCP ecosystem is growing or detect freshly-deprecated servers it may be using. Free, no auth.', {}, async () => {
|
|
592
|
+
const data = (await fetchJSON('/mcp/registry/snapshot'));
|
|
593
|
+
const s = data.summary;
|
|
594
|
+
const statusLine = Object.entries(s.by_status)
|
|
595
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
596
|
+
.join(', ');
|
|
597
|
+
const topNs = s.top_namespaces.slice(0, 10).map(n => ` ${n.namespace}: ${n.count}`).join('\n');
|
|
598
|
+
const delta = s.delta_vs_yesterday
|
|
599
|
+
? `Day over day: +${s.delta_vs_yesterday.added} new, -${s.delta_vs_yesterday.removed} removed, net ${s.delta_vs_yesterday.net >= 0 ? '+' : ''}${s.delta_vs_yesterday.net}`
|
|
600
|
+
: 'Day over day: not available (first snapshot)';
|
|
601
|
+
const newToday = s.new_today.count > 0
|
|
602
|
+
? `\nNewly listed today (${s.new_today.count}):\n` + s.new_today.names.slice(0, 10).map(n => ` ${n}`).join('\n')
|
|
603
|
+
: '';
|
|
604
|
+
const deprecatedToday = s.deprecated_today.count > 0
|
|
605
|
+
? `\nDeprecated today (${s.deprecated_today.count}):\n` + s.deprecated_today.names.slice(0, 10).map(n => ` ${n}`).join('\n')
|
|
606
|
+
: '';
|
|
607
|
+
return {
|
|
608
|
+
content: [
|
|
609
|
+
{
|
|
610
|
+
type: 'text',
|
|
611
|
+
text: `MCP Server Registry — ${s.date}\n` +
|
|
612
|
+
`Total servers: ${s.total_servers} (across ${s.total_versions} versioned entries)\n` +
|
|
613
|
+
`Status: ${statusLine}\n${delta}\n\n` +
|
|
614
|
+
`Top namespaces:\n${topNs}` +
|
|
615
|
+
newToday + deprecatedToday +
|
|
616
|
+
`\n\nSource: registry.modelcontextprotocol.io`,
|
|
617
|
+
},
|
|
618
|
+
],
|
|
619
|
+
};
|
|
620
|
+
});
|
|
621
|
+
// ── Tool: mcp_registry_series (1 credit) ────────────────────────────
|
|
622
|
+
server.tool('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.', {
|
|
623
|
+
from: z.string().optional().describe('Inclusive start date YYYY-MM-DD (default: 30 days before to)'),
|
|
624
|
+
to: z.string().optional().describe('Inclusive end date YYYY-MM-DD (default: today UTC)'),
|
|
625
|
+
}, async ({ from, to }) => {
|
|
626
|
+
const params = new URLSearchParams();
|
|
627
|
+
if (from)
|
|
628
|
+
params.set('from', from);
|
|
629
|
+
if (to)
|
|
630
|
+
params.set('to', to);
|
|
631
|
+
const data = (await fetchJSON(`/premium/mcp/registry/series?${params}`, { auth: true }));
|
|
632
|
+
const lines = data.points
|
|
633
|
+
.map(p => p.has_data
|
|
634
|
+
? ` ${p.date} total=${p.total_servers} +${p.added ?? 0}/-${p.removed ?? 0}`
|
|
635
|
+
: ` ${p.date} (no snapshot captured)`)
|
|
636
|
+
.join('\n');
|
|
637
|
+
const w = data.delta_in_window;
|
|
638
|
+
const summary = w.start_total !== null && w.end_total !== null
|
|
639
|
+
? `Window ${data.from} -> ${data.to}: ${w.start_total} -> ${w.end_total} (net ${w.net >= 0 ? '+' : ''}${w.net})`
|
|
640
|
+
: `Window ${data.from} -> ${data.to}: insufficient data`;
|
|
641
|
+
const notes = data.notes.length ? '\nNotes: ' + data.notes.join('; ') : '';
|
|
642
|
+
return {
|
|
643
|
+
content: [
|
|
644
|
+
{
|
|
645
|
+
type: 'text',
|
|
646
|
+
text: `${summary}\n\n${lines}${notes}\n\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
647
|
+
},
|
|
648
|
+
],
|
|
649
|
+
};
|
|
650
|
+
});
|
|
665
651
|
// ── Start ───────────────────────────────────────────────────────────
|
|
666
652
|
async function main() {
|
|
667
653
|
const transport = new StdioServerTransport();
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
|
+
"mcpName": "ai.tensorfeed/mcp-server",
|
|
4
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",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
@@ -8,6 +9,12 @@
|
|
|
8
9
|
"bin": {
|
|
9
10
|
"tensorfeed-mcp": "dist/index.js"
|
|
10
11
|
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"server.json",
|
|
15
|
+
"README.md",
|
|
16
|
+
"CHANGELOG.md"
|
|
17
|
+
],
|
|
11
18
|
"scripts": {
|
|
12
19
|
"build": "tsc",
|
|
13
20
|
"start": "node dist/index.js"
|
package/server.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "ai.tensorfeed/mcp-server",
|
|
4
4
|
"title": "TensorFeed",
|
|
5
|
-
"description": "
|
|
6
|
-
"version": "1.
|
|
5
|
+
"description": "Real-time AI news, status, model pricing, and pay-per-call premium tools (USDC on Base).",
|
|
6
|
+
"version": "1.10.0",
|
|
7
7
|
"websiteUrl": "https://tensorfeed.ai/developers/agent-payments",
|
|
8
8
|
"repository": {
|
|
9
9
|
"url": "https://github.com/RipperMercs/tensorfeed",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"registryType": "npm",
|
|
16
16
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
17
17
|
"identifier": "@tensorfeed/mcp-server",
|
|
18
|
-
"version": "1.
|
|
18
|
+
"version": "1.10.0",
|
|
19
19
|
"runtimeHint": "npx",
|
|
20
20
|
"transport": {
|
|
21
21
|
"type": "stdio"
|
|
@@ -43,21 +43,21 @@
|
|
|
43
43
|
"is_service_down",
|
|
44
44
|
"get_model_pricing",
|
|
45
45
|
"get_ai_today",
|
|
46
|
-
"get_agent_activity"
|
|
46
|
+
"get_agent_activity",
|
|
47
|
+
"mcp_registry_snapshot"
|
|
47
48
|
],
|
|
48
49
|
"premiumTools": [
|
|
49
50
|
"premium_routing",
|
|
50
51
|
"pricing_series",
|
|
51
52
|
"benchmark_series",
|
|
52
53
|
"status_uptime",
|
|
53
|
-
"history_compare",
|
|
54
54
|
"premium_agents_directory",
|
|
55
55
|
"news_search",
|
|
56
56
|
"cost_projection",
|
|
57
|
-
"forecast",
|
|
58
57
|
"provider_deepdive",
|
|
59
58
|
"compare_models",
|
|
60
59
|
"whats_new",
|
|
60
|
+
"mcp_registry_series",
|
|
61
61
|
"list_watches",
|
|
62
62
|
"create_price_watch",
|
|
63
63
|
"create_status_watch",
|