Summary
Extend the townhall REST API with endpoints optimized for a thin mobile app.
Revised direction (per Andrew's RAR feedback): The mobile app should be a thin A2A + MCP client, not a custom REST client.
What Remains in This Issue
The A2A and MCP protocols cover most of what a mobile app needs, but there are a few convenience endpoints that don't fit neatly into either protocol:
Dashboard Endpoint
Single call that returns everything the home screen needs:
{
"town": "mytown",
"active_missions": 1,
"total_agents": 3,
"working_agents": 1,
"cold_agents": 2,
"pending_tasks": 2,
"attention_needed": [
{
"type": "approval_needed",
"mission_id": "xyz",
"summary": "PR #42 ready for review - merge to main?"
}
],
"recent_events": [ ... ]
}
This is a read-only aggregation endpoint. It could be an MCP resource (tinytown://dashboard) but a simple GET is more natural for mobile polling.
Authentication
- Bearer token auth (simple, works for personal use)
- Future: OAuth2/OIDC for team use
- Shared auth layer across REST, A2A, and MCP endpoints
Depends On
Acceptance Criteria
Summary
Extend the townhall REST API with endpoints optimized for a thin mobile app.Revised direction (per Andrew's RAR feedback): The mobile app should be a thin A2A + MCP client, not a custom REST client.
mission.start,mission.approve,mission.pauseWhat Remains in This Issue
The A2A and MCP protocols cover most of what a mobile app needs, but there are a few convenience endpoints that don't fit neatly into either protocol:
Dashboard Endpoint
Single call that returns everything the home screen needs:
{ "town": "mytown", "active_missions": 1, "total_agents": 3, "working_agents": 1, "cold_agents": 2, "pending_tasks": 2, "attention_needed": [ { "type": "approval_needed", "mission_id": "xyz", "summary": "PR #42 ready for review - merge to main?" } ], "recent_events": [ ... ] }This is a read-only aggregation endpoint. It could be an MCP resource (
tinytown://dashboard) but a simple GET is more natural for mobile polling.Authentication
Depends On
Acceptance Criteria
/api/dashboardreturns compact home screen payload