MCP Server for Swiss weather & climate data – MeteoSwiss SwissMetNet, ICON forecasts, school planning
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http
verified
reported
listed in the official MCP registry counts 5 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
meteo_climate_normals
-
meteo_current
-
meteo_school_check
-
meteo_stations
-
meteo_warnings
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d29acea · analyzer v32 · 1w ago
skills & prompt files 1
- agent-rules malkreide-meteoswiss-mcp-d29acea/CLAUDE.md
danger signals2
- suspicious endpoint 169.254.169.254 (cloud metadata) malkreide-meteoswiss-mcp-d29acea/tests/test_server.py :858
assert_safe_url("https://169.254.169.254/latest/meta-data/") - suspicious endpoint 8.8.8.8 malkreide-meteoswiss-mcp-d29acea/tests/test_server.py :872
assert_safe_url("https://8.8.8.8/")
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 8
filesystem 6
- fs (weak) malkreide-meteoswiss-mcp-d29acea/scripts/ingest_climate_normals.py :51
from pathlib import Path - fs (weak) malkreide-meteoswiss-mcp-d29acea/scripts/record_fixtures.py :31
from pathlib import Path - fs (weak) malkreide-meteoswiss-mcp-d29acea/scripts/tool_hashes.py :20
from pathlib import Path - fs malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :1654
with open(path, encoding="utf-8") as f: - fs (weak) malkreide-meteoswiss-mcp-d29acea/tests/fixture_data.py :19
from pathlib import Path - fs (weak) malkreide-meteoswiss-mcp-d29acea/tests/test_server.py :1058
import pathlib
network 3
- net (weak) malkreide-meteoswiss-mcp-d29acea/scripts/record_fixtures.py :33
import httpx - net malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :47
from urllib.parse import urlparse - net (weak) malkreide-meteoswiss-mcp-d29acea/tests/test_server.py :15
import httpx
secrets 1
- secrets malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :3054
api_key = os.environ.get("MCP_API_KEY")
tool registrations 5
- meteo_stations malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :1848
- meteo_current malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :1932
- meteo_school_check malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :2251
- meteo_climate_normals malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :2392
- meteo_warnings malkreide-meteoswiss-mcp-d29acea/src/meteoswiss_mcp/server.py :2514
declared dependencies 13
- mcp@>=2.0.0,<3
- httpx@>=0.27.0
- pydantic@>=2.0.0
- structlog@>=24.0.0,<27
- pytest@>=8.0.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=5.0.0
- respx@>=0.21.0
- ruff@==0.16.1
- opentelemetry-api@>=1.27.0
- opentelemetry-sdk@>=1.27.0
- opentelemetry-exporter-otlp-proto-http@>=1.27.0
- opentelemetry-instrumentation-httpx@>=0.48b0