Back to Directory/Developer Tools

io.github.rm-rf-prod/groundtruth

Self-hosted MCP for live docs, code audits, and best practices. 363+ libraries, no rate limits.

Developer ToolsTypeScriptv5.2.0
<div align="center"> <table><tr><td> <pre> ██████╗ ████████╗ ███╗ ███╗ ██████╗ ██████╗ ██╔════╝ ╚══██╔══╝ ████╗ ████║ ██╔════╝ ██╔══██╗ ██║ ███╗ ██║ ██╔████╔██║ ██║ ██████╔╝ ██║ ██║ ██║ ██║╚██╔╝██║ ██║ ██╔═══╝ ╚██████╔╝ ██║ ██║ ╚═╝ ██║ ╚██████╗ ██║ </pre> </td></tr></table> </div>

The problem

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. 422+ 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.



Install

Claude Code

bash
claude mcp add gt -- npx -y @groundtruth-mcp/gt-mcp@latest

Cursor / Claude Desktop / VS Code

Add to your MCP config (claude_desktop_config.json, .cursor/mcp.json, or .vscode/mcp.json):

json
{
  "mcpServers": {
    "gt": {
      "command": "npx",
      "args": ["-y", "@groundtruth-mcp/gt-mcp@latest"]
    }
  }
}

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.

Optional: GitHub token

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.

bash
# Claude Code
claude mcp add gt -e GT_GITHUB_TOKEN=ghp_yourtoken -- npx -y @groundtruth-mcp/gt-mcp@latest

# Cursor / Claude Desktop / VS Code — add env to your config:
"env": { "GT_GITHUB_TOKEN": "ghp_yourtoken" }

What it does

Twelve tools. Each does one thing.

ToolWhat it does
gt_resolve_libraryFind a library by name. Falls back to npm, PyPI, crates.io, pkg.go.dev
gt_get_docsFetch live docs for a specific topic
gt_best_practicesPatterns, anti-patterns, and config guidance for any library
gt_auto_scanRead your manifest, fetch best practices for every dependency
gt_searchSearch OWASP, MDN, web.dev, W3C, AI provider docs, Google APIs
gt_auditScan source files — issues at exact file:line with live fixes
gt_changelogRelease notes before you upgrade
gt_compatBrowser and runtime compatibility via MDN + caniuse
gt_compareCompare 2-3 libraries side-by-side
gt_examplesReal-world code examples from GitHub
gt_migrationMigration guides and breaking changes
gt_batch_resolveResolve up to 20 libraries in one call

How to use it

You don't need to memorize tool names. Just talk to your AI assistant.

text
use gt for nextjs
use gt for drizzle migrations
gt audit
use gt to check WCAG focus indicators
use gt for OpenTelemetry setup
find all issues and fix with gt
use gt for Google Gemini API
use gt for Claude tool use

Or call tools directly:

typescript
gt_resolve_library({ libraryName: "nestjs" })
gt_get_docs({ libraryId: "nestjs/nest", topic: "guards" })
gt_best_practices({ libraryId: "vercel/next.js", topic: "caching" })
gt_auto_scan({ projectPath: "." })
gt_search({ query: "OWASP SQL injection prevention" })
gt_audit({ projectPath: ".", categories: ["security", "accessibility"] })
gt_changelog({ libraryId: "vercel/next.js", version: "15" })
gt_compat({ feature: "CSS container queries", environments: ["safari"] })
gt_compare({ libraries: ["prisma", "drizzle-orm"], criteria: "TypeScript support" })
gt_examples({ library: "hono", pattern: "middleware" })

gt_audit — the one that finds what you missed

Walks your project, runs 107+ patterns across 18 categories, pinpoints issues at file:line, then fetches fix guidance from the authoritative source.

text
gt_audit({ categories: ["all"] })                      // all 18 categories
gt_audit({ categories: ["security", "node"] })         // OWASP + Node.js
gt_audit({ categories: ["python", "security"] })       // Python OWASP scan
gt_audit({ categories: ["accessibility"] })            // WCAG AA
gt_audit({ categories: ["typescript", "react"] })      // type safety + React rules
CategoryWhat it checks
securityXSS, SQL injection, command injection, SSRF, path traversal, hardcoded credentials, CORS wildcard
accessibilityMissing alt text, onClick on div, icon-only buttons, inputs without labels, outline: none
reactforwardRef (React 19), useFormState renamed, index as key, conditional hooks
nextjsSync cookies/headers/params (Next.js 16), Tailwind v3 directives, missing metadata
typescriptany type, non-null assertions, @ts-ignore, floating Promises
performanceMissing lazy loading, useEffect data fetching, missing Suspense boundaries
layoutCLS-causing images, 100vh on mobile, missing font-display
nodeconsole.log in production, sync fs ops, unhandled callbacks
pythonSQL injection via f-string, eval/exec, subprocess shell=True, pickle.loads

Sample output:

text
## [CRITICAL] SQL built via template literal
Category: security | Severity: critical | Count: 2

Fix: db.query('SELECT * FROM users WHERE id = $1', [userId])

Files:
  - src/db/users.ts:47
  - src/api/search.ts:23

Live fix: OWASP SQL Injection Prevention Cheat Sheet

gt_auto_scan — best practices for your whole stack

Point it at your project root. It reads the manifest, figures out what you're using, and pulls best practices for each dependency.

gt_auto_scan({ projectPath: "." })

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 library

Covers security, accessibility, performance, web APIs, CSS, HTTP, AI providers, Google APIs, infrastructure, databases, and more.

text
gt_search({ query: "WCAG 2.2 focus indicators" })
gt_search({ query: "Core Web Vitals LCP optimization" })
gt_search({ query: "Claude tool use best practices" })
gt_search({ query: "Google Gemini API function calling" })
gt_search({ query: "JWT vs session cookies" })
gt_search({ query: "gRPC vs REST tradeoffs" })
AreaTopics
SecurityOWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, CORS, JWT, OAuth 2.1, WebAuthn, SSRF, API security
AccessibilityWCAG 2.2, WAI-ARIA, keyboard navigation
PerformanceCore Web Vitals, image optimization, web fonts, Speculation Rules
Web APIsFetch, Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer
CSSGrid, Flexbox, Container Queries, View Transitions, Cascade Layers, :has(), Subgrid
AI providersClaude, OpenAI, Gemini, Mistral, Cohere, Groq, LangChain, LlamaIndex
GoogleMaps, Analytics, Ads, Cloud, Firebase, Vertex AI, YouTube, Gmail, Sheets
InfrastructureDocker, Kubernetes, GitHub Actions, Terraform, Cloudflare Workers

How docs are fetched

For every request, GroundTruth tries sources in order and stops at the first one that returns useful content:

  1. llms.txt / llms-full.txt — context files published by maintainers for LLM consumption
  2. Jina Reader — converts docs pages to clean markdown, handles JS-rendered sites
  3. GitHub README / releases — latest release notes and README
  4. npm / PyPI / crates.io / pkg.go.dev — fallback for packages outside the curated registry

Library coverage

422+ 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.

EcosystemLibraries
React / Next.jsReact, Next.js, shadcn/ui, Radix UI, Tailwind CSS, Headless UI
State managementZustand, 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 / ORMPrisma, Drizzle, Kysely, TypeORM, Supabase, Neon, Turso
AI / LLMClaude API, OpenAI API, Gemini API, Vercel AI SDK, LangChain, LlamaIndex
TestingVitest, Playwright, Jest, Testing Library, Cypress, MSW
AuthClerk, NextAuth, Better Auth, Lucia
MobileExpo, React Native, React Navigation, NativeWind
Build toolsVite, Turbopack, SWC, Biome, ESLint, Turborepo
CloudVercel, Cloudflare Workers, AWS SDK, Firebase, Google Cloud
MonitoringSentry, PostHog, OpenTelemetry

Full list in the documentation.


vs. Context7

Context7 is solid. Here's why I reach for this instead.

GroundTruthContext7
HostingSelf-hosted (stdio) + HTTP modeCloud backend, local MCP client
Rate limitsNone1,000 free/month ($10/seat for 5,000)
TransportStdio + Streamable HTTPStdio + Streamable HTTP
Source priorityllms.txt -> Jina -> GitHub -> npm/PyPIVector DB with proprietary crawl pipeline
Tools12 specialized tools2 tools
Code audit107+ patterns, 18 categories, file:line, live fixesNo
Freeform searchOWASP, MDN, AI docs, Google APIs, web standardsLibrary docs only
Changelog, compat, compare, examples, migrationYesNo
MCP Resources + Prompts2 resources, 8 promptsNo
Lockfile detectionReads exact versions from lockfilesNo
Libraries422+ curated + npm/PyPI/crates.io/Go fallbackUndisclosed (claims "thousands")
API key requiredNoNo

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.


Environment variables

All optional. Works out of the box with zero configuration.

VariablePurposeDefault
GT_GITHUB_TOKENGitHub API auth — raises rate limit from 60 to 5,000 req/hrnone
GT_CACHE_DIRDisk cache location for persistent cross-session caching~/.gt-mcp-cache
GT_CONCURRENCYParallel fetch limit in gt_auto_scan6

Contributing

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


Active development

GroundTruth is under active development. New curated registry entries, audit patterns, search topics, and features are added regularly. The registry covers 422+ 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:

  • Star and watch the GitHub repo for release notifications
  • Use @latest in your MCP config (the default install command) — npx fetches the newest version automatically
  • Check tool responses — GroundTruth appends an update notice when a newer version is available

Full documentation

Tool schemas, audit pattern details, architecture, caching internals, and the complete library list:

Read the full docs


Star history

<a href="https://star-history.com/#rm-rf-prod/GroundTruth-MCP&Date"> </a>

License

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.

Learn More