Skip to main content
Glama

basecamp_list_people

Retrieve all users in a Basecamp account, optionally filtering by name, email, or title using regular expressions.

Instructions

List all people in the Basecamp account.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filterNoOptional regular expression to filter people by name, email, or title

Implementation Reference

  • Executes the tool logic: initializes Basecamp client, lists all people using paged API, applies optional regex filter on name/email/title, returns JSON array of people data, 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) }], }; } },
  • Zod input schema defining optional 'filter' string parameter for filtering people list.
    inputSchema: { filter: z .string() .optional() .describe( "Optional regular expression to filter people by name, email, or title", ), },
  • Registers the basecamp_list_people tool on the MCP server with title, description, input schema, annotations, and handler function.
    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) }], }; } }, );
  • src/index.ts:65-65 (registration)
    Top-level invocation of registerPeopleTools which includes registration of basecamp_list_people.
    registerPeopleTools(server);

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