The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the GroundTruth MCP listing page.
██████╗ ████████╗ ███╗ ███╗ ██████╗ ██████╗ ██╔════╝ ╚══██╔══╝ ████╗ ████║ ██╔════╝ ██╔══██╗ ██║ ███╗ ██║ ██╔████╔██║ ██║ ██████╔╝ ██║ ██║ ██║ ██║╚██╔╝██║ ██║ ██╔═══╝ ╚██████╔╝ ██║ ██║ ╚═╝ ██║ ╚██████╗ ██║ |
Your model doesn't know that React 19 killed forwardRef, that Next.js made cookies() async, or that Tailwind v4 nuked @tailwind directives. It writes deprecated patterns with full confidence. It hands you SQL injection dressed up as a query builder and uses any in TypeScript like it's a feature.
GroundTruth runs on your machine. Fetches docs from the source — llms.txt, Jina Reader, GitHub — right when you ask. 598+ curated libraries, plus npm, PyPI, crates.io, and pkg.go.dev as fallback. The audit tool reads your actual files, finds issues at exact file:line locations, and fetches the current fix from the real spec.
Add to your MCP config (claude_desktop_config.json, .cursor/mcp.json, or .vscode/mcp.json):
No build step. No config file. Node.js 24+. Using @latest means npx pulls the newest version on every session start — you always get the latest libraries, audit patterns, and fixes without doing anything.
GroundTruth fetches README files, release notes, migration guides, and code examples from GitHub. Unauthenticated requests are limited to 60/hr. A token with no extra scopes takes it to 5,000/hr.
Fourteen tools. Each does one thing.
| Tool | What it does |
|---|---|
gt_resolve_library | Find a library by name. Falls back to npm, PyPI, crates.io, pkg.go.dev |
gt_get_docs | Fetch live docs for a specific topic |
gt_best_practices | Patterns, anti-patterns, and config guidance for any library |
gt_auto_scan | Read your manifest, fetch best practices for every dependency |
gt_search | Search OWASP, MDN, web.dev, W3C, AI provider docs, Google APIs |
gt_audit | Scan source files — issues at exact file:line with live fixes |
gt_changelog | Release notes before you upgrade |
gt_compat | Browser and runtime compatibility via MDN + caniuse |
gt_compare | Compare 2-3 libraries side-by-side |
gt_examples | Real-world code examples from GitHub |
gt_migration | Migration guides and breaking changes |
gt_batch_resolve | Resolve up to 20 libraries in one call |
gt_snippets | Pre-indexed, ranked code snippets per library and version, cached on disk |
gt_dispatch | Routes a plain-text query ("use gt mcp") to the right tool with args |
You don't need to memorize tool names. Just talk to your AI assistant.
Or call tools directly:
gt_audit — the one that finds what you missedWalks your project, runs 107+ patterns across 18 categories, pinpoints issues at file:line, then fetches fix guidance from the authoritative source.
| Category | What it checks |
|---|---|
security | XSS, SQL injection, command injection, SSRF, path traversal, hardcoded credentials, CORS wildcard |
accessibility | Missing alt text, onClick on div, icon-only buttons, inputs without labels, outline: none |
react | forwardRef (React 19), useFormState renamed, index as key, conditional hooks |
nextjs | Sync cookies/headers/params (Next.js 16), Tailwind v3 directives, missing metadata |
typescript | any type, non-null assertions, @ts-ignore, floating Promises |
performance | Missing lazy loading, useEffect data fetching, missing Suspense boundaries |
layout | CLS-causing images, 100vh on mobile, missing font-display |
node | console.log in production, sync fs ops, unhandled callbacks |
python | SQL injection via f-string, eval/exec, subprocess shell=True, pickle.loads |
Sample output:
gt_auto_scan — best practices for your whole stackPoint it at your project root. It reads the manifest, figures out what you're using, and pulls best practices for each dependency.
Supports package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod, pom.xml, build.gradle, and composer.json.
gt_search — anything that isn't a specific libraryCovers security, accessibility, performance, web APIs, CSS, HTTP, AI providers, Google APIs, infrastructure, databases, and more.
| Area | Topics |
|---|---|
| Security | OWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, CORS, JWT, OAuth 2.1, WebAuthn, SSRF, API security |
| Accessibility | WCAG 2.2, WAI-ARIA, keyboard navigation |
| Performance | Core Web Vitals, image optimization, web fonts, Speculation Rules |
| Web APIs | Fetch, Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer |
| CSS | Grid, Flexbox, Container Queries, View Transitions, Cascade Layers, :has(), Subgrid |
| AI providers | Claude, OpenAI, Gemini, Mistral, Cohere, Groq, LangChain, LlamaIndex |
| Maps, Analytics, Ads, Cloud, Firebase, Vertex AI, YouTube, Gmail, Sheets | |
| Infrastructure | Docker, Kubernetes, GitHub Actions, Terraform, Cloudflare Workers |
For every request, GroundTruth tries sources in order and stops at the first one that returns useful content:
llms.txt / llms-full.txt — context files published by maintainers for LLM consumptionThe failure mode of every docs tool is the confident non-answer: you ask about row-level security, the tool hands back the Postgres landing page, and your model writes something plausible from it.
GroundTruth checks the content it fetched against the question you asked before returning it. The check measures how many of your topic's terms appear, how often, and whether they show up in a heading or inside a code block. Link targets and URL query strings don't count — a 404 page whose nav links happen to contain your topic doesn't pass.
Three things follow from that:
## Evidence footer — source URLs, fetch date, and topic-coverage stats — so you can audit where it came from.Docs vocabulary rarely matches yours, so the check is synonym-aware: an rls query is satisfied by a page that says "row level security", and a page found by expanding "migration" to "upgrade guide" isn't then failed for lacking the literal word.
598+ curated entries with 100% best-practices and URL pattern coverage, plus automatic fallback to npm, PyPI, crates.io, and pkg.go.dev. Any public package in any major ecosystem is resolvable.
| Ecosystem | Libraries |
|---|---|
| React / Next.js | React, Next.js, shadcn/ui, Radix UI, Tailwind CSS, Headless UI |
| State management | Zustand, Jotai, TanStack Query, SWR, Redux Toolkit, XState |
| Backend (Node.js) | Express, Fastify, Hono, NestJS, Elysia, tRPC |
| Backend (Python) | FastAPI, Django, Flask, Pydantic |
| Backend (Go / Rust) | Gin, Fiber, GORM, Axum, Actix Web, Tokio |
| Database / ORM | Prisma, Drizzle, Kysely, TypeORM, Supabase, Neon, Turso |
| AI / LLM | Claude API, OpenAI API, Gemini API, Vercel AI SDK, LangChain, LlamaIndex |
| Testing | Vitest, Playwright, Jest, Testing Library, Cypress, MSW |
| Auth | Clerk, NextAuth, Better Auth, Lucia |
| Mobile | Expo, React Native, React Navigation, NativeWind |
| Build tools | Vite, Turbopack, SWC, Biome, ESLint, Turborepo |
| Cloud | Vercel, Cloudflare Workers, AWS SDK, Firebase, Google Cloud |
| Monitoring | Sentry, PostHog, OpenTelemetry |
The full curated list is the registry source itself: src/sources/registry.ts.
Context7 is solid. Here's why I reach for this instead.
| GroundTruth | Context7 | |
|---|---|---|
| Hosting | Self-hosted (stdio) + HTTP mode | Cloud backend, local MCP client |
| Rate limits | None | 1,000 free/month ($10/seat for 5,000) |
| Transport | Stdio + Streamable HTTP | Stdio + Streamable HTTP |
| Source priority | llms.txt -> Jina -> GitHub -> npm/PyPI | Vector DB with proprietary crawl pipeline |
| Answer verification | Evidence gate on every topic query; explicit miss when unverifiable | No |
| Tools | 14 specialized tools | 2 tools |
| Code audit | 107+ patterns, 18 categories, file:line, live fixes | No |
| Freeform search | OWASP, MDN, AI docs, Google APIs, web standards | Library docs only |
| Changelog, compat, compare, examples, migration | Yes | No |
| MCP Resources + Prompts | 2 resources, 8 prompts | No |
| Lockfile detection | Reads exact versions from lockfiles | No |
| Libraries | 598+ curated + npm/PyPI/crates.io/Go fallback | Undisclosed (claims "thousands") |
| API key required | No | No |
Context7 indexes docs into a vector database — fast lookups, but with indexing lag on new releases. GroundTruth fetches from the source at query time, prioritizes llms.txt, and scores content quality so your model knows when to retry.
All optional. Works out of the box with zero configuration.
| Variable | Purpose | Default |
|---|---|---|
GT_GITHUB_TOKEN | GitHub API auth — raises rate limit from 60 to 5,000 req/hr | none |
GT_CACHE_DIR | Disk cache location for persistent cross-session caching | ~/.gt-mcp-cache |
GT_CONCURRENCY | Parallel fetch limit in gt_auto_scan | 8 |
GT_AUTH_TOKEN | Bearer token required for HTTP transport endpoints | none |
GT_HTTP_PORT | Port to enable HTTP transport (otherwise stdio) | none |
GT_HTTP_STATEFUL | Set =1 for session-per-request HTTP mode | 0 (stateless) |
The public registry lives in src/sources/registry.ts. Adding a library is a PR with id, name, docsUrl, and llmsTxtUrl if the project publishes one.
Issues and requests: github.com/rm-rf-prod/GroundTruth-MCP/issues
GroundTruth is under active development. New curated registry entries, audit patterns, search topics, and features are added regularly. The registry covers 598+ libraries with 100% bestPracticesPaths and urlPatterns coverage. Automatic fallback to npm, PyPI, crates.io, and pkg.go.dev means any public package is resolvable out of the box.
To stay updated:
@latest in your MCP config (the default install command) — npx fetches the newest version automaticallyEvery tool ships its own full schema and description — your MCP client lists them, and gt_dispatch explains which one it would pick for a given phrasing and why.
| What | Where |
|---|---|
| Tool schemas and parameter docs | tools/list in any MCP client, or src/tools/ |
| Complete library list | src/sources/registry.ts |
| Audit rules — 107 patterns, 18 categories | src/sources/audit-patterns.ts |
| Routing table | npx @groundtruth-mcp/gt-mcp --routing-table |
| Health, telemetry, circuit-breaker state | npx @groundtruth-mcp/gt-mcp --health, or /health in HTTP mode |
| Release history | CHANGELOG.md |
Elastic License 2.0 — free to use, free to self-host, free to build on. The one thing you can't do is turn it into a managed service and sell it. Fair enough.