@tensorfeed/mcp-server 1.27.0 → 1.28.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 +7 -0
- package/dist/index.js +56 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
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.28.0 - 2026-05-13
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `get_ai_supply_chain_iocs` (free): wraps `/api/security/ai-supply-chain-iocs.json`. Daily-refreshed list of GitHub Security Advisory entries filtered by AI/ML/LLM/MCP keyword vocabulary across npm, PyPI, Go, Maven, and other package ecosystems. Each row carries the package name, ecosystem, GHSA advisory ID, severity, summary, vulnerable version range, publication date, and the canonical GHSA URL. Optional `severity` and `ecosystem` filters; `limit` caps result count (default 25, max 100). Republish posture: TensorFeed re-publishes already-public advisories; the linked GHSA record is authoritative. Useful for MCP-server reviewers, AI-tool maintainers, and supply-chain monitors that want a single AI-relevant feed rather than parsing all of GHSA.
|
|
9
|
+
|
|
10
|
+
Tool count: 45 -> 46. Lands the same security feed that caught the @mistralai npm worm on day 1, now reachable as an MCP tool for defenders running agentic supply-chain audits.
|
|
11
|
+
|
|
5
12
|
## 1.27.0 - 2026-05-09
|
|
6
13
|
|
|
7
14
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -267,6 +267,62 @@ registerTool('get_agent_activity', 'Get live AI bot traffic on TensorFeed.ai. Re
|
|
|
267
267
|
],
|
|
268
268
|
};
|
|
269
269
|
});
|
|
270
|
+
// ── Tool: get_ai_supply_chain_iocs ──────────────────────────────────
|
|
271
|
+
registerTool('get_ai_supply_chain_iocs', 'Get the latest AI/ML supply-chain indicators-of-compromise from the TensorFeed defender feed. Daily-refreshed list of GitHub Security Advisory entries filtered by AI/ML/LLM/MCP keyword vocabulary across npm, PyPI, Go, Maven, and other ecosystems. Each entry includes the package name, ecosystem, GHSA advisory ID, severity, summary, vulnerable version range, publication date, and a link to the authoritative GHSA record. Pure data feed: TensorFeed re-publishes already-public advisories, does not detect malware, and does not attribute it. Always treat the linked GHSA record as authoritative. Useful for AI-tool maintainers, MCP-server reviewers, and supply-chain monitors that want a single feed of AI-relevant advisories rather than parsing all of GHSA.', {
|
|
272
|
+
severity: z
|
|
273
|
+
.enum(['critical', 'high', 'moderate', 'low'])
|
|
274
|
+
.optional()
|
|
275
|
+
.describe('Filter to a single GHSA severity tier'),
|
|
276
|
+
ecosystem: z
|
|
277
|
+
.string()
|
|
278
|
+
.optional()
|
|
279
|
+
.describe('Filter to a single package ecosystem (e.g. "npm", "pypi", "go", "maven")'),
|
|
280
|
+
limit: z
|
|
281
|
+
.number()
|
|
282
|
+
.min(1)
|
|
283
|
+
.max(100)
|
|
284
|
+
.optional()
|
|
285
|
+
.describe('Maximum number of advisories to return (default 25, max 100)'),
|
|
286
|
+
}, async ({ severity, ecosystem, limit }) => {
|
|
287
|
+
const data = (await fetchJSON('/security/ai-supply-chain-iocs.json'));
|
|
288
|
+
const sevWanted = severity?.toLowerCase();
|
|
289
|
+
const ecoWanted = ecosystem?.toLowerCase();
|
|
290
|
+
const filtered = data.entries.filter((e) => {
|
|
291
|
+
if (sevWanted && e.severity.toLowerCase() !== sevWanted)
|
|
292
|
+
return false;
|
|
293
|
+
if (ecoWanted && e.package.ecosystem.toLowerCase() !== ecoWanted)
|
|
294
|
+
return false;
|
|
295
|
+
return true;
|
|
296
|
+
});
|
|
297
|
+
const cap = Math.min(limit ?? 25, 100);
|
|
298
|
+
const rows = filtered.slice(0, cap);
|
|
299
|
+
if (rows.length === 0) {
|
|
300
|
+
return {
|
|
301
|
+
content: [
|
|
302
|
+
{
|
|
303
|
+
type: 'text',
|
|
304
|
+
text: `No AI supply-chain IOCs matched (total in feed: ${data.total}, generated ${data.generated_at}).`,
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
const body = rows
|
|
310
|
+
.map((e, i) => {
|
|
311
|
+
const kw = e.ai_relevance?.matched_keywords?.length
|
|
312
|
+
? ` [matched: ${e.ai_relevance.matched_keywords.join(', ')}]`
|
|
313
|
+
: '';
|
|
314
|
+
return [
|
|
315
|
+
`${i + 1}. ${e.package.ecosystem}: ${e.package.name} (${e.severity.toUpperCase()})`,
|
|
316
|
+
` ${e.summary}`,
|
|
317
|
+
` GHSA: ${e.advisory_id} ${e.url}`,
|
|
318
|
+
` Affected: ${e.vulnerable_version_range} Published: ${e.published_at}${kw}`,
|
|
319
|
+
].join('\n');
|
|
320
|
+
})
|
|
321
|
+
.join('\n\n');
|
|
322
|
+
const header = `AI supply-chain IOCs (${rows.length} of ${filtered.length} matched, ${data.total} in feed, generated ${data.generated_at}):`;
|
|
323
|
+
const footer = `\n\nPosture: ${data.posture}`;
|
|
324
|
+
return { content: [{ type: 'text', text: `${header}\n\n${body}${footer}` }] };
|
|
325
|
+
});
|
|
270
326
|
// ════════════════════════════════════════════════════════════════════
|
|
271
327
|
// PREMIUM TOOLS (require TENSORFEED_TOKEN env var, paid in USDC on Base)
|
|
272
328
|
// ════════════════════════════════════════════════════════════════════
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorfeed/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.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",
|