groupme-mcp: MCP server for GroupMe group management + messaging #157

Closed
opened 2026-03-24 06:43:10 +00:00 by forgejo_admin · 3 comments

Type

Feature

Lineage

project-groupme-westside → Ticket 3 of 3 (depends on Ticket 1: groupme-sdk)

Repo

forgejo_admin/groupme-mcp (to be created on Forgejo)

User Story

As an admin (story:GM-2), I want to send announcements to all parents via GroupMe.
As an admin (story:GM-3), I want to see which parents haven't joined their team's GroupMe.
As a coach (story:GM-4), I want my team's parents and players in a GroupMe group.
As a platform operator (story:GM-5), I want to manage GroupMe via MCP tools.

Context

MCP server wrapping groupme-sdk so Betty Sue and agents can manage GroupMe directly from conversations. Same pattern as pal-e-docs-mcp: thin MCP layer over SDK. No web UI needed — consumers are AI agents.

File Targets

New repo groupme-mcp:

  • src/groupme_mcp/server.py — MCP server setup
  • src/groupme_mcp/tools/groups.py — create_group, list_groups, update_group
  • src/groupme_mcp/tools/members.py — add_member, remove_member, list_members
  • src/groupme_mcp/tools/messages.py — send_message, list_messages
  • src/groupme_mcp/tools/audit.py — membership_audit (cross-ref DB vs GroupMe)
  • pyproject.toml — depends on groupme-sdk

Acceptance Criteria

  • Forgejo repo forgejo_admin/groupme-mcp exists with CI pipeline
  • MCP tools: create_group, list_groups, add_member, remove_member, list_members, send_message
  • membership_audit tool: compare DB groupme_members vs live GroupMe API, report gaps
  • Configured in ~/.claude/settings.json as MCP server
  • Betty Sue can run mcp__groupme__create_group("WKQ Test") from conversation

Test Expectations

  • Unit test: each MCP tool with mocked SDK
  • Integration test: create group via MCP tool, verify in GroupMe API
  • Run command: pytest tests/

Constraints

  • Follow pal-e-docs-mcp patterns (uv, MCP server protocol)
  • Token from env var GROUPME_ACCESS_TOKEN
  • Read-only tools (list, audit) should not require confirmation
  • Write tools (create, add, remove, send) should require user confirmation

Checklist

  • PR opened
  • Tests pass
  • No unrelated changes
  • project-groupme-westside — project page
  • Ticket 1: groupme-sdk (dependency)
  • Ticket 2: basketball-api GroupMe integration (membership_audit cross-refs this DB)
### Type Feature ### Lineage `project-groupme-westside` → Ticket 3 of 3 (depends on Ticket 1: groupme-sdk) ### Repo `forgejo_admin/groupme-mcp` (to be created on Forgejo) ### User Story As an admin (story:GM-2), I want to send announcements to all parents via GroupMe. As an admin (story:GM-3), I want to see which parents haven't joined their team's GroupMe. As a coach (story:GM-4), I want my team's parents and players in a GroupMe group. As a platform operator (story:GM-5), I want to manage GroupMe via MCP tools. ### Context MCP server wrapping groupme-sdk so Betty Sue and agents can manage GroupMe directly from conversations. Same pattern as pal-e-docs-mcp: thin MCP layer over SDK. No web UI needed — consumers are AI agents. ### File Targets New repo `groupme-mcp`: - `src/groupme_mcp/server.py` — MCP server setup - `src/groupme_mcp/tools/groups.py` — create_group, list_groups, update_group - `src/groupme_mcp/tools/members.py` — add_member, remove_member, list_members - `src/groupme_mcp/tools/messages.py` — send_message, list_messages - `src/groupme_mcp/tools/audit.py` — membership_audit (cross-ref DB vs GroupMe) - `pyproject.toml` — depends on groupme-sdk ### Acceptance Criteria - [ ] Forgejo repo `forgejo_admin/groupme-mcp` exists with CI pipeline - [ ] MCP tools: `create_group`, `list_groups`, `add_member`, `remove_member`, `list_members`, `send_message` - [ ] `membership_audit` tool: compare DB groupme_members vs live GroupMe API, report gaps - [ ] Configured in `~/.claude/settings.json` as MCP server - [ ] Betty Sue can run `mcp__groupme__create_group("WKQ Test")` from conversation ### Test Expectations - [ ] Unit test: each MCP tool with mocked SDK - [ ] Integration test: create group via MCP tool, verify in GroupMe API - Run command: `pytest tests/` ### Constraints - Follow pal-e-docs-mcp patterns (uv, MCP server protocol) - Token from env var `GROUPME_ACCESS_TOKEN` - Read-only tools (list, audit) should not require confirmation - Write tools (create, add, remove, send) should require user confirmation ### Checklist - [ ] PR opened - [ ] Tests pass - [ ] No unrelated changes ### Related - `project-groupme-westside` — project page - Ticket 1: groupme-sdk (dependency) - Ticket 2: basketball-api GroupMe integration (membership_audit cross-refs this DB)
Author
Owner

Architecture Simplification (2026-03-24)

MCP membership_audit tool simplified. Instead of cross-referencing a local GroupMeMember table against GroupMe API, it now:

  • Queries GroupMe API for group members (list_members)
  • Queries basketball-api DB for team roster (players with contract_status = 'signed')
  • Diffs the two lists to find: parents who signed but haven't joined GroupMe yet

No local membership table needed. GroupMe API is source of truth.

## Architecture Simplification (2026-03-24) MCP `membership_audit` tool simplified. Instead of cross-referencing a local GroupMeMember table against GroupMe API, it now: - Queries GroupMe API for group members (`list_members`) - Queries basketball-api DB for team roster (players with `contract_status = 'signed'`) - Diffs the two lists to find: parents who signed but haven't joined GroupMe yet No local membership table needed. GroupMe API is source of truth.
Author
Owner

Scope Review: NEEDS_REFINEMENT

Review note: review-305-2026-03-24

Template is complete (all 10 sections present) and file targets follow the proven pal-e-docs-mcp pattern. Two issues need resolution:

  • membership_audit depends on unbuilt DB schema -- The membership_audit tool cross-references GroupMeMember table from issue #156, which is also in todo and not yet implemented. Either defer the audit tool to a follow-up issue or document the dependency explicitly in acceptance criteria.
  • Dependency ordering not enforced on board -- Both #155 (SDK, blocking dependency) and #157 (this ticket) sit in todo. This ticket cannot move to next_up until #155 is in progress. Add blocked-by:bball-155 label to make this visible.
## Scope Review: NEEDS_REFINEMENT Review note: `review-305-2026-03-24` Template is complete (all 10 sections present) and file targets follow the proven pal-e-docs-mcp pattern. Two issues need resolution: - **membership_audit depends on unbuilt DB schema** -- The `membership_audit` tool cross-references `GroupMeMember` table from issue #156, which is also in `todo` and not yet implemented. Either defer the audit tool to a follow-up issue or document the dependency explicitly in acceptance criteria. - **Dependency ordering not enforced on board** -- Both #155 (SDK, blocking dependency) and #157 (this ticket) sit in `todo`. This ticket cannot move to `next_up` until #155 is in progress. Add `blocked-by:bball-155` label to make this visible.
Author
Owner

Review Fixes (2026-03-24)

Addressing review-305-2026-03-24 findings:

1. membership_audit deferred

tools/audit.py (membership_audit) depends on basketball-api's DB tables from issue #156. This tool is deferred — implement it as a follow-up after #156 lands. Removed from this ticket's AC.

Revised AC:

  • Forgejo repo forgejo_admin/groupme-mcp exists with CI pipeline
  • MCP tools: create_group, list_groups, add_member, remove_member, list_members, send_message
  • Configured in ~/.claude/settings.json as MCP server
  • Betty Sue can run mcp__groupme__create_group("WKQ Test") from conversation

2. Dependency ordering

Blocked by #155 (groupme-sdk). Board label updated.

## Review Fixes (2026-03-24) Addressing review-305-2026-03-24 findings: ### 1. membership_audit deferred `tools/audit.py` (membership_audit) depends on basketball-api's DB tables from issue #156. This tool is **deferred** — implement it as a follow-up after #156 lands. Removed from this ticket's AC. Revised AC: - [ ] Forgejo repo `forgejo_admin/groupme-mcp` exists with CI pipeline - [ ] MCP tools: `create_group`, `list_groups`, `add_member`, `remove_member`, `list_members`, `send_message` - [ ] Configured in `~/.claude/settings.json` as MCP server - [ ] Betty Sue can run `mcp__groupme__create_group("WKQ Test")` from conversation ### 2. Dependency ordering Blocked by #155 (groupme-sdk). Board label updated.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo_admin/basketball-api#157
No description provided.