|
|
2 hafta önce | |
|---|---|---|
| .github | 2 hafta önce | |
| src | 2 hafta önce | |
| .dockerignore | 2 hafta önce | |
| .gitignore | 1 yıl önce | |
| .node_version | 2 hafta önce | |
| .npmignore | 1 yıl önce | |
| AGENTS.md | 2 hafta önce | |
| CLAUDE.md | 2 hafta önce | |
| Dockerfile | 2 hafta önce | |
| LICENSE | 1 yıl önce | |
| Makefile | 2 hafta önce | |
| README.md | 2 hafta önce | |
| codegen.yml | 2 hafta önce | |
| docker-compose.yml | 2 hafta önce | |
| env.example | 2 hafta önce | |
| eslint.config.js | 2 hafta önce | |
| jest.config.mjs | 1 yıl önce | |
| package-lock.json | 2 hafta önce | |
| package.json | 2 hafta önce | |
| pnpm-lock.yaml | 2 hafta önce | |
| pnpm-workspace.yaml | 2 hafta önce | |
| tsconfig.json | 3 hafta önce |
A Model Context Protocol (MCP) server that provides integration with WikiJS, allowing AI assistants to search and retrieve content from your WikiJS knowledge base.
This MCP server enables AI assistants to interact with WikiJS instances by providing tools to:
# NOTE: the binary is named wikijs-mcp-edit, not after the package name:
npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
# pnpm equivalent (pnpx is a deprecated alias of pnpm dlx):
pnpm dlx @cahaseler/wikijs-mcp wikijs-mcp-edit
This always runs the latest published version from npm. For the current feature branch (see git remote), build from source instead.
git clone ssh://git@gogs.netdome.biz:10022/netdome/wikijs-mcp-server-cahaseler.git
cd wikijs-mcp-server-cahaseler
pnpm install # or: npm install
pnpm run build # or: npm run build
# Add as a user-scoped server (available across all projects)
claude mcp add wikijs \
-e WIKIJS_URL=https://your-wiki.example.com \
-e WIKIJS_API_KEY=your-api-key \
-- npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
# Or, when running from a local clone (uses your build instead of the
# published package):
claude mcp add wikijs \
-e WIKIJS_URL=https://your-wiki.example.com \
-e WIKIJS_API_KEY=your-api-key \
-- node /absolute/path/to/wikijs-mcp/build/index.js
# Or with edit functionality enabled
claude mcp add wikijs \
-e WIKIJS_URL=https://your-wiki.example.com \
-e WIKIJS_API_KEY=your-api-key \
-e WIKIJS_ENABLE_EDIT=true \
-- npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
Create a .mcp.json file in your project root:
{
"mcpServers": {
"wikijs": {
"command": "npx",
"args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
"env": {
"WIKIJS_URL": "https://your-wiki.example.com",
"WIKIJS_API_KEY": "your-api-key",
"WIKIJS_ENABLE_EDIT": "false"
}
}
}
}
Add to your Cursor settings (.cursor/settings.json):
{
"mcpServers": {
"wikijs-mcp": {
"command": "npx",
"args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
"env": {
"WIKIJS_URL": "https://your-wiki.example.com",
"WIKIJS_API_KEY": "your-api-key",
"WIKIJS_ENABLE_EDIT": "false"
}
}
}
}
Add to your Claude Desktop configuration:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"wikijs-mcp": {
"command": "npx",
"args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
"env": {
"WIKIJS_URL": "https://your-wiki.example.com",
"WIKIJS_API_KEY": "your-api-key",
"WIKIJS_ENABLE_EDIT": "false"
}
}
}
}
| Variable | Description | Required | Default |
|---|---|---|---|
WIKIJS_URL |
URL of your WikiJS instance (without /graphql) |
Yes | - |
WIKIJS_API_KEY |
WikiJS API key | Yes | - |
WIKIJS_ENABLE_EDIT |
Enable page editing functionality | No | false |
WIKIJS_DEFAULT_LOCALE |
Locale used when building page URLs | No | en |
WIKIJS_MCP_TRANSPORT |
stdio (client spawns the server) or http (Streamable HTTP listener; see below) |
No | stdio |
WIKIJS_MCP_HOST |
Bind address for the HTTP listener | Yes when WIKIJS_MCP_TRANSPORT=http — there is no default on purpose |
- |
WIKIJS_MCP_PORT |
Port for the HTTP listener | No | 3001 |
WIKIJS_MCP_BEARER_TOKEN |
Bearer token protecting the HTTP listener | Yes for non-loopback binds (see below) | - |
Use stdio only when your MCP client spawns the server process itself. To run the server next to Wiki.js in a container (client connects over the network), use the Streamable HTTP transport (MCP spec compliant, stateful sessions):
WIKIJS_URL=http://wiki:3000 WIKIJS_API_KEY=your-key \
WIKIJS_MCP_TRANSPORT=http WIKIJS_MCP_HOST=0.0.0.0 WIKIJS_MCP_PORT=3001 \
WIKIJS_MCP_BEARER_TOKEN=choose-a-long-random-token \
node build/index.js
Startup logs the exact listener: WikiJS MCP server listening on http://0.0.0.0:3001/mcp.
Endpoints: POST/GET/DELETE /mcp (MCP Streamable HTTP), GET /health
(liveness probe, no auth). HTTP clients connect to http://<host>:<port>/mcp
and must send Authorization: Bearer <token> on every request.
Startup validation — the server refuses to start otherwise:
WIKIJS_MCP_TRANSPORT=http without WIKIJS_MCP_HOST → exitWIKIJS_MCP_HOST (e.g. 0.0.0.0) without WIKIJS_MCP_BEARER_TOKEN → exitA token is optional only for loopback binds (127.0.0.1, localhost, ::1).
OpenCode remote-MCP config (opencode.json):
{
"mcp": {
"wikijs": {
"type": "remote",
"url": "http://wikijs-mcp:3001/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer choose-a-long-random-token"
}
}
}
}
(oauth: false disables OpenCode's automatic OAuth discovery — the bearer
token is passed explicitly via headers instead; secrets can also reference
environment variables, e.g. "Bearer {env:WIKIJS_MCP_BEARER_TOKEN}".)
The CLI flag --transport stdio|http overrides WIKIJS_MCP_TRANSPORT
(subject to the same host/token validation).
Once configured, the following tools will be available (10 read / 6 write):
Read (always available):
query (required), path (optional), locale (optional)id (required)path (required), locale (required)limit (optional, max 500), locale (optional), tags (optional)id (required), offsetPage (optional), offsetSize (optional, max 200)pageId (required), versionId (required)locale (required), mode (optional, FOLDERS/PAGES/ALL, default PAGES), path (optional), parent (optional), includeAncestors (optional)query (required)locale (required)Write (only available when WIKIJS_ENABLE_EDIT=true):
title, content, description, path (required); editor (default markdown), isPublished (default true), isPrivate (default false), locale (optional, default en), tags (optional)content; all other fields are optional — omitted fields keep their existing values (metadata is never wiped by omission)
id, content (required); title, description, path, editor, isPublished, isPrivate, locale, tags (optional)id, destinationPath, destinationLocale (required)id (required)pageId, versionId (required)id, editor (required e.g. markdown, visual)engines in package.json)^20.19 || ^22.13 || >=24)Clone the repository:
git clone ssh://git@gogs.netdome.biz:10022/netdome/wikijs-mcp-server-cahaseler.git
cd wikijs-mcp-server-cahaseler
bash
pnpm install # or: npm install
Copy the environment template:
cp env.example .env
.env with your WikiJS credentialsTo run a local WikiJS instance for testing:
# Start WikiJS and PostgreSQL (also brings up the mcp service — see below)
docker compose up -d
# Start only WikiJS and PostgreSQL:
docker compose up -d db wiki
# The instance will be available at http://localhost:3000
# Follow the setup wizard to create an admin account
The mcp service in docker-compose.yml runs the built server in HTTP mode
next to the wiki instance:
WIKIJS_MCP_BEARER_TOKEN=choose-a-long-random-token \
WIKIJS_API_KEY=<key-from-wiki> \
docker compose up -d mcp
# -> MCP listener on http://localhost:3001/mcp (port published 3001:3001)
pnpm run build # or: npm run build
pnpm run clean # alternative: make clean
# or via make (uses pnpm internally)
make build
The default transport is stdio — it is started by an MCP client, not manually as a daemon. For the HTTP listener see "Streamable HTTP transport" above.
# Quick smoke without a wiki connection: expect output = version from package.json
node build/index.js --version
# Run it manually in stdio mode (it then waits, silently, for MCP protocol frames on stdin):
WIKIJS_URL=http://localhost:3000 WIKIJS_API_KEY=your-key node build/index.js
# Same, but explicit about the transport flag:
WIKIJS_URL=http://localhost:3000 WIKIJS_API_KEY=your-key node build/index.js --transport stdio
# Run the HTTP listener locally (loopback, no token required):
WIKIJS_URL=http://localhost:3000 WIKIJS_API_KEY=your-key \
WIKIJS_MCP_TRANSPORT=http WIKIJS_MCP_HOST=127.0.0.1 \
node build/index.js
# -> WikiJS MCP server listening on http://127.0.0.1:3001/mcp
# The built server auto-loads .env from the current working directory (dotenv),
# so from the repo root this is sufficient: node build/index.js — provided
# you created .env via the Setup steps above. Note: env variables take
# precedence over .env values.
# Interactive verify the tools without a full client setup (browser UI, default http://localhost:6274):
npx @modelcontextprotocol/inspector node build/index.js # pnpm: pnpm dlx @modelcontextprotocol/inspector node build/index.js
Missing env vars abort the server immediately with
WIKIJS_URL and WIKIJS_API_KEY must be set on stderr.
HTTP mode aborts when WIKIJS_MCP_HOST is missing or a non-loopback bind
has no WIKIJS_MCP_BEARER_TOKEN.
WIKIJS_MCP_BEARER_TOKEN — the server refuses to start otherwise. Even with a token, prefer exposing the listener only to the network segment that needs it (container network, not the host's public interfaces)Ensure your environment variables are properly configured. Check your .env file or the environment variables in your MCP client configuration.
Your API key may be expired or lack the necessary permissions. Create a new API key with appropriate permissions.
sh: wikijs-mcp-edit: not found when running npx @cahaseler/wikijs-mcpnpx fetched the package but looked for a binary named after the package. The binary is called wikijs-mcp-edit:
npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
If you modify the GraphQL queries, regenerate the types (requires WIKIJS_URL reachable — it introspects your Wiki.js instance):
pnpm codegen # or: npm run codegen
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.