
Research
/Security News
Popular npm Packages in the keyv and Cacheable Namespaces Compromised in Active Supply Chain Attack
Popular npm packages keyv and cacheable compromised.
Detect upstream API breaking changes, scan your codebase for impact, and open the fix PR.
Dependabot, but for every API you depend on. We watch your upstream API providers for breaking changes, scan your codebase for impact, and open the fix PR before your integration breaks.
# In any repo — zero config, zero npm dependencies, nothing leaves your machine
npx mendapi scan
You get every upstream breaking change that actually hits your code — file, line, and symbol — scored for confidence. Then npx mendapi fix drafts the migration as a reviewable diff.
Using an AI coding agent? One line plugs mendapi into Claude Code as an MCP server (Cursor and every other MCP client work too — details below):
claude mcp add mendapi -- npx mendapi mcp
Requires Node.js 22.13 or newer. Everything runs locally: the scanner, fixer, and review CLIs contain no network code at all.
This tool is designed for teams that cannot let source code leave their machines. The security model is the product, not a FAQ entry:
payload.js) is whitelist-constructed: provider names, SDK versions, file basenames, line numbers, and symbol names only. Code snippets are structurally impossible to include — the field does not exist in the payload schema. Reporting requires an explicit --report-to flag; it is never on by default.contents:read + pull_requests:write on repos you choose. Never admin.Three components form a closed loop:
| Component | Role | Where it runs |
|---|---|---|
| Watcher | Monitors 20 major API providers (Stripe, OpenAI, Anthropic, Shopify, Twilio, Slack, GitHub, Google, AWS, Plaid, PayPal, Meta, Cloudflare, Vercel, Supabase, Firebase, Notion, HubSpot, Salesforce, SendGrid) via SDK release feeds and official developer changelogs. Classifies each change (breaking / deprecation / additive / fix / docs-only) into a structured SQLite database. | Our infrastructure (or yours, self-hosted) |
| Scanner | Reads the change database, detects which providers your repo actually uses (SDK imports, API hosts, env vars — context-aware, not naive grep), and pinpoints the exact files, lines, and symbols affected by each breaking change. Three-tier confidence scoring plus an optional LLM semantic review pass keeps false positives near zero. | Locally, on your machine or CI |
| Fixer | Applies deterministic migration rule packs (e.g. openai-v3-to-v4, stripe-v7-to-v8) to produce a reviewable diff, then opens a fix PR on a dedicated branch with the official migration guide cited in the commit message. | Locally by default; hosted for paid plans |
Requires Node.js 22.13 or newer (uses built-in node:sqlite). Zero npm dependencies.
# Fetch the latest API change feed (the only command that touches the network)
mendapi sync
# Scan the current repo against the breaking-change database (zero config)
mendapi scan
# Or scan a specific repo and save the report
mendapi scan --repo /path/to/your/repo --out impact.json
# Review medium-confidence findings (optional LLM semantic pass)
mendapi review impact.json --pending
# Preview fixes (dry-run: writes a unified diff, changes nothing)
mendapi fix --from-report impact.json
# Create a fix branch + commit + PR-ready description (local only;
# --push is required to actually push, and is never implied)
mendapi pr --repo /path/to/your/repo --from-report impact.json
Running from a checkout? node app/cli.js <command> works identically.
This is real output — the exact diff our test suite pins, byte for byte, for the openai-node v3 → v4 migration pack. Note the two lines that mention the legacy calls inside a string and a template literal: the codemod leaves both untouched, because rules anchor on call positions in the syntax tree, not on text patterns.
--- a/lib/ai.js
+++ b/lib/ai.js
@@ -1,28 +1,27 @@
// Demo service using the legacy openai-node v3 SDK (pre-v4 breaking change).
// Docs note: openai.createChatCompletion({...}) was the v3 entry point.
-const { Configuration, OpenAIApi } = require('openai');
+const OpenAI = require('openai');
// This string mentions the legacy call and must never be rewritten by the fixer:
const LEGACY_HINT = 'if you still call openai.createChatCompletion( upgrade to v4';
const AUDIT_LOG_LINE = `migrating away from .createEmbedding( for tenant`;
-const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY });
-const openai = new OpenAIApi(configuration);
+const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function summarize(text) {
- const response = await openai.createChatCompletion({
+ const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: `Summarize: ${text}` }],
});
- return response.data.choices[0].message.content;
+ return response.choices[0].message.content;
}
async function embed(text) {
- const response = await openai.createEmbedding({
+ const response = await openai.embeddings.create({
model: 'text-embedding-ada-002',
input: text,
});
- return response.data.data[0].embedding;
+ return response.data[0].embedding;
}
module.exports = { summarize, embed };
Every migration pack ships with a pinned diff like this one; the build fails if a pack's output drifts from its gold evidence. Six more, embedded with the same byte-match guarantee, are on the provider guides: OpenAI, AWS, Cloudflare, PayPal, Vercel, Stripe, Shopify.
mendapi mcp starts a Model Context Protocol server on stdio — offline-first, zero network: every tool call runs the local CLIs against the local SQLite database only, and the server ships with zero npm dependencies. It speaks the current MCP revision (2026-07-28, per-request _meta version negotiation + server/discover) and keeps full backward compatibility with older clients that use the initialize handshake (2025-06-18 / 2025-03-26) — a dual-era server, because a tool that repairs breaking changes should not ship one.
Claude Code (one line):
claude mcp add mendapi -- npx mendapi mcp
Cursor (or any JSON-configured MCP client) — add to .cursor/mcp.json:
{
"mcpServers": {
"mendapi": { "command": "npx", "args": ["mendapi", "mcp"] }
}
}
Tools exposed: scan, deps, fix, revalidate, changes — the same schema_version-stamped JSON as the CLI --json flags. See the For AI agents docs page for the full tool catalog and an autonomous-maintenance recipe.
Alert fatigue kills tools like this. Our scanner gates every finding through:
youtube release does not page the team that only uses S3.getR never matches getRelatedArticles.process.env.STRIPE_KEY counts; a regex constant named META_RE does not.Dogfooding across three production repos: the current pipeline reports zero false positives where an earlier naive version produced 27.
We benchmark the change database against real provider spec corpora and publish the full accounting — every headline number is recomputed from archived evidence by the site's build gates, so the reports cannot drift from the data:
Published on npm as mendapi (v0.5.5). Early release — the change database and migration pack registry grow daily; interfaces may still shift before 1.0.
AGPL-3.0-only for the CLI (see LICENSE). Chosen so security teams can audit every line that reads code or builds a payload, and so hosted forks must share their changes.
FAQs
Detect upstream API breaking changes, scan your codebase for impact, and open the fix PR.
The npm package mendapi receives a total of 548 weekly downloads. As such, mendapi popularity was classified as not popular.
We found that mendapi demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.

Security News
/Company News
Socket has joined the new Composer and Packagist sponsorship program as a launch sponsor, supporting the team that keeps PHP's package ecosystem secure.