github Python re-analysis due

malkreide/zurich-opendata-mcp

github

MCP Server für Open Data der Stadt Zürich – 23 Tools für CKAN, Geodaten, Gemeinderat, Stadtratsbeschlüsse, Tourismus und Echtzeitdaten (Wetter, Luft, See, Parking, ÖV). 6 APIs, 5 Resources.

maintainer
malkreide
license
MIT
first seen
2026-06-04
last seen
2026-08-24
releases · 30d
2
short id

Drift inferred · capture-to-capture

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

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

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 833095a · analyzer v33 · 1w ago

skills & prompt files 1

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

code files: 46

filesystem 8

  • fs (weak) malkreide-zurich-opendata-mcp-833095a/scripts/check_version_sync.py :35 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/scripts/classify_live_run.py :55 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/scripts/record_fixtures.py :34 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/tests/fixture_data.py :14 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_classify_live_run.py :21 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_packaging.py :24 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_server.py :583 from pathlib import Path
  • fs (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_transport_security.py :247 from pathlib import Path

network 17

  • net (weak) malkreide-zurich-opendata-mcp-833095a/scripts/record_fixtures.py :36 import httpx
  • net malkreide-zurich-opendata-mcp-833095a/src/zurich_opendata_mcp/formatters.py :9 import httpx
  • net malkreide-zurich-opendata-mcp-833095a/src/zurich_opendata_mcp/http_client.py :3 All upstream calls go through one process-wide ``httpx.AsyncClient`` so they
  • net malkreide-zurich-opendata-mcp-833095a/src/zurich_opendata_mcp/retry.py :36 from urllib.parse import urlsplit
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_catalog.py :10 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_datastore.py :10 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_geo.py :12 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_helpers.py :7 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_http_client.py :8 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_parliament.py :11 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_realtime.py :12 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_resolver.py :8 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_resources.py :11 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_retry.py :17 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_server.py :9 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_strb.py :12 import httpx
  • net (weak) malkreide-zurich-opendata-mcp-833095a/tests/test_tourism.py :10 import httpx

declared dependencies 13

  • mcp@>=2.0.0,<3
  • modern@*
  • httpx@>=0.28.1
  • pydantic@>=2.13.4
  • uvicorn@>=0.46.0
  • sqlparse@>=0.5.5
  • defusedxml@>=0.7.1
  • pytest@>=9.0.3
  • pytest-asyncio@>=1.3.0
  • pytest-cov@>=7.1.0
  • respx@>=0.23.1
  • ruff@>=0.15.12
  • mypy@>=1.18.2