# Připojení wiki k Claude Desktop (MCP)
Wiki vystavuje **MCP server** na `https://api.wiki.s2.emersion.eu/mcp` (sprint #22).
Když si ho v Claude Desktop přidáš jako external MCP server, **Claude (cloudová verze)**
získá agentic přístup ke všem wiki tools — search, read, list-recent, ask, suggest-edit,
ingest-text. Claude pak při dotazech sám rozhoduje co a kdy ve wiki číst.
## Co k tomu potřebuješ
1. **Claude Desktop** — https://claude.ai/download
2. **Bearer token** z Keycloaku — viz níže, vyrobíš si ho jednorázově
## 1) Vyrobit access token z Keycloaku
Wiki MCP endpoint je Bearer-gated. Stáhneš si JWT z Keycloaku přes `direct grant` flow
nebo z prohlížeče (DevTools → cookies → `next-auth.session-token` → decode).
Nejjednodušší cesta — přihlásíš se ve wiki UI a v DevTools si vykopíruješ token:
```bash
# 1. Login do https://wiki.s2.emersion.eu
# 2. DevTools (F12) → Application/Storage → Cookies → vyhledej
# "next-auth.session-token" (httpOnly), zkopíruj hodnotu
# 3. Pošli tento token k /api/auth/session a vrátí accessToken:
curl -sS https://wiki.s2.emersion.eu/api/auth/session \
-H "Cookie: next-auth.session-token=<paste-here>" \
| jq -r .accessToken
```
Token má omezenou životnost (typicky 5–15 min — Keycloak default).
Pro dlouho-běžné MCP připojení doporučuji **registrovat samostatný MCP client** v Keycloaku
s `client_credentials` flow → token nikdy nevyprší (nebo se obnovuje).
### Alternativa: dedikovaný service-account v Keycloak (doporučeno)
V Keycloak admin UI (`https://auth.wiki.s2.emersion.eu/admin/master/console`):
1. **Clients → Create client**
- Client ID: `emersion-mcp-petr` (vlastní per-user)
- Capability config: **Service accounts roles** ✓, **Client authentication** ✓
2. **Credentials** záložka → zkopíruj **Client secret**
3. **Service account roles** záložka → přiřaď stejné role jako máš ty (editor, admin, ...)
4. Vyrobíš token:
```bash
curl -sS -X POST \
https://auth.wiki.s2.emersion.eu/realms/emersion/protocol/openid-connect/token \
-d 'grant_type=client_credentials' \
-d 'client_id=emersion-mcp-petr' \
-d 'client_secret=<paste>' \
| jq -r .access_token
```
Tenhle access_token má lifetime per realm setting (default ~5 min ale automaticky
obnovitelný — viz níže). Pro Claude Desktop si ho buď refreshuj manuálně každý den,
nebo si napiš mini wrapper co obnovuje + ukládá do `~/.claude/mcp-tokens/`.
## 2) Nakonfigurovat Claude Desktop
Claude Desktop config soubor:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`
Přidej do `mcpServers`:
```json
{
"mcpServers": {
"emersion-wiki": {
"url": "https://api.wiki.s2.emersion.eu/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer <paste-tvuj-token>"
}
}
}
}
```
Restart Claude Desktop.
## 3) Použít
V Claude Desktop chatu uvidíš ikonu MCP (řezačka / connector) — wiki tools tam budou
viditelné. Zeptej se Claude něčeho jako:
> Kdo z naší engineering teamu má zkušenosti s Postgres? Najdi to v wiki Emersion.
Claude začne sám volat `search_wiki` → `read_page` → znovu search → ... a odpoví
s citacemi `[[wiki/...]]`. To je agentic flow — stejný princip jako v interním
chatu po sprint #28, ale tady ho realizuje **Anthropic Claude** namísto naší
backend instance.
## Co funguje vzdáleně
| Tool | Co umí | Auth role |
|---|---|---|
| `search_wiki` | hybridní hledání (BM25 + pgvector) | viewer+ |
| `read_page` | full markdown jedné stránky | viewer+ + RBAC ceiling |
| `list_recent` | stránky upravené v posledních N dnech | viewer+ |
| `ask_question` | spustí interní chat-RAG nad wiki, vrátí odpověď | viewer+ |
| `suggest_edit` | vytvoří `proposal` v inboxu (čeká na schválení) | editor+ |
| `ingest_text` | pošle paste do ingest pipeline | editor+ |
Všechny tools sdílí stejnou RBAC matrix jako wiki web UI — confidential stránky
viewer nevidí ani přes MCP.
## Troubleshooting
| Symptom | Příčina | Fix |
|---|---|---|
| `401 invalid_token` | token vypršel | re-fetch token přes service-account |
| `401 azp mismatch` | použil jsi token z `emersion-web` (NextAuth) | musíš vytvořit token z `emersion-mcp*` clientu |
| Žádné tools v Claude Desktop | špatná URL / firewall | curl `/mcp` ručně + zkontroluj `/.well-known/oauth-protected-resource` |
| Pomalé odpovědi | reranker cold-start v search_wiki | první call ~3 s, další <1 s (sprint #28 fix) |
## Princip
```
Claude Desktop (Anthropic cloud)
│
│ MCP protocol (JSON-RPC over HTTP, Bearer auth)
▼
https://api.wiki.s2.emersion.eu/mcp
│
├─ /tools/list ← Claude si vypíše dostupné tools
├─ /tools/call ← Claude volá search_wiki / read_page / ...
└─ /.well-known/ ← OAuth Protected Resource discovery (RFC 9728)
│
▼
wiki-api (Hono) + wiki-postgres + wiki-reranker + wiki-ollama
```
Wiki MCP server **neholí žádný LLM sám** — je to čistě tool registry. Claude
(cloudový) si dělá agentic loop sám, MCP jen poskytuje data.