Skip to main content
Glama

wikijs-mcp

MCP server for accessing Wiki.js through the GraphQL API, built with FastMCP (Python).

Exposed Tools

Domain

Tool

pages

wikijs_page_list, wikijs_page_get, wikijs_page_get_by_path, wikijs_page_create, wikijs_page_update, wikijs_page_delete, wikijs_page_move, wikijs_page_render, wikijs_page_tree

search

wikijs_page_search

tags

wikijs_tag_list, wikijs_page_list_by_tags

groups

wikijs_group_list, wikijs_group_get, wikijs_group_create, wikijs_group_update, wikijs_group_delete, wikijs_group_assign_user, wikijs_group_unassign_user

users

wikijs_user_list, wikijs_user_get, wikijs_user_create, wikijs_user_update, wikijs_user_delete, wikijs_user_activate, wikijs_user_deactivate, wikijs_user_enable_tfa, wikijs_user_disable_tfa

system

wikijs_system_info

mail

wikijs_mail_update_config, wikijs_mail_send_test

storage

wikijs_storage_target_list, wikijs_storage_status, wikijs_storage_action_execute, wikijs_storage_target_update

The mail domain requires the manage:system permission. Unlike the other domains, both mail tools can only be used with a Wiki.js API key belonging to the Administrators group (the manage:system permission). wikijs_mail_update_config is also REPLACE-ALL in nature — a single call overwrites the entire mail configuration of the instance, not just the fields mentioned.

The storage domain also requires the manage:system permission. The four storage tools can only be used with an API key belonging to the Administrators group. Force Sync (the button in Admin → Storage) is run with wikijs_storage_action_execute(target_key="git", handler="sync"). wikijs_storage_target_list masks configuration values that are credentials (basicPassword, sshPrivateKeyContent) as *** — the original values cannot be read via MCP. Handlers are not whitelisted: use the actions from wikijs_storage_target_list to find available handlers, and note that some of them are destructive (purge deletes the local Git repo, importAll overwrites the wiki content from the local repo).

wikijs_storage_target_update(target_key, is_enabled, mode, sync_interval, config) changes the configuration of one target with partial update semantics: arguments that are not filled in mean "don't change", and config is merged per key. The underlying Wiki.js mutation (storage.updateTargets) is actually REPLACE-ALL, so the tool performs its own read-modify-write so that fields not mentioned are not deleted. config keys that do not yet exist on the target are rejected (ValueError), as is the value "***" — that is the redaction sentinel of wikijs_storage_target_list, not the real credential.

Related MCP server: mcp-wikijs-mv

Configuration

Copy .env.example to .env and fill in the appropriate values:

cp .env.example .env

Required Variables

Variable

Description

WIKIJS_URL

Base URL of the Wiki.js instance, e.g. https://wiki.example.com

WIKIJS_API_KEY

Wiki.js API key (Admin → API Access)

How to Use

stdio (Claude Desktop / VS Code)

{
  "mcpServers": {
    "wikijs": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/andhit-r/wikijs-mcp", "wikijs-mcp"],
      "env": {
        "WIKIJS_URL": "https://wiki.example.com",
        "WIKIJS_API_KEY": "your-api-key"
      }
    }
  }
}

HTTP + API Key (Claude Code / VS Code remote)

docker run -p 8000:8000 \
  -e WIKIJS_URL=https://wiki.example.com \
  -e WIKIJS_API_KEY=your-wikijs-api-key \
  -e MCP_API_KEY=your-mcp-api-key \
  ghcr.io/andhit-r/wikijs-mcp:latest

HTTP + Authentik OAuth (Claude Web)

Fill in all AUTHENTIK_* and MCP_BASE_URL variables in .env, then:

docker run -p 8000:8000 --env-file .env ghcr.io/andhit-r/wikijs-mcp:latest

License

MIT

Related MCP Connectors

Related MCP Servers