Groundtruth

io.github.rm-rf-prod由 GitHub 帳號 rm-rf-prod 發布v8.0.1更新於 Oct 25, 2026

Live docs MCP server. 793+ libraries, evidence-verified answers, code audit, snippets, dispatch.

概覽

AI 產生的概覽

自託管的 MCP 伺服器兼命令列工具,為編碼助理即時抓取函式庫文件、最佳實務、更新日誌和程式碼範例,並稽核原始碼問題。

可以做什麼
解析函式庫並取得指定主題或版本的即時文件、最佳實務、更新日誌、遷移指南和相容性資料,答案附上證據註腳,涵蓋不足時明確回報未命中。搜尋 OWASP、MDN、Web 標準、AI 廠商文件和 Google API 等通用主題,並可並排比較兩三個函式庫。依 18 個類別、107 種以上模式稽核原始碼檔案,在 file:line 回報問題並附上修正連結。讀取專案清單和鎖定檔,為每個相依套件回傳最佳實務,並從 GitHub 取得真實程式碼範例。把自然語言請求路由到合適的工具,一次批次解析最多 20 個函式庫,並提供依函式庫和版本排序的程式碼片段。
適用情境
適合編碼助理老是寫出過時函式庫程式碼、希望它在請求時查閱函式庫自身最新文件、遷移指南和最佳實務的情境。也適合對專案做安全、無障礙、框架和語言方面的稽核,以及升級前的相依套件檢查。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js 24 或更新版本;不需帳號或 API 金鑰。選用的 GT_GITHUB_TOKEN 可提高 GitHub 速率限制並啟用範例中的程式碼搜尋。抓取文件需要網路存取。選用設定包括 GT_CACHE_DIR 和 GT_LOG_LEVEL。
安裝前請注意
它會抓取不受信任的網頁內容並交給模型;README 稱提示注入過濾僅為盡力而為,應把抓取的文件視為不可信輸入。選用的 GT_GITHUB_TOKEN 屬於機密,不應寫入共用設定。稽核和自動掃描會讀取專案檔案,HTTP 模式下任何通過驗證的呼叫者都可能讀取這些檔案。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Groundtruth,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[GroundTruth: live, official documentation and code audits for AI coding agents, drawn from llms.txt, docs sites, GitHub, npm, PyPI, MDN and OWASP]

Current, official documentation for coding agents, fetched when they ask.

[npm version] [CI] [Elastic License 2.0] [793+ curated libraries] [107+ audit patterns] [2063 tests] [14 tools] [Node 24+]

GroundTruth is a self-hosted MCP server and command-line tool. Models write code from what they were trained on, so they still wrap components in forwardRef after React 19 made ref a regular prop, call cookies() synchronously after Next.js made it async, and emit @tailwind directives that Tailwind v4 replaced with @import "tailwindcss". GroundTruth gives the agent the library's own documentation at request time: it reads llms.txt, the docs site as markdown, or the GitHub repository, ranks the sections that answer the question, and checks that the answer covers the topic before returning it. It also audits your source with 107+ patterns and links every finding to the current fix. It runs on your machine. No account, no API key, no rate limit of its own.


Install (60 seconds)

Requires Node.js 24 or newer.

Claude Code

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

Cursor, Claude Desktop, Windsurf and other clients that use an mcpServers block (.cursor/mcp.json, claude_desktop_config.json, ~/.codeium/windsurf/mcp_config.json):

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

VS Code (.vscode/mcp.json):

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

Any other MCP client: run npx -y @groundtruth-mcp/gt-mcp@latest as a stdio server.

Command line (same tools, no MCP client needed):

bash
npm install -g @groundtruth-mcp/gt-mcpgt-mcp bp nextjs caching

@latest makes npx pick up new releases on the next session start. When a newer version exists, tool responses carry a one-line notice (GT_NO_UPDATE_CHECK=1 turns the check off).

Optional: GitHub token

GroundTruth reads READMEs, release notes, migration guides and code examples from GitHub. Without a token GitHub allows 60 requests per hour. A token with no extra scopes raises that to 5,000 and enables code search in gt_examples.

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

In a JSON config, add "env": { "GT_GITHUB_TOKEN": "ghp_yourtoken" } next to args.


What you get

Fourteen tools. Each does one job, and each is also a CLI command.

ToolCLIWhat it does
gt_dispatchaskRoutes a plain request ("use gt for drizzle migrations") to the right tool and arguments
gt_resolve_libraryresolveFinds a library by name; falls back to npm, PyPI, crates.io and Go modules
gt_get_docsdocsLive docs for one topic; also accepts a docs URL
gt_best_practicesbpPatterns, anti-patterns and configuration guidance for a library
gt_auto_scanscanReads your manifest and fetches best practices for each dependency
gt_searchsearchAny topic without a library: OWASP, MDN, web.dev, W3C, AI provider docs, Google APIs
gt_auditauditScans source files and reports issues at file:line with links to the fix
gt_changelogchangelogRelease notes before you upgrade
gt_compatcompatBrowser and runtime support from MDN browser-compat-data and caniuse
gt_comparecompareTwo or three libraries side by side
gt_examplesexamplesReal-world code from GitHub
gt_migrationmigrateMigration guides and breaking changes between versions
gt_batch_resolvebatchResolves up to 20 libraries in one call
gt_snippetssnippetsRanked code snippets per library and version, cached on disk

The server also exposes 2 MCP resources (library-registry, library-docs) and 8 prompts (audit-my-project, upgrade-check, best-practices-scan, compare-libraries, security-check, migration-guide, find-examples, dependency-audit).

You don't need the tool names. Ask in plain language:

use gt for nextjsuse gt for drizzle migrationsgt audituse gt to check WCAG focus indicatorsuse gt for OpenTelemetry setupfind all issues and fix with gt

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

Walks your project, runs 107+ patterns across 18 categories, reports each issue at file:line, then fetches the fix from the authoritative source.

gt_audit({ categories: ["all"] })                      // all 18 categoriesgt_audit({ categories: ["security", "node"] })         // OWASP + Node.jsgt_audit({ categories: ["python", "security"] })       // Python OWASP scangt_audit({ categories: ["accessibility"] })            // WCAG AAgt_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
Alsomobile, css, vue, svelte, angular, testing, seo, i18n, api

Sample output:

## [CRITICAL] SQL built via template literalCategory: 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

Point it at a project root. It reads the manifest and lockfile, works out which libraries you use and at which versions, and returns best practices for each, top libraries first. Default output is about 15K characters.

Reads package.json, deno.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod, pom.xml, build.gradle, build.gradle.kts, composer.json, Gemfile and pubspec.yaml.

gt_search

For anything that isn't one library.

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

CLI

[Terminal running gt-mcp docs react useEffect: the library resolves in 2 ms, react.dev/llms.txt is fetched, 6 of 48 sections are ranked, the evidence check passes and the answer prints with its sources]

gt-mcp <command> runs the same 14 tools in-process and prints the answer. With no arguments, gt-mcp is the stdio MCP server, exactly as before.

bash
gt-mcp docs react useEffect                  # live docs for one topicgt-mcp bp nextjs caching                     # best practicesgt-mcp search "OWASP SSRF prevention"gt-mcp audit .                               # audit the current projectgt-mcp scan .                                # best practices for every dependencygt-mcp compat "CSS container queries"gt-mcp ask "how do I paginate with drizzle"  # let gt_dispatch pick the toolgt-mcp call gt_compare '{"libraries":["prisma","drizzle-orm"]}'echo '{"libraryName":"drizzle"}' | gt-mcp call gt_resolve_library -
CommandDoes
toolsLists every command, its tool and its arguments (--json for machine output)
call <tool> [<json>|-]Calls any tool with JSON arguments; - reads them from stdin
help [command]Shows a command's flags, generated from the tool's input schema
--jsonPrints the full CallToolResult as JSON instead of the text

Exit codes: 0 ok, 1 tool error, 2 usage error. Logs stay quiet on stderr unless something goes wrong (GT_LOG_LEVEL defaults to warn for commands). The server flags still work: --version, --health, --routing-table, --help.


Performance

[Bar chart comparing 7.5.0 and 8.0.0: startup 1,130 to 40 ms, spawn to MCP ready 1,074 to 186 ms, Next.js caching cold 6,893 to 259 ms, next day 6,684 to 92 ms, repeat search 86 to 2 ms, tool list 23,638 to 11,560 bytes, startup memory 194 to 54 MB]

Measured on one machine with the same harness, published 7.5.0 against 8.0.0. Network timings depend on your connection and on the docs site.

Measurement7.5.08.0.0Change
gt-mcp --version1,130 ms, 194 MB40 ms, 54 MB28x faster
Spawn to MCP ready1,074 ms186 ms5.8x faster
gt_best_practices Next.js caching, cold cache6,893 ms259 ms27x faster
Same call the next day (20 h old cache)6,684 ms92 ms73x faster
Repeat gt_search in a new session86 ms2 ms43x faster

Fewer tokens per session and per answer:

Measurement7.5.08.0.0
tools/list, paid by every session23,638 bytes11,560 bytes (-51%)
Tool descriptions-75%
Wire bytes per docs or best-practices answerhalved (duplicate structuredContent removed)
gt_auto_scan default output~60K characters~15K characters
gt_dispatch reply2.7K characters0.9K characters

More of the answer reaches the model in clients that display structuredContent instead of the text:

Tool7.5.08.0.0
gt_compat220 charactersthe full support table
gt_examples142 characters3.5K characters

Where the time went: the binary is a small bootstrap that loads the server lazily and uses the Node compile cache; docs pages are requested as markdown; the reader service is only a fallback; and cached pages are served stale-while-revalidate. A page up to 7 days old is returned at once and refreshed in the background.


How it works

[Request flow: an MCP client or the gt-mcp CLI calls one of 14 tools; the library is resolved from the 793-entry registry or npm, PyPI, crates.io and Go modules; the cache is checked; the fetch chain tries llms.txt, markdown negotiation, HTML to markdown, GitHub docs and a reader fallback; content is sanitized, ranked with BM25, checked by the evidence gate and returned with sources]

  1. Resolve. The library name is matched against the curated registry, then npm, PyPI, crates.io and Go modules.
  2. Cache. An in-memory LRU, bounded by entry count and by characters, then the disk cache in ~/.gt-mcp-cache.
  3. Fetch. Sources are tried in order and the first useful one wins:
    1. llms.txt / llms-full.txt, the files maintainers publish for LLMs. A nested llms.txt resolves to the library's own index.
    2. The docs page as markdown, via Accept: text/markdown content negotiation where the site supports it. The Next.js caching page is 715 KB as HTML and 16 KB as markdown.
    3. The HTML page, converted to markdown directly.
    4. GitHub: README, docs files, releases. GitHub-hosted libraries read their own README, not GitHub's site-wide llms.txt.
    5. The Jina reader, as a hedged fallback that starts after 1.5 s or after a direct fetch fails.
  4. Sanitize. Prompt-injection filter, SSRF guard, navigation and boilerplate stripped.
  5. Rank. BM25 scores each section against the topic and fills the token budget with the ones that mention it.
  6. Check. The evidence gate (below) decides whether the answer covers the topic.
  7. Answer. Ranked excerpts with source URLs, fetch date and topic coverage.

The fetch layer keeps connections alive for 60 s, shares one in-flight request between identical callers, honours per-call cancellation and the GT_TOOL_TIMEOUT_MS deadline, caches 404s and oversized bodies so they are not retried, and skips a host for a while after repeated failures.


Evidence, not vibes

The 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 before returning it. The check counts 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, so a 404 page whose navigation happens to contain your topic doesn't pass.

  • Weak coverage triggers a second, topic-targeted fetch instead of shipping the first page that loaded.
  • Zero coverage returns an explicit miss. You get the sources that were checked, an outline of what those pages do cover, and what to try next. Treat it as a true negative.
  • Every successful answer ends with an ## Evidence footer: source URLs, fetch date and topic-coverage numbers, so you can check where it came from.

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 failed for lacking the literal word.

Accuracy, 7.5.0 against 8.0.0:

Check7.5.08.0.0
False library detections on a 212-query generic corpus940
Correct detections on a library corpus217 of 217
Live 23-check matrix across all 14 tools17 of 2323 of 23

Both routing corpora run in the test suite.


Coverage

[Bar chart of 793 registry entries across 21 language ecosystems: JavaScript and TypeScript 526, Python 162, Go 50, Rust 34, Java 30, C and C++ 26, language-agnostic 24, C# 15, Kotlin 12, then CSS, PHP, YAML, Elixir, Ruby, SQL and others]

793 curated libraries across 21 language ecosystems, plus automatic fallback to npm, PyPI, crates.io and Go modules for anything outside the registry.

Release 8.0.0 adds 195 libraries: Python, data and AI tooling, Java, Kotlin and Spring, .NET, Go, Rust, Ruby, PHP, Swift, Dart and Flutter, Elixir, C and C++, infrastructure, databases, observability and more JavaScript and TypeScript. Every one of the 598 existing entries was probed live: 35 broken docs roots fixed, 115 moved docs sites updated, about 190 verified llms.txt indexes added. The curated URL tables (2,638 URLs) were re-checked.

EcosystemExamples
JavaScript / TypeScriptNext.js, React, Tailwind CSS, shadcn/ui, TanStack Query, Zustand, Hono, NestJS, tRPC, Vite, Vitest, Playwright
PythonDjango, FastAPI, Flask, Pydantic, SQLAlchemy, Celery, NumPy, Pandas, Polars, PyTorch, scikit-learn
Java / KotlinSpring Boot, Hibernate, Quarkus, Micronaut, Ktor, Jetpack Compose, JUnit, Mockito
.NETASP.NET Core, Entity Framework Core, .NET MAUI, xUnit.net, Serilog
Go / RustGin, Echo, Fiber, GORM, Tokio, Axum, Actix Web, Serde, sqlx
Ruby / PHP / ElixirRuby on Rails, Sidekiq, RSpec, Laravel, Livewire, Symfony, Phoenix, Ecto, Oban
MobileFlutter, Riverpod, SwiftUI, Alamofire, React Native, Expo
C / C++CMake, Clang / LLVM, OpenCV, gRPC
DatabasesPostgreSQL, Redis, MongoDB, SQLite, ClickHouse, Elasticsearch, Prisma, Drizzle ORM
InfrastructureDocker, Kubernetes, Helm, Terraform, Pulumi, Ansible, Cloudflare Workers
ObservabilityOpenTelemetry, Prometheus, Grafana, Grafana Loki, Sentry
AIClaude API, OpenAI SDK, Gemini API, Vercel AI SDK, LangChain Python, HuggingFace Transformers

The full list is the registry source: src/sources/registry.ts.


Security

GroundTruth fetches untrusted web content and hands it to a model, so the fetch path is hardened:

  • SSRF guard blocks private, loopback, link-local and ULA ranges, on redirects too. IP-literal URLs are checked against the full blocklist, including cloud metadata at 100.100.100.200 and fd00:ec2::254, NAT64 and 6to4.
  • Prompt-injection sanitizer decodes HTML entities and strips zero-width and bidi characters before scanning, then redacts the exact matching span using an offset map. It is best-effort pattern redaction; treat fetched docs as untrusted input.
  • Tokens stay on their origin. GT_GITHUB_TOKEN and GT_JINA_API_KEY are never forwarded to another origin, including on redirects.
  • Audit patterns are ReDoS-safe. The worst-case input went from 9.5 s to 1 ms.
  • HTTP mode binds 127.0.0.1 by default, validates Host and Origin, and compares the bearer token in constant time.
  • No user data on disk. The disk cache holds fetched documentation under hashed keys, not prompts or tool inputs.

Report vulnerabilities privately through GitHub Security Advisories. Scope and threat model: SECURITY.md.


HTTP and Docker

Set GT_HTTP_PORT and GroundTruth serves Streamable HTTP instead of stdio. It speaks MCP spec 2026-07-28 and still serves 2025-era clients.

PathPurpose
/mcpMCP endpoint (POST, GET, DELETE)
/healthHealth JSON, including a cache-directory check
/metricsPrometheus metrics

Local, loopback only:

bash
GT_HTTP_PORT=3100 npx -y @groundtruth-mcp/gt-mcp@latest

It binds 127.0.0.1. Without GT_AUTH_TOKEN it starts open to local callers and logs a warning. With a token, every path, /health and /metrics included, needs Authorization: Bearer <token>.

Docker:

bash
docker build -t gt-mcp .export GT_AUTH_TOKEN="$(openssl rand -hex 32)"docker run -d --name gt -p 127.0.0.1:3100:3100 -e GT_AUTH_TOKEN gt-mcpclaude mcp add --transport http gt http://localhost:3100/mcp --header "Authorization: Bearer $GT_AUTH_TOKEN"

The image is 277 MB, runs as the unprivileged gt user, and binds 0.0.0.0 inside the container, so it refuses to start without GT_AUTH_TOKEN. Its healthcheck sends the token. The -p 127.0.0.1: prefix keeps the port on the host's loopback; drop it to serve other machines.

Behind a reverse proxy: the server speaks plain HTTP. Terminate TLS at the proxy and add the public hostname to GT_HTTP_ALLOWED_HOSTS, otherwise requests carrying it get 403. On a non-loopback bind the server will not start without GT_AUTH_TOKEN.

Sessions: stateless by default. GT_HTTP_STATEFUL=1 gives each 2025-era client its own session, closed after 30 minutes without a request.

An authenticated caller can make the server fetch public URLs and run gt_audit and gt_auto_scan on any directory the process can read. Don't mount anything into the container you wouldn't want read.


Configuration

Everything is optional. Invalid numeric or enum values fail at startup instead of falling back silently.

VariableDefaultPurpose
GT_HTTP_PORTunsetServe MCP over Streamable HTTP on this port instead of stdio
GT_HTTP_HOST127.0.0.1HTTP bind address; any non-loopback address needs GT_AUTH_TOKEN
GT_HTTP_ALLOWED_HOSTSunsetComma-separated extra Host/Origin values the HTTP server accepts
GT_HTTP_STATEFULunset1 gives each 2025-era HTTP client its own session
GT_AUTH_TOKENunsetBearer token required on /mcp, /health and /metrics
GT_GITHUB_TOKENunsetGitHub API token: 5,000 requests per hour instead of 60, enables gt_examples code search
GT_JINA_API_KEYunsetJina reader key, lifts page rendering off the anonymous rate limit
GT_CACHE_DIR~/.gt-mcp-cacheDisk cache directory
GT_CACHE_TTL_MS1800000Default cache lifetime
GT_SWR_STALE_TTL_MS3600000How long past expiry a cached page may still be served
GT_TOKEN_LIMIT8000Default answer size in tokens
GT_MAX_TOKEN_LIMIT20000Largest tokens value a call may ask for
GT_TOOL_TIMEOUT_MS55000Deadline per tool call
GT_FETCH_TIMEOUT_MS15000Timeout per outbound HTTP request
GT_MAX_CONCURRENT_FETCHES12Outbound requests in flight at once
GT_CONCURRENCY8Parallel library fetches in gt_auto_scan (max 12)
GT_DEEP_FETCH_MAX_PAGES8Linked pages read when the first page misses the topic
GT_DEEP_FETCH_RELEVANCE_THRESHOLD0.3First-page topic relevance (0-1) that skips the deep fetch
GT_DEEP_FETCH_TIMEOUT_MS25000Time budget for one deep fetch
GT_CIRCUIT_BREAKER_THRESHOLD3Consecutive failures before a host is skipped
GT_CIRCUIT_BREAKER_RESET_MS60000How long a failing host is skipped
GT_LOG_FORMATtexttext or json; logs go to stderr
GT_LOG_LEVELinfo (warn for CLI commands)debug, info, warn or error
GT_NO_UPDATE_CHECKunset1 skips the npm registry update check and its notice
GT_NO_WATERMARKunset1 drops the notice line and the invisible watermark
NODE_DISABLE_COMPILE_CACHEunset1 skips the on-disk compile cache

gt-mcp --help prints the same list.


Upgrading from 7.x

8.0.0 has four breaking changes. Stdio users on Node 24 or newer who read the text content are not affected by any of them.

ChangeWhat to do
HTTP mode binds 127.0.0.1 by default (7.x bound all interfaces)To expose it, set GT_HTTP_HOST=0.0.0.0 and GT_AUTH_TOKEN. The Docker image already sets the host and needs the token.
Requests with a foreign Host or Origin get 403Add your public hostname to GT_HTTP_ALLOWED_HOSTS.
Prose tools no longer return structuredContentRead the text content; it carries the full answer. gt_resolve_library, gt_batch_resolve and gt_dispatch keep their structured result.
Node.js 24 or newerUpgrade Node.

Also new under the hood: the MCP TypeScript SDK v2 (@modelcontextprotocol/server), tools/list cache hints, and a fixed HTTP mode (7.5.0 answered only the first HTTP request). Production dependencies went from 169 packages (27 MB) to 13 (7.7 MB), and the Docker image from 566 MB to 277 MB. Full list: CHANGELOG.md.


vs. Context7

Context7 is a good product. The differences:

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, markdown docs, HTML, GitHub, reader fallback, fetched at query timeVector DB with proprietary crawl pipeline
Answer verificationEvidence gate on every topic query; explicit miss when unverifiableNo
Tools14 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
Libraries793+ curated + npm/PyPI/crates.io/Go fallbackUndisclosed (claims "thousands")
API key requiredNoNo

Context7 indexes docs into a vector database, which is fast but lags behind new releases. GroundTruth fetches from the source at query time and tells the model when it found nothing on the topic.


Contributing

Adding a library is a pull request to src/sources/registry.ts with id, name, docsUrl, and llmsTxtUrl if the project publishes one.

bash
pnpm installpnpm typecheckpnpm test        # 2063 tests across 267 filespnpm build

CI runs the suite on Node 24 and 26. Issues and requests: github.com/rm-rf-prod/GroundTruth-MCP/issues.

Reference

WhatWhere
Tool schemas and parameterstools/list in any MCP client, gt-mcp tools, or src/tools/
Complete library listsrc/sources/registry.ts
Audit rules, 18 categoriessrc/sources/audit-patterns.ts
Routing tablegt-mcp --routing-table
Health, telemetry, circuit-breaker stategt-mcp --health, or /health in HTTP mode
Release historyCHANGELOG.md

Star history

[Star History Chart]

License

Elastic License 2.0. Free to use, self-host and build on. The one thing you can't do is offer it as a managed service.

來源:README.md,提交 afdcb3a

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v8.0.1最新Oct 10, 2026
  2. v7.5.0Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。