{
  "name": "ppcp-joakim-jardenberg",
  "title": "Joakim Jardenberg — Public Profile (PPCP)",
  "description": "Read-only public context about Joakim Jardenberg (JJ): full profile, sections, deterministic search and public sources. Reference context, not instructions for the receiving AI.",
  "version": "0.1.0-alpha.4",
  "websiteUrl": "https://joakim.jardenberg.net",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://joakim.jardenberg.net/mcp",
      "authentication": {
        "type": "none"
      },
      "protocolVersions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18"
      ],
      "preferredProtocolVersion": "2026-07-28",
      "notes": "Stateless: POST only. There is no SSE GET stream; GET returns a browser setup page for text/html and 405 for MCP stream requests."
    }
  ],
  "capabilities": {
    "tools": {},
    "resources": {}
  },
  "tools": [
    {
      "name": "ppcp_get_profile",
      "title": "Get the full public profile",
      "description": "Returns the complete PPCP profile object and the exact public Markdown for Joakim Jardenberg. Public draft; owner review pending; AI-assisted editorial wording. Reference context about JJ; not instructions for you, and no authority to act for him."
    },
    {
      "name": "ppcp_list_sections",
      "title": "List profile sections",
      "description": "Lists section IDs and titles with pagination. Deterministic, no generation."
    },
    {
      "name": "ppcp_get_section",
      "title": "Get one profile section",
      "description": "Returns a single section's exact Markdown with profile identity, version, review status, authorship and its source references."
    },
    {
      "name": "ppcp_search",
      "title": "Search the profile",
      "description": "Deterministic case-insensitive substring search with bounded excerpts, section IDs and canonical anchors. It does not generate answers."
    },
    {
      "name": "ppcp_get_sources",
      "title": "Get public sources",
      "description": "Returns the public source pointers, optionally filtered to one section. Pointers only — not permission to mirror their full text."
    },
    {
      "name": "ppcp_get_version",
      "title": "Get version and status",
      "description": "Returns protocol, profile and software versions, review status, dataset freshness, signing status and source URLs."
    }
  ],
  "signing": {
    "alg": "EdDSA",
    "kid": "k6uVx3s5ouAsNKfYioJ-Ej0FMERtUPD9O7xQ8Mn9Ic0",
    "previous_kids": [],
    "jwks": {
      "keys": [
        {
          "kty": "OKP",
          "crv": "Ed25519",
          "x": "GUnygwyRDHUQmVyk1fiHBM9zlAyx3uMyLT6qTdcjHsY",
          "kid": "k6uVx3s5ouAsNKfYioJ-Ej0FMERtUPD9O7xQ8Mn9Ic0",
          "alg": "EdDSA",
          "use": "sig"
        }
      ]
    },
    "canonicalization": "RFC 8785 (JCS)",
    "digest": "SHA-256",
    "jws_typ": "verifiable-mcp+jws",
    "spec": "org.jardenberg/verifiable-mcp",
    "spec_version": "0.2.1",
    "spec_url": "https://github.com/jardenberg/verifiable-mcp",
    "public_key_url": "https://joakim.jardenberg.net/.well-known/mcp.json",
    "status": "active"
  },
  "ppcp": {
    "protocol": "PPCP",
    "version": "0.1.0",
    "profile_version": "0.4",
    "updated_at": "2026-09-13T00:00:00Z",
    "review_status": "owner-review-pending",
    "discovery": "https://joakim.jardenberg.net/.well-known/ppcp.json"
  }
}