leafwiki-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LEAFWIKI_URL | No | The URL of the LeafWiki instance | http://localhost:8080 |
| LEAFWIKI_PASSWORD | No | The password for authentication | |
| LEAFWIKI_USERNAME | No | The username for authentication |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_pagesA | Search pages by text and tags, returning excerpts and tag facets. Args: query: Full-text search query. tags: Optional tags used to filter results. offset: Zero-based result offset. limit: Maximum number of results. Returns: Search result object returned by LeafWiki. |
| get_pageB | Get a page by ID or path, including content and metadata. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: JSON-compatible page. |
| browse_treeC | Browse the page hierarchy, optionally limited to a depth. Args: depth: Optional maximum tree depth. Returns: LeafWiki page-tree object. |
| get_page_linksB | Get backlinks, outgoing links, and broken links for a page. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: Link information returned by LeafWiki. |
| list_tagsB | List tags and usage counts, optionally filtering by name. Args: query: Optional tag-name filter. selected: Tags LeafWiki should retain in the result set. limit: Maximum number of tags. Returns: Tag objects returned by LeafWiki. |
| find_pages_by_propertyB | Find pages carrying a property key and optional value. Args: key: Required property key. value: Optional property value to match. Returns: Matching page summaries. |
| list_page_revisionsA | List page revisions; requires revisions to be enabled. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. cursor: Optional pagination cursor. limit: Maximum number of revisions. Returns: Revision metadata and pagination information. |
| get_page_revisionA | Get a page revision; requires revisions to be enabled. Args: revision_id: Revision identifier to retrieve. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: Historical page snapshot. |
| compare_page_revisionsB | Compare two historical page snapshots. Args: base_revision_id: Revision used as the comparison base. target_revision_id: Revision compared with the base. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: Revision comparison returned by LeafWiki. |
| get_indexing_statusB | Get full-text search indexing status. Returns: Indexing status returned by LeafWiki. |
| list_property_keysC | List available property keys. Args: query: Optional property-key filter. limit: Maximum number of keys. Returns: Property-key objects returned by LeafWiki. |
| find_page_by_titleC | Find pages by title. Args: title: Title to match. Returns: Title-match result returned by LeafWiki. |
| lookup_pathB | Resolve a path into tree segments. Args: path: Slash-separated page path to resolve. Returns: Existing and missing path segments. |
| suggest_slugB | Suggest an available slug for a title. Args: title: Title from which to derive a slug. parent_id: Parent used to determine availability. current_id: Existing page to exclude from conflicts. Returns: Slug suggestion returned by LeafWiki. |
| list_favoritesB | List the authenticated user's favorite pages. Returns: Favorite page summaries. |
| move_pageB | Move a page under a new parent. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. parent_id: Destination parent identifier, or empty for root. position: Optional zero-based position under the parent. Returns: Serializable move confirmation. |
| copy_pageB | Copy a page and its assets. Args: title: Title for the copied page. slug: Slug for the copied page. id: Source page identifier, preferred when both selectors are supplied. path: Slash-separated source page path. target_parent_id: Destination parent identifier, or empty for root. Returns: JSON-compatible copied page. |
| ensure_pathB | Ensure a nested page path exists. Args:
path: Slash-separated path to ensure.
title: Title for the final node.
kind: Kind for the final node, either Returns: JSON-compatible final page. |
| convert_pageB | Convert a page to a section or a section to a page. Args:
target_kind: Destination kind, either Returns: Serializable conversion confirmation. |
| add_favoriteC | Favorite a page for the authenticated user. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: Serializable favorite confirmation. |
| remove_favoriteA | Remove a page from the authenticated user's favorites. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: Serializable removal confirmation. |
| pin_pageB | Pin or unpin a page. Args: pinned: Whether the page should be pinned. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: JSON-compatible updated page. |
| append_to_pageB | Append Markdown content to a page. Args: content: Markdown content to append. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: JSON-compatible updated page. |
| update_page_tagsA | Replace a page's tags. Args: tags: Complete replacement tag list. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: JSON-compatible updated page. |
| update_page_propertiesB | Replace a page's properties. Args: properties: Complete replacement property mapping. id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. Returns: JSON-compatible updated page. |
| sort_pagesB | Set the child ordering under a parent page. Args: parent_id: Parent identifier, or empty for root. ordered_ids: Child identifiers in their desired order. Returns: Serializable sort confirmation. |
| add_pageB | Create a page or section, optionally with content and metadata. Args:
title: Display title for the new page.
slug: URL path segment for the new page.
parent_id: Parent identifier, or empty for the root.
kind: Page kind, either Returns: JSON-compatible created page. |
| edit_pageB | Edit a page while preserving omitted fields. Args: id: Page identifier, preferred when both selectors are supplied. path: Slash-separated page path. title: Optional replacement title; omitted values are preserved. slug: Optional replacement slug; omitted values are preserved. content: Optional replacement content; omitted values are preserved. tags: Optional replacement tags; omitted values are preserved. properties: Optional replacement properties; omitted values are preserved. Returns: JSON-compatible updated page. |
| delete_pageB | Delete a page after fetching its current version. Args:
id: Page identifier, preferred when both selectors are supplied.
path: Slash-separated page path.
recursive: Whether to delete descendants recursively. Defaults to Returns: Serializable deletion confirmation. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools have distinct purposes, but several boundaries are blurred: edit_page can replace tags, properties, and content, duplicating update_page_tags, update_page_properties, and append_to_page; move_page overlaps sort_pages, and add_page overlaps ensure_path. Descriptions help, but the set still presents multiple overlapping update and path-creation options.
All tool names use consistent snake_case with a verb-first pattern (get_, list_, find_, update_, add_, delete_, etc.). Synonym variation (get/find/search/browse/lookup) exists but does not break the predictable naming convention.
At 29 tools, the surface is heavy for a wiki MCP server, and several tools are redundant conveniences (e.g., update_page_tags, update_page_properties, append_to_page) that edit_page already covers. The count exceeds the 25+ threshold for 'too many' in the rubric.
The set covers the core wiki lifecycle well: page CRUD, move, copy, sort, revisions, tags, properties, favorites, search, tree browsing, and link inspection. Minor gaps exist (e.g., dedicated asset management, tag rename/delete, bulk operations), but no major dead ends.