Skip to main content
Glama

basecamp_list_people

Retrieve a complete list of all people in your Basecamp account to manage team members and project collaborators.

Instructions

List all people in the Basecamp account.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Handler function that initializes the Basecamp client, lists all people using paged API, applies optional regex filter by name/email/title, maps to simplified JSON structure, and returns as text content or handles errors.
    async (params) => { try { const client = await initializeBasecampClient(); const people = await asyncPagedToArray({ fetchPage: client.people.list, request: { query: {} }, }); // Apply filter if provided let filteredPeople = people; if (params.filter) { const regex = new RegExp(params.filter, "i"); filteredPeople = people.filter( (p) => regex.test(p.name) || regex.test(p.email_address || "") || regex.test(p.title || ""), ); } return { content: [ { type: "text", text: JSON.stringify( filteredPeople.map((p) => ({ id: p.id, name: p.name, email: p.email_address, title: p.title, attachable_sgid: p.attachable_sgid, })), null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } },
  • Input schema defining an optional 'filter' parameter as a string for regex-based filtering of people.
    inputSchema: { filter: z .string() .optional() .describe( "Optional regular expression to filter people by name, email, or title", ), },
  • Full server.registerTool call registering the 'basecamp_list_people' tool, including name, metadata (title, description, annotations), input schema, and inline handler.
    server.registerTool( "basecamp_list_people", { title: "List Basecamp People", description: "List all people in the Basecamp account.", inputSchema: { filter: z .string() .optional() .describe( "Optional regular expression to filter people by name, email, or title", ), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, }, async (params) => { try { const client = await initializeBasecampClient(); const people = await asyncPagedToArray({ fetchPage: client.people.list, request: { query: {} }, }); // Apply filter if provided let filteredPeople = people; if (params.filter) { const regex = new RegExp(params.filter, "i"); filteredPeople = people.filter( (p) => regex.test(p.name) || regex.test(p.email_address || "") || regex.test(p.title || ""), ); } return { content: [ { type: "text", text: JSON.stringify( filteredPeople.map((p) => ({ id: p.id, name: p.name, email: p.email_address, title: p.title, attachable_sgid: p.attachable_sgid, })), null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } }, );

Latest Blog Posts

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/stefanoverna/basecamp-mcp'

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