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
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/people.ts:83-127 (handler)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) }], }; } },
- src/tools/people.ts:68-75 (schema)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", ), },
- src/tools/people.ts:63-128 (registration)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) }], }; } }, );