mcp-anythingllm
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
mcp-anythingllm
MCP server (stdio) that gives Hermes access to the knowledge base in AnythingLLM: documents uploaded through the AnythingLLM web UI (PDF, Word, web pages, Markdown …), organised in workspaces.
Typical setup: AnythingLLM runs as a container on the harness server (loopback port 3001), LLM and embedding model come from an OpenAI-compatible LLM server. This MCP server only talks to AnythingLLM's developer API.
Requirements
Python 3.11 or newer — the pinned dependencies require it (
rpds-py,PyJWT); the CI runs 3.11 and 3.14.A running AnythingLLM instance with the Developer API enabled (Settings → Developer API gives the key). The server talks to it over HTTP, nothing else.
Optional: read access to AnythingLLM's
storage/documentsfolder — only needed forrag_get.
Related MCP server: mcp-vault-reader
Installation
git clone https://github.com/StefanOOEOrg/mcp-anythingllm.git
cd mcp-anythingllm
python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
cp .env.example .env # set ANYTHINGLLM_URL and ANYTHINGLLM_API_KEYThen register it in your MCP client (see Hermes for the profile entry).
Tools
Tool | What it does |
| Lists the workspaces (name, slug). |
| Best passages (text, document title, workspace, score 0..1); all workspaces when |
| Answer from the documents only (chat mode |
| Lists the documents: source path, title, workspaces, last update. |
| The whole text of one document (needs |
| Saves a new note and embeds it; |
| Replaces one passage that occurs exactly once (e.g. ticks off a line); only the change is sent, the document is then stored like |
| Replaces a document's content (new version is embedded first, then the old one removed); source, title and workspaces stay. |
| Deletes a document from every workspace and the storage. |
Writing tools are meant for explicit requests or a skill's workflow. A document is named by its
source path (or its end, e.g. train-log.md), its title or its storage name.
Configuration (.env)
Variable | Default | |
|
| AnythingLLM instance |
| — | Settings → Developer API |
|
| per request (answers come from the local LLM) |
|
| minimum similarity of a passage (unrelated ≈ 0.4–0.53, matches ≈ 0.6–0.75) |
|
| passages per search |
| — | AnythingLLM's |
|
| log level of the server ( |
Project structure
mcp-anythingllm/
├── src/
│ ├── client.py # AnythingLLM developer API (search, documents, workspaces)
│ ├── config.py # ANYTHINGLLM_* / LOG_LEVEL from the environment
│ ├── main.py # entry point (starts the server over stdio)
│ ├── mcp_server.py # composition root: server + tools
│ ├── server_instance.py # the shared MCP server instance
│ └── tools/
│ ├── documents.py # rag_documents / rag_get / rag_add / rag_edit / rag_update / rag_remove
│ └── rag.py # rag_workspaces / rag_search / rag_answer
├── tests/ # fake API via httpx.MockTransport, no network
├── scripts/import_wiki.py # bulk import of a Markdown folder
├── .github/workflows/ci.yml # pytest + pylint on 3.11 and 3.14
├── .env.example # copy to .env
├── .pylintrc
├── pytest.ini
├── requirements.txt / requirements-dev.txt
├── LICENSE
└── README.mdDevelopment
python3 -m venv venv && venv/bin/pip install -r requirements-dev.txt
venv/bin/python -m pytest # fake API via httpx.MockTransport, no network
venv/bin/pylint src testsHermes
Install the release anywhere (with its own venv and .env) and add it to the profile's
config.yaml:
mcp_servers:
mcp-anythingllm:
command: /path/to/mcp-anythingllm/.venv/bin/python
args: [/path/to/mcp-anythingllm/src/main.py]Importing an existing Markdown folder
venv/bin/python scripts/import_wiki.py ~/notes --default Personal --folder Work=Work --dry-runFiles below a folder Work go to the workspace "Work", everything else to "Personal";
missing workspaces are created. Already imported files are skipped on a rerun.
Scope / Limitations
A single-user tool, not a service: it runs locally over stdio — no port of its own, no authentication, no multi-user support.
It needs a running AnythingLLM instance plus its Developer API key; without them every tool fails with a readable message.
The API key is stored in plain text in
.env— keep that file out of the repo and out of logs.Several tools write to the knowledge base (
rag_add,rag_edit,rag_update,rag_remove); they are meant for explicit requests, not for background use.rag_getneeds a readableANYTHINGLLM_DOCUMENTS_DIR; the API itself returns no document text.Answers come from your own LLM server through AnythingLLM, so quality and latency depend on that setup — and the API is not part of AnythingLLM's public contract, so it can change between versions.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
A searchable knowledge base your assistant reads and writes.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI assistants to manage a personal markdown-based knowledge base with natural language interactions. Supports creating, searching, updating, and organizing notes across categories like people, recipes, meetings, and procedures.111-
- AlicenseAqualityDmaintenanceEnables AI assistants to search, read, and traverse Markdown note vaults (Obsidian-compatible) with full-text search, backlinks, knowledge graphs, and a persistent memory system for cross-session context.168 npm4MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to search and ask questions about documents stored in AnythingLLM workspaces through MCP tools.4MIT
- AlicenseNot gradedqualityBmaintenanceLets AI agents retrieve source-linked passages from a local folder of Markdown notes or an Obsidian vault, optionally following the explicit links between notes, and can also fetch passages from pinned public GitHub files you configure. It returns bounded evidence packets with original text, file paths and hashes so agents can answer from your material rather than generating content themselves.1MIT