github Python re-analysis due

malkreide/swiss-holidays-mcp

github

MCP server for openholidaysapi.org — Swiss school and public holidays for all 26 cantons

maintainer
malkreide
license
MIT
first seen
2026-07-21
last seen
2026-08-24
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 13 tools
transport stdio · streamable-http · http · sse verified reported listed in the official MCP registry counts 13 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • check_date
  • compare_school_holidays
  • export_holidays_ics
  • find_common_free_window
  • get_local_holidays
  • get_long_weekends
  • get_public_holidays
  • get_school_holidays
  • is_holiday_today
  • list_cantons
  • list_school_types
  • next_school_holidays
  • source_status
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 35d3929 · analyzer v33 · 1w ago

skills & prompt files 1

code evidence vv0.6.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 31

filesystem 8

  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/check_ruff_pin.py :35 import shutil
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/check_version_sync.py :49 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/classify_live_run.py :55 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/record_fixtures.py :24 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/tests/fixture_data.py :18 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_classify_live_run.py :21 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_pinning.py :95 from pathlib import Path
  • fs (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_recorded_fixtures.py :250 from pathlib import Path

shell / exec 1

  • shell (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/check_ruff_pin.py :36 import subprocess

network 13

  • net (weak) malkreide-swiss-holidays-mcp-35d3929/scripts/record_fixtures.py :26 from urllib.parse import urlencode
  • net malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/client.py :14 in the server lifespan with a shared ``httpx.AsyncClient`` and a persistent
  • net malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/guard.py :20 import socket
  • net malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/pinning.py :23 import httpx
  • net malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :4 holding one ``httpx.AsyncClient`` and a persistent 12h cache -- is created in the
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/conftest.py :1 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_feed.py :3 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_local.py :3 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_pinning.py :13 import socket
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_recorded_fixtures.py :20 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_resilience.py :3 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_retry_policy.py :14 import httpx
  • net (weak) malkreide-swiss-holidays-mcp-35d3929/tests/test_tools.py :3 import httpx

tool registrations 13

  • list_cantons malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :798
  • list_school_types malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :812
  • get_school_holidays malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :830
  • get_public_holidays malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :863
  • get_local_holidays malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :879
  • check_date malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :907
  • compare_school_holidays malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :927
  • find_common_free_window malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :948
  • next_school_holidays malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :971
  • get_long_weekends malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :988
  • source_status malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :1004
  • export_holidays_ics malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :1018
  • is_holiday_today malkreide-swiss-holidays-mcp-35d3929/src/swiss_holidays_mcp/server.py :1068

declared dependencies 8

  • mcp@>=2.0.0,<3
  • httpx@>=0.27
  • pydantic@>=2.7
  • pydantic-settings@>=2.2
  • pytest@>=8.0
  • pytest-asyncio@>=0.23
  • respx@>=0.21
  • ruff@==0.16.1