An agent-friendly community campaign hub
Hand the job to an AI you trust. Copy the brief, paste it into your agent, and it will read the campaign, confirm details with you, and sign the petition for you.
Let your AI do the petition for you
Two clicks: copy the brief below and paste it into a trusted AI agent on your computer with internet access — ChatGPT, Claude, Kimi, Cursor or your own. It will read the campaign, ask for your details, confirm with you, and sign on your behalf.
Nothing is sent anywhere until you paste it into your own AI — and your agent must confirm with you before submitting anything.
Explanation
The supporter ladder — what a good agent offers, in order
The on-site chat assistant walks supporters up this ladder; external agents should mirror it. Email is required on every submission and is never published.
- Sign the petition — name + email required; suburb and postcode appreciated (local postcodes carry the most weight).
- Pledge a one-off donation — wish-list item first (
gift_item— every item has an exact cost); fall back to the amount they're willing to contribute only if they prefer. Everything is one-off, no monthly. Title, organisation and a file attachment are optional; consent to contact is default-on and opt-outs are honoured. - Declined donating? Offer the no-cost advocacy letter —
get_advocacy_pack: one-click mailto: link, .eml/.docx downloads, or the /advocacy page. - Declined that? Offer personal share links —
get_share_linkswith a topic and their ref (e.g.sig-<id>) so their shares are personal. - Always available — a wall-of-support message and a hub-use idea as extra actions.
Tutorial
Your first agent signature in 3 steps
- Copy the agent brief above (or the full llms.txt if your agent accepts raw context).
- Paste it into your AI — any agent with internet access works. It will read this site's machine-readable docs on its own.
- Answer its questions and say "yes" — your agent collects your details, shows you the exact submission, and only then signs. Done: you're on the petition and the wall.
Tutorial
Five-minute CLI & local MCP setup
One file, zero dependencies. Runs as a command-line tool and as a local MCP server your desktop AI can register.
1. Install (macOS / Linux)
curl -fsSL https://hallformurrumbeena.win/downloads/install.sh | sh2. Or download a binary directly
- macOS (Apple Silicon)(M1/M2/M3/M4)
- macOS (Intel)(older Macs)
- Linux (x64)(glibc)
- Windows (x64)(.exe inside zip)
- Raw script(Node 18+, zero dependencies)
3. Try it
mps-gym stats
mps-gym sign --name "Jane Citizen" --email jane@example.com --suburb Murrumbeena --postcode 31634. Register it as a local MCP server
Add this to your MCP client config (Claude Desktop, Cursor, Kimi…). Your AI then gets all 17 campaign tools natively:
{
"mcpServers": {
"mps-gym": {
"command": "~/.mps-gym/mps-gym",
"args": ["mcp"]
}
}
}How-to guides
Workflows agents should follow
Each workflow below is written so an agent can execute it end-to-end — including the human-confirmation step that keeps people in control.
Sign the petition
- Read /llms.txt → call get_campaign_info to ground yourself in the ask.
- Collect from the user: full name and email (both required), suburb, postcode.
- Show the user exactly what you will submit; wait for an explicit yes.
- Call submit_signature (or POST /api/sign) once. Report the new signature count via get_stats.
Post to the wall of support
- Ask the user why the hall matters to them, in their own words.
- Condense to one or two sentences; confirm the wording with them.
- Call submit_support_message with name + email + message (suburb, organisation optional). Email is required and kept private.
- Tell the user the message appears publicly after a quick moderation check.
Suggest a hub idea
- Prompt for a concrete use: e.g. weekend junior basketball, emergency muster point, makers' market.
- Call submit_idea with name + email + details; map to known uses when obvious (sport, arts, events, emergency, meetings).
- Ideas feed the working group's community-use dossier — say thanks.
Make a pledge
- Explain pledges cover donated campaign materials (corflutes, banners, the rally) — not the build itself; all-volunteer campaign.
- Collect name + email (required), then a wish-list item (preferred) or a one-off amount. Every pledge is one-off — there is no monthly option.
- Confirm, then call submit_pledge. The working group follows up to arrange payment or in-kind delivery.
Endorse as an organisation
- Call get_letter_templates and download the right template (sports club, community group, business).
- Help the user fill it on letterhead; gather organisation name, ABN if any, role, contact.
- Upload via POST /api/endorse (multipart; letter file ≤ 8 MB pdf/doc/docx/png/jpg).
Message the working group
- Collect name, email and the message; subject is optional.
- Call contact_working_group (or POST /api/contact).
- Tip: subject "Campaign updates" also subscribes the sender to the newsletter.
Answer questions from the knowledge base
- Search first: search_knowledge (or GET /api/knowledge/search?q=…) — ranked, published documents only.
- Read the best hit in full with get_knowledge (or /api/knowledge/doc?slug=…) before quoting facts.
- Use query_knowledge_graph (or /api/knowledge/graph?entity=…) to explain how concepts relate.
- For offline or deep-dive work, fetch the static /knowledge/campaign-graph.md (Obsidian-style) or .json.
Report campaign progress
- Call get_stats for live counters vs goals (signatures, supporters, ideas, endorsements, pledges).
- Call list_news for the latest published updates.
- Summarise for the user — great for a weekly check-in routine.
Reference
llms.txt — machine-readable docs
The whole campaign in the emerging llms.txt convention. Point any LLM or crawler at these first:
- /llms.txt — concise campaign brief, site map and interface index
- /llms-full.txt — full reference: API schemas, MCP protocol, CLI, examples
They are also linked from the site footer, the <head> of every page, and discoverable via /robots.txt.
Reference
Remote MCP server
Agents that speak the Model Context Protocol connect directly. Endpoint: POST https://hallformurrumbeena.win/mcp — JSON-RPC 2.0, protocol 2024-11-05 and 2025-03-26 accepted. GET /mcp returns a discovery document.
POST https://hallformurrumbeena.win/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-agent", "version": "1.0.0" }
}
}POST https://hallformurrumbeena.win/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "submit_signature",
"arguments": {
"name": "Jane Citizen",
"email": "jane@example.com",
"suburb": "Murrumbeena",
"postcode": "3163"
}
}
}Tools (17)
| Tool | What it does | Required args |
|---|---|---|
| get_campaign_info | Campaign summary, the ask and key facts | — |
| get_stats | Live counts against campaign goals | — |
| list_news | Published campaign news | — |
| list_wall | Approved wall-of-support messages | — |
| list_ideas | Approved community hub ideas | — |
| submit_signature | Sign the petition | name, email |
| submit_support_message | Leave a wall-of-support message | name, email, message |
| submit_idea | Suggest a community use for the hub | name, email, details |
| submit_pledge | Pledge a donation from the wish list | name, email |
| contact_working_group | Send a message to the working group | name, email, message |
| get_campaign_pack | Links to the full campaign pack | — |
| get_letter_templates | Support-letter templates for organisations | — |
| get_advocacy_pack | Email-your-MP action: letter, one-click mailto link, downloads | — |
| get_share_links | Personal share links for socials (topic + ref like sig-<id>) | — |
| search_knowledge | Search the public campaign knowledge base | query |
| get_knowledge | Read a full knowledge-base document | slug |
| query_knowledge_graph | Relationships for a campaign entity | entity |
Reference
Knowledge base — ground factual answers
The campaign's research, equity data, argument frames and planning notes are public. Agents should search before asserting facts — published documents only.
- MCP tools:
search_knowledge{query, category?} →get_knowledge{slug} →query_knowledge_graph{entity}. - REST:
GET /api/knowledge/search?q=…&category=…·/api/knowledge/doc?slug=…·/api/knowledge/graph?entity=… - CLI:
mps-gym knowledge --query …·knowledge-doc --slug …·graph --entity … - Static artifacts:
/knowledge/campaign-graph.md(Obsidian-style) and/knowledge/campaign-graph.json.
Reference
REST API
All endpoints are same-origin JSON over HTTPS — no auth needed for public actions.
| GET | /api/stats | Live counts and goals |
| GET | /api/news | Published news items |
| GET | /api/wall | Approved support messages |
| GET | /api/ideas | Approved hub ideas |
| GET | /api/knowledge/search?q=… | Search published knowledge-base docs |
| GET | /api/knowledge/doc?slug=… | Read a full knowledge-base document |
| GET | /api/knowledge/graph?entity=… | Entity relationships from the knowledge graph |
| POST | /api/sign | Submit a petition signature |
| POST | /api/support | Submit a support message |
| POST | /api/ideas | Submit a hub idea |
| POST | /api/endorse | Upload an organisational endorsement (multipart) |
| GET | /api/advocacy/pack | Email-your-MP pack (letter, mailto link, downloads) |
| POST | /api/advocacy/sent | Record a sent advocacy email {name?, suburb?} |
| POST | /api/pledge | Submit a one-off pledge (JSON or multipart with attachment) |
| POST | /api/contact | Message the working group |
| POST | /api/chat | Chat with the on-site assistant |
| GET | /downloads/:file | Download CLI binaries and installer |
Reference
CLI commands
| mps-gym stats | Live counters vs goals |
| mps-gym info | Campaign summary via MCP |
| mps-gym news [--limit n] | Latest published news |
| mps-gym wall [--limit n] | Wall-of-support messages |
| mps-gym ideas [--limit n] | Community hub ideas |
| mps-gym sign --name N --email E [--suburb S --postcode P --message M --local] | Sign the petition |
| mps-gym support --name N --email E --message M [--suburb S --organisation O] | Post a wall message |
| mps-gym idea --name N --email E --details D [--uses a,b,c] | Submit a hub idea |
| mps-gym pledge --name N --email E [--amount n --gift "item" --title T --attachment file.pdf] | Make a one-off pledge |
| mps-gym contact --name N --email E --message M [--subject S] | Message the working group |
| mps-gym knowledge --query "equity" [--category evidence] | Search the knowledge base |
| mps-gym knowledge-doc --slug SLUG | Read a knowledge-base document |
| mps-gym graph --entity "Community Hub" | Entity relationships |
| mps-gym mcp | Run a local MCP server on stdio (proxy to the live endpoint) |
Source and readme: github.com/web3jenks/gymformurrumbeena-hub
Explanation
How the agent-friendly hub works — and why it's safe
Every interface — the chat widget, the MCP server, the CLI and the REST API — talks to the same Cloudflare Worker and the same D1 database. A signature submitted by your AI is identical to one typed into the website form.
- Humans stay in control. The agent brief instructs agents to show the exact submission and wait for an explicit yes. The on-site chat enforces the same rule with Approve/Reject buttons.
- Moderated before public. Wall messages and ideas enter an approval queue before they appear on the site.
- Guardrails. Field validation, length caps, per-session chat limits and rate limiting apply equally to agents and people.
- Your data stays put. Details go to the campaign working group's dossier only — never sold or shared. See the Terms of Use.
Explanation
No AI of your own?
Use the chat button at the bottom-right of every page — text or voice. The on-site assistant answers questions and helps you sign, leave a message or submit an idea, with one-tap Approve buttons so nothing happens without you.