MCP server for XWiki REST API. Lets AI agents (Claude Code, Claude Desktop, etc.) search, read and write your wiki — with proper Solr full-text search, not the half-broken legacy endpoint most clients default to.
Most XWiki MCP servers (including ones generated by AI coding tools) wire up /rest/wikis/{wiki}/search. That endpoint is HQL-based and effectively searches page names only — so a query like "visibility metric" returns nothing if no page is literally named that, even when dozens of pages discuss the topic. xwiki-mcp defaults to /rest/wikis/query?type=solr, which is Solr-backed and indexes actual content with proper relevance ranking.
| Tool | Description |
|---|---|
search |
Full-text search (Solr by default, legacy fallback). Returns ranked results. |
list_spaces |
List all spaces in the wiki |
list_pages |
List pages in a space (paginated) |
get_page |
Get page content and metadata |
get_page_children |
List child pages |
get_attachments |
List attachments on a page |
| Tool | Description |
|---|---|
create_page |
Create or update a page (upsert via PUT). XML-safe escaping. |
delete_page |
Delete a page |
add_comment |
Add a comment to a page |
npm install -g xwiki-mcp
# or
npx xwiki-mcpFrom source:
git clone https://github.com/vitos73/xwiki-mcp
cd xwiki-mcp
npm install
npm run buildEnvironment variables:
XWIKI_BASE_URL # Required. Base URL without /rest (e.g. https://wiki.example.com)
XWIKI_AUTH_TYPE # basic | token | none (default: basic)
XWIKI_USERNAME # For basic auth
XWIKI_PASSWORD # For basic auth
XWIKI_TOKEN # For token auth (Bearer)
XWIKI_WIKI_NAME # Wiki name (default: xwiki)
XWIKI_REST_PATH # REST path (default: /rest)
XWIKI_PAGE_LIMIT # Default page size (default: 50)
Add to .mcp.json (Claude Code, project-scoped) or claude_desktop_config.json:
{
"mcpServers": {
"xwiki": {
"command": "npx",
"args": ["xwiki-mcp"],
"env": {
"XWIKI_BASE_URL": "https://wiki.example.com",
"XWIKI_AUTH_TYPE": "basic",
"XWIKI_USERNAME": "your-username",
"XWIKI_PASSWORD": "your-password"
}
}
}
}Solr engine (default) supports:
- bare terms — full-text match across title (boosted) + content
"exact phrase"— phrase matchtitle:foo/name:bar— restrict to a fieldAND,OR,NOT— boolean operators- per-call
space:"Parent.Child"parameter narrows results to one space tree
If Solr isn't indexed on your instance, pass engine: "legacy" to fall back to the HQL endpoint.
npm run dev # tsx, no build step
npm run build # compile to dist/
npm test # vitestMIT