A line-by-line read of this version found serious problems. See the code review before you install it.
mcp-documentation-server
io.github.andrea9293/mcp-documentation-server
About mcp-documentation-server
mcp-documentation-server is an MCP server published by the GitHub account andrea9293. Local-first document management and semantic search for AI coding agents
It runs on your own machine: your AI client starts it from the npm package @andrea9293/mcp-documentation-server at version 1.15.3.
It asks for no keys or passwords.
Version 1.15.3 was published on 27 August 2026, and the source code is public, so you can read it before installing.
Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 0 warn, 0 fail, 2 info. How we check.
What it asks for
This server declares no environment variables, so it asks for no keys or settings.
Checks
| Check | Result | Detail |
|---|---|---|
| Source repository linked | Pass | https://github.com/andrea9293/mcp-documentation-server |
| Version pinned | Pass | Every package has an explicit version |
| Secrets requested | Info | Asks for no secrets |
| Known package registry | Pass | All packages come from npm, PyPI, OCI, NuGet or MCPB |
| Namespace ownership | Info | Name verified via GitHub account andrea9293 |
| Registry text aimed at the AI | Pass | Description and settings contain no hidden characters or instructions to the AI |
| Install scripts | Pass | @andrea9293/mcp-documentation-server@1.15.3 runs nothing at install |
| Code red flags | Pass | Read 14 files in @andrea9293/mcp-documentation-server@1.15.3: no obfuscation, encoded execution, credential reads or data-collection endpoints found |
| Text aimed at the AI | Pass | No hidden characters or instructions to the AI in 14 files, including comments and the README |
Code review: Problems found
We read all 2,994 lines in 12 files of @andrea9293/mcp-documentation-server 1.15.3 on 2026-10-31, without running it.
Keeps a local searchable library of documents for your AI, with an optional Google Gemini 'AI search' that uploads the whole file to Google when you set a Gemini key. It is marked as failing because it also starts a web page on your computer (port 3080) with no password. Any program on your machine, and possibly any website you visit, can add documents or upload files through it. Set START_WEB_UI=false to turn the web page off.
What we found
- Serious The auto-started web UI accepts file uploads with no login and no Origin or CSRF check, and multipart forms are a CORS "simple" request, so any web page the user visits can upload into it. (The reviewer also raised "../" in the filename writing outside the uploads folder; multer 2 parses with busboy, which strips paths from filenames, so that part is unlikely.) With WEB_HOST=0.0.0.0 anyone on the network can upload.
dist/web-server.js:44-53,206-221 - Serious The web UI starts by default (START_WEB_UI defaults on) with no authentication. express.urlencoded allows cross-site HTML form POSTs to /api/documents and /api/uploads/process, so any website can plant documents in the knowledge base. The AI later retrieves them as trusted search results, a persistent prompt-injection channel. With no Host-header check, DNS rebinding could also read all stored documents.
dist/web-server.js:24-25,83-97,195-204 + server.js:283-305 - Note After each AI search it lists all files in the user's Gemini Files API project and deletes every file not in ACTIVE state, including files uploaded by other apps using the same API key.
dist/gemini-search-service.js:187-201 - Note When GEMINI_API_KEY is set, search_documents_with_ai uploads the full original document file to Google Gemini. This is disclosed in the tool description ('using Gemini AI'), but users should know whole files leave the machine.
dist/gemini-search-service.js:80-98 - Note The embedding model is downloaded from Hugging Face on first use (transformers.js default).
dist/embedding-provider.js:48-62 - Note delete_document permanently removes the document, its chunks and its stored files with no confirmation step.
dist/server.js:50-77 - Info Search queries and document titles are written to stderr logs (local only).
dist/document-manager.js:120,167 - Info The web UI's static front-end (dist/public / src/public) is served by this code but was not part of the reviewed file set, so the browser-side UI code is unverified.
dist/web-server.js:27-31
| Talks to | huggingface.co (Xenova/all-MiniLM-L6-v2 or MCP_EMBEDDING_MODEL, via @xenova/transformers): model download requests (first time a document is added or searched (lazy model load); dependency behaviour) generativelanguage.googleapis.com (Google Gemini Files + generateContent API, model gemini-2.5-flash): the original stored document file (upload), the search query, and GEMINI_API_KEY; it also lists and deletes files in the Gemini account (only when search_documents_with_ai or POST /api/search-ai is called and GEMINI_API_KEY is set) 127.0.0.1:3080 (listens; WEB_HOST/WEB_PORT configurable, 0.0.0.0 exposes it to the network): serves an unauthenticated REST API to list/read/add/delete documents, search, upload files and process uploads (started automatically with the MCP server unless START_WEB_UI=false, and runs the whole time) |
|---|---|
| Keys and settings | GEMINI_API_KEY: Google Gemini API only (enables search_documents_with_ai); not loggedMCP_BASE_DIR: local only: data directory (default ~/.mcp-documentation-server)MCP_EMBEDDING_MODEL: chooses which model is downloaded from Hugging FaceSTART_WEB_UI / WEB_PORT / WEB_HOST: local web UI controlMCP_CACHE_ENABLED / MCP_CACHE_SIZE / MCP_STREAMING_ENABLED / MCP_STREAM_FILE_SIZE_LIMIT / MCP_STREAM_CHUNK_SIZE: local tuning only.env file in the working directory (dotenv/config): loaded into process env at startup |
| Files on your machine | Reads and writes ~/.mcp-documentation-server (document databases, copies, original uploads, Gemini file mappings) and its uploads folder; process_uploads reads every .txt, .md and .pdf there. MCP tool input never names a file path. The web UI upload route saves under the client-supplied filename, which multer 2 strips of paths. |
| Runs programs | None. No child_process, eval or shell. Only fixed dynamic import('fs'/'fs/promises'). |
| Telemetry | None. |
| Tools | add_document, delete_document, search_documents, get_document, list_documents, search_all_documents, get_context_window, search_documents_with_ai (only if GEMINI_API_KEY set), get_ui_url (only if web UI enabled, the default), get_uploads_path, process_uploads, list_uploads_files |
| Tool descriptions | clean of injection. Descriptions contain benign behavioural guidance for the AI: 'Use this tool only when user explicitly requests it' (get_document), 'Always tell the user if result is truncated', a hint_for_llm field pointing to get_context_window, and get_ui_url telling the AI to give the user the web UI URL. None of it hides anything from the user or targets other servers. |
This covers the package's own code only, not the 10 packages it depends on (dotenv, fastmcp, zod, express, multer, @xenova/transformers, unpdf, @orama/orama, @orama/plugin-data-persistence, @google/genai). A new version drops this review until we read it again.
Popularity & health: 40 / 100
Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.
45 forks, 18 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.
What people say
No Hacker News threads link to its source code.
Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.
Facts
| Registry name | io.github.andrea9293/mcp-documentation-server |
|---|---|
| Publisher | GitHub account andrea9293 |
| How the name is verified | Name verified via GitHub account andrea9293. The registry ties the name prefix to that account or domain; it does not check the code. |
| Type | Local: runs on your machine from a package |
| Packages | npm @andrea9293/mcp-documentation-server 1.15.3 (stdio) |
| Version | 1.15.3 |
| Published | |
| Last updated | |
| Source repository | https://github.com/andrea9293/mcp-documentation-server |
| Website | None linked |
| Category | Files & documents (assigned by keyword rule, not by hand) |
Related servers in Files & documents
- Synaplan4/4Self-hosted AI workspace: semantic RAG document search, long-term…
- Outline MCP Server7/7Connect AI assistants to Outline for document search, reading, and…
- IMAGIN.studio API Docs7/7Semantic search over IMAGIN.studio API documentation — CDN, API,…
- haiku.rag7/7Local-first agentic RAG with citations - hybrid search, reranking,…
GEML — a plain-text document format built to be edited in place, one section at a time8/8One section in, one section out — on Markdown/GEML files, bad…- A11Y Toolkit6/7The accessibility layer for AI coding agents: audit, fix, document…