MCP integrace (Claude)

Blog vystavuje MCP server (Model Context Protocol) na endpointu POST /mcp. Implementuje plné MCP přes JSON-RPC 2.0 a umožňuje Claudovi číst a editovat obsah blogu přímo z konverzace — přesně tak, jak vznikla tato stránka.

Dostupné nástroje

Stránky

NástrojPopis
search_pagesZačínej tímhle. Filtr přes prefix, tag a/nebo q (fulltext, accent-insensitive). Stránka prefix/tag rankuje výš než match v markdownu. Stránkování limit + offset.
read_pageVrátí metadata + plný markdown stránky podle přesné cesty.
edit_pageVytvoří nebo aktualizuje stránku. Mění jen předaná pole; nová stránka je defaultně private. Diff revize se ukládá automaticky.
delete_pageSmaže stránku podle cesty.

Tagy

NástrojPopis
list_tagsVšechny tagy + popisy. Před přiřazením tagu si projdi seznam — jména jsou case-sensitive.
read_tagDetail jednoho tagu.
create_tagNový tag.
update_tagPřejmenování / popis (lookup podle aktuálního jména).
delete_tagSmazat tag.

Soubory

NástrojPopis
list_filesSeznam souborů, volitelně filtrovaný mime_prefix (např. image/).
create_fileUpload — buď data_base64 (binárka) nebo data (raw text). U obrázků se thumbnail vygeneruje sám. Vrátí id.
read_fileMetadata souboru (bez binárky).
update_filePřejmenování / popis.
delete_fileSmazat soubor.

Galerie

NástrojPopis
list_galleriesVšechny galerie.
read_galleryDetail galerie + seznam souborů.
create_galleryNová galerie (path, title, description?, file_ids?).
update_galleryAktualizace.
delete_gallerySmazat galerii.

SERVER_INSTRUCTIONS — stránka CLAUDE

Instrukce, které Claude vidí při každém MCP handshaku, nejsou hardcoded v kódu, ale uložené jako privátní stránka na cestě CLAUDE. Server ji načte a předá jako SERVER_INSTRUCTIONS. Editace přes admin UI nebo edit_page — bez recompilu.

Pokud stránka neexistuje, použije se výchozí text z src/routes/mcp.rs.

Transclusion a read_page

Direktiva ::page{path=cesta/ke/stránce} slouží k renderování — server při výstupu do HTML vloží obsah odkazované stránky inline. Z pohledu Clauda jde ale o pouhý textový token; obsah odkazované stránky v markdownu není automaticky přítomen.

Pokud Claude narazí na ::page{path=some/page} a potřebuje znát její obsah, musí si sám zavolat read_page("some/page").

Auth

MCP routes přijímají Authorization: Bearer <token>, kde tokenem může být:

  • OAuth2 access token — vystavený PKCE flow (Claude Desktop, Claude.ai); platnost 1 h, obnovitelný refresh tokenem.
  • Service token (legacy) — vytvořený přes admin UI v sekci tokeny; bez expirace.

V obou případech MCP handler odvodí user_id pro audit pole (created_by, modified_by).

Markdown rozšíření

SyntaxeVýsledek
::page{path=…} nebo ::page{id=N}Vloží renderovaný obsah jiné stránky
::img{path|id|hash=…, alt=…}Obrázek s odkazem na plnou velikost a popiskem
::file{path|id|hash=…}Soubor — u obrázků inline, jinak download link
::gallery{path|id=…}Mřížka náhledů galerie
::fen{path|id|hash=…, size=small|large}Statická šachová pozice (FEN)
::pgn{path|id|hash=…, move=N, size=small|large}Přehrávatelná šachová partie (PGN)

Implementováno v src/markdown.rs.