# A Gym for Murrumbeena > Community campaign by Murrumbeena Primary School (est. 1919, 550+ students, City of Glen Eira, Victoria, Australia) to win ~$12–14M in the 2027–28 Victorian State Budget for Stages 2 & 3 of the school's VSBA-approved masterplan: a full-size, competition-grade gymnasium that is a school facility by day and a community hub (sport, arts, events, emergency use) by night and weekend. Key date: community rally and Victorian state election, 28 November 2026. Base URL: https://dev.gymformurrumbeena.win (production: https://gymformurrumbeena.win) Contact: campaign@gymformurrumbeena.win ## Key pages - `/` — campaign home: live stats, petition, wall of support, ideas, pledges, chat widget - `/story` — the school's story (est. 1919, parent-built hall 1990, renowned art program) - `/case` — the evidence-based case for funding - `/news` — campaign news feed - `/contact` — contact the working group / subscribe to updates - `/agents` — how AI agents and tools can help the campaign - `/terms` — terms and privacy - `/llms-full.txt` — full machine-readable reference (API, MCP, CLI, schemas, examples) ## REST API (public, JSON) | Method | Path | Purpose | |--------|------|---------| | GET | `/api/stats` | Counters vs goals: signatures, supporters, ideas, endorsements, pledges, pledged AUD | | GET | `/api/news` | Published news posts | | GET | `/api/wall?limit=30` | Wall-of-support messages | | GET | `/api/ideas?limit=20` | Community hub ideas | | POST | `/api/sign` | Sign petition `{name, email?, address?, suburb?, postcode?, message?, is_local?}` | | POST | `/api/support` | Wall message `{name, message, suburb?, organisation?}` | | POST | `/api/ideas` | Submit idea `{name, details, email?, organisation?, uses[]?}` | | POST | `/api/pledge` | Pledge `{name, email, amount?, frequency?(once\|monthly\|in-kind), gift_item?, notes?, ...}` | | POST | `/api/contact` | Message working group `{name, email, message, subject?}` — subject `Campaign updates` subscribes to the newsletter | | POST | `/api/endorse` | Organisational endorsement (multipart; optional letter file ≤8MB pdf/doc/docx/png/jpg) | | POST | `/api/chat` | Chat widget API `{session_id?, message, email?}` → `{session_id, reply, actions[]}` | | GET | `/api/chat/:sessionId` | Chat history for the widget | Admin endpoints under `/api/admin/*` are gated by Cloudflare Access (header `Cf-Access-Authenticated-User-Email`). ## MCP endpoint (for AI agents) `POST /mcp` — JSON-RPC 2.0 over HTTP, protocol `2025-03-26`. `GET /mcp` returns a discovery document. Initialize: ```json {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0.0"}}} ``` Call a tool: ```json {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_stats","arguments":{}}} ``` Tools: `get_campaign_info`, `get_stats`, `list_news`, `list_wall`, `list_ideas`, `submit_signature`, `submit_support_message`, `submit_idea`, `submit_pledge`, `contact_working_group`, `get_campaign_pack`, `get_letter_templates`. Tool results are MCP content arrays with a single text item containing JSON. ## CLI Zero-dependency Node 18+ client — see `cli/README.md` in the repo: ```bash node cli/mps-gym.mjs stats node cli/mps-gym.mjs sign --name "Sam Citizen" --email sam@example.com --suburb Murrumbeena --postcode 3163 node cli/mps-gym.mjs --help ``` ## Downloads - Campaign pack: `/pack/Short%20Pitch.docx`, `/pack/MPS%20-%20New%20Gym%20Campaign%20-%20v2.pptx`, evidence/data docs (full list via MCP `get_campaign_pack`) - Support-letter templates: `/templates/support-letter-sports-club.docx`, `/templates/support-letter-community-group.docx`, `/templates/support-letter-business.docx` ## How agents can help Sign the petition, post a wall message, share a hub-use idea, pledge toward campaign running costs, and spread the word. Organisations can lodge formal endorsements with a letter via `/api/endorse`.