feat(server): add read-only tool surface at /http/api-key-readonly/mcp (E13.4)
get_readonly_header_mcp() registers all tools and strips everything outside the read-only prefixes (list_/retrieve_/get_/count_/search_/read_) — 59 of 140 tools remain. resolve_* is deliberately excluded because resolve_work_item_type creates the type when missing. Mounted alongside the full header endpoint in both HTTP branches; lifespans combined via AsyncExitStack. This is the surface for external agents (Tailscale Funnel / Perplexity): a chat connector cannot mutate Plane data even with a valid PAT. Tests assert no mutating prefix leaks and that the surface equals exactly the read-prefix subset of the full endpoint; 87 unit tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
B
bl4nk44 committed
697c40c3c4b7e6cbdaccbd6528b480ea3d2fcba6
Parent: 9c91221