Skip to main content
Glama

WikiJS MCP Server

A Model Context Protocol (MCP) server that provides integration with WikiJS, allowing AI assistants to search and retrieve content from your WikiJS knowledge base.

Overview

This MCP server enables AI assistants to interact with WikiJS instances by providing tools to:

  • Search for pages by query string

  • Retrieve pages by ID

  • Retrieve pages by path and locale

  • Get all pages from the wiki

Related MCP server: WikiMCP

Configuration for Cursor

Stdio

{
  "mcpServers": {
    "wikijs-mcp": {
      "command": "npx",
        "args": [
            "wikijs-mcp"
        ],
        "env": {
            "WIKIJS_URL": <your wikijs url>,
            "WIKIJS_API_KEY": <your wikijs api key>
        }
    }
  }
}

Streamable Http

Host Machine

Start the server TRANSPORT_METHOD=streamable-http TRANSPORT_OPTIONS_PORT=8080 npx wikijs-mcp (See Environment Variables for all available variables)

IDE

{
  "mcpServers": {
    "wikijs-mcp": {
      "transport": "http-streamable",
      "name": "WikiJS MCP",
      "url": <your mcp host url with port>/mcp
    }
  }
}

Getting a WikiJS API Key

  1. Log into your WikiJS instance as an administrator

  2. Go to Administration > API Access

  3. Create a new API key with appropriate permissions

  4. Copy the generated key to your .env file

Development

  1. Clone the repository:

git clone https://github.com/RicardoCenci/wikijs-mcp.git
cd wikijs-mcp
  1. Install dependencies:

npm install
  1. Copy the environment template and fill out its contents

cp env.example .env
  1. Build the project If you have make installed:

make build
  1. Deploy the WikiJS instance for testing

docker compose up -d

Usage

npx wikijs-mcp

Environment Variables

Variable

Description

Required

Allowed Values

Default

WIKIJS_URL

URL of your WikiJS instance

Yes

-

-

WIKIJS_API_KEY

WikiJS API key

Yes

-

-

TRANSPORT_METHOD

The transport method

No

stdio, streamable-http

stdio

TRANSPORT_OPTIONS_CORS_ORIGIN

Cors Origin (only on streamable-http)

No

-

*

TRANSPORT_OPTIONS_CORS_HEADERS

Cors Headers, comma separated (only on streamable-http)

No

-

Content-Type=mcp-session-id

TRANSPORT_OPTIONS_CORS_METHODS

Cors Methods, comma separated (only on streamable-http)

No

-

GET,POST,OPTIONS

TRANSPORT_OPTIONS_SESSION_TIMEOUT_MS

Session timeout (only on streamable-http)

No

-

60000

License

This project is licensed under the MIT License.

Available Tools

4 tools
get_all_pagesB

Get all pages in WikiJS

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the action but lacks behavioral details such as whether this is a read-only operation, potential performance impacts, pagination, or return format. The description is minimal and doesn't disclose key traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words, clearly front-loading the purpose. It's appropriately sized for a simple tool with no parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 params, no output schema), the description is minimally complete but lacks depth. Without annotations or output schema, it should ideally mention behavioral aspects like read-only nature or result format, but it's adequate for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add param info, but with no params, this is acceptable, aligning with the baseline for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('all pages in WikiJS'), making the purpose specific and understandable. It distinguishes from siblings by indicating it retrieves all pages rather than specific ones by ID/path or via search, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving all pages, but doesn't explicitly state when to use this vs. siblings like get_page_by_id or search_pages. No guidance on exclusions or prerequisites is provided, leaving usage context inferred rather than clearly defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_by_idC

Get a WikiJS page by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the page to retrieve

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action ('Get') without detailing aspects like read-only nature (implied but not explicit), error handling (e.g., what happens if ID is invalid), or response format. This leaves significant gaps for a tool that retrieves data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words, making it highly efficient and front-loaded. It directly communicates the core purpose without unnecessary elaboration, which is ideal for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, no annotations), the description is minimal but adequate for basic understanding. However, it lacks completeness for effective use: no output details, no error handling, and no differentiation from siblings. For a retrieval tool, this leaves the agent with insufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the parameter 'id' fully documented in the schema as 'The ID of the page to retrieve'. The description adds no additional semantic context beyond what the schema provides, such as ID format or examples. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('a WikiJS page by its ID'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_page_by_path' or 'search_pages' beyond the 'by ID' specification, which is implied but not contrasted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_page_by_path' or 'search_pages'. The description assumes the user knows they need to retrieve by ID, but it doesn't clarify scenarios where ID is preferred over path or search, or mention prerequisites like needing the page ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_by_pathB

Get a WikiJS page by its path and locale

ParametersJSON Schema
NameRequiredDescriptionDefault
localeYesThe locale of the page (e.g., "en")
pathYesThe path of the page to retrieve

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a page but lacks details on permissions required, error handling (e.g., if page not found), response format, or any rate limits. This is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose and key parameters. It's appropriately sized and front-loaded, making it easy to understand at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., page content, metadata), error conditions, or behavioral traits. For a retrieval tool with two required parameters, this leaves critical gaps in understanding how to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for both parameters (path and locale). The description adds minimal value beyond the schema by mentioning these parameters but doesn't provide additional context like examples or constraints beyond what's already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('a WikiJS page'), specifying retrieval by path and locale. It distinguishes from sibling tools like get_page_by_id (retrieves by ID) and get_all_pages (lists all pages), but doesn't explicitly differentiate from search_pages, which might also retrieve pages based on criteria.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you know the exact path and locale of a page, but provides no explicit guidance on when to use this tool versus alternatives like get_page_by_id or search_pages. No prerequisites, exclusions, or comparative context are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_pagesC

Search for pages in WikiJS by query string

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoOptional locale for the search (e.g., "en")
pathNoOptional path to limit search scope
queryYesSearch query to find pages

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool searches but doesn't disclose behavioral traits like whether it's read-only (implied but not stated), pagination, rate limits, authentication needs, or what happens with no results. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a search tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 3 parameters (with schema coverage but no behavioral context), the description is incomplete. It doesn't cover what the tool returns, error conditions, or how it differs from siblings. For a search tool in a WikiJS context, more guidance on usage and results is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (query, locale, path) with descriptions. The description adds minimal value beyond implying the query parameter is central ('by query string'), but doesn't explain parameter interactions or usage nuances. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search for pages') and target resource ('in WikiJS'), with a specific mechanism ('by query string'). It distinguishes from siblings like get_all_pages (list all) and get_page_by_id/path (retrieve specific), though it doesn't explicitly name them. The purpose is specific but lacks explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like get_all_pages (for listing all pages without filtering) or get_page_by_id/path (for retrieving known pages). It mentions 'by query string' which implies text-based searching, but offers no explicit when/when-not criteria or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.0
    • First observedget_all_pages
    • First observedget_page_by_id
    • First observedget_page_by_path
    • First observedsearch_pages

TDQS

B3.1/5.0
Disambiguation4/5

The tools are mostly distinct, focusing on different retrieval methods for WikiJS pages. However, get_page_by_id and get_page_by_path could potentially be confused if an agent doesn't understand the difference between ID-based and path-based lookup, though their descriptions clarify this distinction.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., get_all_pages, search_pages). The naming is predictable and uniform throughout the set, making it easy for agents to understand the pattern.

Tool Count3/5

With only 4 tools, the server feels thin for a WikiJS management system. While the tools cover basic retrieval and search, there are no tools for creating, updating, or deleting pages, which are essential operations for a wiki. The count is borderline for the apparent scope.

Completeness2/5

The tool set is severely incomplete for a WikiJS server. It only provides read-only operations (get and search), with no coverage for creating, updating, or deleting pages. This creates significant gaps that will cause agent failures when trying to perform full wiki management tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/RicardoCenci/wikijs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server