GroundTruth-MCPBLOCK
Self-hosted MCP server for live documentation, code audits, and best practices. 793+ curated libraries, 107 audit patterns, no rate limits.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Current, official documentation for coding agents, fetched when they ask.
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,
cfbc88cbf344OBSERVED · 2026-10-10Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add gt-mcp --env GT_GITHUB_TOKEN=${GT_GITHUB_TOKEN} -- npx -y @groundtruth-mcp/[email protected]Exposed tools (33)
33 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
HighLib | read | building user interfaces rocks |
LowLib | read | unrelated |
Next.js | read | The React Framework for the Web |
React | read | A JavaScript library for building user interfaces |
cached-pkg | read | Cached |
cap-test-small-body | read | A small package body streamed through a real ReadableStream, long enough to clear the 50-char tryFetch threshold. |
corrupt-mem-pkg | read | Freshly fetched package data replacing the corrupt memory cache entry, long enough to clear thresholds. |
disk-pkg | read | From disk |
error-probe-pkg | read | test |
evil-pkg | read | A tiny helper. |
gt_audit | read | |
gt_auto_scan | read | |
gt_batch_resolve | read | |
gt_best_practices | read | |
gt_changelog | read | |
gt_compare | read | |
gt_compat | read | |
gt_dispatch | read | |
gt_examples | read | |
gt_get_docs | read | |
gt_migration | read | |
gt_resolve_library | read | |
gt_search | read | |
gt_snippets | read | |
my-package | read | A test package for the npm registry with enough content to exceed the 100 character minimum threshold |
npm-score-pkg | read | x |
ok-pkg | read | Fast, tiny state manager. |
rayon | read | Parallelism |
reqwest | read | HTTP client |
serde | read | A serialization framework for Rust |
some-npm-pkg | read | An npm package |
string-repo-pkg | read | test |
tokio | read | Async runtime |
Trust audit
BLOCKgrade F · trust 52/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- declared (10 observation(s))
- Shell
- declared (11 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
title: "pickle.loads() from untrusted source",
title: "eval() or exec() with dynamic input",
"`eval()` and `exec()` execute arbitrary Python code. If the argument is derived from user input or an external source, an attacker can run any code on the server.",
fix: "Never pass user-controlled data to `eval()` or `exec()`. Use `ast.literal_eval()` for safe parsing of Python literals.",
title: "requests with verify=False — TLS validation disabled",
"Setting `verify=False` disables TLS certificate verification, making the connection vulnerable to man-in-the-middle attacks. An attacker can intercept and modify traffic.",
fix: "Remove `verify=False`. If using a self-signed certificate, pass the CA bundle path: `verify='/path/to/ca-bundle.crt'`.",
docsQuery: "Python requests verify=False TLS SSL certificate security",
/!\[.*?\]\(https?:\/\/[^)]*(?:exfil|steal|leak|callback|webhook|requestbin|hookbin|burp|interact\.sh|oast\.(?:me|site|fun|live|pro)|canarytokens|pipedream\.net|ngrok(?:\.io|-free\.app)|webhook\.site|b
HEALTHCHECK CMD wget -qO- --header="Authorization: Bearer ${GT_AUTH_TOKEN}" "http://127.0.0.1:${GT_HTTP_PORT}/health" || exit 1const matches = testLine("security", `const apiKey = "abcdefghijklmnopqrstuvwxyz1234";`);.node-version
describe("pickle.loads()", () => {it("flags pickle.loads()", () => {expect(matchesPattern("pickle.loads() from untrusted source", `data = pickle.loads(raw_bytes)`)).toBe(true);it("flags pickle.load()", () => {describe("eval() / exec()", () => {it("flags eval()", () => {it("flags hashlib.md5()", () => {`hashed = hashlib.md5(password.encode()).hexdigest()`,
it("flags hashlib.sha1()", () => {`h = hashlib.sha1(data)`,
import { extractRelevantContent, tokenize } from "../../utils/extract.js";import { sanitizeContent } from "../../utils/sanitize.js";import { extractRelevantContent } from "../../utils/extract.js";Gates applied: no_behavioural_pass.
cfbc88cbf344full audit observations/trust-audit/mcp-server/rm-rf-prod__groundtruth-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | cfbc88cbf344 | BLOCK | F | 52 | first audit |
Questions
What is the GroundTruth-MCP MCP server?
Self-hosted MCP server for live documentation, code audits, and best practices. 793+ curated libraries, 107 audit patterns, no rate limits.
What tools does GroundTruth-MCP expose?
33 in total: 33 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is GroundTruth-MCP safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (52/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does GroundTruth-MCP need?
It reads GT_AUTH_TOKEN, GT_GITHUB_TOKEN and GT_JINA_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does GroundTruth-MCP run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @groundtruth-mcp/gt-mcp at 8.0.1.
How current is this page?
The grade is for one exact copy of the source (cfbc88cbf344), read on 2026-10-10. The repository is watched and re-audited when it changes.