Skip to main content
Glama

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": "..."
}

Поддерживаются два режима аутентификации:

Режим

Когда использовать

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 прогоняет всю цепочку — вход, чтение, запись, повторное чтение, удаление:

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.json

  • Windows: %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 "$@"

Инструменты

Инструмент

Аргументы

Действие

list_spaces

limit

Перечисляет пространства рабочего пространства

search

query, space_id?, limit

Полнотекстовый поиск по страницам

get_page

page_id

Открывает страницу по id или slug

get_recent

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). Если его опустить, вернётся ошибка 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.
A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    B
    quality
    D
    maintenance
    Enables 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.
    41
    12
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    910
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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.
    4
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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