{
  "specVersion": "1.0",
  "host": {
    "displayName": "JENRIKS",
    "identifier": "https://jenriks.com",
    "url": "https://jenriks.com/",
    "description": "Daily photoblog: one photograph per day since January 1, 2006 by Jens Herrmann and Erik Hehrmann.",
    "contact": "https://jenriks.com/contact/",
    "trustManifest": {
      "identity": "did:web:jenriks.com",
      "identityType": "did"
    }
  },
  "entries": [
    {
      "identifier": "urn:air:jenriks.com:mcp:photo-archive",
      "displayName": "JENRIKS Photo Archive (MCP server)",
      "description": "Read-only MCP server: search the archive by keyword, place, category, photographer, tag or year with cursor paging; fetch one post, today's photo (per photographer on request) or a random one; site overview.",
      "type": "application/mcp-server-card+json",
      "url": "https://jenriks.com/.well-known/mcp/server-card.json",
      "representativeQueries": [
        "find JENRIKS street photos taken in Barcelona",
        "what is today's JENRIKS photo",
        "show me a JENRIKS photograph from Iceland by Erik",
        "which JENRIKS photo was published on 2019-03-14"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/.well-known/mcp/server-card.json"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/.well-known/mcp/server-card.json",
          "type": "application/mcp-server-card+json",
          "digest": "sha256:f95051f196ade4aafc01e1959d993084b1bd721f4fe12d9e69ed0799ea22b99b"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..tIIyoq5HgpWWJFHDeG6Dr5amfWh49iOGyuoe0yE3ufW_qqt9BkTnCdJk4Kwb-frv6FbQc28Y2GFDIKU6mHQmBA"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:skill:jenriks-photos",
      "displayName": "Skill: find, cite and license JENRIKS photos",
      "description": "Agent skill (SKILL.md) covering the MCP tools, REST and NLWeb endpoints, URL patterns, markdown twins, credit and licensing rules.",
      "type": "text/markdown",
      "url": "https://jenriks.com/.well-known/agent-skills/jenriks-photos/SKILL.md",
      "representativeQueries": [
        "how do I credit a JENRIKS photograph",
        "can I reuse or license a JENRIKS photo",
        "how do I look up a JENRIKS photo by date"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/.well-known/agent-skills/jenriks-photos/SKILL.md"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/.well-known/agent-skills/jenriks-photos/SKILL.md",
          "type": "text/markdown",
          "digest": "sha256:7916f6ee65ba34a257812f8b2937b0377700507b24e204fadd3473e6afe4582e"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..mssOO94sJCghy6X1crlzyI6DsuoU_mwqTCMWllc33cFmaScsyfR88Pg0vy_mVmMm6PtQXK7xRLtx4xPSkBPlAQ"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:skills:repo",
      "displayName": "jenriks-agent-skills (source repository)",
      "description": "Public repository with the jenriks-photos skill, the Agent Plugins manifest and the MCP server declaration for jenriks.com (MIT).",
      "type": "text/html",
      "url": "https://github.com/ehehrmann/jenriks-agent-skills",
      "tags": [
        "agent-skills",
        "agent-plugins",
        "mcp",
        "photography"
      ],
      "representativeQueries": [
        "install the JENRIKS photos skill",
        "JENRIKS agent plugin on GitHub",
        "add the JENRIKS MCP server to my agent"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://github.com/ehehrmann/jenriks-agent-skills"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:api:public-read",
      "displayName": "JENRIKS REST API v1 (OpenAPI 3.1)",
      "description": "Read-only JSON API: search photos with cursor paging, fetch one post by date, today's photo, a random photo, site overview, batch requests; plus feeds, indexes and the MCP endpoint. RFC 9457 errors, RateLimit headers, no auth.",
      "type": "application/vnd.oai.openapi+json",
      "url": "https://jenriks.com/openapi.json",
      "representativeQueries": [
        "JENRIKS REST API to search photos as JSON",
        "get today's JENRIKS photo as JSON",
        "JENRIKS RSS feed of the latest photos"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/openapi.json"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/openapi.json",
          "type": "application/vnd.oai.openapi+json",
          "digest": "sha256:42447fe7e71d9c4b72cdb87228a6fe180ca236a588edaa00bff101b1d480fa8f"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..nPJbwTc0alO_1TouG1-L6eTsA3-hTxR8LRXqS566SoIjalFGptXHSsG-LwFqPMtbix_6Kyhqnw1sZbxX1Y6lDA"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:api:nlweb-ask",
      "displayName": "JENRIKS NLWeb /ask",
      "description": "Natural-language search over the archive following NLWeb 0.55: GET or POST /ask, JSON answer with schema.org Photograph results, or server-sent events on request.",
      "type": "application/json",
      "url": "https://jenriks.com/ask",
      "representativeQueries": [
        "ask JENRIKS for fog photos from Barcelona",
        "JENRIKS natural language photo search",
        "NLWeb endpoint for jenriks.com"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/ask"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:doc:developers",
      "displayName": "JENRIKS developer documentation",
      "description": "Human-readable docs for the REST API, batch and cursor paging, MCP server, NLWeb, markdown twins, errors, rate limits, versioning and licensing.",
      "type": "text/html",
      "url": "https://jenriks.com/developers/",
      "representativeQueries": [
        "how do I use the JENRIKS API",
        "JENRIKS MCP server setup"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/developers/"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:doc:llms-txt",
      "displayName": "JENRIKS llms.txt",
      "description": "What the site is, when to use it, how to fetch it, license and contact.",
      "type": "text/plain",
      "url": "https://jenriks.com/llms.txt",
      "representativeQueries": [
        "what is JENRIKS",
        "who are the photographers behind JENRIKS",
        "how long has JENRIKS published a photo every day"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/llms.txt"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/llms.txt",
          "type": "text/plain",
          "digest": "sha256:118daa2d7b1704722b24ada8d47df36aa7cb7b3127c08283c034750aa5438aa9"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..oP9S-EhdSuQXUWrYSEFz523pyoqQXrqAhP2Xtfn2_WD7CzQWBXuqMB03wxDdHQ0-SVU8Z_RxytYB3Q-u4RQeDw"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:feed:rss",
      "displayName": "JENRIKS RSS feed",
      "description": "The latest 20 photos with titles, photographers, dates and links.",
      "type": "application/rss+xml",
      "url": "https://jenriks.com/feed.xml",
      "representativeQueries": [
        "latest JENRIKS photos",
        "subscribe to JENRIKS"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/feed.xml"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/feed.xml",
          "type": "application/rss+xml",
          "digest": "sha256:df832f6d2cf87e73f6ed6349a565022d1619e3bba2b1a7172a55a18433b2aaec"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..R4NCDtUJOFCx_qAT-8eS2QJ2ucmKg7DCjOMxa2CnM1sc1AvCkdw5I2hCCa_7AxbnUn3J2sj6SQLYLA6DjMAqBg"
      }
    },
    {
      "identifier": "urn:air:jenriks.com:feed:schema-jsonl",
      "displayName": "JENRIKS schema.org feed (JSON Lines)",
      "description": "Every post as one schema.org BlogPosting per line, newest first, matching the page JSON-LD; listed in /schemamap.xml for NLWeb Schema Feeds.",
      "type": "application/x-jsonlines",
      "url": "https://jenriks.com/feeds/photos.jsonl",
      "representativeQueries": [
        "structured data feed of every JENRIKS photo",
        "bulk JENRIKS photo metadata as JSON"
      ],
      "publisher": {
        "identifier": "did:web:jenriks.com",
        "displayName": "JENRIKS",
        "identityType": "did"
      },
      "trustManifest": {
        "identity": "did:web:jenriks.com",
        "identityType": "did",
        "attestations": [
          {
            "type": "publisher-identity",
            "uri": "https://jenriks.com/.well-known/did.json",
            "mediaType": "application/did+json",
            "description": "DID document for did:web:jenriks.com with a LinkedDomain service back to https://jenriks.com/."
          }
        ],
        "provenance": [
          {
            "relation": "publishedFrom",
            "sourceId": "https://jenriks.com/feeds/photos.jsonl"
          }
        ],
        "privacyPolicyUrl": "https://jenriks.com/datenschutz/",
        "termsOfServiceUrl": "https://jenriks.com/developers/#licensing",
        "subject": {
          "url": "https://jenriks.com/feeds/photos.jsonl",
          "type": "application/x-jsonlines",
          "digest": "sha256:76024143715577234628958268a235bcccddeba7a30ff6ad224827627bf1b387"
        },
        "issuedAt": "2026-09-14T16:09:00Z",
        "signature": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6amVucmlrcy5jb20ja2V5LTEifQ..PmmjitJ9ixj9hqXSjjqC1VEb6RkbtNvLvGkzhJzT0TvKD6trLNX0WoPOz8Kw7CF-imfnjrB6Vu8iqYKGxv8QDw"
      }
    }
  ]
}
