Skip to main content
Glama

docmost-community-mcp

Model Context Protocol server for self-hosted Docmost Community / Open Source Edition.

Source: github.com/dilruwanm/docmost-community-mcp

Official Docmost MCP and API keys are Enterprise-only. This server talks to the same internal HTTP API the Docmost web app uses, so you can search, read, write, and organize a CE wiki from Cursor, Claude, or any MCP client.

Requires Docmost v0.71+ for Markdown body writes. Latest verified target is v0.95.0.

Install

npx -y docmost-community-mcp

From source:

git clone https://github.com/dilruwanm/docmost-community-mcp.git
cd docmost-community-mcp
npm install
npm run build

Related MCP server: docmost-mcp-local

What you get

Official Enterprise MCP tool names, plus Community extras those docs omit.

Pages: search_pages, get_page, create_page, update_page, list_pages, list_child_pages, duplicate_page, copy_page_to_space, move_page, move_page_to_space, delete_page, restore_page, list_trash, get_page_history, get_history_version, get_breadcrumbs, get_backlinks, export_page

Spaces: list_spaces, get_space, create_space, update_space, delete_space, export_space

Comments: get_comments, create_comment, update_comment, delete_comment

Search / people: search_attachments, search_suggest, list_workspace_members, get_current_user

Files / labels / access: upload_attachment, get_attachment_info, list_page_labels, add_page_labels, remove_page_label, list_space_members, add_space_members, remove_space_member, update_space_member_role

Page and comment bodies are Markdown. Updates go through POST /api/pages/update with format: "markdown" so Docmost converts and applies the change in place. The server does not open a Yjs socket or invent its own TipTap schema.

Environment

Variable

Required

Purpose

DOCMOST_URL

yes

Instance URL, e.g. https://docs.example.com

DOCMOST_EMAIL + DOCMOST_PASSWORD

one auth method

Community login

DOCMOST_AUTH_TOKEN

one auth method

authToken cookie from the browser

DOCMOST_SESSION_PATH

no

Session cache file

DOCMOST_READ_ONLY

no

true / 1 / yes — search and read only; mutating tools are refused

Email/password is preferred. The JWT is cached under ~/.docmost-community-mcp/session.json and refreshed on 401. MFA accounts cannot complete login here — use DOCMOST_AUTH_TOKEN instead.

Use a dedicated Docmost user. Do not commit credentials.

Cursor

Add to .cursor/mcp.json or ~/.cursor/mcp.json:

{
  "mcpServers": {
    "docmost": {
      "command": "npx",
      "args": ["-y", "docmost-community-mcp"],
      "env": {
        "DOCMOST_URL": "https://docs.example.com",
        "DOCMOST_EMAIL": "you@example.com",
        "DOCMOST_PASSWORD": "your-password"
      }
    }
  }
}

From a local clone:

{
  "mcpServers": {
    "docmost": {
      "command": "node",
      "args": ["/absolute/path/to/docmost-community-mcp/dist/index.js"],
      "env": {
        "DOCMOST_URL": "https://docs.example.com",
        "DOCMOST_EMAIL": "you@example.com",
        "DOCMOST_PASSWORD": "your-password"
      }
    }
  }
}

Claude Desktop / Claude Code

Same mcpServers block as above. Claude Code:

claude mcp add docmost --env DOCMOST_URL=https://docs.example.com --env DOCMOST_EMAIL=you@example.com --env DOCMOST_PASSWORD=secret -- npx -y docmost-community-mcp

Design notes

  • stdio only in this release. Streamable HTTP can be added later.

  • No Enterprise license, no Docmost database access, no Docmost fork.

  • Space slugs are accepted anywhere a space id is required.

  • Page slugIds (the id in page URLs) are accepted anywhere a page id is required, and are resolved to UUIDs before the request.

  • move_page computes the required fractional position key (first, last, or after a sibling).

  • create_page / update_page fail clearly on servers older than v0.71 instead of silently dropping the body. get_current_user reports docmostVersion from Docmost's currentVersion field.

  • delete_space requires confirm: true. Mutating tools honor DOCMOST_READ_ONLY.

  • list_pages defaults to recently updated pages. Pass view=tree for sidebar-root pages.

  • search_attachments is Enterprise-only; Community hosts get a clear 403 message.

  • Export tools write a zip or a single .md/.html file to output_path or a temp file and return the path.

License

MIT. This package does not include Docmost AGPL or Enterprise source.

Available Tools

41 tools
add_page_labelsA

Add one or more labels to a page. Names are normalized to lowercase kebab-case.

Inputs: names (required), page_id (required).

add_space_membersB

Add users and/or groups to a space with a role.

Inputs: role (required), space_id (required), user_ids, group_ids.

copy_page_to_spaceA

Copy a page and its accessible sub-pages into a different space.

Inputs: page_id (required), space_id (required).

create_commentA

Add a page-level comment. Inline selection comments are not supported.

Inputs: page_id (required), markdown (required), parent_comment_id.

create_pageA

Create a page in a space. Body is Markdown and is persisted in place (Docmost v0.71+). Can nest under a parent.

Inputs: title (required), space_id (required), icon, markdown, +1 more.

create_spaceA

Create a space. Slug is generated from the name if omitted. Requires permission to manage spaces.

Inputs: name (required), slug, description.

delete_commentA
Destructive

Delete a comment. Owners can delete their own; space admins can delete any comment.

Inputs: comment_id (required).

delete_pageA
Destructive

Move a page to trash, or permanently delete it. Permanent delete requires space admin.

Inputs: page_id (required), permanently.

delete_spaceA
Destructive

Delete a space and its pages. This cannot be undone.

Inputs: confirm (required), space_id (required).

duplicate_pageA

Duplicate a page and its accessible sub-pages within the same space.

Inputs: page_id (required).

export_pageA
Read-only

Export a page to a local file. A page without children is often a .md or .html file; include_children usually returns a zip. Writes to output_path or a temp file and returns the path plus content type.

Inputs: page_id (required), format, output_path, include_children, +1 more.

export_spaceA
Read-only

Export a whole space as a zip of Markdown or HTML. Writes to output_path or a temp file.

Inputs: space_id (required), format, output_path, include_attachments.

get_attachment_infoC
Read-only

Get metadata for an uploaded attachment.

Inputs: attachment_id (required).

get_breadcrumbsA
Read-only

Get the ancestor path from space root to a page.

Inputs: page_id (required).

get_commentsA
Read-only

List page-level comments. Content is returned as Markdown. Each comment is re-fetched so edits are not stale.

Inputs: page_id (required), limit, cursor.

get_current_userA
Read-only

Get the authenticated user and workspace context, detected Docmost version, and whether this session is read-only.

Inputs: no named parameters.

get_history_versionA
Read-only

Get a specific page history version by history ID.

Inputs: history_id (required).

get_pageA
Read-only

Get a page's metadata and Markdown body. Use format=json for raw ProseMirror.

Inputs: page_id (required), format.

get_page_historyC
Read-only

List revision history for a page.

Inputs: page_id (required), limit, cursor.

get_spaceA
Read-only

Get details for a space, including the current user's membership.

Inputs: space_id (required).

list_child_pagesA
Read-only

List direct child pages of a page, in sidebar order. Omit page_id and pass space_id for space-root pages.

Inputs: limit, cursor, page_id, space_id.

list_page_labelsA
Read-only

List labels on a page.

Inputs: page_id (required), limit, cursor.

list_pagesA
Read-only

List pages in a space. Default view=recent is recently updated pages (not the sidebar tree; General can look empty). Use view=tree for space-root pages in sidebar order, or list_child_pages for children of a page.

Inputs: space_id (required), view, limit, cursor.

list_space_membersA
Read-only

List members and groups in a space.

Inputs: space_id (required), limit, cursor.

list_spacesA
Read-only

List spaces the authenticated user can access.

Inputs: limit, cursor.

list_trashA
Read-only

List soft-deleted pages in a space.

Inputs: space_id (required), limit, cursor.

list_workspace_membersC
Read-only

List workspace members.

Inputs: limit, query, cursor.

move_pageA

Move a page under a new parent or to the space root. Position is computed unless you pass an explicit 5-12 character key.

Inputs: page_id (required), root, position, after_page_id, +1 more.

move_page_to_spaceA

Move a page and its accessible sub-pages to a different space.

Inputs: page_id (required), space_id (required).

remove_page_labelA

Remove a label from a page by label ID.

Inputs: page_id (required), label_id (required).

remove_space_memberC
Destructive

Remove a user or group from a space.

Inputs: space_id (required), user_id, group_id.

restore_pageA

Restore a soft-deleted page from trash.

Inputs: page_id (required).

search_attachmentsA
Read-only

Search file attachments by name or indexed text. This is an Enterprise feature; Community Edition returns 403. Prefer get_attachment_info when you already have an attachment id.

Inputs: query (required), limit, space_id.

search_pagesA
Read-only

Full-text search for pages the authenticated user can access. Optionally scope to a space.

Inputs: query (required), limit, offset, space_id.

search_suggestA
Read-only

Typeahead suggestions. Pages are included by default (set include_pages=false to skip). Users and groups default to off.

Inputs: query (required), limit, space_id, include_pages, +2 more.

update_commentA

Replace a comment body. You can update your own comments.

Inputs: markdown (required), comment_id (required).

update_pageA

Update a page title, icon, and/or Markdown body in place. Body writes use the server converter (v0.71+). operation defaults to replace.

Inputs: page_id (required), icon, title, markdown, +1 more.

update_spaceC

Update a space name, slug, or description.

Inputs: space_id (required), name, slug, description.

update_space_member_roleC

Change a space member or group's role.

Inputs: role (required), space_id (required), user_id, group_id.

upload_attachmentA

Upload a local file to a page. Returns attachment metadata including the /api/files/:id/:name URL path.

Inputs: page_id (required), file_path (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 41 tools

    Disambiguation4/5

    Most tools target distinct resource-action pairs, and near-pairs like move_page vs move_page_to_space and duplicate_page vs copy_page_to_space are clearly separated by destination scope. The main ambiguity is list_pages vs list_child_pages, since both can return space-root pages depending on options.

    Naming Consistency5/5

    The API uses a consistent snake_case verb_noun pattern throughout: create_page, update_page, delete_page, list_spaces, get_comments, add_space_members, etc. Prepositional variants like move_page_to_space and copy_page_to_space follow the same readable convention.

    Tool Count2/5

    Forty-one tools is beyond the 16-25 'heavy' range and feels over-split for an MCP surface. Some tools such as search_attachments are non-functional in the Community Edition, and the many page-move/copy/list variants make the surface larger than its core workflows require.

    Completeness4/5

    The surface covers the core wiki lifecycle well: pages, spaces, comments, attachments, labels, members, search, export, trash, and history read operations. Workable gaps remain: there is no restore-from-version operation, no attachment delete/download, and no workspace-level user/group management.

    Maintenance

    ActivitySlowing
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers