{"apiVersion":"v1","directorySlug":"kwiki-mcp-7df0505c98","title":"Kore Wiki","description":null,"pageUrl":"https://www.mcpbundles.com/skills/kwiki-mcp-7df0505c98","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://kwiki.dev/mcp","hostedMcpUrl":null,"toolCount":28,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"dev.kwiki/kwiki-mcp-7df0505c98","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"add_comment","description":"Add a comment (opens a new thread) to a document. Any reader may comment. Page-level by default. To REVIEW A CHANGE, pass revision_number (the revision you are reviewing — e.g. the working copy's live_revision from get_document_meta) and block_text (the exact text of the block you are commenting on, copied from that revision's content): the comment then hangs on that block and shows up next to it in the \"View changes\" diff, exactly like a human reviewer's note. Whitespace in block_text is normal","inputSchema":{"type":"object","required":["document_id","body"],"properties":{"body":{"type":"string"},"block_text":{"type":"string"},"document_id":{"type":"string"},"revision_number":{"type":"number"}}},"logicalName":"add_comment","displayName":"add_comment","title":"add_comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"append_to_document","description":"Append block nodes to the END of a document — an operational, merge-safe edit (ADR-0032). Unlike update_document this does NOT replace the whole document, so it merges with concurrent human editing. No expected_revision needed. Prefer this over update_document when adding content.","inputSchema":{"type":"object","required":["document_id","content"],"properties":{"content":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"append_to_document","displayName":"append_to_document","title":"append_to_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"approve_publication","description":"Approve publication of a document (in_review → published). Requires can_publish capability. Space must be public.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"approve_publication","displayName":"approve_publication","title":"approve_publication","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_document","description":"Create a new document in a space. Returns the created document metadata.","inputSchema":{"type":"object","required":["space_id","title"],"properties":{"content":{"type":"string"},"space_id":{"type":"string"},"parent_id":{"type":"string"}}},"logicalName":"create_document","displayName":"create_document","title":"create_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_node","description":"Delete the first top-level block whose text equals `anchor` — operational, merge-safe (ADR-0032). Errors if no block matches.","inputSchema":{"type":"object","required":["document_id","anchor"],"properties":{"anchor":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"delete_node","displayName":"delete_node","title":"delete_node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_document","description":"Get a document including its full ProseMirror JSON content (live version).","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"get_document","displayName":"get_document","title":"get_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_document_meta","description":"Get document metadata (title, slug, status, revision IDs) without full content.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"get_document_meta","displayName":"get_document_meta","title":"get_document_meta","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_published_snapshot","description":"Get the published snapshot of a document. Errors if not yet published.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"get_published_snapshot","displayName":"get_published_snapshot","title":"get_published_snapshot","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"insert_after_heading","description":"Insert block nodes right AFTER the heading whose text matches `heading` — operational, merge-safe (ADR-0032). Errors if no heading matches.","inputSchema":{"type":"object","required":["document_id","heading","content"],"properties":{"content":{"type":"string"},"heading":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"insert_after_heading","displayName":"insert_after_heading","title":"insert_after_heading","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"link_translation","description":"Link two documents as translations of each other (the same content in different-language spaces). Reuses document_id's existing translation group or mints a new one, then assigns it to both. Requires the admin role in BOTH documents' spaces. On the public site the hreflang/alternates and language switcher update when the documents are published — linking alone does not change the live site.","inputSchema":{"type":"object","required":["document_id","target_document_id"],"properties":{"document_id":{"type":"string"},"target_document_id":{"type":"string"}}},"logicalName":"link_translation","displayName":"link_translation","title":"link_translation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_comments","description":"List the review/discussion comments on a document (thread roots + replies), oldest first. Group by thread_id; a root has thread_id == id. Fields: id, thread_id, anchored, revision_number, block_key (set when the comment reviews a block of a revision), resolved_at, author_name, body.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"list_comments","displayName":"list_comments","title":"list_comments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_documents","description":"List documents in a space. Documents form a TREE. By default this lists ONE level: omit parent_id for root documents, or pass parent_id for that document's direct children. Each item has children_count — a non-zero value means it has nested children you must descend into (the root list is NOT the whole space). To get the entire space (or a whole subtree) in one call, pass recursive=true.","inputSchema":{"type":"object","required":["space_id"],"properties":{"space_id":{"type":"string"},"parent_id":{"type":"string"},"recursive":{"type":"boolean"}}},"logicalName":"list_documents","displayName":"list_documents","title":"list_documents","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_revisions","description":"List revision history for a document, newest first.","inputSchema":{"type":"object","required":["document_id"],"properties":{"limit":{"type":"number"},"document_id":{"type":"string"}}},"logicalName":"list_revisions","displayName":"list_revisions","title":"list_revisions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_spaces","description":"List all spaces you have access to (viewer role or higher).","inputSchema":{"type":"object","required":[],"properties":{}},"logicalName":"list_spaces","displayName":"list_spaces","title":"list_spaces","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_translations","description":"List the translations of a document: its translation_group_id (or null if unlinked) and the sibling documents — the same content in other-language spaces — that share it. Translations are documents of one content in different languages.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"list_translations","displayName":"list_translations","title":"list_translations","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"move_document","description":"Move a document in the tree: reparent it, set its order among siblings, and/or move it to another space. Content is unaffected (no new revision). Cross-space moves carry the whole subtree (the document and all its descendants) and require the editor role in the target space; the document's slug — and every descendant's slug — must be free in the target space. The target parent must be in the destination space; a document cannot be moved under itself or any of its descendants (cycle). Note: a cro","inputSchema":{"type":"object","required":["document_id"],"properties":{"position":{"type":"number"},"space_id":{"type":"string"},"parent_id":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"move_document","displayName":"move_document","title":"move_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rename_document","description":"Rename a document: change its title and/or its URL slug. Supply at least one. Content is unaffected (no new revision). Changing the title does not alter the already-published page — the public site shows the title captured in the last publish snapshot, so publish again to surface it. Changing the slug rewrites the public URL (/{space}/{slug}) but leaves a 301 redirect behind, unlike move_document. A slug taken by another document — currently, or as a name it was renamed away from — is rejected r","inputSchema":{"type":"object","required":["document_id"],"properties":{"slug":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"rename_document","displayName":"rename_document","title":"rename_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"replace_node","description":"Replace the first top-level block whose text equals `anchor` with new block nodes — operational, merge-safe (ADR-0032). Errors if no block matches.","inputSchema":{"type":"object","required":["document_id","anchor","content"],"properties":{"anchor":{"type":"string"},"content":{"type":"string"},"document_id":{"type":"string"}}},"logicalName":"replace_node","displayName":"replace_node","title":"replace_node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"reply_comment","description":"Reply to an existing comment thread. Returns the created reply.","inputSchema":{"type":"object","required":["comment_id","body"],"properties":{"body":{"type":"string"},"comment_id":{"type":"string"}}},"logicalName":"reply_comment","displayName":"reply_comment","title":"reply_comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"resolve_comment","description":"Resolve or reopen a comment thread. Only the thread author or an editor may. Pass resolved=\"false\" to reopen (default resolves).","inputSchema":{"type":"object","required":["comment_id"],"properties":{"resolved":{"type":"string"},"comment_id":{"type":"string"}}},"logicalName":"resolve_comment","displayName":"resolve_comment","title":"resolve_comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search","description":"Full-text search across documents in a space (Russian+English). Snippets use <<marks>>.","inputSchema":{"type":"object","required":["query","space_id"],"properties":{"limit":{"type":"number"},"query":{"type":"string"},"space_id":{"type":"string"}}},"logicalName":"search","displayName":"search","title":"search","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"submit_for_review","description":"Submit a document for publication review (null/draft → in_review).","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"submit_for_review","displayName":"submit_for_review","title":"submit_for_review","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"unlink_translation","description":"Remove a document from its translation group (clears translation_group_id). Requires the admin role in the document's space. The public site's hreflang/alternates drop this document the next time the affected pages are published.","inputSchema":{"type":"object","required":["document_id"],"properties":{"document_id":{"type":"string"}}},"logicalName":"unlink_translation","displayName":"unlink_translation","title":"unlink_translation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_document","description":"Replace a document's content. Requires expected_revision for optimistic locking — fetch get_document_meta first to get live_revision. Returns 409-style error on conflict.","inputSchema":{"type":"object","required":["document_id","expected_revision","content"],"properties":{"content":{"type":"string"},"document_id":{"type":"string"},"expected_revision":{"type":"number"}}},"logicalName":"update_document","displayName":"update_document","title":"update_document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upload_file","description":"Upload ANY file (pdf, zip, docx, archives, logs…) directly into Kore Wiki's media store (S3/MinIO under the hood) — for images/videos use upload_media instead. base64 (data) is the normal in-band path; url is a shortcut for already-public files. Provide exactly one of data/url. Returns {id, url, filename, mime, size}; insert the result as a file node: {\"type\":\"file\",\"attrs\":{\"src\":<url>,\"filename\":<filename>}}. The file is served as a download (never opened inline).","inputSchema":{"type":"object","required":["space_id","filename"],"properties":{"url":{"type":"string"},"data":{"type":"string"},"filename":{"type":"string"},"space_id":{"type":"string"}}},"logicalName":"upload_file","displayName":"upload_file","title":"upload_file","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upload_media","description":"Upload an image or video DIRECTLY into the space's own media store (ADR-0024) — Kore Wiki keeps the bytes itself (S3/MinIO under the hood), so the file does NOT need to be hosted anywhere the wiki can reach. The normal path is to pass the bytes inline as base64 (`data`); they travel in-band in this call straight to storage. `url` is only a shortcut when the file already sits at a public http(s) address Kore Wiki can fetch for you. Provide exactly one of data/url. Returns {id, url, mime, kind, st","inputSchema":{"type":"object","required":["space_id","filename"],"properties":{"alt":{"type":"string"},"url":{"type":"string"},"data":{"type":"string"},"filename":{"type":"string"},"space_id":{"type":"string"}}},"logicalName":"upload_media","displayName":"upload_media","title":"upload_media","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"validate_chart","description":"Structurally check a Vega-Lite spec (ADR-0040) before embedding it in a `chart` node. Catches common mistakes (not JSON; missing mark; missing inline data). Not a full compile. Returns {\"valid\":bool,\"errors\":[...]}.","inputSchema":{"type":"object","required":["spec"],"properties":{"spec":{"type":"string"}}},"logicalName":"validate_chart","displayName":"validate_chart","title":"validate_chart","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"validate_diagram","description":"Structurally check diagram source (ADR-0027) before embedding it in a `diagram` node. Catches common mistakes (prose instead of a diagram; step ids that don't exist). Not a full render — Mermaid syntax is only partly checked. Returns {\"valid\":bool,\"errors\":[...]}.","inputSchema":{"type":"object","required":["source"],"properties":{"lang":{"type":"string"},"steps":{"type":"string"},"source":{"type":"string"}}},"logicalName":"validate_diagram","displayName":"validate_diagram","title":"validate_diagram","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Kore-Wiki&config=eyJ1cmwiOiAiaHR0cHM6Ly9rd2lraS5kZXYvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Kore-Wiki%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fkwiki.dev%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Kore-Wiki%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fkwiki.dev%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Kore+Wiki&connectorUrl=https%3A%2F%2Fkwiki.dev%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Kore-Wiki\" --url \"https://kwiki.dev/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kwiki-mcp-7df0505c98","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kwiki-mcp-7df0505c98/tools/{tool}","mcpServerUrl":"https://kwiki.dev/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/kwiki-mcp-7df0505c98?live=1"}