Atlas / MCP servers / jeanbaissari / llm-wiki-monorepo

llm-wiki-monorepoBLOCK

mcp/jeanbaissari/llm-wiki-monorepo

A production-grade knowledge base operating system — AI agents compile raw sources into persistent, cross-linked Markdown wikis with concurrency control, multi-provider LLM integration, FTS5 search, and community detection. One repo. Any agent. Any machine.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
15 12r · 3w · 0d
Transport
stdio
License
MIT
Stars
3
01

Overview

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

Agent-native knowledge compiler. AI agents turn raw documents into persistent, cross-linked Markdown wikis. No database. No API lock-in. One git clone.

What • Features • Quick Start • Architecture • Packages • Templates • Docs • Credits • License

pip install baissarienterprises-llm-wiki
No local models required. LLM Wiki is agent-native: the intelligence comes from the agent you already run (Codex, Hermes, Claude, OpenCode). The base install is lexical/keyword-only and performs no model downloads. Optional extras for local computation remain opt-in and are not part of the supported default story.

What's New in v0.6.5 — "CI Green"

Embedding degrades instead of crashing. If the optional [semantic] model cannot load at runtime (o

Read from source at commit 361b3434209aOBSERVED · 2026-10-11
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 llm-wiki-web --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY} --env OPENAI_API_KEY=${OPENAI_API_KEY} --env TOGETHER_API_KEY=${TOGETHER_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "llm-wiki-web": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "DEEPSEEK_API_KEY": "${DEEPSEEK_API_KEY}",
        "OPENAI_API_KEY": "${OPENAI_API_KEY}",
        "TOGETHER_API_KEY": "${TOGETHER_API_KEY}"
      }
    }
  }
}
03

Exposed tools (15)

12 read · 3 write · 0 destructive.

ToolRiskDescription
llm_wiki_askreadGrounded
llm_wiki_backupwriteCreate a timestamped snapshot backup of the wiki. Archives wiki pages, logs, and audits into a tar.gz with integrity verification.${SIDE_EFFECT.WRITE_BACKUP}
llm_wiki_discover_entitiesreadDiscover all entities registered in the wiki. Returns the entity registry with names, paths, types, and aliases. Optionally filter by entity type.${SIDE_EFFECT.READ_ONLY}
llm_wiki_filesreadList files in the wiki or sources directory as a formatted file tree.${SIDE_EFFECT.READ_ONLY}
llm_wiki_graphreadKnowledge graph operations: build, insights, or search. (Backward-compatible wrapper — see llm_wiki_graph_build, _insights, _search for individual tools.)${SIDE_EFFECT.WRITE_PROJECT}
llm_wiki_graph_buildreadBuild the knowledge graph from wiki markdown files. Uses direct graph-engine import — zero subprocess.${SIDE_EFFECT.WRITE_PROJECT}
llm_wiki_graph_insightsreadGet graph insights — surprising connections and knowledge gaps. Uses direct graph-engine import.${SIDE_EFFECT.READ_ONLY}
llm_wiki_graph_searchreadSearch the knowledge graph for nodes matching a query. Uses direct graph-engine import.${SIDE_EFFECT.READ_ONLY}
llm_wiki_ingestwriteTrigger ingest of a source file into the wiki via Python sidecar. Zero subprocess — uses long-lived sidecar process.${SIDE_EFFECT.WRITE_PROJECT}
llm_wiki_lintwriteRun lint checks on wiki pages via Python sidecar. Reports errors, warnings, and suggestions.${SIDE_EFFECT.EXTERNAL_PROCESS}
llm_wiki_read_filereadRead the contents of a file. Project-relative path only. Truncated at 120KB. Allow-listed directories: wiki, raw, audit, logs, plus PURPOSE.md, CLAUDE.md, SCHEMA.md.${SIDE_EFFECT.READ_ONLY}
llm_wiki_reviewsreadList wiki reviews, optionally filtered by status.${SIDE_EFFECT.READ_ONLY}
llm_wiki_searchreadFull-text + semantic search over wiki markdown pages. Returns ranked results with snippets. Defaults to hybrid (BM25 + semantic vector KNN via RRF); requires the [semantic] extra + an embedded index and degrades to keyword otherwise. Set mode=
llm_wiki_statusreadCheck wiki status — health, page count, last ingest date, open review count.${SIDE_EFFECT.READ_ONLY}
llm_wiki_suggest_linksreadSuggest missing wikilinks for wiki pages. Analyzes page text against the entity registry and returns link suggestions with confidence scores.${SIDE_EFFECT.READ_ONLY}
04

Trust audit

BLOCKgrade D · trust 69/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
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
audit-shared/src/serialize.ts:33
const frontRaw = yaml.load(m[1]!) as Record<string, unknown>;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/release_manifest.py:101
mod = __import__(mod_name, fromlist=[func_name])
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
skill/SKILL.md:350
npm start -- --wiki <wiki-root>          # http://127.0.0.1:4175
LOWInventory / provenance · inv.binary · CWE-1104
tests/fixtures/wikis/backups/populated-20260704-164048.tar.gz
populated-20260704-164048.tar.gz
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.hidden_file · CWE-1104
src/llm_wiki/wiki/demo_wiki/.schema_version
.schema_version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/wikis/empty/.schema_version
.schema_version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/wikis/minimal/.schema_version
.schema_version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/wikis/populated/.schema_version
.schema_version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/wikis/stale/.schema_version
.schema_version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_core_boundaries.py:86
__import__(f"llm_wiki.{module_name}", fromlist=[""])
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_recommended_extra.py:74
"    __import__(mod)\n"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcp-server/src/projects/discover.ts:38
return path.resolve(__dirname, "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
web-viewer/server/routes/graph.ts:145
const repoRoot = path.resolve(__dirname, "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
web-viewer/test/routes.test.ts:77
it("rejects path traversal (../../etc/passwd) if handler checks safeRel", async () => {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
web-viewer/test/routes.test.ts:127
const res = await request(rawApp()).get("/api/raw").query({ path: "../../etc/passwd" });
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
web-viewer/test/routes.test.ts:175
target: "../../etc/passwd",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/reference/mcp-tools.md:65
# Open http://127.0.0.1:4175
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
skill/references/tooling-tips.md:65
Then open `http://127.0.0.1:4175`. Features:
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
tests/fixtures/sources/malformed.md:17
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
tests/verification/run_verification.py:66
MODULARITY_TOLERANCE = 0.01  # |ΔQ| / max(Q) < 1%
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
audit-shared/package.json
js-yaml, zod, @types/js-yaml, @types/node, typescript, vitest
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
graph-engine/package.json
graphology, graphology-communities-louvain, @types/node, tsx, typescript, vitest
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
mcp-server/package.json
@modelcontextprotocol/sdk, graph-engine, sql.js, @types/better-sqlite3, @types/node, tsx, typescript, vitest
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/shared-types/package.json
typescript, vitest
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
plugins/obsidian-audit/package.json
js-yaml, zod, @types/js-yaml, @types/node, builtin-modules, esbuild, obsidian, typescript
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 361b3434209afull audit observations/trust-audit/mcp-server/jeanbaissari__llm-wiki-monorepo.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-11361b3434209aBLOCKD69first audit
06

Questions

What is the llm-wiki-monorepo MCP server?

A production-grade knowledge base operating system — AI agents compile raw sources into persistent, cross-linked Markdown wikis with concurrency control, multi-provider LLM integration, FTS5 search, and community detection. One repo. Any agent. Any machine.

What tools does llm-wiki-monorepo expose?

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

Is llm-wiki-monorepo safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does llm-wiki-monorepo need?

It reads ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, OPENAI_API_KEY and TOGETHER_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 llm-wiki-monorepo run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as llm-wiki-web at 0.1.0.

How current is this page?

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

Advertisement