MCP 서버

JENRIKS Photo Archive

com.jenriks/photo-archive
미디어 및 콘텐츠 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Provides read-only access to a daily photography archive, including photo retrieval, metadata, browsing, and text-based search.

get_latest_photo
Today's photo
Return today's JENRIKS photo (the newest post), or the newest post by one photographer when photographer is set. A new photo appears every day at 00:00 Europe/Berlin.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': [], 'properties': {'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string', 'description': 'Latest post by this photographer; omit for the newest post overall'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['photo'], 'properties': {'photo': {'type': 'object', 'required': ['title', 'photographer', 'date', 'url', 'categories', 'tags', 'image', 'credit'], 'properties': {'geo': {'type': ['object', 'null'], 'required': ['latitude', 'longitude'], 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'WGS 84 coordinates of the location when the post carries them, otherwise null'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Permanent page URL'}, 'date': {'type': 'string', 'format': 'date', 'description': 'Publication date, YYYY-MM-DD'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'image': {'type': 'object', 'required': ['full'], 'properties': {'full': {'type': 'string', 'format': 'uri', 'description': '1600 px long edge'}, 'thumbnail': {'type': ['string', 'null'], 'format': 'uri', 'description': '400 px long edge'}}}, 'title': {'type': 'string'}, 'credit': {'type': 'string', 'description': 'Ready-made credit line: photographer, JENRIKS, page URL'}, 'location': {'type': ['string', 'null'], 'description': 'City and country when known'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}}}}
get_photo
Get one photo
Return one JENRIKS post by publication date (YYYY-MM-DD) or by page URL / path (/YYYY/MM/DD/slug/).
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': [], 'properties': {'url': {'type': 'string', 'description': 'Page URL or path, e.g. /2026/09/04/liminal-space/'}, 'date': {'type': 'string', 'description': 'YYYY-MM-DD'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['found'], 'properties': {'url': {'type': 'string'}, 'date': {'type': 'string'}, 'hint': {'type': 'string'}, 'found': {'type': 'boolean'}, 'photo': {'type': 'object', 'required': ['title', 'photographer', 'date', 'url', 'categories', 'tags', 'image', 'credit'], 'properties': {'geo': {'type': ['object', 'null'], 'required': ['latitude', 'longitude'], 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'WGS 84 coordinates of the location when the post carries them, otherwise null'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Permanent page URL'}, 'date': {'type': 'string', 'format': 'date', 'description': 'Publication date, YYYY-MM-DD'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'image': {'type': 'object', 'required': ['full'], 'properties': {'full': {'type': 'string', 'format': 'uri', 'description': '1600 px long edge'}, 'thumbnail': {'type': ['string', 'null'], 'format': 'uri', 'description': '400 px long edge'}}}, 'title': {'type': 'string'}, 'credit': {'type': 'string', 'description': 'Ready-made credit line: photographer, JENRIKS, page URL'}, 'location': {'type': ['string', 'null'], 'description': 'City and country when known'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}}}}
get_site_overview
Site overview
Totals, photographers, categories with counts, posts per year, section URLs, URL pattern and license terms. Pass include to keep only some of those blocks next to the totals and dates.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': [], 'properties': {'include': {'type': 'array', 'items': {'enum': ['photographers', 'categories', 'years', 'sections', 'license'], 'type': 'string'}, 'description': 'Blocks to keep besides site, description, totals and dates; omit for everything', 'uniqueItems': True}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['site', 'description', 'total_photos', 'first_date', 'latest_date', 'photographers', 'categories', 'years', 'sections', 'url_pattern', 'license'], 'properties': {'site': {'type': 'string'}, 'years': {'type': 'array', 'items': {'type': 'object', 'required': ['year', 'photos'], 'properties': {'year': {'type': 'string'}, 'photos': {'type': 'integer'}}}}, 'license': {'type': 'string'}, 'sections': {'type': 'object', 'additionalProperties': {'type': 'string', 'format': 'uri'}}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'photos'], 'properties': {'name': {'type': 'string'}, 'photos': {'type': 'integer'}}}}, 'first_date': {'type': 'string', 'format': 'date'}, 'description': {'type': 'string'}, 'latest_date': {'type': 'string', 'format': 'date'}, 'url_pattern': {'type': 'string'}, 'total_photos': {'type': 'integer'}, 'photographers': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'full_name', 'photos', 'page'], 'properties': {'name': {'type': 'string'}, 'page': {'type': 'string', 'format': 'uri'}, 'photos': {'type': 'integer'}, 'full_name': {'type': 'string'}}}}}}
random_photo
Random photo
Return a random JENRIKS photo, optionally limited to a photographer, category or year.
읽기 전용
입력 스키마
{'type': 'object', 'required': [], 'properties': {'year': {'type': 'integer', 'minimum': 2005}, 'category': {'type': 'string'}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['found'], 'properties': {'hint': {'type': 'string'}, 'found': {'type': 'boolean'}, 'photo': {'type': 'object', 'required': ['title', 'photographer', 'date', 'url', 'categories', 'tags', 'image', 'credit'], 'properties': {'geo': {'type': ['object', 'null'], 'required': ['latitude', 'longitude'], 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'WGS 84 coordinates of the location when the post carries them, otherwise null'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Permanent page URL'}, 'date': {'type': 'string', 'format': 'date', 'description': 'Publication date, YYYY-MM-DD'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'image': {'type': 'object', 'required': ['full'], 'properties': {'full': {'type': 'string', 'format': 'uri', 'description': '1600 px long edge'}, 'thumbnail': {'type': ['string', 'null'], 'format': 'uri', 'description': '400 px long edge'}}}, 'title': {'type': 'string'}, 'credit': {'type': 'string', 'description': 'Ready-made credit line: photographer, JENRIKS, page URL'}, 'location': {'type': ['string', 'null'], 'description': 'City and country when known'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}}, 'pool_size': {'type': 'integer'}}}
search_photos
Search photos
Search the JENRIKS archive (one photo per day since 2006). Free-text query matches title, place, categories, tags and photographer; filters narrow by photographer, category, year and location. Returns permanent page URLs, credits, coordinates and image URLs, newest first. Page with offset, or with the opaque cursor from next_cursor (cursor wins when both are sent).
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': [], 'properties': {'year': {'type': 'integer', 'minimum': 2005, 'description': 'Four-digit publication year'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'query': {'type': 'string', 'description': 'Free text, e.g. "harbour", "Barcelona", "fog"'}, 'cursor': {'type': 'string', 'description': 'Opaque page token from next_cursor; overrides offset'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0}, 'category': {'type': 'string', 'description': 'One of: Abstract, Architecture, B&W, Humans, Landscapes, Macro, Nature, News, Street, Studio, Time exposure'}, 'location': {'type': 'string', 'description': 'City or country name, e.g. "Iceland"'}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['total_matches', 'offset', 'returned', 'photos', 'has_more', 'next_cursor'], 'properties': {'links': {'type': 'object', 'required': ['self'], 'properties': {'next': {'type': ['string', 'null'], 'format': 'uri', 'description': 'The same request with cursor=next_cursor and no offset; null on the last page'}, 'self': {'type': 'string', 'format': 'uri', 'description': 'This request'}}}, 'cursor': {'type': 'string', 'description': 'Echo of the cursor this page was fetched with, when one was sent'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Offset of the first returned row; 0 when a cursor was used'}, 'photos': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'photographer', 'date', 'url', 'categories', 'tags', 'image', 'credit'], 'properties': {'geo': {'type': ['object', 'null'], 'required': ['latitude', 'longitude'], 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'WGS 84 coordinates of the location when the post carries them, otherwise null'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Permanent page URL'}, 'date': {'type': 'string', 'format': 'date', 'description': 'Publication date, YYYY-MM-DD'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'image': {'type': 'object', 'required': ['full'], 'properties': {'full': {'type': 'string', 'format': 'uri', 'description': '1600 px long edge'}, 'thumbnail': {'type': ['string', 'null'], 'format': 'uri', 'description': '400 px long edge'}}}, 'title': {'type': 'string'}, 'credit': {'type': 'string', 'description': 'Ready-made credit line: photographer, JENRIKS, page URL'}, 'location': {'type': ['string', 'null'], 'description': 'City and country when known'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'photographer': {'enum': ['Erik', 'Jens'], 'type': 'string'}}}}, 'has_more': {'type': 'boolean', 'description': 'True when another page exists'}, 'returned': {'type': 'integer', 'minimum': 0}, 'next_cursor': {'type': ['string', 'null'], 'description': 'Opaque token for the next page; null on the last page. Send it back as cursor.'}, 'next_offset': {'type': 'integer', 'description': 'Kept for offset paging; present when more matches exist'}, 'total_matches': {'type': 'integer', 'minimum': 0}}}
추가됨
get_site_overview
2026년 9월 17일 12:35 PM
추가됨
random_photo
2026년 9월 17일 12:35 PM
추가됨
get_latest_photo
2026년 9월 17일 12:35 PM
추가됨
get_photo
2026년 9월 17일 12:35 PM
추가됨
search_photos
2026년 9월 17일 12:35 PM