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ástroj | Popis |
|---|---|
search_pages | Začí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_page | Vrátí metadata + plný markdown stránky podle přesné cesty. |
edit_page | Vytvoří nebo aktualizuje stránku. Mění jen předaná pole; nová stránka je defaultně private. Diff revize se ukládá automaticky. |
delete_page | Smaže stránku podle cesty. |
Tagy
| Nástroj | Popis |
|---|---|
list_tags | Všechny tagy + popisy. Před přiřazením tagu si projdi seznam — jména jsou case-sensitive. |
read_tag | Detail jednoho tagu. |
create_tag | Nový tag. |
update_tag | Přejmenování / popis (lookup podle aktuálního jména). |
delete_tag | Smazat tag. |
Soubory
| Nástroj | Popis |
|---|---|
list_files | Seznam souborů, volitelně filtrovaný mime_prefix (např. image/). |
create_file | Upload — buď data_base64 (binárka) nebo data (raw text). U obrázků se thumbnail vygeneruje sám. Vrátí id. |
read_file | Metadata souboru (bez binárky). |
update_file | Přejmenování / popis. |
delete_file | Smazat soubor. |
Galerie
| Nástroj | Popis |
|---|---|
list_galleries | Všechny galerie. |
read_gallery | Detail galerie + seznam souborů. |
create_gallery | Nová galerie (path, title, description?, file_ids?). |
update_gallery | Aktualizace. |
delete_gallery | Smazat 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í
| Syntaxe | Vý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.