Atlas / MCP servers / bithuman-product / bitHuman docs

bitHuman docsBLOCK

mcp/bithuman-product/docs

Public — source for docs.bithuman.ai (Astro Starlight + auto-generated OpenAPI reference). [public]

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
6 4r · 2w · 0d
Transport
—
License
Apache-2.0
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Source for docs.bithuman.ai — bitHuman's developer platform. A custom Astro 6 site styled after developers.openai.com (semantic design tokens, light/dark, Shiki code, brand coral #FF5757 + Roboto). The API reference at /api/reference is rendered from the OpenAPI spec at build time, with no third-party script.

Local dev

nvm use            # Node 22+ (Astro 6); see .nvmrc
npm install
npm run dev        # http://localhost:4321
npm run build      # static output -> dist/

Structure

src/
content/docs/          The markdown pages; the file path is the URL
config/nav.ts          Sections, sidebar groups, header, Resources menu, footer
data/                  One source per fact: versions, pricing, platforms, demo avatars, offline copy
layouts/               Base (head, nav, footer) and DocLayout (sidebar, chips, Next, pager)
components/            Card, Chip, LiveDemo, CodeTabs, QuickstartPicker, PlatformSwitcher and the rest of the design system
scripts/               The small browser scripts: tab and platform state, the explorer, the calculator, filters
lib/                   Build-time helpers: data blocks, the OpenAPI reader, the curl → Python and Node generator
styles/                tokens.css (light/dark tokens), components.css, prose.css
pages/                 The home page, /start, the hubs, llms files and markdown twins
openapi/bithuman.yaml  OpenAPI spec -> synced to public/api/openapi.yaml
scripts/                 The gates ci/run-local.sh runs, and the generators (redirects, versions, pricing)
STYLE.md                 The style guide: voice, terminology, claims, templates, budgets

Information architecture

Organized by the developer's question. The header is Get started · Platforms · Deploy · Models · Build · API · Performance, then Resources.

  • Get started (/start): the quickstart, the API secret.
  • **Pla
Read from source at commit 37e0d6b1479bOBSERVED · 2026-10-01
02

Connect

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-code
claude mcp add public-docs --env BITHUMAN_API_SECRET=${BITHUMAN_API_SECRET} --env GH_TOKEN=${GH_TOKEN} --env GITHUB_TOKEN=${GITHUB_TOKEN} --env VERCEL_OIDC_TOKEN=${VERCEL_OIDC_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "public-docs": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "BITHUMAN_API_SECRET": "${BITHUMAN_API_SECRET}",
        "GH_TOKEN": "${GH_TOKEN}",
        "GITHUB_TOKEN": "${GITHUB_TOKEN}",
        "VERCEL_OIDC_TOKEN": "${VERCEL_OIDC_TOKEN}"
      }
    }
  }
}
03

Exposed tools (6)

4 read · 2 write · 0 destructive.

ToolRiskDescription
GuideswriteCreate an avatar, give it a persona and a voice, then follow a recipe.
PlatformsreadEvery platform bitHuman runs on, and where the avatar renders on each.
QuickstartwriteTalk to a live avatar, get an API secret, and run your first avatar on the platform you choose.
ResourcesreadDownloads, the changelog, news, help, legal and files for AI agents.
fetchreadFetch one docs page as markdown by the id
searchreadSearch docs.bithuman.ai (bitHuman real-time avatar SDKs, the REST API, deployment options, models, pricing).
04

Trust audit

BLOCKgrade F · trust 47/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (11 observation(s))
Shell
declared (13 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
scripts/check-no-js.mjs:292
const spec = yaml.load(readFileSync(join(ROOT, "src/openapi/bithuman.yaml"), "utf8"));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/lib/openapi.ts:54
return yaml.load(readFileSync(join(process.cwd(), "src/openapi/bithuman.yaml"), "utf8"));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/check-served-vocabulary.mjs:46
return eval(src.slice(i, end + 1));
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/python-api-extract.py:196
root = importlib.import_module(ROOT_PACKAGE)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/python-api-extract.py:208
module = importlib.import_module(name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/python-api-extract.py:358
os.path.dirname(importlib.import_module(ROOT_PACKAGE).__file__),
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/python-api-extract.py:370
module = importlib.import_module(ROOT_PACKAGE)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/python-api-extract.py:388
root = importlib.import_module(ROOT_PACKAGE)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/check-published-examples-build.mjs:413
console.log(`::error::MUTATIONS.${arm}.token ${JSON.stringify(m.token)} is not part of what the mutation writes (${JSON.stringify(m.to)}) — the --mutate arm could never see its own symbol in a rejecti
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/check-published-examples-build.mjs:416
console.log(`  ok  ${arm}: the rejection must name ${JSON.stringify(m.token)}, which the mutation really writes`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/check-quality.mjs:66
const base = `http://127.0.0.1:${server.address().port}`;
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/check-search.mjs:27
await pf.options({ basePath: `http://127.0.0.1:${srv.address().port}/pagefind/`, baseUrl: "/" });
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/noise-audit.mjs:42
const base = `http://127.0.0.1:${server.address().port}`;
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
public/api/openapi.yaml:2346
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
scripts/check-published-examples-build.mjs:230
token: "fetchRenamedByTheSdk",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
scripts/check-published-examples-build.mjs:237
token: "createRenamedByTheSdk",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/openapi/bithuman.yaml:2346
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
LOWInventory / provenance · inv.binary · CWE-1104
public/examples/android-essence-2/poster.avif
poster.avif
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
public/examples/android-expression-2/poster.avif
poster.avif
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
public/examples/cli-linux/poster.avif
poster.avif
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
public/examples/ios-expression-2/poster.avif
poster.avif
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
public/examples/kiosk-linux/poster.avif
poster.avif
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/lib/docs-mcp.test.mjs:11
import { QUERIES } from "../../scripts/search-queries.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/lib/docs-mcp.test.mjs:13
const INDEX = join(import.meta.dirname, "../../dist/docs-mcp-index.json");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/lib/docs-mcp.test.mjs:94
assert.equal(doc.text, readFileSync(join(import.meta.dirname, "../../dist/platforms/python.md"), "utf8"));

Gates applied: no_behavioural_pass.

Audited 2026-10-01 · audit v0.4.1 · source sha 37e0d6b1479bfull audit observations/trust-audit/mcp-server/bithuman-product__docs.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0137e0d6b1479bBLOCKF47first audit
06

Questions

What is the bitHuman docs MCP server?

Public — source for docs.bithuman.ai (Astro Starlight + auto-generated OpenAPI reference). [public]

What tools does bitHuman docs expose?

6 in total: 4 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is bitHuman docs safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/100) and found 3 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 bitHuman docs need?

It reads BITHUMAN_API_SECRET, GH_TOKEN, GITHUB_TOKEN and VERCEL_OIDC_TOKEN 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 current is this page?

The grade is for one exact copy of the source (37e0d6b1479b), read on 2026-10-01. The repository is watched and re-audited when it changes.

Advertisement