|
|
@@ -13,12 +13,12 @@ This MCP server enables AI assistants to interact with WikiJS instances by provi
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
-### Using npx (recommended)
|
|
|
+### Using npx (published package)
|
|
|
```bash
|
|
|
-npx @cahaseler/wikijs-mcp
|
|
|
+# NOTE: the binary is named wikijs-mcp-edit, not after the package name:
|
|
|
+npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
|
|
|
```
|
|
|
-
|
|
|
-The binary will be available as `wikijs-mcp-edit` to avoid conflicts with the original package.
|
|
|
+This always runs the *latest published* version from npm. For the current feature branch (see git remote), build from source instead.
|
|
|
|
|
|
### From source
|
|
|
```bash
|
|
|
@@ -38,14 +38,21 @@ npm run build
|
|
|
claude mcp add wikijs \
|
|
|
-e WIKIJS_URL=https://your-wiki.example.com \
|
|
|
-e WIKIJS_API_KEY=your-api-key \
|
|
|
- -- npx @cahaseler/wikijs-mcp
|
|
|
+ -- 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 @cahaseler/wikijs-mcp
|
|
|
+ -- npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
|
|
|
```
|
|
|
|
|
|
#### Method 2: Project-scoped configuration
|
|
|
@@ -55,7 +62,7 @@ Create a `.mcp.json` file in your project root:
|
|
|
"mcpServers": {
|
|
|
"wikijs": {
|
|
|
"command": "npx",
|
|
|
- "args": ["@cahaseler/wikijs-mcp"],
|
|
|
+ "args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
|
|
|
"env": {
|
|
|
"WIKIJS_URL": "https://your-wiki.example.com",
|
|
|
"WIKIJS_API_KEY": "your-api-key",
|
|
|
@@ -73,7 +80,7 @@ Add to your Cursor settings (`.cursor/settings.json`):
|
|
|
"mcpServers": {
|
|
|
"wikijs-mcp": {
|
|
|
"command": "npx",
|
|
|
- "args": ["@cahaseler/wikijs-mcp"],
|
|
|
+ "args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
|
|
|
"env": {
|
|
|
"WIKIJS_URL": "https://your-wiki.example.com",
|
|
|
"WIKIJS_API_KEY": "your-api-key",
|
|
|
@@ -95,7 +102,7 @@ Add to your Claude Desktop configuration:
|
|
|
"mcpServers": {
|
|
|
"wikijs-mcp": {
|
|
|
"command": "npx",
|
|
|
- "args": ["@cahaseler/wikijs-mcp"],
|
|
|
+ "args": ["-p", "@cahaseler/wikijs-mcp", "wikijs-mcp-edit"],
|
|
|
"env": {
|
|
|
"WIKIJS_URL": "https://your-wiki.example.com",
|
|
|
"WIKIJS_API_KEY": "your-api-key",
|
|
|
@@ -121,38 +128,57 @@ Add to your Claude Desktop configuration:
|
|
|
|
|
|
| Variable | Description | Required | Default |
|
|
|
|----------|-------------|----------|---------|
|
|
|
-| `WIKIJS_URL` | URL of your WikiJS instance | Yes | - |
|
|
|
+| `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 |
|
|
|
|
|
|
## Available Tools
|
|
|
|
|
|
-Once configured, the following tools will be available:
|
|
|
+Once configured, the following tools will be available (10 read / 6 write):
|
|
|
|
|
|
+**Read (always available):**
|
|
|
- **search_pages** - Search for pages by query string
|
|
|
- Parameters: `query` (required), `path` (optional), `locale` (optional)
|
|
|
-
|
|
|
-- **get_page_by_id** - Retrieve a specific page by its ID
|
|
|
+- **get_page_by_id** - Retrieve a specific page by its ID (full page incl. rendered content)
|
|
|
- Parameters: `id` (required)
|
|
|
-
|
|
|
- **get_page_by_path** - Retrieve a page by its path and locale
|
|
|
- Parameters: `path` (required), `locale` (required)
|
|
|
-
|
|
|
-- **get_all_pages** - List all pages with optional filters
|
|
|
- - Parameters: `limit` (optional), `locale` (optional), `tags` (optional)
|
|
|
-
|
|
|
-- **create_page** - Create a new WikiJS page (only when `WIKIJS_ENABLE_EDIT=true`)
|
|
|
- - Parameters: `title` (required), `content` (required), `description` (required), `path` (required), `editor` (optional), `isPublished` (optional), `isPrivate` (optional), `locale` (optional), `tags` (optional)
|
|
|
-
|
|
|
-- **edit_page** - Edit a WikiJS page (only when `WIKIJS_ENABLE_EDIT=true`)
|
|
|
- - Parameters: `id` (required), `title`, `content`, `description`, `editor`, `isPublished`, `isPrivate`, `locale`, `tags`, `path`
|
|
|
+- **get_all_pages** - List pages with optional filters
|
|
|
+ - Parameters: `limit` (optional, max 500), `locale` (optional), `tags` (optional)
|
|
|
+- **get_page_history** - Revision history of a page
|
|
|
+ - Parameters: `id` (required), `offsetPage` (optional), `offsetSize` (optional, max 200)
|
|
|
+- **get_page_version** - A specific revision of a page
|
|
|
+ - Parameters: `pageId` (required), `versionId` (required)
|
|
|
+- **get_page_tree** - Page tree of the site
|
|
|
+ - Parameters: `locale` (required), `mode` (optional, `FOLDERS`/`PAGES`/`ALL`, default `PAGES`), `path` (optional), `parent` (optional), `includeAncestors` (optional)
|
|
|
+- **list_tags** - List all tags
|
|
|
+- **search_tags** - Search tags
|
|
|
+ - Parameters: `query` (required)
|
|
|
+- **get_page_links** - Link graph of all pages for a locale
|
|
|
+ - Parameters: `locale` (required)
|
|
|
+
|
|
|
+**Write (only available when `WIKIJS_ENABLE_EDIT=true`):**
|
|
|
+- **create_page** - Create a new WikiJS page
|
|
|
+ - Parameters: `title`, `content`, `description`, `path` (required); `editor` (default `markdown`), `isPublished` (default `true`), `isPrivate` (default `false`), `locale` (optional, default `en`), `tags` (optional)
|
|
|
+- **edit_page** - Edit a WikiJS page by its ID. **Full-document replace for `content`**; all other fields are optional — omitted fields keep their existing values (metadata is never wiped by omission)
|
|
|
+ - Parameters: `id`, `content` (required); `title`, `description`, `path`, `editor`, `isPublished`, `isPrivate`, `locale`, `tags` (optional)
|
|
|
+- **move_page** - Move a page to a new path/locale
|
|
|
+ - Parameters: `id`, `destinationPath`, `destinationLocale` (required)
|
|
|
+- **delete_page** - Delete a page
|
|
|
+ - Parameters: `id` (required)
|
|
|
+- **restore_page_version** - Restore a previous version
|
|
|
+ - Parameters: `pageId`, `versionId` (required)
|
|
|
+- **convert_page_editor** - Convert a page to another editor type
|
|
|
+ - Parameters: `id`, `editor` (required e.g. `markdown`, `visual`)
|
|
|
|
|
|
## Development
|
|
|
|
|
|
### Prerequisites
|
|
|
-- Node.js 18+
|
|
|
+- Node.js 18+ at runtime for the built server (`engines` in package.json)
|
|
|
+- Node.js 20.19+ for development tooling (eslint 10 requires `^20.19 || ^22.13 || >=24`)
|
|
|
+- npm or pnpm
|
|
|
- Docker (for local WikiJS testing)
|
|
|
-- npm or yarn
|
|
|
|
|
|
### Setup
|
|
|
|
|
|
@@ -198,14 +224,22 @@ make build
|
|
|
|
|
|
### Testing the MCP Server
|
|
|
|
|
|
+The server is a stdio MCP server — it is started *by* an MCP client, not manually as a daemon.
|
|
|
+
|
|
|
```bash
|
|
|
-# Run the built server
|
|
|
-node build/index.js
|
|
|
+# Quick smoke without a wiki connection: expect output = version from package.json
|
|
|
+node build/index.js --version
|
|
|
+
|
|
|
+# Run it manually (it then waits, silently, for MCP protocol frames on stdio):
|
|
|
+WIKIJS_URL=http://localhost:3000 WIKIJS_API_KEY=your-key node build/index.js
|
|
|
|
|
|
-# Or use the make command
|
|
|
-make run
|
|
|
+# Interactive verify the tools without a full client setup (browser UI, default http://localhost:6274):
|
|
|
+npx @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.
|
|
|
+
|
|
|
## Security Considerations
|
|
|
|
|
|
- **API Key Storage**: Never commit your API key to version control
|
|
|
@@ -220,8 +254,14 @@ Ensure your environment variables are properly configured. Check your `.env` fil
|
|
|
### "Failed to update page: Unauthorized"
|
|
|
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-mcp`
|
|
|
+npx fetched the package but looked for a binary named after the package. The binary is called `wikijs-mcp-edit`:
|
|
|
+```bash
|
|
|
+npx -p @cahaseler/wikijs-mcp wikijs-mcp-edit
|
|
|
+```
|
|
|
+
|
|
|
### GraphQL errors during development
|
|
|
-If you modify the GraphQL queries, regenerate the types:
|
|
|
+If you modify the GraphQL queries, regenerate the types (requires `WIKIJS_URL` reachable — it introspects your Wiki.js instance):
|
|
|
```bash
|
|
|
npm run codegen
|
|
|
```
|