{
  "name": "ensakidag",
  "version": "1.0.0",
  "schema_version": 1,
  "protocolVersion": "2025-11-25",
  "protocol_versions_supported": ["2025-11-25", "2025-06-18"],
  "primitives": ["tools", "resources", "prompts"],
  "capabilities": {
    "search": 1,
    "topics": 1,
    "related": 1,
    "signing": 1,
    "provenance": 1,
    "resources": 1,
    "prompts": 1
  },
  "description": "Joakim Jardenbergs #ensakidag - nio år av dagliga 5-minuters förklaringar om teknik, internet och AI, med AI-redaktionell kommentar och facit i efterhand.",
  "publisher": {
    "name": "Studio Jardenberg",
    "url": "https://ensakidag.se",
    "contact": "joakim@jardenberg.com"
  },
  "canonical_domain": "https://ensakidag.se",
  "endpoint": {
    "url": "https://ensakidag.se/api/mcp",
    "transport": "streamable-http",
    "auth": "none",
    "aliases": ["https://ensakidag.se/mcp"]
  },
  "rateLimit": { "requests": 60, "windowSeconds": 300, "scope": "per-ip" },
  "tools": [
    {
      "name": "search_episodes",
      "description": "Hybrid sökning över #ensakidag-avsnitt: semantisk (pgvector över transkript-chunks) sammanslagen med svensk fulltext via reciprocal rank fusion. Korta frågor (<=2 ord) viktas mot lexikalisk match. Returnerar rankade avsnitt med snippet, facit-betyg och kanonisk URL på ensakidag.se.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "description": "Sökfras (svensk fulltext)." },
          "limit": { "type": "integer", "minimum": 1, "maximum": 50, "default": 10 },
          "year": { "type": "integer", "description": "Filtrera på publiceringsår." },
          "topic": { "type": "string", "description": "Filtrera på temaslug (se list_topics)." }
        },
        "required": ["query"]
      }
    },
    {
      "name": "get_episode",
      "description": "Hämta ett helt avsnitt: JJ:s beskrivning och transkript, plus AI-lagret (faktaruta, 2026-uppdatering, bedömning, guldkorn, kopplingar), teman och kanonisk URL. Argumentet `number` är kanoniskt; `id` och `episode` accepteras som alias.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": { "type": "integer", "description": "Avsnittsnummer (kanoniskt). Alias: id, episode." },
          "id": { "type": "integer", "description": "Alias för number." },
          "episode": { "type": "integer", "description": "Alias för number." }
        },
        "required": ["number"]
      }
    },
    {
      "name": "list_topics",
      "description": "Lista alla teman med slug, etikett, antal avsnitt och kanonisk URL på ensakidag.se.",
      "inputSchema": { "type": "object", "properties": {} }
    },
    {
      "name": "get_topic",
      "description": "Hämta ett tema: etikett, AI-syntes, höjdpunkter och alla avsnitt kopplade till temat, med kanonisk URL.",
      "inputSchema": {
        "type": "object",
        "properties": { "slug": { "type": "string" } },
        "required": ["slug"]
      }
    },
    {
      "name": "find_related",
      "description": "Hitta avsnitt relaterade till ett givet avsnitt via uttryckliga kopplingar (edges) och delade teman.",
      "inputSchema": {
        "type": "object",
        "properties": { "number": { "type": "integer" } },
        "required": ["number"]
      }
    },
    {
      "name": "list_latest",
      "description": "Lista de senaste avsnitten efter publiceringsdatum, med kanonisk URL.",
      "inputSchema": {
        "type": "object",
        "properties": { "limit": { "type": "integer", "minimum": 1, "maximum": 50, "default": 10 } }
      }
    },
    {
      "name": "server_info",
      "description": "Returnerar serverversion, datasetversion (datum för senaste innehållsändring), antal avsnitt/teman, schema_version och API-capabilities. Använd för att avgöra om cache eller index behöver invalideras.",
      "inputSchema": { "type": "object", "properties": {} }
    }
  ],
  "signing": {
    "alg": "EdDSA",
    "public_key_url": "https://ensakidag.se/.well-known/ensakidag-mcp-public-key.json",
    "canonicalization": "sorted-keys JSON, UTF-8"
  },
  "public_key": {
    "kty": "OKP",
    "crv": "Ed25519",
    "x": "OHYfNWpij5NohwZdNM1BR91cG01jjJxPycaElx4677I",
    "use": "sig",
    "alg": "EdDSA",
    "kid": "bzjZ2nlMTx8AlQCNshoHOzv8br80IP7Bhx8Myppj1AY"
  },
  "contact": "joakim@jardenberg.com",
  "license": {
    "spdx": "CC-BY-4.0",
    "attribution": "#ensakidag av Joakim Jardenberg"
  },
  "policy": {
    "usage": "read-only, public",
    "ai_train": true,
    "attribution_required": true,
    "citation": "Ange #ensakidag av Joakim Jardenberg, CC BY 4.0, och länka till avsnittets URL"
  },
  "documentation": "https://ensakidag.se/llms.txt"
}