@tensorfeed/mcp-server 1.10.0 → 1.11.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 +6 -0
- package/README.md +2 -0
- package/dist/index.js +57 -0
- package/package.json +1 -1
- package/server.json +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
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.11.0 - 2026-04-29
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `probe_latest` tool — last 24 hours of measured LLM endpoint latency and availability per provider (Anthropic, OpenAI, Google, Mistral, Cohere). TensorFeed pings each provider's chat completion endpoint every 15 min and records ttfb / total / status. The data is unique because it is measured, not self-reported. Free, no auth.
|
|
9
|
+
- `probe_series` tool — daily SLA series for one provider with ttfb/total p50/p95/p99 and incident-hour count, 90-day max range. 1 credit per call. Pairs with `premium_routing` for picking a model whose SLA you can verify.
|
|
10
|
+
|
|
5
11
|
## 1.10.0 - 2026-04-29
|
|
6
12
|
|
|
7
13
|
### Added
|
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ A [Model Context Protocol](https://modelcontextprotocol.io) server that gives AI
|
|
|
13
13
|
| `get_ai_today` | Summary of top AI stories from the last 24 hours |
|
|
14
14
|
| `get_agent_activity` | Live AI bot traffic on TensorFeed.ai with top-bot breakdown |
|
|
15
15
|
| `mcp_registry_snapshot` | Today's summary of the official MCP server registry: total servers, top namespaces, newly added/reactivated/deprecated names |
|
|
16
|
+
| `probe_latest` | Last 24h of measured LLM endpoint latency and availability per provider (ttfb/total p50/p95/p99). Unique because measured, not self-reported |
|
|
16
17
|
|
|
17
18
|
## Premium Tools (paid in USDC on Base)
|
|
18
19
|
|
|
@@ -33,6 +34,7 @@ These tools require a `TENSORFEED_TOKEN` env var. Buy credits at [tensorfeed.ai/
|
|
|
33
34
|
| `compare_models` | 1 credit | Side-by-side comparison of 2-5 models with normalized benchmarks and rankings |
|
|
34
35
|
| `whats_new` | 1 credit | Agent morning brief: pricing changes, incidents, top news from last 1-7 days |
|
|
35
36
|
| `mcp_registry_series` | 1 credit | Multi-day MCP registry growth and churn series, 90-day max range |
|
|
37
|
+
| `probe_series` | 1 credit | Daily SLA series for one LLM provider with ttfb/total p50/p95/p99 and incident-hour count, 90-day max range |
|
|
36
38
|
| `list_watches` | Free | List active webhook watches owned by the token |
|
|
37
39
|
| `create_price_watch` | 1 credit | Register a webhook watch on a model price change |
|
|
38
40
|
| `create_status_watch` | 1 credit | Register a webhook watch on a service status transition |
|
package/dist/index.js
CHANGED
|
@@ -587,6 +587,63 @@ server.tool('delete_watch', 'Delete one of your active webhook watches by id. Fr
|
|
|
587
587
|
await fetchJSON(`/premium/watches/${watch_id}`, { method: 'DELETE', auth: true });
|
|
588
588
|
return { content: [{ type: 'text', text: `Deleted watch ${watch_id}.` }] };
|
|
589
589
|
});
|
|
590
|
+
// ── Tool: probe_latest (free) ───────────────────────────────────────
|
|
591
|
+
server.tool('probe_latest', 'Last 24 hours of measured LLM endpoint latency and availability per provider (Anthropic, OpenAI, Google, Mistral, Cohere). TensorFeed pings each provider\'s chat completion endpoint every 15 min and records time-to-first-byte, total response time, and HTTP status. Returns per-provider success rate and ttfb/total p50/p95/p99 latency. The data is unique because we measure it ourselves, not self-reported by the providers. Useful when an agent needs to pick a provider whose SLA you can verify, or to detect ongoing incidents before they hit a status page. Free, no auth.', {}, async () => {
|
|
592
|
+
const data = (await fetchJSON('/probe/latest'));
|
|
593
|
+
const s = data.summary;
|
|
594
|
+
if (s.providers.length === 0) {
|
|
595
|
+
return { content: [{ type: 'text', text: 'No probe data yet. Probing starts as soon as TensorFeed has at least one provider key configured.' }] };
|
|
596
|
+
}
|
|
597
|
+
const rows = s.providers
|
|
598
|
+
.sort((a, b) => b.ok_pct - a.ok_pct)
|
|
599
|
+
.map(p => {
|
|
600
|
+
const okPct = (p.ok_pct * 100).toFixed(1);
|
|
601
|
+
const ttfb = p.ttfb.p50 !== null ? `p50 ${p.ttfb.p50}ms / p95 ${p.ttfb.p95}ms / p99 ${p.ttfb.p99}ms` : 'no successful probes';
|
|
602
|
+
const total = p.total.p50 !== null ? `p50 ${p.total.p50}ms / p95 ${p.total.p95}ms / p99 ${p.total.p99}ms` : 'no successful probes';
|
|
603
|
+
const err = p.last_error ? `\n last error: ${p.last_error}` : '';
|
|
604
|
+
return ` ${p.provider}: ${okPct}% ok over ${p.count} probes\n ttfb: ${ttfb}\n total: ${total}${err}`;
|
|
605
|
+
})
|
|
606
|
+
.join('\n\n');
|
|
607
|
+
return {
|
|
608
|
+
content: [
|
|
609
|
+
{
|
|
610
|
+
type: 'text',
|
|
611
|
+
text: `LLM Endpoint SLA (${s.window_label}, computed ${s.computed_at})\n\n${rows}\n\nSource: TensorFeed measured probes, not self-reported.`,
|
|
612
|
+
},
|
|
613
|
+
],
|
|
614
|
+
};
|
|
615
|
+
});
|
|
616
|
+
// ── Tool: probe_series (1 credit) ───────────────────────────────────
|
|
617
|
+
server.tool('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.', {
|
|
618
|
+
provider: z.enum(['anthropic', 'openai', 'google', 'mistral', 'cohere']).describe('LLM provider key'),
|
|
619
|
+
from: z.string().optional().describe('Inclusive start YYYY-MM-DD (default: 30 days before to)'),
|
|
620
|
+
to: z.string().optional().describe('Inclusive end YYYY-MM-DD (default: today UTC)'),
|
|
621
|
+
}, async ({ provider, from, to }) => {
|
|
622
|
+
const params = new URLSearchParams();
|
|
623
|
+
params.set('provider', provider);
|
|
624
|
+
if (from)
|
|
625
|
+
params.set('from', from);
|
|
626
|
+
if (to)
|
|
627
|
+
params.set('to', to);
|
|
628
|
+
const data = (await fetchJSON(`/premium/probe/series?${params}`, { auth: true }));
|
|
629
|
+
const lines = data.points
|
|
630
|
+
.map(p => p.has_data
|
|
631
|
+
? ` ${p.date} ${(p.ok_pct * 100).toFixed(1)}% ok ttfb p50/p95: ${p.ttfb_p50}/${p.ttfb_p95}ms total p50/p95: ${p.total_p50}/${p.total_p95}ms incidents: ${p.incident_hours}h`
|
|
632
|
+
: ` ${p.date} (no data)`)
|
|
633
|
+
.join('\n');
|
|
634
|
+
const overall = data.summary.overall_uptime_pct !== null
|
|
635
|
+
? `${(data.summary.overall_uptime_pct * 100).toFixed(2)}%`
|
|
636
|
+
: 'insufficient data';
|
|
637
|
+
const notes = data.notes.length ? '\nNotes: ' + data.notes.join('; ') : '';
|
|
638
|
+
return {
|
|
639
|
+
content: [
|
|
640
|
+
{
|
|
641
|
+
type: 'text',
|
|
642
|
+
text: `${data.provider} measured SLA, ${data.from} -> ${data.to}\nOverall uptime: ${overall} (${data.summary.days_with_data} days with data, ${data.summary.days_with_incidents} with incidents)\n\n${lines}${notes}\n\nCredits remaining: ${data.billing?.credits_remaining ?? '?'}`,
|
|
643
|
+
},
|
|
644
|
+
],
|
|
645
|
+
};
|
|
646
|
+
});
|
|
590
647
|
// ── Tool: mcp_registry_snapshot (free) ──────────────────────────────
|
|
591
648
|
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
649
|
const data = (await fetchJSON('/mcp/registry/snapshot'));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.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",
|
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": "AI news, model pricing, service status, and machine-payable premium tools. AFTA-certified.",
|
|
6
|
+
"version": "1.11.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.11.0",
|
|
19
19
|
"runtimeHint": "npx",
|
|
20
20
|
"transport": {
|
|
21
21
|
"type": "stdio"
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"get_model_pricing",
|
|
45
45
|
"get_ai_today",
|
|
46
46
|
"get_agent_activity",
|
|
47
|
-
"mcp_registry_snapshot"
|
|
47
|
+
"mcp_registry_snapshot",
|
|
48
|
+
"probe_latest"
|
|
48
49
|
],
|
|
49
50
|
"premiumTools": [
|
|
50
51
|
"premium_routing",
|
|
@@ -58,6 +59,7 @@
|
|
|
58
59
|
"compare_models",
|
|
59
60
|
"whats_new",
|
|
60
61
|
"mcp_registry_series",
|
|
62
|
+
"probe_series",
|
|
61
63
|
"list_watches",
|
|
62
64
|
"create_price_watch",
|
|
63
65
|
"create_status_watch",
|