buddypress_add_group_member
Add a user to a BuddyPress group by specifying group ID, user ID, and optional role for community management.
Instructions
Add a member to a group
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | Group ID | |
| user_id | Yes | User ID | |
| role | No | Member role (member, mod, admin) |
Implementation Reference
- src/index.ts:631-634 (handler)Executes the buddypress_add_group_member tool by sending a POST request to the BuddyPress API endpoint `/groups/{group_id}/members` with the provided user_id and optional role.else if (name === 'buddypress_add_group_member') { const { group_id, user_id, role } = args as any; result = await buddypressRequest(`/groups/${group_id}/members`, 'POST', { user_id, role }); }
- src/index.ts:266-278 (schema)Defines the tool schema including name, description, and input schema for validating parameters: group_id (required), user_id (required), role (optional).{ name: 'buddypress_add_group_member', description: 'Add a member to a group', inputSchema: { type: 'object', properties: { group_id: { type: 'number', description: 'Group ID', required: true }, user_id: { type: 'number', description: 'User ID', required: true }, role: { type: 'string', description: 'Member role (member, mod, admin)' }, }, required: ['group_id', 'user_id'], }, },
- src/index.ts:49-512 (registration)Registers the buddypress_add_group_member tool in the tools array and exposes it via the ListToolsRequestHandler.const tools: Tool[] = [ // ============= ACTIVITY TOOLS ============= { name: 'buddypress_list_activities', description: 'List activity stream items with optional filters', inputSchema: { type: 'object', properties: { page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, search: { type: 'string', description: 'Search term' }, user_id: { type: 'number', description: 'Filter by user ID' }, group_id: { type: 'number', description: 'Filter by group ID' }, scope: { type: 'string', description: 'Activity scope (all, friends, groups, favorites, mentions)' }, display_comments: { type: 'boolean', description: 'Include comments' }, }, }, }, { name: 'buddypress_get_activity', description: 'Get a single activity item by ID', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Activity ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_create_activity', description: 'Create a new activity item', inputSchema: { type: 'object', properties: { content: { type: 'string', description: 'Activity content', required: true }, user_id: { type: 'number', description: 'User ID (default: current user)' }, component: { type: 'string', description: 'Component (activity, groups, members, etc.)' }, type: { type: 'string', description: 'Activity type (activity_update, activity_comment, etc.)' }, primary_item_id: { type: 'number', description: 'Primary item ID (e.g., group ID)' }, secondary_item_id: { type: 'number', description: 'Secondary item ID' }, }, required: ['content'], }, }, { name: 'buddypress_update_activity', description: 'Update an existing activity item', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Activity ID', required: true }, content: { type: 'string', description: 'New activity content' }, }, required: ['id'], }, }, { name: 'buddypress_delete_activity', description: 'Delete an activity item', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Activity ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_favorite_activity', description: 'Favorite or unfavorite an activity item', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Activity ID', required: true }, }, required: ['id'], }, }, // ============= MEMBERS TOOLS ============= { name: 'buddypress_list_members', description: 'List BuddyPress members with optional filters', inputSchema: { type: 'object', properties: { page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, search: { type: 'string', description: 'Search term' }, user_ids: { type: 'string', description: 'Comma-separated user IDs' }, member_type: { type: 'string', description: 'Member type' }, exclude: { type: 'string', description: 'Comma-separated user IDs to exclude' }, }, }, }, { name: 'buddypress_get_member', description: 'Get a single member by ID', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'User ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_update_member', description: 'Update member profile information', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'User ID', required: true }, name: { type: 'string', description: 'Display name' }, description: { type: 'string', description: 'User biography' }, member_type: { type: 'string', description: 'Member type' }, }, required: ['id'], }, }, { name: 'buddypress_delete_member', description: 'Delete a member', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'User ID', required: true }, reassign: { type: 'number', description: 'User ID to reassign content to' }, }, required: ['id'], }, }, // ============= GROUPS TOOLS ============= { name: 'buddypress_list_groups', description: 'List BuddyPress groups with optional filters', inputSchema: { type: 'object', properties: { page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, search: { type: 'string', description: 'Search term' }, status: { type: 'string', description: 'Group status (public, private, hidden)' }, user_id: { type: 'number', description: 'Filter groups by user membership' }, group_type: { type: 'string', description: 'Group type' }, }, }, }, { name: 'buddypress_get_group', description: 'Get a single group by ID', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Group ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_create_group', description: 'Create a new group', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Group name', required: true }, description: { type: 'string', description: 'Group description' }, status: { type: 'string', description: 'Group status (public, private, hidden)' }, enable_forum: { type: 'boolean', description: 'Enable group forum' }, creator_id: { type: 'number', description: 'Creator user ID (default: current user)' }, }, required: ['name'], }, }, { name: 'buddypress_update_group', description: 'Update an existing group', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Group ID', required: true }, name: { type: 'string', description: 'Group name' }, description: { type: 'string', description: 'Group description' }, status: { type: 'string', description: 'Group status (public, private, hidden)' }, }, required: ['id'], }, }, { name: 'buddypress_delete_group', description: 'Delete a group', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Group ID', required: true }, }, required: ['id'], }, }, // ============= GROUP MEMBERSHIP TOOLS ============= { name: 'buddypress_list_group_members', description: 'List members of a specific group', inputSchema: { type: 'object', properties: { group_id: { type: 'number', description: 'Group ID', required: true }, page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, roles: { type: 'string', description: 'Filter by roles (admin, mod, member, banned)' }, }, required: ['group_id'], }, }, { name: 'buddypress_add_group_member', description: 'Add a member to a group', inputSchema: { type: 'object', properties: { group_id: { type: 'number', description: 'Group ID', required: true }, user_id: { type: 'number', description: 'User ID', required: true }, role: { type: 'string', description: 'Member role (member, mod, admin)' }, }, required: ['group_id', 'user_id'], }, }, { name: 'buddypress_remove_group_member', description: 'Remove a member from a group', inputSchema: { type: 'object', properties: { group_id: { type: 'number', description: 'Group ID', required: true }, user_id: { type: 'number', description: 'User ID', required: true }, }, required: ['group_id', 'user_id'], }, }, // ============= XPROFILE TOOLS ============= { name: 'buddypress_list_xprofile_groups', description: 'List XProfile field groups', inputSchema: { type: 'object', properties: { fetch_fields: { type: 'boolean', description: 'Include fields in response' }, }, }, }, { name: 'buddypress_get_xprofile_group', description: 'Get a single XProfile field group', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Field group ID', required: true }, fetch_fields: { type: 'boolean', description: 'Include fields in response' }, }, required: ['id'], }, }, { name: 'buddypress_list_xprofile_fields', description: 'List XProfile fields', inputSchema: { type: 'object', properties: { profile_group_id: { type: 'number', description: 'Filter by field group ID' }, fetch_field_data: { type: 'boolean', description: 'Include field data' }, }, }, }, { name: 'buddypress_get_xprofile_field', description: 'Get a single XProfile field', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Field ID', required: true }, fetch_field_data: { type: 'boolean', description: 'Include field data' }, }, required: ['id'], }, }, { name: 'buddypress_get_xprofile_data', description: 'Get XProfile data for a specific user and field', inputSchema: { type: 'object', properties: { field_id: { type: 'number', description: 'Field ID', required: true }, user_id: { type: 'number', description: 'User ID', required: true }, }, required: ['field_id', 'user_id'], }, }, { name: 'buddypress_update_xprofile_data', description: 'Update XProfile data for a specific user and field', inputSchema: { type: 'object', properties: { field_id: { type: 'number', description: 'Field ID', required: true }, user_id: { type: 'number', description: 'User ID', required: true }, value: { type: 'string', description: 'Field value', required: true }, }, required: ['field_id', 'user_id', 'value'], }, }, // ============= FRIENDS TOOLS ============= { name: 'buddypress_list_friends', description: 'List friendships', inputSchema: { type: 'object', properties: { user_id: { type: 'number', description: 'User ID to get friends for' }, is_confirmed: { type: 'boolean', description: 'Filter by confirmed status' }, page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, }, }, }, { name: 'buddypress_create_friendship', description: 'Create a friendship request', inputSchema: { type: 'object', properties: { initiator_id: { type: 'number', description: 'Initiator user ID', required: true }, friend_id: { type: 'number', description: 'Friend user ID', required: true }, }, required: ['initiator_id', 'friend_id'], }, }, { name: 'buddypress_delete_friendship', description: 'Delete a friendship', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Friendship ID', required: true }, }, required: ['id'], }, }, // ============= MESSAGES TOOLS ============= { name: 'buddypress_list_messages', description: 'List message threads', inputSchema: { type: 'object', properties: { user_id: { type: 'number', description: 'User ID to get messages for' }, box: { type: 'string', description: 'Message box (inbox, sentbox, notices)' }, type: { type: 'string', description: 'Message type (all, read, unread)' }, page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, }, }, }, { name: 'buddypress_get_message', description: 'Get a single message thread', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Thread ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_create_message', description: 'Create a new message', inputSchema: { type: 'object', properties: { sender_id: { type: 'number', description: 'Sender user ID (default: current user)' }, recipients: { type: 'array', items: { type: 'number' }, description: 'Array of recipient user IDs', required: true }, subject: { type: 'string', description: 'Message subject', required: true }, message: { type: 'string', description: 'Message content', required: true }, }, required: ['recipients', 'subject', 'message'], }, }, { name: 'buddypress_delete_message', description: 'Delete a message thread', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Thread ID', required: true }, }, required: ['id'], }, }, // ============= NOTIFICATIONS TOOLS ============= { name: 'buddypress_list_notifications', description: 'List notifications', inputSchema: { type: 'object', properties: { user_id: { type: 'number', description: 'User ID to get notifications for' }, is_new: { type: 'boolean', description: 'Filter by unread status' }, page: { type: 'number', description: 'Page number (default: 1)' }, per_page: { type: 'number', description: 'Items per page (default: 20)' }, }, }, }, { name: 'buddypress_get_notification', description: 'Get a single notification', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Notification ID', required: true }, }, required: ['id'], }, }, { name: 'buddypress_update_notification', description: 'Update notification (mark as read/unread)', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Notification ID', required: true }, is_new: { type: 'boolean', description: 'Mark as unread (true) or read (false)' }, }, required: ['id'], }, }, { name: 'buddypress_delete_notification', description: 'Delete a notification', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Notification ID', required: true }, }, required: ['id'], }, }, // ============= COMPONENTS TOOL ============= { name: 'buddypress_list_components', description: 'List active BuddyPress components', inputSchema: { type: 'object', properties: {}, }, }, ];
- src/index.ts:18-46 (helper)Shared helper function that makes authenticated HTTP requests to the BuddyPress REST API, used by the tool handler.async function buddypressRequest( endpoint: string, method: string = 'GET', body?: any ): Promise<any> { const url = `${BUDDYPRESS_URL}/wp-json/buddypress/v2${endpoint}`; const auth = Buffer.from(`${BUDDYPRESS_USERNAME}:${BUDDYPRESS_PASSWORD}`).toString('base64'); const options: any = { method, headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json', }, }; if (body && method !== 'GET') { options.body = JSON.stringify(body); } const response = await fetch(url, options); if (!response.ok) { const errorText = await response.text(); throw new Error(`BuddyPress API Error (${response.status}): ${errorText}`); } return await response.json(); }