@tensorfeed/mcp-server 1.10.0 → 1.11.1
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 +23 -105
- package/dist/index.js +57 -0
- package/package.json +19 -3
- package/server.json +8 -7
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
|
@@ -1,116 +1,34 @@
|
|
|
1
1
|
# TensorFeed MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **The MCP server has its own repo: https://github.com/RipperMercs/tensorfeed-mcp**
|
|
4
|
+
>
|
|
5
|
+
> User-facing docs, install instructions, and the full tool reference live there. Star and watch that repo to follow MCP server updates.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
This subfolder remains in the main `tensorfeed` repo as the **publishing source** for the npm package (`@tensorfeed/mcp-server`) and the [official MCP registry](https://registry.modelcontextprotocol.io/v0/servers/ai.tensorfeed/mcp-server) entry. Edits to `src/`, `server.json`, `package.json`, etc. happen here and get pushed to the standalone repo on release.
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|------|-------------|
|
|
9
|
-
| `get_ai_news` | Latest AI news from 15+ sources (filterable by category) |
|
|
10
|
-
| `get_ai_status` | Real-time status of Claude, OpenAI, Gemini, Mistral, and more |
|
|
11
|
-
| `is_service_down` | Check if a specific AI service is down |
|
|
12
|
-
| `get_model_pricing` | Compare pricing across all major AI model providers |
|
|
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 |
|
|
9
|
+
## Publish a new version
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
From the main tensorfeed repo:
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
```powershell
|
|
14
|
+
# 1. Bump the version in mcp-server/package.json + mcp-server/server.json
|
|
15
|
+
# 2. Build + npm publish from the mcp-server/ folder
|
|
16
|
+
cd mcp-server
|
|
17
|
+
npm run build
|
|
18
|
+
npm publish --access public
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
| `get_account_balance` | Free | Show credits remaining on the configured token |
|
|
24
|
-
| `get_account_usage` | Free | Per-endpoint usage history for the configured token |
|
|
25
|
-
| `premium_routing` | 1 credit | Top-N ranked AI model recommendations with full score breakdown |
|
|
26
|
-
| `pricing_series` | 1 credit | Daily price points for one model with min/max/delta summary |
|
|
27
|
-
| `benchmark_series` | 1 credit | Score evolution for a benchmark on one model |
|
|
28
|
-
| `status_uptime` | 1 credit | Daily uptime % for one provider with incident-day list |
|
|
29
|
-
| `premium_agents_directory` | 1 credit | Enriched agents catalog with live status, news, traffic, trending_score |
|
|
30
|
-
| `news_search` | 1 credit | Full-text news search with date/provider/category filters and relevance scoring |
|
|
31
|
-
| `cost_projection` | 1 credit | Project workload cost across 1-10 AI models with 4 time horizons and cheapest-monthly ranking |
|
|
32
|
-
| `provider_deepdive` | 1 credit | One provider's full profile: status, all models with benchmarks joined, recent news, traffic |
|
|
33
|
-
| `compare_models` | 1 credit | Side-by-side comparison of 2-5 models with normalized benchmarks and rankings |
|
|
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 |
|
|
36
|
-
| `list_watches` | Free | List active webhook watches owned by the token |
|
|
37
|
-
| `create_price_watch` | 1 credit | Register a webhook watch on a model price change |
|
|
38
|
-
| `create_status_watch` | 1 credit | Register a webhook watch on a service status transition |
|
|
39
|
-
| `create_digest_watch` | 1 credit | Register a daily/weekly digest webhook (pricing-changes summary, set-and-forget) |
|
|
40
|
-
| `delete_watch` | Free | Remove an active watch |
|
|
20
|
+
# 3. Republish to the official MCP registry
|
|
21
|
+
.\scripts\mcp-publish.ps1
|
|
41
22
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
Add to your Claude Code MCP config (`~/.claude/claude_desktop_config.json`):
|
|
45
|
-
|
|
46
|
-
```json
|
|
47
|
-
{
|
|
48
|
-
"mcpServers": {
|
|
49
|
-
"tensorfeed": {
|
|
50
|
-
"command": "npx",
|
|
51
|
-
"args": ["-y", "@tensorfeed/mcp-server"]
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
To enable premium tools, add the `env` block:
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{
|
|
61
|
-
"mcpServers": {
|
|
62
|
-
"tensorfeed": {
|
|
63
|
-
"command": "npx",
|
|
64
|
-
"args": ["-y", "@tensorfeed/mcp-server"],
|
|
65
|
-
"env": {
|
|
66
|
-
"TENSORFEED_TOKEN": "tf_live_..."
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Setup with Claude Desktop
|
|
74
|
-
|
|
75
|
-
Add to Claude Desktop settings (same shape as above).
|
|
76
|
-
|
|
77
|
-
## Run Locally
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
npx @tensorfeed/mcp-server
|
|
81
|
-
# or with a token for premium endpoints
|
|
82
|
-
TENSORFEED_TOKEN=tf_live_... npx @tensorfeed/mcp-server
|
|
23
|
+
# 4. Mirror the new version to the standalone repo
|
|
24
|
+
# (manual until we wire it as a release-time GitHub Action)
|
|
83
25
|
```
|
|
84
26
|
|
|
85
|
-
##
|
|
86
|
-
|
|
87
|
-
Free tier:
|
|
88
|
-
|
|
89
|
-
- "What's happening in AI today?"
|
|
90
|
-
- "Is Claude down right now?"
|
|
91
|
-
- "Compare pricing between Claude Opus and GPT-4o"
|
|
92
|
-
- "Show me the latest AI research papers"
|
|
93
|
-
- "What's the status of all AI services?"
|
|
94
|
-
|
|
95
|
-
Premium tier (with `TENSORFEED_TOKEN` set):
|
|
96
|
-
|
|
97
|
-
- "Recommend the best AI model for code under $5 per million tokens"
|
|
98
|
-
- "Show the price history of Claude Opus 4.7 over the last 30 days"
|
|
99
|
-
- "What's Anthropic's uptime this month?"
|
|
100
|
-
- "Compare model pricing between April 1 and today"
|
|
101
|
-
- "Set up a webhook to my server when Claude goes down"
|
|
102
|
-
- "What's my credit balance?"
|
|
103
|
-
|
|
104
|
-
## Pricing
|
|
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.
|
|
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.
|
|
109
|
-
|
|
110
|
-
## Data Source
|
|
111
|
-
|
|
112
|
-
All data comes from the [TensorFeed.ai API](https://tensorfeed.ai/developers), which aggregates from 15+ sources including Anthropic, OpenAI, Google AI, TechCrunch, The Verge, arXiv, Hacker News, and more. Updated every 10 minutes.
|
|
113
|
-
|
|
114
|
-
## License
|
|
27
|
+
## Quick links
|
|
115
28
|
|
|
116
|
-
|
|
29
|
+
- **User-facing repo (please star):** https://github.com/RipperMercs/tensorfeed-mcp
|
|
30
|
+
- **npm package:** https://www.npmjs.com/package/@tensorfeed/mcp-server
|
|
31
|
+
- **Official MCP registry:** https://registry.modelcontextprotocol.io/v0/servers/ai.tensorfeed/mcp-server
|
|
32
|
+
- **TensorFeed.ai:** https://tensorfeed.ai
|
|
33
|
+
- **Premium / payments:** https://tensorfeed.ai/developers/agent-payments
|
|
34
|
+
- **AFTA standard:** https://tensorfeed.ai/agent-fair-trade
|
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.1",
|
|
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",
|
|
@@ -19,13 +19,29 @@
|
|
|
19
19
|
"build": "tsc",
|
|
20
20
|
"start": "node dist/index.js"
|
|
21
21
|
},
|
|
22
|
-
"keywords": [
|
|
22
|
+
"keywords": [
|
|
23
|
+
"mcp",
|
|
24
|
+
"ai",
|
|
25
|
+
"news",
|
|
26
|
+
"tensorfeed",
|
|
27
|
+
"model-context-protocol",
|
|
28
|
+
"claude",
|
|
29
|
+
"agents",
|
|
30
|
+
"x402",
|
|
31
|
+
"usdc",
|
|
32
|
+
"base",
|
|
33
|
+
"model-routing",
|
|
34
|
+
"agent-payments"
|
|
35
|
+
],
|
|
23
36
|
"author": "TensorFeed.ai",
|
|
24
37
|
"license": "MIT",
|
|
25
38
|
"homepage": "https://tensorfeed.ai/developers",
|
|
26
39
|
"repository": {
|
|
27
40
|
"type": "git",
|
|
28
|
-
"url": "https://github.com/RipperMercs/tensorfeed"
|
|
41
|
+
"url": "https://github.com/RipperMercs/tensorfeed-mcp"
|
|
42
|
+
},
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/RipperMercs/tensorfeed-mcp/issues"
|
|
29
45
|
},
|
|
30
46
|
"dependencies": {
|
|
31
47
|
"@modelcontextprotocol/sdk": "^1.28.0",
|
package/server.json
CHANGED
|
@@ -2,20 +2,19 @@
|
|
|
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
|
-
"url": "https://github.com/RipperMercs/tensorfeed",
|
|
10
|
-
"source": "github"
|
|
11
|
-
"subfolder": "mcp-server"
|
|
9
|
+
"url": "https://github.com/RipperMercs/tensorfeed-mcp",
|
|
10
|
+
"source": "github"
|
|
12
11
|
},
|
|
13
12
|
"packages": [
|
|
14
13
|
{
|
|
15
14
|
"registryType": "npm",
|
|
16
15
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
17
16
|
"identifier": "@tensorfeed/mcp-server",
|
|
18
|
-
"version": "1.
|
|
17
|
+
"version": "1.11.0",
|
|
19
18
|
"runtimeHint": "npx",
|
|
20
19
|
"transport": {
|
|
21
20
|
"type": "stdio"
|
|
@@ -44,7 +43,8 @@
|
|
|
44
43
|
"get_model_pricing",
|
|
45
44
|
"get_ai_today",
|
|
46
45
|
"get_agent_activity",
|
|
47
|
-
"mcp_registry_snapshot"
|
|
46
|
+
"mcp_registry_snapshot",
|
|
47
|
+
"probe_latest"
|
|
48
48
|
],
|
|
49
49
|
"premiumTools": [
|
|
50
50
|
"premium_routing",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"compare_models",
|
|
59
59
|
"whats_new",
|
|
60
60
|
"mcp_registry_series",
|
|
61
|
+
"probe_series",
|
|
61
62
|
"list_watches",
|
|
62
63
|
"create_price_watch",
|
|
63
64
|
"create_status_watch",
|