Skip to main content
Glama

wiki-js-mcp

An MCP server for Wiki.js — lets AI agents create, read, update, search, list, and move wiki pages via the Wiki.js GraphQL API.

Tools

Tool

Description

wiki_get_page

Read a page's content and metadata by path

wiki_create_page

Create a new page with markdown content

wiki_update_page

Update content, metadata, or patch a named section

wiki_search_pages

Full-text search — returns title, path, description, tags

wiki_list_pages

List pages with an optional path-prefix filter

wiki_move_page

Rename or restructure a page path

All tools return {"success": bool, "error": str | null, ...} and never raise — the calling agent decides how to handle failures.

Section patching

wiki_update_page supports surgical updates to named sections without touching the rest of the page. Fence any block in your wiki content with HTML comments:

<!-- OSIA:AUTO:watchlist -->
Content managed by the AI agent goes here.
<!-- /OSIA:AUTO:watchlist -->

Then call:

wiki_update_page(
    path="desks/geopolitical-and-security",
    section="watchlist",
    section_content="- Benjamin Netanyahu (🔴 Critical)\n- ...",
)

The markers and surrounding content are left untouched.

Related MCP server: WikiJS MCP Server

Requirements

  • Python 3.11+

  • uv (recommended) or pip

  • A running Wiki.js 2.x instance with a valid API key

Installation

git clone https://github.com/osianet/wiki-js-mcp.git
cd wiki-js-mcp
uv sync

Copy .env.example to .env and fill in your values:

cp .env.example .env
WIKIJS_URL=http://localhost:3000/graphql
WIKIJS_API_KEY=your-api-key-here

Generate an API key at https://your-wiki/a/api-keys in the Wiki.js admin panel.

Usage

Standalone (stdio)

uv run wiki-mcp

With Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "wiki-js": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/wiki-js-mcp", "wiki-mcp"],
      "env": {
        "WIKIJS_URL": "http://localhost:3000/graphql",
        "WIKIJS_API_KEY": "your-api-key-here"
      }
    }
  }
}

With Claude Code

Add to your project's .claude/settings.json or ~/.claude/settings.json:

{
  "mcpServers": {
    "wiki-js": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/wiki-js-mcp", "wiki-mcp"]
    }
  }
}

Development

uv sync --extra dev

# Lint
uv run ruff check wiki_mcp.py

# Format
uv run ruff format wiki_mcp.py

# Type check
uv run pyright wiki_mcp.py

# Tests
uv run pytest

License

MIT — see LICENSE.

Available Tools

6 tools
wiki_create_pageB

Create a new wiki page at the given path with markdown content. Returns the new page id and path on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
titleYes
contentYes
descriptionNo
tagsNo

TDQS

B3/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 states the tool creates a page and returns an ID and path on success, which covers basic success behavior. However, it lacks critical information: whether this requires authentication, what happens on failure (e.g., duplicate paths), if there are rate limits, or any side effects. For a write operation with zero annotation coverage, this leaves significant behavioral gaps.

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 extremely concise with two sentences: the first states the action and key parameters, the second specifies the return value. Every word earns its place, and it's front-loaded with the core purpose. There's no redundancy or unnecessary elaboration, making it efficient for quick understanding.

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 complexity of a write operation with 5 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers the basic action and success return but misses parameter semantics, error handling, authentication needs, and behavioral nuances. For a tool that creates resources, this level of detail is insufficient for safe and effective use by an AI agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for all 5 parameters. It only mentions 'path' and 'content' (markdown), leaving 'title', 'description', and 'tags' completely undocumented. The description adds minimal value beyond the schema's property names, failing to explain parameter purposes, formats, or constraints, which is inadequate given the coverage gap.

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 tool's purpose with specific verb ('Create') and resource ('new wiki page'), including the action ('with markdown content'). It distinguishes from siblings like wiki_get_page (read) and wiki_update_page (modify), but doesn't explicitly contrast with wiki_list_pages or wiki_search_pages. The description is specific enough to understand the core function.

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 context through 'Create a new wiki page' and mentions a return value, suggesting it's for initial page creation. However, it doesn't explicitly state when to use this vs alternatives like wiki_update_page (for existing pages) or wiki_move_page (for relocation). There's no guidance on prerequisites, error conditions, or sibling tool selection beyond the implied creation context.

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

wiki_get_pageA
Read a wiki page by its path (e.g. 'desks/geopolitical-and-security').
Returns id, title, description, tags, content, created_at, updated_at.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It clearly indicates this is a read operation ('Read a wiki page'), which implies non-destructive behavior. It also specifies the return fields (id, title, etc.), giving useful context about what data to expect. However, it doesn't mention error conditions, authentication requirements, rate limits, or whether the path is case-sensitive.

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 perfectly concise and front-loaded. The first sentence states the core purpose and parameter usage, while the second sentence efficiently lists return fields. Every word earns its place with zero redundancy or unnecessary elaboration.

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

Completeness4/5

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

Given the tool's simplicity (single parameter, read-only operation) and lack of annotations/output schema, the description is nearly complete. It covers purpose, parameter meaning with example, and return values. The main gap is missing behavioral details like error handling or authentication, but for a straightforward read tool, this is reasonably comprehensive.

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

Parameters5/5

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

The schema has 0% description coverage, so the description must compensate fully. It provides essential semantic context: the 'path' parameter should be a wiki page path, with an explicit example ('desks/geopolitical-and-security') that clarifies the expected format. This adds significant value beyond the bare schema, making the parameter meaning clear.

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

Purpose5/5

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

The description clearly states the specific action ('Read a wiki page') and resource ('by its path'), distinguishing it from siblings like create, list, move, search, and update operations. It uses precise language that immediately communicates the tool's function without ambiguity.

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 through the example path format ('desks/geopolitical-and-security'), suggesting this tool is for retrieving specific pages when the path is known. However, it doesn't explicitly state when to use this versus alternatives like wiki_search_pages (for finding pages without known paths) or wiki_list_pages (for browsing). The guidance is present but not comprehensive.

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

wiki_list_pagesA
List wiki pages, optionally filtered to those whose path starts with path_prefix.
Returns a list of pages with id, path, title, description, tags, updated_at.
Pass path_prefix='' to list all pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
path_prefixNo

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return format ('Returns a list of pages with id, path, title, description, tags, updated_at'), which is helpful. However, it lacks details on behavioral traits such as pagination, rate limits, permissions required, or error handling, leaving gaps 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 front-loaded with the core purpose, followed by return details and a usage tip. Every sentence earns its place, with no wasted words, making it efficient and easy to parse for an AI agent.

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

Completeness4/5

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

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is mostly complete. It covers purpose, parameter semantics, and return format. However, it lacks some behavioral context (e.g., pagination or error handling), which would be beneficial despite the simplicity.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must compensate. It fully explains the single parameter ('path_prefix'), detailing its purpose ('filtered to those whose path starts with path_prefix'), default behavior ('Pass path_prefix='' to list all pages'), and effect. This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the verb ('List') and resource ('wiki pages'), specifying the optional filtering capability ('filtered to those whose path starts with path_prefix'). It distinguishes from siblings like wiki_search_pages by focusing on path-based filtering rather than general search.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool ('optionally filtered to those whose path starts with path_prefix') and includes a usage tip ('Pass path_prefix='' to list all pages'). However, it does not explicitly mention when not to use it or name alternatives like wiki_search_pages for different filtering needs.

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

wiki_move_pageA
Move/rename a wiki page to a new path.
The page is looked up by its current path; new_path is the destination.
Returns old_path and new_path on success.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
new_pathYes

TDQS

A3.9/5.0
Behavior3/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 adds some context by specifying that the page is looked up by its current path and returns old_path and new_path on success, but it lacks details on permissions, error conditions, or side effects like broken links. This is adequate but has gaps for a mutation tool.

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 front-loaded with the core purpose in the first sentence, followed by clarifying details in two concise sentences. Every sentence adds value without redundancy, making it efficiently structured and easy to parse.

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 complexity as a mutation operation with no annotations and no output schema, the description is moderately complete. It covers the basic operation and parameters but lacks details on error handling, permissions, or return value structure, which could be important for an AI agent to use it correctly.

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?

The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'path' is the current path for lookup and 'new_path' is the destination, clarifying their roles. With 2 parameters and no schema descriptions, this compensates well, though it could specify format constraints.

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

Purpose5/5

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

The description clearly states the specific action ('Move/rename') and resource ('a wiki page'), distinguishing it from sibling tools like wiki_create_page or wiki_update_page. It precisely defines the operation as moving/renaming to a new path, avoiding vagueness or tautology.

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 by stating the page is looked up by its current path and new_path is the destination, but it does not explicitly guide when to use this tool versus alternatives like wiki_update_page for content changes or wiki_create_page for new pages. No exclusions or clear alternatives are mentioned.

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

wiki_search_pagesC
Full-text search across all wiki pages.
Returns a list of results with id, title, path, description, and total_hits.
ParametersJSON Schema
NameRequiredDescriptionDefault
query_strYes

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 states the action ('search') and return format ('list of results with id, title, path, description, and total_hits'), but lacks critical details: whether it's read-only (implied but not explicit), pagination behavior, rate limits, authentication needs, or error handling. For a search tool with zero annotation coverage, this is insufficient.

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 extremely concise and well-structured: two sentences that directly state the tool's function and return format. Every word earns its place, with no redundancy or fluff. It's front-loaded with the core purpose, making it efficient for agent comprehension.

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 complexity (search operation with 1 parameter), lack of annotations, and no output schema, the description is incomplete. It covers the basic action and return fields but misses behavioral context (e.g., search scope limitations, result ordering, pagination) and doesn't fully explain the single parameter. For a search tool, this leaves significant 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?

The schema has 1 parameter with 0% description coverage, so the description must compensate. It mentions 'Full-text search' which implies the query_str parameter is for search terms, adding some meaning beyond the schema's bare 'Query Str' title. However, it doesn't detail query syntax, supported operators, or examples, leaving gaps in parameter understanding.

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 tool's purpose: 'Full-text search across all wiki pages.' It specifies the verb ('search') and resource ('all wiki pages'), distinguishing it from siblings like wiki_get_page (retrieve single page) or wiki_list_pages (list without search). However, it doesn't explicitly differentiate from hypothetical search alternatives, keeping it at 4 rather than 5.

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. It doesn't mention when to prefer wiki_search_pages over wiki_list_pages for browsing, or when to use wiki_get_page for known page IDs. There's no context about prerequisites, exclusions, or typical use cases, leaving the agent with minimal usage direction.

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

wiki_update_pageA
Update an existing wiki page by path.

Modes:
- Full replace: pass `content` to overwrite the entire page body.
- Section patch: pass `section` + `section_content` to update only the
  content between <!-- OSIA:AUTO:section --> ... <!-- /OSIA:AUTO:section -->
  markers, leaving the rest of the page untouched.
- Metadata only: pass `title`, `description`, or `tags` without `content`
  or `section` to update metadata without touching the body.

Returns id, path, updated_at on success.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentNo
titleNo
descriptionNo
tagsNo
sectionNo
section_contentNo

TDQS

A4.7/5.0
Behavior4/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 clearly explains the three distinct update modes and their behaviors, describes what gets modified in each case, and specifies the return values on success. It doesn't mention error conditions, permissions, or rate limits, but provides substantial behavioral context beyond basic function.

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 perfectly structured and front-loaded with the core purpose, followed by clearly organized modes in bullet-like format, and ending with return values. Every sentence earns its place by providing essential information without redundancy or fluff.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, multiple modes), no annotations, and no output schema, the description does an excellent job explaining behavior, parameter interactions, and return values. It could be more complete by mentioning error cases or prerequisites, but covers the essential context needed to use the tool correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description must fully compensate. It provides excellent parameter semantics by explaining how parameters interact to enable different update modes: 'content' for full replace, 'section' + 'section_content' for section patch, and 'title', 'description', or 'tags' without 'content' or 'section' for metadata-only updates. This adds crucial meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Update an existing wiki page by path') and distinguishes this tool from siblings like wiki_create_page (create vs update), wiki_get_page (read vs update), and wiki_move_page (move vs update). It provides a verb+resource+scope combination that is precise and unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use different modes (full replace, section patch, metadata only) based on parameter combinations. It implicitly distinguishes from siblings by focusing on updating existing pages rather than creating, reading, listing, moving, or searching pages, though it doesn't explicitly name alternatives.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create, get, list, move, search, and update. The descriptions reinforce distinct operations (e.g., wiki_move_page for moving/renaming vs. wiki_update_page for content/metadata updates), making misselection unlikely.

Naming Consistency5/5

All tools follow a consistent 'wiki_verb_noun' pattern (e.g., wiki_create_page, wiki_get_page). The naming is uniform with snake_case throughout, making it predictable and easy to understand at a glance.

Tool Count5/5

With 6 tools, the server is well-scoped for wiki management, covering core CRUD operations (create, get, update), listing, moving, and searching. Each tool earns its place without being overly sparse or bloated.

Completeness5/5

The toolset provides complete lifecycle coverage for wiki pages: create, read (get/list/search), update (with multiple modes), and move (effectively a rename/delete combination). There are no obvious gaps, as all essential operations for managing wiki content are included.

Maintenance

ActivityInactive
ResponsivenessSyncing

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/osianet/wiki-js-mcp'

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