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

CheckResultDetail
Source repository linkedPasshttps://github.com/andrea9293/mcp-documentation-server
Version pinnedPassEvery package has an explicit version
Secrets requestedInfoAsks for no secrets
Known package registryPassAll packages come from npm, PyPI, OCI, NuGet or MCPB
Namespace ownershipInfoName verified via GitHub account andrea9293
Registry text aimed at the AIPassDescription and settings contain no hidden characters or instructions to the AI
Install scriptsPass@andrea9293/mcp-documentation-server@1.15.3 runs nothing at install
Code red flagsPassRead 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 AIPassNo 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 tohuggingface.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 settingsGEMINI_API_KEY: Google Gemini API only (enables search_documents_with_ai); not logged
MCP_BASE_DIR: local only: data directory (default ~/.mcp-documentation-server)
MCP_EMBEDDING_MODEL: chooses which model is downloaded from Hugging Face
START_WEB_UI / WEB_PORT / WEB_HOST: local web UI control
MCP_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 machineReads 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 programsNone. No child_process, eval or shell. Only fixed dynamic import('fs'/'fs/promises').
TelemetryNone.
Toolsadd_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 descriptionsclean 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.

Popularity21 / 40

343 GitHub stars, 233 downloads last week, 0 Hacker News posts (0 points). Best two of the three, each on a log scale.

Activity15 / 25

Last push 2026-08-27, last release 2026-07-15, 2 commits in 90 days.

Issue health14 / 15

10 closed of 11 issues.

Our checks0 / 20

1 failed check (a failed code review counts as one): this part is 0 and the total is capped at 40.

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 nameio.github.andrea9293/mcp-documentation-server
PublisherGitHub account andrea9293
How the name is verifiedName verified via GitHub account andrea9293. The registry ties the name prefix to that account or domain; it does not check the code.
TypeLocal: runs on your machine from a package
Packagesnpm @andrea9293/mcp-documentation-server 1.15.3 (stdio)
Version1.15.3
Published
Last updated
Source repositoryhttps://github.com/andrea9293/mcp-documentation-server
WebsiteNone linked
CategoryFiles & documents (assigned by keyword rule, not by hand)

Related servers in Files & documents