WikiJS MCP Server
This WikiJS MCP server enables AI assistants to interact with WikiJS knowledge bases by providing four key capabilities:
Search pages: Find WikiJS pages using query strings with optional path and locale filters
Get page by ID: Retrieve specific pages using their unique identifiers
Get page by path and locale: Fetch pages by specifying their path and locale
Get all pages: Retrieve a complete list of all pages in the WikiJS instance
This integration allows seamless search, retrieval, and listing of WikiJS content for AI-powered knowledge management.
Enables deployment of a WikiJS instance for testing through Docker Compose.
Used for configuration management through environment variables, allowing users to set required WikiJS URL and API key values.
Provides access to the repository for cloning and development purposes.
Optional build tool for compiling the project.
Package manager used to install dependencies and run the MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WikiJS MCP Serversearch for articles about API documentation"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Log into your WikiJS instance as an administrator
Go to Administration > API Access
Create a new API key with appropriate permissions
Copy the generated key to your
.envfile
Development
Clone the repository:
git clone https://github.com/RicardoCenci/wikijs-mcp.git
cd wikijs-mcpInstall dependencies:
npm installCopy the environment template and fill out its contents
cp env.example .envBuild the project If you have
makeinstalled:
make buildDeploy the WikiJS instance for testing
docker compose up -dUsage
npx wikijs-mcpEnvironment Variables
Variable | Description | Required | Allowed Values | Default |
| URL of your WikiJS instance | Yes | - | - |
| WikiJS API key | Yes | - | - |
| The transport method | No | stdio, streamable-http | stdio |
| Cors Origin (only on streamable-http) | No | - | * |
| Cors Headers, comma separated (only on streamable-http) | No | - | Content-Type=mcp-session-id |
| Cors Methods, comma separated (only on streamable-http) | No | - | GET,POST,OPTIONS |
| Session timeout (only on streamable-http) | No | - | 60000 |
License
This project is licensed under the MIT License.
Available Tools
4 toolsget_all_pagesB
Get all pages in WikiJS
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the page to retrieve |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | The locale of the page (e.g., "en") | |
| path | Yes | The path of the page to retrieve |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Optional locale for the search (e.g., "en") | |
| path | No | Optional path to limit search scope | |
| query | Yes | Search query to find pages |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.0- First observed
get_all_pages - First observed
get_page_by_id - First observed
get_page_by_path - First observed
search_pages
TDQS
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.
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.
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.
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
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
Search your knowledge bases from any AI assistant using hybrid RAG.
Shared knowledge base for AI agents. Semantic search across agents, no setup required — just a URL.
Connect AI tools to Weav customer service. Search conversations, reply, and manage knowledge.
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve information from your knowledge base using RAG (Retrieval-Augmented Generation) with hybrid search, document indexing, and ChromaDB vector storage.28MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server for Wiki.js projects that enables full-text search, page retrieval, and page management capabilities. It allows LLMs to interact with wiki content through specialized tools for searching, listing, and creating pages.-
- FlicenseNot gradedqualityCmaintenanceEnables comprehensive management of WikiJS instances through tools for searching, creating, updating, and deleting wiki pages. It supports advanced features like knowledge graph exploration, page summaries, and content exporting for documentation workflows.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search, retrieve, and optionally edit pages in a WikiJS knowledge base via the Model Context Protocol.311MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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