docmost-mcp
docmost-mcp
MCP-сервер, который даёт ИИ-агентам доступ на чтение и запись к вики Docmost, развёрнутой на собственном сервере, через её обычный REST API.
Зачем это существует
Docmost поставляется с собственным MCP-эндпоинтом, но он закрыт за платной лицензией — в интерфейсе настроек для раздела API management отображается «Доступно по платной лицензии», а /api/mcp на Community Edition возвращает 404. Создание API-ключей ограничено лицензией точно так же.
Однако обычный REST API в Community Edition полностью открыт. Этот сервер — тонкая обёртка над ним: те же операции, но аутентификация по сессии вместо API-ключа.
Related MCP server: MediaWiki MCP Server
Требования
Python 3.11+
Экземпляр Docmost, доступный вам по HTTP(S)
Отдельная учётная запись Docmost для агента
Установка
git clone https://github.com/<you>/docmost-mcp.git
cd docmost-mcp
python3 -m venv venv
./venv/bin/pip install -r requirements.txtНастройка
Скопируйте пример конфигурации и заполните его:
cp config.example.json config.json
chmod 600 config.json{
"url": "https://docmost.example.com",
"api_key": "",
"email": "agent@example.com",
"password": "..."
}Поддерживаются два режима аутентификации:
Режим | Когда использовать |
| Если у вас есть лицензия Docmost Enterprise. Отправляется как Bearer-токен. |
| Community Edition. Сервер выполняет вход и автоматически проходит аутентификацию заново, когда срок действия сессии истекает. |
Если api_key задан, он имеет приоритет; в остальных случаях используются учётные данные.
Путь к конфигурации можно переопределить переменной окружения DOCMOST_MCP_CONFIG.
Создайте отдельную учётную запись
Не используйте учётные данные владельца рабочей области. Пригласите отдельного пользователя (Settings → Members → Invite) и предоставьте ему доступ только к тем пространствам, которые нужны агенту. Доступ к пространствам в Docmost обычно наследуется от группы по умолчанию Everyone, поэтому проверьте, к каким пространствам может обратиться эта группа, прежде чем считать, что агент ограничен.
Плюсовая адресация в стиле Gmail (you+agent@gmail.com) работает, если вы не хотите создавать второй почтовый ящик.
Проверка
selftest.py прогоняет всю цепочку — вход, чтение, запись, повторное чтение, удаление:
GXP9
Подключение агента
Сервер общается по MCP через stdio.
Claude Code
{
"mcpServers": {
"docmost": {
"type": "stdio",
"command": "/path/to/docmost-mcp/venv/bin/python",
"args": ["/path/to/docmost-mcp/server.py"],
"env": {}
}
}
}Или добавьте его в ~/.claude.json вручную:
claude mcp add docmost -- /path/to/docmost-mcp/venv/bin/python /path/to/docmost-mcp/server.pyПосле этого перезапустите Claude Code — конфигурация читается при запуске.
Claude Desktop
Добавьте тот же блок в claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Cursor
Добавьте его в .cursor/mcp.json в проекте или в ~/.cursor/mcp.json глобально, используя ту же структуру mcpServers.
Любой другой MCP-клиент
Запустите server.py с помощью Python из виртуального окружения (virtualenv) и общайтесь по JSON-RPC через stdin и stdout. Пример минимального «рукопожатия»:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}Удобная обёртка делает команду короче:
#!/bin/sh
exec /path/to/docmost-mcp/venv/bin/python /path/to/docmost-mcp/server.py "$@"Инструменты
Инструмент | Аргументы | Действие |
|
| Перечисляет пространства рабочего пространства |
|
| Полнотекстовый поиск по страницам |
|
| Открывает страницу по id или slug |
|
| Недавно изменённые страницы |
|
| Создаёт страницу |
|
| Обновляет заголовок и/или содержимое |
|
| Переносит страницу на новую родительскую страницу |
|
| Помещает в корзину (или полностью удаляет) страницу |
fmt — это markdown (по умолчанию), html или json.
Заметки об API Docmost
Что нужно знать, если вы расширяете этот сервер:
Каждая конечная точка —
POST, включая чтение данных./pages/createи/pages/updateобязательно требуют полеformat(json|markdown|html). Если его опустить, вернётся ошибка400.Ответы оборачивают данные в
{"data": ...}; клиент разворачивает их./api/api-keysотвечает200с пустым списком на Community Edition — просмотр списка открыт, но создание ключей ограничено лицензией.Пути к эндпоинтам и формы данных взяты из исходного кода клиента Docmost (
apps/client/src/features/*/services/*.ts), а не выдуманы «на глаз».
Безопасность
В
config.jsonхранится пароль в открытом виде. Держите его права600и не добавляйте файл в систему контроля версий — он уже в.gitignore.Давайте учётной записи агента минимально необходимый доступ к пространствам.
Действия учётной записи появляются в Docmost под её собственным именем, поэтому история страниц остаётся привязанной к автору.
Совместимость
Проект совместим с Docmost 0.95.0 и Python MCP SDK 2.0. Обратите внимание, что SDK 2.0 переименовал FastMCP в MCPServer и перенес его в mcp.server; путь импорта до версии 2.0 (mcp.server.fastmcp) работать не будет.
Лицензия
MIT — см. LICENSE.
Этот проект не связан с Docfrac.
Wait, I noticed some issues in the draft:
- "GXP9" is not in the document; I wrote "GXP4"? Let's check - The original GXP4 line is used after the selftest. I pasted "GXP9" in my draft - that's wrong. Should be GXP4. In the original "Verify" uses GXP4. Need to correct.
- In the original "Claude Code" section: The paragraph "Or add it to `~/.claude.json` by hand:" appears after GXP5. In my draft I wrote "GXP6" then "Добавьте..." - Let's set right:
Original order:
### Claude Code
GXP5
Or add it to `~/.claude.json` by hand:
GXP6
Перезапустите ...
So output:
### Claude Code (keep heading)
GXP5
Либо добавьте его в `~/.claude.json` вручную:
GXP6
После этого перезапустите...
- In the "Проверка" section: GXP8 is for the wrapper after the handshake. I wrote "GXP7", "GXP8". Good.
- "Инструменты" section: "Get recent_pages" original row: "| `recent_pages` | `space_id?`, `limit` | Recently changed pages |". Use.
Actually, I mistakenly wrote `get_page` row description "Открывает страницу по id или slug" - and "get_page" should say "Fetches a page by id or slugId". I wrote "Открывает страницу по id или slugId" originally; in the final draft I wrote "slug". Note original text: "Fetches a page by id or slugId". Hmm, I must re-read the prompt to be sure: It says "Fetches a page by id or slugId" — looking at the source: "Fetches a page by id or slugId" (There's definitely "slugId"). Wait the user text: "| `get_page` | `page_id` | Fetches a page by id or slugId |". Yes "Fetches a page by id or slugId". Let me include "slugId". Good.
- "recent_pages" row: "Недавно изменённые страницы".
- "delete_page": "permanently" row: "Указывает в корзину (или полностью удаляет) страницу."
- In the "Совместимость" sentence: "Проектировано совместимость" is broken. Need to fix: "Разработано на базе/для Docmost 0.95.0..." -> "Совместимость с Docmost 0.95.0 и Python MCP SDK 2.0." Hmm. Let's say: "Совместим с Docmost 0.95.0 и Python MCP SDK 2.0. Note that..." Good.
- "Этот проект не связан" - ok.
- "Действия учётной записи появляются в Docmost под её собственным именем" - "отображаются" vs "появляются". Fine.
- "другие строк" - "a formatting" we wrote "общения" which is good.
- "Либо|Или" - use "Либо" in "Or add".
- "Записать" outgoing.
Potential typo: "пути... а не выдуманы" - good.
- "Держите его права `600`" should be "с правами доступа `600`". Perhaps "держите с правами `600`".
Let me finalize with careful review. I will now compose the final clean text.
One additional check: The auth table's second mode cell: should not contain "Community Edition" (untranslated proper name). Yes.
Also, "Bearer-токен". Good.
Now for "In API also managed setup: "полностью открыт." Good.
Also, "Лучше: "используя те же операции" phrase from "thin wrapper".
Let me now rewrite final.
Some final tweaks: "получай" vs "очень". Fine.
One more nuance: "Info about 'прихода»" maybe.
Let's# docmost-mcp
MCP-сервер, который даёт ИИ-агентам доступ на чтение и запись к вики [Docmost](https://docmost.com), развёрнутой на собственном сервере, через её обычный REST API.
## Зачем это существует
Docmost поставляется с собственным MCP-эндпоинтом, но он закрыт за платной лицензией — в интерфейсе настроек для раздела *API management* отображается *«Доступно по платной лицензии»*, а `/api/mcp` на Community Edition возвращает `404`. Создание API-ключей ограничено лицензией точно так же.
Однако обычный REST API в Community Edition полностью открыт. Этот сервер — тонкая обёртка над ним: те же операции, но аутентификация через сессию вместо API-ключа.
## Требования
* Python 3.11+
* Экземпляр Docmost, доступный по HTTP(S)
* Отдельная учётная запись Docmost для агента
## Установка
GXP1
## Настройка
Скопируйте пример конфигурации и заполните его:
GXP2
GXP3
Поддерживаются два режима аутентификации:
| Режим | Когда использовать |
| --- | --- |
| `api_key` | Если у вас есть лицензия Docmost Enterprise. Отправляется как Bearer-токен. |
| `email` + `password` | Community Edition. Сервер выполняет вход в систему и автоматически аутентифицируется заново, когда истекает срок действия сессии. |
Если задан `api_key`, он имеет приоритет; в противном случае используются эти данные.
Путь к конфигурации можно переопределить переменной окружения `DOCMOST_MCP_CONFIG`.
### Создайте отдельную учётную запись
Не используйте учётные данные владельца рабочего пространства. Пригласите отдельного пользователя (Settings → Members → Invite) и предоставьте ему доступ только к тем пространствам, которым нужен агент. Доступ к пространствам в Docmost обычно наследуется от группы по умолчанию *Everyone*, поэтому прежде чем считать, что доступ агента ограничен, проверьте, к чему может обратиться группа.
Плюс-адресация в стиле Gmail (`you+agent@gmail.com`) работает, если вам не подходит создавать второй почтовый ящик.
## Проверка
`selftest.py` проверяет всю цепочку — вход, чтение, запись, повторное чтение, удаление:
GXP4
## Подключение агента
Сервер общается по MCP через **stdio**.
### Claude Code
GXP5
Или добавьте его в `~/.claude.json` вручную:
GXP6
После этого перезапустите Claude Code — конфигурация читается при запуске.
### Claude Desktop
Добавьте тот же блок в `claude_desktop_config.json`:
* macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
* Windows: `%APPDATA%\Claude\claude_desktop_config.json`
### Курсор
Добавьте его в `.cursor/mcp.json` в проекте или в `~/.cursor/mcp.json` глобально, используя ту же структуру `mcpServers`.
### Любой другой MCP-клиент
Запустите `server.py` с помощью virtualenv Python и общайтесь по JSON-RPC через stdin и stdout. Пример минимального установления соединения:
GXP7
Удобная обёртка делает команду короче:
GXP8
## Инструменты
| Инструмент | Аргументы | Назначение |
| --- | --- | --- |
| `list_spaces` | `limit` | Перечисляет пространства рабочего |
| `search` | `query`, `space_id?`, `limit` | Полнотекстовый поиск по страницам |
| `get_page` | `page_id` | Получает страницу по id или slugId |
| `recent_pages` | `space_id?`, `limit` | Недавно изменённые страницы |
| `create_page` | `space_id`, `title`, `content?`, `parent_page_id?`, `fmt` | Создаёт страницу |
| `update_page` | `page_id`, `title?`, `content?`, `fmt` | Обновляет заголовок и/или тело страницы |
| `move_page` | `page_id`, `parent_page_id?` | Перемещает страницу к другому родителю |
| `delete_page` | `page_id`, `permanently` | Помещает в корзину (или полностью удаляет) страницу |
`fmt` — это `markdown` (по умолчанию), `html` или `json`.
## Заметки об API Docmost
Что нужно знать, если расширяете сервер:
* Каждая конечная точка — `POST`, включая операции чтения.
* `/pages/create` и `/pages/update` **обязательно** требуют поля `format` (`json` | `markdown` | `html`). Если его опустить, возвращается `401`.
* Responses оборачивают данные в `{"data": ...}`; клиент разворачивает их.
* `/api/api-keys` отвечает `200` с пустым списком в Community Edition — перечисление ключей открыто, но только их *создание* ограничено лицензией.
* Пути к эндпоинтам и структура данных взяты из исходного кода клиента Docmost, а не угаданы.
## Безопасность
* В `config.json` лежит пароль в открытом виде. Держите его с правами `600` и вне версионного контроля — он уже в `.gitignore`.
- Дамы учётной записи агента минимально допустимый доступ к пространствам, при котором он всё ещё может работать.
- Действия учётной записи видны в Docmost без её имени, поэтому история страниц остаётся поддерживающейся.
## Совместимость
Разработано для Docmost 0.95.0 and Python MCP SDK 2.0. Обратите внимание: в SDK 2.0 `FastMCP` переименован в `MCPServer` и перенесён в `mcp.server`; путь импорта до 2.0 (`mcp.server.fastmcp`) не работает.
## Лицензия
MIT — см. [LICENSE](LICENSE).
Этот проект не связан с Docmost.This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI models to interact with BookStack wiki instances through a comprehensive API interface. Supports content management (books, chapters, pages), user administration, search functionality, and content export in multiple formats.4112MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLM clients to interact with any MediaWiki wiki, supporting page creation/editing, search, file uploads, category browsing, and page history retrieval. Supports multiple wikis with OAuth2 or bot password authentication for both public and private wikis.910MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with direct access to self-hosted Docmost documentation through tools for listing spaces, searching content, and retrieving pages in Markdown format. It facilitates seamless documentation lookup and content retrieval within MCP-compatible clients.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search, retrieve, and optionally edit pages in a WikiJS knowledge base via the Model Context Protocol.231MIT
Related MCP Connectors
Persistent docs and memory for AI agents — read, write, organize & search a shared workspace.
Self-hostable team wiki; agents read & write it via MCP; Atlas turns your repo into a cited wiki.
AgentDocs (agentdocs.eu) MCP: read, search, write, comment, share & attach images to Markdown docs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NeerdOnerT/docmost-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server