Skip to main content
Glama

Buu AI MCP Server

TeamTools.ts8.34 kB
import { z } from 'zod'; import { gql, GraphQLClient } from 'graphql-request'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; // Full Queries / Mutations with all fields const createTeamMutation = gql` mutation CreateTeam($name: String!) { createTeam(name: $name) { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const addTeamMemberMutation = gql` mutation Mutation($member: String!) { addTeamMember(member: $member) { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const removeTeamMemberMutation = gql` mutation RemoveTeamMember($member: String!) { removeTeamMember(member: $member) { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const updateTeamDataMutation = gql` mutation UpdateTeamData($name: String, $wallet: String) { updateTeamData(name: $name, wallet: $wallet) { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const updateTeamMemberRoleMutation = gql` mutation UpdateTeamMemberRole($newRole: TeamRole!, $member: String!) { updateTeamMemberRole(newRole: $newRole, member: $member) { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const getTeamQuery = gql` query GetTeam { getTeam { ... on Team { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } ... on HandledError { code message } } } `; const getUserTeamsQuery = gql` query TeamPage($pagination: Pagination, $filters: TeamFilter) { getUserTeams(pagination: $pagination, filters: $filters) { ... on TeamPage { items { _id type name creator wallet members { address role status } available pending confirmed updatedAt createdAt } metadata { limit offset orderBy orderDirection numElements total page pages } } ... on HandledError { code message } } } `; export const registerTeamTools = (server: McpServer, client: GraphQLClient) => { server.tool( 'team_create', '[PRIVATE] Create a new team for the logged-in user.', { name: z.string().describe('The name of the new team'), }, async ({ name }) => { try { const response = await client.request(createTeamMutation, { name }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_create:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to create team. ${error}` }], }; } } ); server.tool( 'team_add_member', '[PRIVATE] Add a new member to the team.', { member: z.string().describe('Address of the new team member'), }, async ({ member }) => { try { const response = await client.request(addTeamMemberMutation, { member }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_add_member:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to add team member. ${error}` }], }; } } ); server.tool( 'team_remove_member', '[PRIVATE] Remove a member from the team.', { member: z.string().describe('Address of the team member to remove'), }, async ({ member }) => { try { const response = await client.request(removeTeamMemberMutation, { member }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_remove_member:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to remove team member. ${error}` }], }; } } ); server.tool( 'team_update', '[PRIVATE] Update team data.', { name: z.string().optional().describe('New name for the team'), wallet: z.string().optional().describe('New wallet address for the team'), }, async ({ name, wallet }) => { try { const response = await client.request(updateTeamDataMutation, { name, wallet }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_update:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to update team. ${error}` }], }; } } ); server.tool( 'team_update_member_role', '[PRIVATE] Update the role of a team member.', { member: z.string().describe('Address of the team member'), newRole: z.string().describe('New role for the team member'), }, async ({ member, newRole }) => { try { const response = await client.request(updateTeamMemberRoleMutation, { member, newRole, }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_update_member_role:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to update member role. ${error}` }], }; } } ); server.tool('team_get', '[PRIVATE] Get the personal team for the current user.', {}, async () => { try { const response = await client.request(getTeamQuery); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_get:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to retrieve team. ${error}` }], }; } }); server.tool( 'team_get_all', '[PRIVATE] Get all teams for the current user.', { pagination: z.any().optional().describe('Pagination settings for querying threads'), filters: z.any().optional().describe('Filter criteria to narrow down thread results'), }, async ({ pagination, filters }) => { try { const response = await client.request(getUserTeamsQuery, { pagination, filters }); return { content: [{ type: 'text', text: JSON.stringify(response) }] }; } catch (error) { console.error('Error calling team_get_all:', error); return { isError: true, content: [{ type: 'text', text: `Error: Failed to retrieve all teams. ${error}` }], }; } } ); };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Buu-AI/buu-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server