MCP

Signerat MCP-endpoint för AI-agenter.

Hela SSWC-boken 2010 är tillgänglig som ett MCP-verktygsset. Varje svar på ett tools/call är signerat med Ed25519 så att en agent kan bevisa att texten kommer härifrån och inte har manipulerats.

Endpoint

https://sswcboken.se/api/mcp

Server card (inkl. publik nyckel): /.well-known/mcp.json

Verktyg

server_info
Metadata: dataset, counts, licensposition, signeringsalgoritm.
search_texter
Hybridsökning (semantisk + svensk fulltext) över alla 181 bidrag.
get_text
En text ordagrant (body verbatim från 2010) via slug eller nr.
list_texter
Paginerad lista över texter.
get_forfattare
Författardossier (då/nu) plus deras texter.
list_drommar
Drömscoreboard: 181 verdicts (slog_in / muterade / dog / oppen).
list_teman
9 tematiska kluster med counts primär/sekundär.
get_tema
Ett tema och alla dess texter (primära först).

Resources: sswc://text/{nr} och sswc://forfattare/{slug} (resources/list + resources/read, signerade som tools/call).

Exempelanrop

curl -s https://sswcboken.se/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
curl -s https://sswcboken.se/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
curl -s https://sswcboken.se/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"search_texter","arguments":{"q":"demokrati","limit":5}}}'
curl -s https://sswcboken.se/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call",
       "params":{"name":"get_tema","arguments":{"slug":"demokrati-makt"}}}'

Publik nyckel

Ed25519, kid ln2Y6OsJnhuUnXiH. Hämtas från /.well-known/mcp.json.

{
  "kty": "OKP",
  "crv": "Ed25519",
  "x": "_XTbAAUHZSw9umaO-adqh11fn2hkts8EKOQ9-eFAiyA",
  "kid": "ln2Y6OsJnhuUnXiH",
  "alg": "EdDSA",
  "use": "sig"
}

Så verifierar du en signatur

Signaturen är en JWS i compact-form (header.payload.signature) där payload är canonicalized JSON (sorterade nycklar) av result.structuredContent. Alla tools/call-svar bär även ett content_hash (sha256) för snabb integritetscheck.

# 1. Hämta publik nyckel
curl -s https://sswcboken.se/.well-known/mcp.json | jq .jwks
# 2. Anropa ett verktyg och plocka ut signaturen
RESP=$(curl -s https://sswcboken.se/api/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"server_info","arguments":{}}}')
echo "$RESP" | jq -r .result.signature.jws
# 3. Verifiera JWS-signaturen mot publik nyckel (t.ex. med jose):
#    node -e "..."  eller  python -m jwcrypto  eller  jose-cli

Rättigheter: Per-författare upphovsrätt 2010. INTE Creative Commons. Återpublicerad i delningens anda. Invändningar tas emot på joakim@jardenberg.com och rättas inom 24 timmar.