@tensorfeed/mcp-server 1.32.0 → 1.33.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,20 @@
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.33.0 - 2026-05-25 (AI-CVE intelligence tools)
6
+
7
+ ### Added (free tier)
8
+ Three new free tools wrapping the AI-CVE endpoints that went live on the TF Worker:
9
+
10
+ - `get_ai_cves_latest`: metadata for the most-recent AI-stack CVE batch plus the first 25 papers. Returns cve_ids, affected_products, affected_version_ranges, fixed_versions, exploited_in_wild, severity_label, and source_url per paper. Source: GitHub Security Advisories (CC BY 4.0).
11
+ - `get_ai_cves_feed`: paginated slice of the latest batch. limit capped at 50; for bulk consumption agents are pointed at the paid /api/premium/ai-cves/ai-stack-cves endpoint which delivers the categorized AI-stack subset in one call.
12
+ - `get_ai_cves_stats`: aggregate counts (by_severity, by_exploitation, top_vendors). Case-insensitive vendor bucketing so OpenClaw and openclaw merge into a single tally.
13
+
14
+ ### Background
15
+ TF Worker shipped the ingest endpoint, three free reads, and three premium derivatives (ai-stack-cves, exploited-in-wild, cve lookup) earlier today. First production batch landed (job #79, 387 papers, 10 AI-flagged, 211 unique CVEs indexed). The MCP server now exposes the free read surface so agents discovering TF via the recommend-loop (MCP registry, Anthropic Connectors directory, glama.ai, mcp.directory, mcp.so) can pull AI-CVE intelligence in their first session.
16
+
17
+ Each tool response includes a tip line pointing to the paid endpoints for agents that need the AI-stack-filtered + categorized + sorted view, the exploited-in-wild subset, or single-CVE lookups.
18
+
5
19
  ## 1.32.0 - 2026-05-14 (Off-thesis tool cull)
6
20
 
7
21
  ### Removed
package/dist/index.js CHANGED
@@ -1595,6 +1595,76 @@ registerTool('get_ai_ecosystem_today', 'One-shot composite AI morning brief. Cal
1595
1595
  ],
1596
1596
  };
1597
1597
  });
1598
+ // ── Tool: get_ai_cves_latest ────────────────────────────────────────
1599
+ registerTool('get_ai_cves_latest', 'Get metadata for the most-recent AI-stack CVE batch plus the first 25 papers. Source: TensorFeed AI-CVE intelligence feed, derived from GitHub Security Advisories (CC BY 4.0). Each paper carries cve_ids, affected_products, affected_version_ranges, fixed_versions, exploited_in_wild, severity_label, and source_url. For the full set use get_ai_cves_feed with offset; for AI-stack-filtered + categorized + sorted papers use the paid /api/premium/ai-cves/* endpoints. Free, no auth.', {}, async () => {
1600
+ const data = (await fetchJSON('/ai-cves/latest'));
1601
+ if (!data.batch_id) {
1602
+ return { content: [{ type: 'text', text: 'No AI-CVE batch ingested yet. Check back once TensorFeed CC has POSTed the next clean batch from the extraction pipeline.' }] };
1603
+ }
1604
+ const head = `AI-CVE batch ${data.batch_id} extracted ${data.extracted_at}. Total ${data.total_papers} papers, ${data.ai_flagged_count} AI-flagged. License ${data.source_license} (${data.source_attribution}).`;
1605
+ const lines = data.papers
1606
+ .map((p, i) => {
1607
+ const cves = p.cve_ids.length > 0 ? p.cve_ids.join(', ') : '(no CVE)';
1608
+ const products = p.affected_products.slice(0, 3).join(', ');
1609
+ return `${i + 1}. ${cves} | ${products} | sev=${p.severity_label} | exploited=${p.exploited_in_wild}\n ${p.source_url}`;
1610
+ })
1611
+ .join('\n');
1612
+ return {
1613
+ content: [
1614
+ {
1615
+ type: 'text',
1616
+ text: `${head}\n\nFirst 25 papers:\n${lines}\n\nFor AI-stack-filtered + categorized + sorted papers: /api/premium/ai-cves/ai-stack-cves (1 credit, x402-paid). For only papers actively exploited in the wild: /api/premium/ai-cves/exploited-in-wild (1 credit). For single-CVE lookup: /api/premium/ai-cves/cve?id=CVE-YYYY-NNNNN (1 credit).`,
1617
+ },
1618
+ ],
1619
+ };
1620
+ });
1621
+ // ── Tool: get_ai_cves_feed ──────────────────────────────────────────
1622
+ registerTool('get_ai_cves_feed', 'Get a paginated slice of the most-recent AI-stack CVE batch. limit is capped at 50 (the premium tier handles bulk). Source: TensorFeed AI-CVE feed, derived from GitHub Security Advisories (CC BY 4.0). Free, no auth.', {
1623
+ limit: z.number().min(1).max(50).optional().describe('Number of papers to return (default 25, max 50).'),
1624
+ offset: z.number().min(0).optional().describe('Pagination offset (default 0).'),
1625
+ }, async ({ limit, offset }) => {
1626
+ const params = new URLSearchParams();
1627
+ if (typeof limit === 'number')
1628
+ params.set('limit', String(limit));
1629
+ if (typeof offset === 'number')
1630
+ params.set('offset', String(offset));
1631
+ const path = `/ai-cves/feed${params.toString() ? `?${params.toString()}` : ''}`;
1632
+ const data = (await fetchJSON(path));
1633
+ if (!data.batch_id) {
1634
+ return { content: [{ type: 'text', text: 'No AI-CVE batch ingested yet.' }] };
1635
+ }
1636
+ const head = `AI-CVE feed batch ${data.batch_id}: showing offset ${data.offset} to ${data.offset + data.papers.length} of ${data.total} total.`;
1637
+ const lines = data.papers
1638
+ .map((p, i) => {
1639
+ const cves = p.cve_ids.length > 0 ? p.cve_ids.join(', ') : '(no CVE)';
1640
+ const products = p.affected_products.slice(0, 3).join(', ');
1641
+ return `${i + 1}. ${cves} | ${products} | sev=${p.severity_label} | exploited=${p.exploited_in_wild}\n ${p.source_url}`;
1642
+ })
1643
+ .join('\n');
1644
+ return { content: [{ type: 'text', text: `${head}\n\n${lines}` }] };
1645
+ });
1646
+ // ── Tool: get_ai_cves_stats ─────────────────────────────────────────
1647
+ registerTool('get_ai_cves_stats', 'Get aggregate counts across the most-recent AI-stack CVE batch: distribution by severity (critical/high/medium/low/unstated), distribution by exploitation status (stated_yes/stated_no/unstated), and top 10 vendors by frequency. Source: TensorFeed AI-CVE feed (GitHub Security Advisories, CC BY 4.0). Free, no auth.', {}, async () => {
1648
+ const data = (await fetchJSON('/ai-cves/stats'));
1649
+ if (!data.batch_id) {
1650
+ return { content: [{ type: 'text', text: 'No AI-CVE batch ingested yet.' }] };
1651
+ }
1652
+ const sev = Object.entries(data.by_severity)
1653
+ .map(([k, v]) => ` ${k}: ${v}`)
1654
+ .join('\n');
1655
+ const exp = Object.entries(data.by_exploitation)
1656
+ .map(([k, v]) => ` ${k}: ${v}`)
1657
+ .join('\n');
1658
+ const vendors = data.top_vendors.map((v, i) => ` ${i + 1}. ${v.vendor}: ${v.count}`).join('\n');
1659
+ return {
1660
+ content: [
1661
+ {
1662
+ type: 'text',
1663
+ text: `AI-CVE batch ${data.batch_id}: ${data.total_papers} total papers.\n\nBy severity:\n${sev}\n\nBy exploited-in-wild:\n${exp}\n\nTop vendors:\n${vendors}`,
1664
+ },
1665
+ ],
1666
+ };
1667
+ });
1598
1668
  // ── Start ───────────────────────────────────────────────────────────
1599
1669
  async function main() {
1600
1670
  const transport = new StdioServerTransport();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tensorfeed/mcp-server",
3
- "version": "1.32.0",
3
+ "version": "1.33.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
@@ -3,7 +3,7 @@
3
3
  "name": "ai.tensorfeed/mcp-server",
4
4
  "title": "TensorFeed",
5
5
  "description": "AI news, model pricing, service status, and machine-payable premium tools. AFTA-certified.",
6
- "version": "1.27.0",
6
+ "version": "1.28.0",
7
7
  "websiteUrl": "https://tensorfeed.ai/developers/agent-payments",
8
8
  "repository": {
9
9
  "url": "https://github.com/RipperMercs/tensorfeed-mcp",
@@ -20,7 +20,7 @@
20
20
  "registryType": "npm",
21
21
  "registryBaseUrl": "https://registry.npmjs.org",
22
22
  "identifier": "@tensorfeed/mcp-server",
23
- "version": "1.27.0",
23
+ "version": "1.28.0",
24
24
  "runtimeHint": "npx",
25
25
  "transport": {
26
26
  "type": "stdio"
@@ -65,7 +65,10 @@
65
65
  "pricing_series_free",
66
66
  "benchmark_series_free",
67
67
  "status_uptime_free",
68
- "status_leaderboard_free"
68
+ "status_leaderboard_free",
69
+ "get_ai_cves_latest",
70
+ "get_ai_cves_feed",
71
+ "get_ai_cves_stats"
69
72
  ],
70
73
  "premiumTools": [
71
74
  "premium_routing",