Skip to main content
Glama
groupme-mcp

groupme-mcp

by KalebJS

groupme-mcp

A Model Context Protocol (MCP) server that wraps the GroupMe API v3, letting AI assistants read and send GroupMe messages, manage groups, interact with bots, and more.

Documentation

Tools

Category

Tools

Groups

list_groups, list_former_groups, get_group, create_group, update_group, destroy_group, join_group, rejoin_group

Members

add_members, get_member_results, remove_member, update_membership

Messages

list_messages, send_message

Direct Messages

list_direct_messages, send_direct_message

Chats

list_chats

Likes

like_message, unlike_message

Bots

create_bot, post_as_bot, list_bots, destroy_bot

Users

get_me, update_user

Blocks

list_blocks, check_block, create_block, delete_block

Related MCP server: MCP OpenClaw

Skill

Install the companion skill to give Claude built-in knowledge of GroupMe workflows — group name resolution, message pagination, the async add_members flow, and more — without needing to prompt it each time.

The skill folder lives at skill/groupme-mcp/.

Install in Claude.ai: Settings → Capabilities → Skills → Upload skill → select the skill/groupme-mcp/ folder (zipped).

Install in Claude Code: place the skill/groupme-mcp/ folder in your Claude Code skills directory.

Requirements

Usage

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "groupme": {
      "command": "uvx",
      "args": ["groupme-mcp"],
      "env": {
        "GROUPME_TOKEN": "<your-token>"
      }
    }
  }
}

Local development

git clone https://github.com/KalebJS/groupme-mcp
cd groupme-mcp
export GROUPME_TOKEN=<your-token>
uv run mcp dev main.py   # opens MCP Inspector in browser

Getting a Token

oauth/get_token.py runs a local OAuth flow using only the Python stdlib — no extra dependencies.

  1. Create an application at dev.groupme.com/applications.

  2. Set the callback URL to http://localhost:8080/callback.

  3. Run the helper:

python oauth/get_token.py --client-id YOUR_CLIENT_ID

The script opens your browser, waits for the GroupMe redirect, and prints the token along with the export command to set it.

Development

# Install dev dependencies
uv sync --group dev

# Install pre-commit hooks
uv run --group dev pre-commit install

# Run tests
uv run --group dev pytest tests/ -v

# Lint
uv run --group dev pre-commit run --all-files

License

MIT

Available Tools

29 tools
add_membersA

Add one or more members to a group. Async operation - poll with get_member_results.

Args:
    group_id: The ID of the group.
    members: List of member objects. Each must have "nickname" and at least one of:
             "user_id", "phone_number", "email". Optionally include "guid" for tracking.

Inputs: members (required), group_id (required).

check_blockB

Check if a block exists between two users.

Args:
    user_id: The ID of the first user.
    other_user_id: The ID of the second user.

Inputs: user_id (required), other_user_id (required).

create_blockB

Block a user.

Args:
    user_id: The ID of the user doing the blocking.
    other_user_id: The ID of the user to block.

Inputs: user_id (required), other_user_id (required).

create_botC

Create a new bot in a group.

Args:
    name: The bot's display name.
    group_id: The ID of the group the bot belongs to.
    avatar_url: Optional avatar image URL for the bot.
    callback_url: Optional URL to receive message callbacks.
    dm_notification: Whether the bot should receive DM notifications.

Inputs: name (required), group_id (required), avatar_url, callback_url, +1 more.

create_groupC

Create a new group.

Args:
    name: Name of the group.
    description: Optional description.
    image_url: Optional avatar image URL.
    share: Whether to enable a share URL for the group.

Inputs: name (required), share, image_url, description.

delete_blockC

Unblock a user.

Args:
    user_id: The ID of the user doing the unblocking.
    other_user_id: The ID of the user to unblock.

Inputs: user_id (required), other_user_id (required).

destroy_botC

Delete a bot.

Args:
    bot_id: The ID of the bot to delete.

Inputs: bot_id (required).

destroy_groupA

Permanently delete a group. Only the group creator can do this.

Args:
    group_id: The ID of the group to delete.

Inputs: group_id (required).

get_groupC

Get details for a specific group.

Args:
    group_id: The ID of the group.

Inputs: group_id (required).

get_meB

Get the authenticated user's profile information.

Inputs: no named parameters.

get_member_resultsA

Poll the result of an add_members request.

Args:
    group_id: The ID of the group.
    results_id: The GUID returned from add_members.

Inputs: group_id (required), results_id (required).

join_groupC

Join a group using its share token.

Args:
    group_id: The ID of the group.
    share_token: The share token from the group's share URL.

Inputs: group_id (required), share_token (required).

like_messageC

Like a message.

Args:
    conversation_id: The group ID or direct message conversation ID.
    message_id: The ID of the message to like.

Inputs: message_id (required), conversation_id (required).

list_blocksB

List all users blocked by a given user.

Args:
    user_id: The ID of the user whose block list to retrieve.

Inputs: user_id (required).

list_botsB

List all bots created by the authenticated user.

Inputs: no named parameters.

list_chatsA

List the authenticated user's direct message conversations, sorted by most recent.

Args:
    page: Page number for pagination.
    per_page: Number of chats per page.

Inputs: page, per_page.

list_direct_messagesB

List direct messages with another user.

Args:
    other_user_id: The ID of the other user in the conversation.
    before_id: Return messages created before this message ID.
    since_id: Return messages created after this message ID.

Inputs: other_user_id (required), since_id, before_id.

list_former_groupsA

List groups the authenticated user has previously left.

Inputs: no named parameters.

list_groupsB

List the authenticated user's active groups.

Args:
    page: Page number for pagination.
    per_page: Number of groups per page (max 500).
    omit: Comma-separated list of fields to omit (e.g. "memberships").

Inputs: omit, page, per_page.

list_messagesB

Retrieve messages from a group.

Args:
    group_id: The ID of the group.
    before_id: Return messages created before this message ID.
    since_id: Return messages created after this message ID (may skip messages).
    after_id: Return messages created immediately after this message ID.
    limit: Number of messages to return (max 100, default 20).

Inputs: group_id (required), limit, after_id, since_id, +1 more.

post_as_botC

Post a message as a bot.

Args:
    bot_id: The ID of the bot.
    text: Message text.
    picture_url: Optional image URL to attach.

Inputs: text (required), bot_id (required), picture_url.

rejoin_groupB

Rejoin a group you previously left.

Args:
    group_id: The ID of the group to rejoin.

Inputs: group_id (required).

remove_memberB

Remove a member from a group.

Args:
    group_id: The ID of the group.
    membership_id: The membership ID of the member to remove.

Inputs: group_id (required), membership_id (required).

send_direct_messageA

Send a direct message to another user.

Args:
    recipient_id: The user ID of the recipient.
    text: Message text (max 1000 characters).
    source_guid: Unique ID to prevent duplicate sends. Auto-generated if blank.
    attachments: Optional list of attachment objects.

Inputs: text (required), recipient_id (required), attachments, source_guid.

send_messageB

Send a message to a group.

Args:
    group_id: The ID of the group.
    text: Message text (max 1000 characters).
    source_guid: Unique ID to prevent duplicate sends. Auto-generated if blank.
    attachments: Optional list of attachment objects (image, location, emoji, etc.).

Inputs: text (required), group_id (required), attachments, source_guid.

unlike_messageB

Unlike a previously liked message.

Args:
    conversation_id: The group ID or direct message conversation ID.
    message_id: The ID of the message to unlike.

Inputs: message_id (required), conversation_id (required).

update_groupB

Update a group's settings.

Args:
    group_id: The ID of the group.
    name: New name (leave blank to keep current).
    description: New description (leave blank to keep current).
    image_url: New avatar image URL (leave blank to keep current).
    share: Enable or disable the share URL.
    office_mode: Enable or disable office mode.

Inputs: group_id (required), name, share, image_url, +2 more.

update_membershipA

Update your nickname in a group.

Args:
    group_id: The ID of the group.
    nickname: Your new nickname (1-50 characters).

Inputs: group_id (required), nickname (required).

update_userB

Update the authenticated user's profile.

Args:
    avatar_url: New avatar image URL.
    name: New display name.
    email: New email address.
    zip_code: New zip code.

Inputs: name, email, zip_code, avatar_url.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 29 tools

    Disambiguation4/5

    Most tools have distinct purposes targeting specific resources and actions, with clear boundaries. However, some potential confusion exists between list_chats and list_direct_messages, as both relate to direct messaging but serve slightly different purposes. Overall, descriptions help clarify distinctions.

    Naming Consistency4/5

    The naming follows a consistent verb_noun pattern throughout, such as create_group, list_messages, and update_user. Minor deviations include get_me (instead of get_my_profile) and destroy_bot/destroy_group (using 'destroy' instead of 'delete'), but these are minimal and don't disrupt readability.

    Tool Count3/5

    With 29 tools, the count is borderline high for a messaging/group management server, potentially overwhelming for agents. While it covers many features, it might benefit from consolidation or categorization to reduce complexity, as some tools like check_block and create_block could be merged into a single block management tool.

    Completeness5/5

    The tool set provides comprehensive coverage for the GroupMe domain, including full CRUD operations for groups, messages, bots, and blocks, along with user management and direct messaging. No obvious gaps exist; agents can handle all core workflows from group creation to messaging and member management.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A Discord MCP server that enables AI assistants to interact with Discord platforms, providing functionalities like sending messages, managing channels, creating forum posts, and handling webhooks.
      21
      860 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables AI agents to communicate with humans through Discord. Agents can send messages, create threads, wait for replies, and manage conversations across any MCP client.
      7 npm
      ISC
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for sending and receiving Telegram messages via a bot, enabling AI assistants to interact directly through Telegram by sending messages, reading recent messages, and sending photos.
      334 npm
      MIT