JENRIKS Photo Archive

Read-only MCP server over the JENRIKS daily photoblog: one photo per day since 2006. No auth.

사용해야 할까요

품질 및 안전성

A
설명 품질
88%
스키마 완전성
85%
이름 품질
96%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (2)

  • LOWTool 'get_photo' description lacks action verbget_photo에서
  • LOWTool 'random_photo' description lacks action verbrandom_photo에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,460토큰 (도구 정의)
~5.2 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.92%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "photo-archive": {
      "url": "https://jenriks.com/mcp"
    }
  }
}

원격 엔드포인트

https://jenriks.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (5)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢search_photos(query, photographer, category, year, location, ...)

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",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free text, e.g. \"harbour\", \"Barcelona\", \"fog\""
    },
    "photographer": {
      "type": "string",
      "enum": [
        "Erik",
        "Jens"
      ]
    },
    "category": {
      "type": "string",
      "description": "One of: Abstract, Architecture, B&W, Humans, Landscapes, Macro, Nature, News, Street, Studio, Time exposure"
    },
    "year": {
      "type": "integer",
      "minimum": 2005,
      "description": "Four-digit publication year"
    },
    "location": {
      "type": "string",
      "description": "City or country name, e.g. \"Iceland\""
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "cursor": {
      "type": "string",
      "description": "Opaque page token from next_cursor; overrides offset"
    }
  },
  "required": [],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "total_matches": {
      "type": "integer",
      "minimum": 0
    },
    "offset": {
      "description": "Offset of the first returned row; 0 when a cursor was used",
      "type": "integer",
      "minimum": 0
    },
    "returned": {
      "type": "integer",
      "minimum": 0
    },
    "photos": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "photographer",
          "date",
          "url",
          "categories",
          "tags",
          "image",
          "credit"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "photographer": {
            "type": "string",
            "enum": [
              "Erik",
              "Jens"
            ]
          },
          "date": {
            "description": "Publication date, YYYY-MM-DD",
            "type": "string",
            "format": "date"
          },
          "url": {
            "description": "Permanent page URL",
            "type": "string",
            "format": "uri"
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "City and country when known"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "image": {
            "type": "object",
            "required": [
              "full"
            ],
            "properties": {
              "full": {
                "description": "1600 px long edge",
                "type": "string",
                "format": "uri"
              },
              "thumbnail": {
                "description": "400 px long edge",
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri"
              }
            }
          },
          "credit": {
            "description": "Ready-made credit line: photographer, JENRIKS, page URL",
            "type": "string"
          },
          "geo": {
            "type": [
              "object",
              "null"
            ],
            "description": "WGS 84 coordinates of the location when the post carries them, otherwise null",
            "required": [
              "latitude",
              "longitude"
            ],
            "properties": {
              "latitude": {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              },
              "longitude": {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              }
            }
          }
        }
      }
    },
    "next_offset": {
      "description": "Kept for offset paging; present when more matches exist",
      "type": "integer"
    },
    "has_more": {
      "description": "True when another page exists",
      "type": "boolean"
    },
    "next_cursor": {
      "description": "Opaque token for the next page; null on the last page. Send it back as cursor.",
      "type": [
        "string",
        "null"
      ]
    },
    "cursor": {
      "description": "Echo of the cursor this page was fetched with, when one was sent",
      "type": "string"
    },
    "links": {
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "description": "This request",
          "type": "string",
          "format": "uri"
        },
        "next": {
          "description": "The same request with cursor=next_cursor and no offset; null on the last page",
          "type": [
            "string",
            "null"
          ],
          "format": "uri"
        }
      }
    }
  },
  "required": [
    "total_matches",
    "offset",
    "returned",
    "photos",
    "has_more",
    "next_cursor"
  ]
}
🟢get_photo(date, url)

Return one JENRIKS post by publication date (YYYY-MM-DD) or by page URL / path (/YYYY/MM/DD/slug/).

입력 스키마

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "url": {
      "type": "string",
      "description": "Page URL or path, e.g. /2026/09/04/liminal-space/"
    }
  },
  "required": [],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean"
    },
    "photo": {
      "type": "object",
      "required": [
        "title",
        "photographer",
        "date",
        "url",
        "categories",
        "tags",
        "image",
        "credit"
      ],
      "properties": {
        "title": {
          "type": "string"
        },
        "photographer": {
          "type": "string",
          "enum": [
            "Erik",
            "Jens"
          ]
        },
        "date": {
          "description": "Publication date, YYYY-MM-DD",
          "type": "string",
          "format": "date"
        },
        "url": {
          "description": "Permanent page URL",
          "type": "string",
          "format": "uri"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "City and country when known"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "image": {
          "type": "object",
          "required": [
            "full"
          ],
          "properties": {
            "full": {
              "description": "1600 px long edge",
              "type": "string",
              "format": "uri"
            },
            "thumbnail": {
              "description": "400 px long edge",
              "type": [
                "string",
                "null"
              ],
              "format": "uri"
            }
          }
        },
        "credit": {
          "description": "Ready-made credit line: photographer, JENRIKS, page URL",
          "type": "string"
        },
        "geo": {
          "type": [
            "object",
            "null"
          ],
          "description": "WGS 84 coordinates of the location when the post carries them, otherwise null",
          "required": [
            "latitude",
            "longitude"
          ],
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          }
        }
      }
    },
    "date": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "hint": {
      "type": "string"
    }
  },
  "required": [
    "found"
  ]
}
🟢get_latest_photo(photographer)

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",
  "properties": {
    "photographer": {
      "type": "string",
      "enum": [
        "Erik",
        "Jens"
      ],
      "description": "Latest post by this photographer; omit for the newest post overall"
    }
  },
  "required": [],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "photo": {
      "type": "object",
      "required": [
        "title",
        "photographer",
        "date",
        "url",
        "categories",
        "tags",
        "image",
        "credit"
      ],
      "properties": {
        "title": {
          "type": "string"
        },
        "photographer": {
          "type": "string",
          "enum": [
            "Erik",
            "Jens"
          ]
        },
        "date": {
          "description": "Publication date, YYYY-MM-DD",
          "type": "string",
          "format": "date"
        },
        "url": {
          "description": "Permanent page URL",
          "type": "string",
          "format": "uri"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "City and country when known"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "image": {
          "type": "object",
          "required": [
            "full"
          ],
          "properties": {
            "full": {
              "description": "1600 px long edge",
              "type": "string",
              "format": "uri"
            },
            "thumbnail": {
              "description": "400 px long edge",
              "type": [
                "string",
                "null"
              ],
              "format": "uri"
            }
          }
        },
        "credit": {
          "description": "Ready-made credit line: photographer, JENRIKS, page URL",
          "type": "string"
        },
        "geo": {
          "type": [
            "object",
            "null"
          ],
          "description": "WGS 84 coordinates of the location when the post carries them, otherwise null",
          "required": [
            "latitude",
            "longitude"
          ],
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          }
        }
      }
    }
  },
  "required": [
    "photo"
  ]
}
🟢random_photo(photographer, category, year)

Return a random JENRIKS photo, optionally limited to a photographer, category or year.

입력 스키마

{
  "type": "object",
  "properties": {
    "photographer": {
      "type": "string",
      "enum": [
        "Erik",
        "Jens"
      ]
    },
    "category": {
      "type": "string"
    },
    "year": {
      "type": "integer",
      "minimum": 2005
    }
  },
  "required": [],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean"
    },
    "photo": {
      "type": "object",
      "required": [
        "title",
        "photographer",
        "date",
        "url",
        "categories",
        "tags",
        "image",
        "credit"
      ],
      "properties": {
        "title": {
          "type": "string"
        },
        "photographer": {
          "type": "string",
          "enum": [
            "Erik",
            "Jens"
          ]
        },
        "date": {
          "description": "Publication date, YYYY-MM-DD",
          "type": "string",
          "format": "date"
        },
        "url": {
          "description": "Permanent page URL",
          "type": "string",
          "format": "uri"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "City and country when known"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "image": {
          "type": "object",
          "required": [
            "full"
          ],
          "properties": {
            "full": {
              "description": "1600 px long edge",
              "type": "string",
              "format": "uri"
            },
            "thumbnail": {
              "description": "400 px long edge",
              "type": [
                "string",
                "null"
              ],
              "format": "uri"
            }
          }
        },
        "credit": {
          "description": "Ready-made credit line: photographer, JENRIKS, page URL",
          "type": "string"
        },
        "geo": {
          "type": [
            "object",
            "null"
          ],
          "description": "WGS 84 coordinates of the location when the post carries them, otherwise null",
          "required": [
            "latitude",
            "longitude"
          ],
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          }
        }
      }
    },
    "pool_size": {
      "type": "integer"
    },
    "hint": {
      "type": "string"
    }
  },
  "required": [
    "found"
  ]
}
🟢get_site_overview(include)

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",
  "properties": {
    "include": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "photographers",
          "categories",
          "years",
          "sections",
          "license"
        ]
      },
      "uniqueItems": true,
      "description": "Blocks to keep besides site, description, totals and dates; omit for everything"
    }
  },
  "required": [],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "total_photos": {
      "type": "integer"
    },
    "first_date": {
      "type": "string",
      "format": "date"
    },
    "latest_date": {
      "type": "string",
      "format": "date"
    },
    "photographers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "full_name",
          "photos",
          "page"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "full_name": {
            "type": "string"
          },
          "photos": {
            "type": "integer"
          },
          "page": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "photos"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "photos": {
            "type": "integer"
          }
        }
      }
    },
    "years": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "year",
          "photos"
        ],
        "properties": {
          "year": {
            "type": "string"
          },
          "photos": {
            "type": "integer"
          }
        }
      }
    },
    "sections": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "format": "uri"
      }
    },
    "url_pattern": {
      "type": "string"
    },
    "license": {
      "type": "string"
    }
  },
  "required": [
    "site",
    "description",
    "total_photos",
    "first_date",
    "latest_date",
    "photographers",
    "categories",
    "years",
    "sections",
    "url_pattern",
    "license"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 5개
검증됨버전이 기록되지 않음도구 5개
검증됨버전이 기록되지 않음도구 5개