Skip to main content
Glama

wikijs-mcp-http

Native HTTP/SSE MCP server for Wiki.js. A clean, production-oriented replacement for supergateway-based setups.

This fork exists because the original transport layer was janky. We replaced it with Wiki.js's built-in --http / SSE support so you get a proper, stable, long-lived MCP server you can actually run behind a reverse proxy.

Features

  • 29 tools (19 read + 10 write) covering pages, comments, tags, assets, users, navigation, and system info

  • Full-text search, page tree browsing, link graphs, and version history

  • Complete comment system (list, read, create, update, delete)

  • Asset and folder management

  • Tag management

  • System diagnostics and site config

  • Optional mutations with multiple safety layers (WIKI_MUTATIONS_ENABLED, dry-run mode, confirm tokens, path prefix restrictions)

  • Built-in resources: wikijs://markdown-guide, wikijs://mermaid-guide, wikijs://api-permissions-guide

  • Typed errors with LLM-friendly messages

  • GraphQL client with timeout + exponential backoff

  • Sensitive field filtering and input hardening

Related MCP server: mcp-wikijs-mv

Quick Start (HTTP/SSE Mode)

cp .env.example .env
npm install
npm run build

Edit .env:

WIKI_BASE_URL=https://your-server
WIKI_API_TOKEN=your_wikijs_jwt_token
MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=3200
WIKI_MUTATIONS_ENABLED=false          # set true only when you need writes
WIKI_MUTATION_DRY_RUN=true

Run it:

npm start

Connect your MCP client to:

https://your-server:3200/sse

See the full systemd service and Caddyfile examples in the repo (or the one running at 666temple.love right now).

Basic pattern:

  • Run as a dedicated user

  • Bind to localhost only

  • Put Caddy (or nginx) in front with HTTPS + subdomain (e.g. mcp.website.com)

  • Use a strong WIKI_MUTATION_CONFIRM_TOKEN if you enable writes

Environment Variables

Variable

Required

Default

Description

WIKI_BASE_URL

Yes

-

Your Wiki.js URL (e.g. https://website.com)

WIKI_API_TOKEN

Yes

-

Wiki.js JWT API token

MCP_TRANSPORT

No

stdio

Use http for network mode

MCP_HOST / MCP_PORT

No

0.0.0.0:3200

Bind address for HTTP mode

WIKI_MUTATIONS_ENABLED

No

false

Enable write tools

WIKI_MUTATION_DRY_RUN

No

true

Preview mutations without writing

WIKI_MUTATION_CONFIRM_TOKEN

No

(empty)

Extra safety gate — write tools must supply matching confirm value

WIKI_ALLOWED_MUTATION_PATH_PREFIXES

No

(empty)

Comma-separated path prefixes allowed for mutations

Full reference is in .env.example.

Wiki.js Setup

  1. Go to Administration → API in Wiki.js and enable API access

  2. Create an API key (JWT) with appropriate permissions

  3. Paste it into WIKI_API_TOKEN

For heavy read usage you usually only need read:pages + read:source + read:comments.

Mutation Safety

Write tools are disabled by default. When enabled they still have multiple guardrails:

  • WIKI_MUTATION_DRY_RUN=true (default) → tools only preview

  • WIKI_MUTATION_CONFIRM_TOKEN → forces you to pass a matching confirm argument on every write

  • WIKI_ALLOWED_MUTATION_PATH_PREFIXES → scope writes to specific path prefixes

  • All mutation attempts are logged to stderr with structured audit info

MCP Client Config

{
  "mcpServers": {
    "wikijs": {
      "command": "node",
      "args": ["/path/to/wikijs-mcp-http/dist/index.js"],
      "env": {
        "WIKI_BASE_URL": "https://website.com",
        "WIKI_API_TOKEN": "your_token",
        "MCP_TRANSPORT": "http",
        "MCP_PORT": "3200"
      }
    }
  }
}

Stdio (local only)

Still supported if you prefer the classic style.

Development

npm run dev          # HTTP dev server with hot reload
npm run dev:stdio    # stdio dev mode
npm run build

License

CC0. Do whatever the fuck you want with it.


Maintained as part of the 666 Grimoire stack.

Available Tools

29 tools
wikijs_create_commentA

Create a new comment on a page. Requires WIKI_MUTATIONS_ENABLED=true and may need comment posting permissions. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: pageId (required), content (required), confirm, replyTo, +2 more.

wikijs_create_pageA

Create a new page. Requires WIKI_MUTATIONS_ENABLED=true. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: path (required), title (required), content (required), confirm, +10 more.

wikijs_delete_commentA

Delete a comment by ID. Requires WIKI_MUTATIONS_ENABLED=true and comment management permissions. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), confirm.

wikijs_delete_pageA

Delete a page by ID. Requires WIKI_MUTATIONS_ENABLED=true and may need manage:pages or delete:pages permission. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), confirm.

wikijs_delete_tagA

Delete a tag by ID. Removes the tag from all pages and the tag registry. Requires WIKI_MUTATIONS_ENABLED=true and may need manage:system permission. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), confirm.

wikijs_get_commentA

Get a single comment by ID. Returns full comment details including content and author information.

Inputs: id (required).

wikijs_get_current_userA

Get the profile of the currently authenticated API user. Returns identity, permissions context, and activity info.

Inputs: no named parameters.

wikijs_get_navigationA

Retrieve the navigation tree for all locales. Returns configured navigation items including links, headers, and dividers with their visibility settings.

Inputs: no named parameters.

wikijs_get_page_by_idA

Get a single page body/content by numeric page ID.

Inputs: id (required).

wikijs_get_page_by_pathB

Get a single page body/content using path + locale.

Inputs: path (required), locale.

wikijs_get_page_historyA

Get edit history trail for a page by ID. Returns version dates, authors, and change types.

Inputs: id (required), offset, limit.

wikijs_get_page_treeA

Get the page tree hierarchy for site navigation and structure discovery. Returns folders and/or pages with depth info.

Inputs: path, parentId, mode, locale, +1 more.

wikijs_get_page_versionA

Get a specific version of a page by page ID and version ID. Returns full page content and metadata for that version.

Inputs: id (required), versionId (required).

wikijs_get_site_configA

Retrieve safe (non-sensitive) site configuration including title, description, feature flags, and upload limits. Does not expose secrets or authentication keys.

Inputs: no named parameters.

wikijs_get_system_infoA

Retrieve Wiki.js system information including version, database type, and usage statistics. Useful for diagnostics. Sensitive fields (dbHost, configFile, workingDirectory, hostname) are filtered out.

Inputs: no named parameters.

wikijs_list_asset_foldersB

List asset folders within a parent folder. Returns folder structure for navigating the asset hierarchy.

Inputs: parentFolderId.

wikijs_list_assetsA

List assets (files, images) in a specific folder. Returns asset metadata including filename, type, size, and upload date.

Inputs: folderId, kind.

wikijs_list_commentsA

List all comments for a specific page by path and locale. Returns comment details including author info and timestamps.

Inputs: path (required), locale.

wikijs_list_pagesC

List pages for crawling/indexing with optional locale and limit.

Inputs: locale, limit, orderBy, orderByDirection.

wikijs_list_tagsA

List all tags used across wiki pages. Useful for discovering content categories and taxonomy.

Inputs: no named parameters.

wikijs_move_pageA

Move a page to a new path or locale. Requires WIKI_MUTATIONS_ENABLED=true and may need manage:pages permission. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), destinationPath (required), confirm, destinationLocale.

wikijs_restore_pageA

Restore a page to a previous version. Requires WIKI_MUTATIONS_ENABLED=true and may need manage:pages permission. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), versionId (required), confirm.

wikijs_search_pagesA

Search pages by keyword and return path/title summary for knowledge lookup.

Inputs: query (required), locale, path.

wikijs_search_tagsA

Search for tags matching a query string. Returns an array of matching tag name strings.

Inputs: query (required).

wikijs_search_usersA

Search for users by name or email. Returns matching user profiles for collaboration context.

Inputs: query (required).

wikijs_update_commentA

Update an existing comment by ID. Requires WIKI_MUTATIONS_ENABLED=true and comment management permissions. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), content (required), confirm.

wikijs_update_pageC

Update an existing page by ID. Requires WIKI_MUTATIONS_ENABLED=true. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), confirm, title, content, +11 more.

wikijs_update_tagA

Update an existing tag by ID. Changes the tag slug and/or title. Requires WIKI_MUTATIONS_ENABLED=true and may need manage:system permission. confirm is only checked when WIKI_MUTATION_CONFIRM_TOKEN is set.

Inputs: id (required), tag (required), title (required), confirm.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 29 tools

    Disambiguation5/5

    Each tool has a distinct verb-noun pair that clearly specifies the resource and action. Potential overlaps like get_page_by_id vs get_page_by_path are resolved by different identifiers. No two tools are ambiguous.

    Naming Consistency5/5

    All tools follow the consistent pattern 'wikijs_verb_noun' with imperative verbs and lowercase nouns separated by underscores. No mixing of styles or irregular naming.

    Tool Count4/5

    29 tools is somewhat high for an MCP server, but the breadth of Wiki.js functionality (pages, comments, tags, assets, users, system) justifies the count. Still, it leans towards the heavier side.

    Completeness3/5

    Core page and comment operations are well-covered with CRUD and additional actions. However, tag creation is missing (only delete/update/list/search), asset management lacks upload/delete, and user management is limited to search and current user. Some notable gaps remain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers