@tensorfeed/mcp-server 1.39.0 → 2.0.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,67 @@
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
+ ## 2.0.0 - 2026-06-07
6
+
7
+ Major tool-surface rework. BREAKING: the catalog drops from about 78 tools to
8
+ exactly 24. The old surface had grown wide enough that agents picked the wrong
9
+ tool or stalled across near-duplicate names; 24 sharp tools make tool-selection
10
+ reliable. No HTTP endpoint was removed. Everything still works at
11
+ tensorfeed.ai; this release only changes which slices are first-class MCP tools.
12
+
13
+ ### Migration
14
+
15
+ If your code called any of the names below, switch to the replacement:
16
+
17
+ - The eight signed verdicts collapse from preview plus paid pairs into one tool
18
+ each with a `tier` parameter. `<family>_verdict_preview` and
19
+ `<family>_verdict` are now a single `<family>_verdict`, where `tier` is
20
+ `preview` (free, the default) or `full` (1 credit, AFTA-signed). Affected
21
+ families: route, provider_reliability, x402_settlement, x402_publisher,
22
+ stack_safety, benchmark_trust, failover, ssvc.
23
+ - The four time series collapse from free plus paid pairs into one tool each
24
+ with a `days` parameter. `pricing_series_free` and `pricing_series` are now a
25
+ single `pricing_series`; the same applies to `benchmark_series`,
26
+ `status_uptime`, and `status_leaderboard`. Pass `days` 1 to 7 for the free
27
+ window or 8 to 90 for the paid window.
28
+ - The four watch creators merge into one `create_watch` with a `type`
29
+ parameter. `create_price_watch`, `create_status_watch`, `create_digest_watch`,
30
+ and `create_leaderboard_rank_watch` are now `create_watch` with `type` set to
31
+ `price`, `status`, `digest`, or `leaderboard_rank`.
32
+ - `get_ai_today` folds into `get_ai_news`. Pass `digest: true` for the daily
33
+ brief that `get_ai_today` used to return.
34
+ - `get_account_balance` and `get_account_usage` merge into one `account_status`
35
+ that returns both the balance and the usage view.
36
+
37
+ ### Removed from the tool list (still live as HTTP endpoints)
38
+
39
+ About 40 long-tail standalone tools were dropped from the MCP surface, including
40
+ the model-deprecation, agent-activity, IOC, AFTA-certification,
41
+ agent-reputation, agent-readiness, crawler-access, MCP-registry-snapshot,
42
+ probe, paper and trending feeds, Reddit, OpenRouter, ecosystem-today,
43
+ earthquake, weather-alert, agent-opportunity, AI-CVE, company-filings, x402
44
+ market, and the standalone routing, news-search, cost-projection, and
45
+ agents-directory tools. None of these went away on the server. Each one is
46
+ still callable as an HTTP endpoint on tensorfeed.ai, and the new
47
+ `find_tensorfeed_data` tool helps an agent discover the right one on demand.
48
+
49
+ ### Added
50
+
51
+ - `find_tensorfeed_data`: a discovery tool. Describe the AI-ecosystem data you
52
+ want and it returns the matching TensorFeed endpoints, with the path and
53
+ parameters to call, so an agent can reach the full catalog without a dedicated
54
+ tool for every feed.
55
+
56
+ ### The 24 tools
57
+
58
+ `get_ai_news`, `get_ai_status`, `is_service_down`, `get_model_pricing`,
59
+ `route_verdict`, `provider_reliability_verdict`, `x402_settlement_verdict`,
60
+ `x402_publisher_verdict`, `stack_safety_verdict`, `benchmark_trust_verdict`,
61
+ `failover_verdict`, `ssvc_verdict`, `whats_new`, `compare_models`,
62
+ `provider_deepdive`, `pricing_series`, `benchmark_series`, `status_uptime`,
63
+ `status_leaderboard`, `account_status`, `list_watches`, `create_watch`,
64
+ `delete_watch`, `find_tensorfeed_data`.
65
+
5
66
  ## 1.39.0 - 2026-06-04
6
67
 
7
68
  Surfaces TensorFeed's full signed-verdict family in the stdio server. Adds the
package/README.md CHANGED
@@ -43,17 +43,17 @@ Swap `task` for `reasoning`, `creative`, or `general`, or pass `?model=<id-or-na
43
43
 
44
44
  ### The agent path (MCP)
45
45
 
46
- With `@tensorfeed/mcp-server` installed, an agent gets two tools. Call the free one for the pick, then the paid one when it needs to defend the choice:
46
+ With `@tensorfeed/mcp-server` installed, an agent gets one `route_verdict` tool with a `tier` parameter. Call it with the default free tier for the pick, then `tier="full"` when it needs to defend the choice:
47
47
 
48
48
  ```text
49
- # Free taste: the top pick + reasoning, no token (10/IP/day)
50
- route_verdict_preview({ task: "code" })
49
+ # Free taste: the top pick + reasoning, no token (10/IP/day). tier defaults to "preview".
50
+ route_verdict({ task: "code" })
51
51
 
52
52
  # 1 credit: ranked runners-up, constraint filters, AFTA-signed receipt
53
- route_verdict({ task: "code", max_latency_p95_ms: 1500, budget: 8, min_quality: 0.6 })
53
+ route_verdict({ task: "code", tier: "full", max_latency_p95_ms: 1500, budget: 8, min_quality: 0.6 })
54
54
  ```
55
55
 
56
- `route_verdict` adds the ranked runners-up, the constraint filters (`max_latency_p95_ms`, `budget`, `min_quality`, `require_operational`, `exclude_deprecated`), and the AFTA-signed receipt the agent can audit later. Credits come from [tensorfeed.ai/developers/agent-payments](https://tensorfeed.ai/developers/agent-payments).
56
+ `tier="full"` adds the ranked runners-up, the constraint filters (`max_latency_p95_ms`, `budget`, `min_quality`, `require_operational`, `exclude_deprecated`), and the AFTA-signed receipt the agent can audit later. Credits come from [tensorfeed.ai/developers/agent-payments](https://tensorfeed.ai/developers/agent-payments).
57
57
 
58
58
  ### Why it matters
59
59
 
@@ -61,11 +61,11 @@ Models, prices, and latency move week to week. `route_verdict` is one signed cal
61
61
 
62
62
  ## Catalog
63
63
 
64
- 79 tools (48 free, 31 premium). Free tools need no token; premium tools charge USDC on Base via x402 and return an AFTA-signed receipt. The full tool reference lives in the [standalone repo](https://github.com/RipperMercs/tensorfeed-mcp).
64
+ 24 tools. The core flagships, the eight signed verdicts, the time-series tools, and the webhook watches are dedicated tools; the rest of the 100+ TensorFeed endpoints are reachable through the `find_tensorfeed_data` discovery tool and callable over HTTP. Free tiers need no token; paid tiers charge USDC on Base via x402 and return an AFTA-signed receipt. The full tool reference lives in the [standalone repo](https://github.com/RipperMercs/tensorfeed-mcp).
65
65
 
66
66
  ### Verdict family
67
67
 
68
- Seven signed decisions, each with a free preview tool plus a 1-credit ($0.02) AFTA-signed premium version:
68
+ Eight signed decisions (route_verdict is featured above). Each is a single tool with a `tier` parameter: `tier="preview"` (default) is free, `tier="full"` costs 1 credit ($0.02) and adds the full ranking and an AFTA-signed receipt:
69
69
 
70
70
  - **provider_reliability_verdict**: the safest AI provider to build on, ranked by availability and tail consistency over TensorFeed's own probes.
71
71
  - **x402_settlement_verdict**: the x402 settlement momentum, concentration, and leading publisher over a 24h, 7d, or 30d window.
@@ -0,0 +1,9 @@
1
+ export interface EndpointRow {
2
+ key: string;
3
+ path: string;
4
+ description: string;
5
+ }
6
+ /** Flatten the /api/meta `api` object ({key: 'path (desc)'}) into rows. */
7
+ export declare function flattenCatalog(meta: unknown): EndpointRow[];
8
+ /** Keyword-overlap score of a query against each row's key + description. Returns top N with score > 0. */
9
+ export declare function scoreEndpoints(rows: EndpointRow[], query: string, limit: number): EndpointRow[];
@@ -0,0 +1,38 @@
1
+ /** Flatten the /api/meta `api` object ({key: 'path (desc)'}) into rows. */
2
+ export function flattenCatalog(meta) {
3
+ const api = meta?.api;
4
+ if (!api || typeof api !== 'object')
5
+ return [];
6
+ const rows = [];
7
+ for (const [key, val] of Object.entries(api)) {
8
+ if (typeof val !== 'string')
9
+ continue;
10
+ const m = val.match(/^(\S+)\s*(.*)$/);
11
+ const path = m ? m[1] : val;
12
+ const description = m ? m[2].replace(/^\(/, '').replace(/\)$/, '') : '';
13
+ rows.push({ key, path, description });
14
+ }
15
+ return rows;
16
+ }
17
+ const STOP = new Set(['the', 'a', 'an', 'for', 'of', 'to', 'and', 'or', 'in', 'on', 'with', 'me', 'get', 'find', 'data', 'i', 'need', 'want', 'my']);
18
+ function tokenize(s) {
19
+ return s.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length > 2 && !STOP.has(t));
20
+ }
21
+ /** Keyword-overlap score of a query against each row's key + description. Returns top N with score > 0. */
22
+ export function scoreEndpoints(rows, query, limit) {
23
+ const q = new Set(tokenize(query));
24
+ if (q.size === 0)
25
+ return [];
26
+ const scored = rows
27
+ .map((r) => {
28
+ const hay = tokenize(r.key + ' ' + r.description);
29
+ let score = 0;
30
+ for (const t of hay)
31
+ if (q.has(t))
32
+ score += 1;
33
+ return { r, score };
34
+ })
35
+ .filter((x) => x.score > 0)
36
+ .sort((a, b) => b.score - a.score);
37
+ return scored.slice(0, limit).map((x) => x.r);
38
+ }