Local capability index so AI coding agents pick libraries by fit, not popularity. No account.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Vet a package before your AI coding agent uses it β authoritative facts (CVEs, license, maintenance), free, local, no account.
Vet a package in one command β nothing to install, no API key, no account:
Then wire it into your coding agent (Claude Code, Cursor, Copilot, Codex):
Source-available under BUSL-1.1 β free to use, modify, and self-host; converts to Apache-2.0 in 2030. Details β
AI coding agents (Claude Code, Cursor, Copilot) pick libraries from training recall β a snapshot of scraped code, frozen at a cutoff date and ranked by how often an option appeared, not by what fits your task or what's safe now. That recall can't know about a CVE disclosed last week, and it has never seen your company's internal libraries. The agent recommends anyway, with the same confidence either way.
The failure modes are measurable: research finds ~49% of AI-suggested dependencies carry known vulnerabilities and ~34% are hallucinated outright β the package doesn't exist. And for whole categories β most dangerously auth β agents default to hand-rolling custom code instead of reaching for a vetted library.
You can't fix recall by prompting harder. Starlog puts authoritative, dated facts in front of your agent at decision time. Its hero surface is vetting by name β starlog facts <package> returns known CVEs/incidents, SPDX license + risk, and maintenance status (or an honest "no facts on file") β so the install/avoid/pick call rides on facts, not recall. It runs entirely on your machine as an MCP server and a package-install hook, no API key, no sign-up. A companion starlog_search finds candidate packages for a capability; facts vet the pick.
Does it actually change what the agent decides? Yes β measured before/after, on the venue that matters (private libraries and post-cutoff advisories). β the validated result.
starlog_facts MCP tool β your agent looks up authoritative facts about a specific package before recommending it: known CVEs/supply-chain incidents, SPDX license and license risk, maintenance status (active/deprecated/abandoned/compromised), and effect surface. In a 4-model benchmark, agents called this tool unprompted on package decisions (100% recall, 98% specificity) and it moved them toward the correct install/avoid/pick call. Every record is sourced, verified, and dated β each result shows an "as of <date>" line so a stale "no known vulns" is never mistaken for a fresh one. A package with no record returns an honest "no facts on file." Facts are three independent layers, composed at query time: L1 capability/effect-surface (immutable), L2 reputation/vuln/license/maintenance (mutable β carries the as of recency), L3 org policy (your suitability verdict). Override or extend any layer locally: point STARLOG_PRIVATE_FACTS at a JSON file with independent l1/l2 arrays (internal packages, license rulings) and STARLOG_POLICY at an org policy ({ org, rules }) for allow/deny/flag verdicts. With STARLOG_API_KEY set, org-private overlays and policy come from the hosted facts API (local corpus is the offline fallback); starlog facts push uploads your org's overlays + policy. See docs/FACTS-CONTRACT.md.npm install / pnpm add / yarn add / pip install and surfaces that package's facts (known incidents, license, maintenance) before the agent builds on it. Advisory β it informs the next move, it doesn't block the install. Packages with no record are queued for coverage.starlog_search MCP tool β discovery: find candidate packages for a capability (org-sanctioned options first), then vet the named pick with starlog_facts. Discovery surfaces what exists; facts vet it.starlog_advise MCP tool β when your agent sees DIY or repeated capability code, advises MIGRATE to a safe library (e.g. Clerk/Auth0/Supabase over DIY auth) or PACKAGEIZE only when no safe corpus alternative exists. Tracks patterns in .starlog/patterns.json.starlog facts / starlog search / starlog advise / starlog patterns CLI β the same facts, discovery, and migrate-or-packageize advisories from your terminal.STARLOG_API_KEY opts into the hosted facts/search tiers (with local fallback) β get a key at starlog.dev and wire it with starlog init --api-key <key>; anonymous, opt-out usage telemetry is the only thing sent otherwise β see Telemetry.This repo ships the engine plus a curated facts corpus and a discovery corpus of 26 capability manifests across 7 categories (including authentication playbooks for migration).
This wires Starlog into Claude Code (and drops instruction files for Cursor, Copilot, Codex):
~/.claude/settings.json β exposes starlog_facts (vet a package by name), starlog_search (discover candidates), and starlog_advise (migrate-or-packageize for DIY patterns), and wires your per-project private overlays (${CLAUDE_PROJECT_DIR}/.starlog/*) into the agent so internal-package facts + discovery work automatically in each projectPrefer a bare starlog command over typing npx? Install it globally:
If
starlogthen reportscommand not found, your npm global bin directory isn't on yourPATH(a common npm setup gap β not a Starlog issue). Either runexport PATH="$(npm prefix -g)/bin:$PATH"(add it to your shell profile to persist), or just keep usingnpx starloghq init/npx starloghq facts <pkg>, which always work without any PATH setup. If the install itself printed anEACCES/permission error, it didn't complete β fix your npm prefix or usenpx.
Add --project to also drop Starlog guidance into your project's CLAUDE.md; preview without writing, or remove cleanly:
Don't hand-author facts for every internal repo β point Starlog at a directory of checkouts and it derives them in one pass:
For each published package it finds (npm package.json and Python pyproject.toml), it derives:
.starlog/private-facts.json β license + license risk (from the manifest, or detected from the LICENSE file), maintenance from git last-commit recency, stamped source: analyzer with a dated as of. Your agent vets these by name..starlog/private-corpus.json β captures each manifest's description + keywords so your agent can find internal packages by capability via starlog_search, not just vet them by name..starlog/policy.suggested.json β flag candidates (e.g. strong-copyleft, no declared license) derived from the signals. These are proposals the agent does not read β review them, then adopt the ones you trust with starlog facts policy <pkg> flag.Source never leaves your machine; only derived facts are written. Re-run anytime to refresh (it merges over existing facts and regenerates suggestions). Repos with no published name β or no description β are reported, never fabricated. Known-vulnerability scanning and remote GitHub-org enumeration are on the roadmap.
starlog init writes this for you automatically. To configure by hand, add to ~/.claude/settings.json:
This is the same launch command MCP registries use. (From a local source clone instead, point node at dist/mcp.js β $(npm root -g)/starloghq/dist/mcp.js for a global install, or your clone's path.) The server exposes two tools: starlog_facts (an authoritative per-package fact lookup β CVEs, license, maintenance) and starlog_search (a natural-language capability query with optional category, stack, and top_k filters).
Vet a package by name β the hero. Local, no key, no network:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/starlog)<a href="https://allmcps.com/mcp/starlog"><img src="https://allmcps.com/api/badge/starlog?style=directory" alt="Starlog on AllMCPs" /></a>