Review: groupme-mcp: MCP server for group management + messaging
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Lineage -- present, references project-groupme-westside and dependency chain (Ticket 3 of 3)
- [x] Repo -- present, forgejo_admin/groupme-mcp (to be created)
- [x] User Story -- present, 4 stories mapped to GM-2 through GM-5
- [x] Context -- present, explains MCP-over-SDK pattern and agent-only consumers
- [x] File Targets -- present, 6 files in new repo structure
- [x] Acceptance Criteria -- present, 5 criteria
- [x] Test Expectations -- present, unit + integration + run command
- [x] Constraints -- present, 4 constraints including uv and confirmation semantics
- [x] Checklist -- present
- [x] Related -- present, references project page and sibling tickets
File Targets
- [x] New repo -- all file targets are in a repo that does not yet exist (groupme-mcp). Structure mirrors pal-e-docs-mcp pattern (src/package/server.py + tools/ subdirectory). Verified pal-e-docs-mcp has identical layout: server.py + tools/{notes,boards,blocks,etc}.py. Pattern is sound.
- [x] pyproject.toml -- depends on groupme-sdk, which also does not exist yet. Consistent with dependency chain.
- [x] tools/audit.py -- membership_audit tool references basketball-api DB schema (GroupMeMember table). This table does not exist yet -- it is part of issue #156 (basketball-api GroupMe data model), also in todo column.
Repo Placement
Issue filed on forgejo_admin/basketball-api (#157) but work creates a new repo forgejo_admin/groupme-mcp. This is acceptable -- the target repo does not exist yet, and basketball-api is the closest related repo. Once groupme-mcp is created, consider transferring the issue if Forgejo supports it.
Dependencies
- groupme-sdk (issue #155, board item #303) -- in todo column. This ticket explicitly declares dependency. The SDK must be built and published to Forgejo PyPI before groupme-mcp can install it. BLOCKING dependency.
- basketball-api GroupMe integration (issue #156, board item #304) -- in todo column. The membership_audit tool in this ticket cross-references the DB's GroupMeMember table, which is created by #156. BLOCKING dependency for the audit tool specifically.
- GroupMe API token -- verified present at ~/secrets/groupme/credentials.env with GROUPME_ACCESS_TOKEN. Not blocked.
- Claude settings config -- enabledMcpjsonServers list in ~/.claude/settings.json needs groupme-mcp entry. Requires corresponding mcpServers.json definition. Not blocked but not documented in the ticket.
Acceptance Criteria
- [x] "Forgejo repo exists with CI pipeline" -- agent-executable, standard repo creation
- [x] "MCP tools: create_group, list_groups, add_member, remove_member, list_members, send_message" -- testable with mocked SDK
- [ ] "membership_audit tool: compare DB groupme_members vs live GroupMe API" -- ISSUE: requires GroupMeMember table from issue #156 which is not yet implemented. Cannot be built or tested until #156 lands. Either defer this tool or make the dependency explicit in acceptance criteria.
- [x] "Configured in ~/.claude/settings.json as MCP server" -- feasible but needs mcpServers.json entry too (not just settings.json)
- [x] "Betty Sue can run mcp__groupme__create_group from conversation" -- integration test, requires SDK published + MCP configured
Blast Radius
Low blast radius -- this is a new repo with no existing consumers. Downstream effects:
- ~/.claude/settings.json modification affects all Claude sessions (shared config via claude-custom repo)
- basketball-api will consume groupme-sdk (not groupme-mcp) for the contract-signing auto-invite hook
- No other repos or services are affected
Recommendation
Two refinements needed before this ticket is READY:
- Split or defer membership_audit -- The audit tool depends on basketball-api's GroupMeMember table (issue #156), which is a sibling ticket also in todo. Either: (a) Remove membership_audit from this ticket's scope and create a follow-up issue that depends on both #156 and #157, or (b) Add an explicit acceptance criterion noting that membership_audit is blocked by #156 and should be stubbed/skipped if #156 hasn't landed.
- Enforce dependency ordering on board -- Both #155 (SDK) and #157 (MCP) are in the todo column. The MCP ticket cannot move to next_up until the SDK ticket (#155) moves to in_progress. Add a label like
blocked-by:bball-155to make this visible on the board.