get-workspace-member
Retrieve detailed information about a specific workspace member in Attio CRM using their member ID to access user profiles and permissions.
Instructions
Get details of a specific workspace member
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| memberId | Yes | The workspace member ID |
Implementation Reference
- src/objects/workspace-members.ts:95-127 (handler)The tool handler function `getWorkspaceMember` that handles mock data and delegates to the core API implementation.export async function getWorkspaceMember( memberId: string ): Promise<AttioWorkspaceMember> { // Check if we should use mock data for testing if (shouldUseMockData()) { if ( process.env.NODE_ENV === 'development' || process.env.VERBOSE_TESTS === 'true' ) { const { createScopedLogger } = await import('../utils/logger.js'); createScopedLogger( 'objects.workspace-members', 'getWorkspaceMember' ).debug('Using mock data for workspace member get'); } // Return mock workspace member return { id: { workspace_member_id: memberId, workspace_id: 'mock-workspace-id', }, first_name: 'Mock', last_name: 'User', email_address: 'mock.user@example.com', access_level: 'editor' as const, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), } as AttioWorkspaceMember; } return apiGet(memberId); }
- Core API operation that performs the actual HTTP GET request to retrieve the workspace member from Attio API.export async function getWorkspaceMember( memberId: string, retryConfig?: Partial<RetryConfig> ): Promise<AttioWorkspaceMember> { const api = resolveAttioClient(); const path = `/workspace_members/${memberId}`; return callWithRetry(async () => { debug( 'workspace-members.getWorkspaceMember', 'Fetching workspace member', { memberId }, 'getWorkspaceMember', OperationType.API_CALL ); const res = await api.get<{ data: AttioWorkspaceMember }>(path); if (!res?.data?.data) { throw new Error( `Workspace member '${memberId}' not found in current workspace` ); } return res.data.data; }, retryConfig); }
- Tool schema definition including input validation schema, description, and annotations for 'get-workspace-member'.{ name: 'get-workspace-member', description: formatToolDescription({ capability: 'Retrieve profile and access details for one workspace member.', boundaries: 'update member information or change permissions.', constraints: 'Requires workspace_member_id from list/search results; read-only.', recoveryHint: 'Use list-workspace-members to confirm the memberId before retrying.', }), inputSchema: { type: 'object', properties: { memberId: { type: 'string', description: 'Workspace member ID (UUID).', example: '550e8400-e29b-41d4-a716-446655440000', }, }, required: ['memberId'], additionalProperties: false, }, annotations: { readOnlyHint: true, idempotentHint: true, }, },
- src/handlers/tool-configs/workspace-members.ts:53-75 (registration)Tool configuration object registering the handler and result formatter.getWorkspaceMember: { name: 'get-workspace-member', handler: getWorkspaceMember, formatResult: (member: AttioWorkspaceMember | null | undefined) => { if (!member) { return 'Workspace member not found.'; } const name = [member.first_name, member.last_name] .filter(Boolean) .join(' '); const displayName = name || 'Unknown'; const email = member.email_address || 'No email'; const access = member.access_level || 'unknown'; return `Workspace Member Details: - Name: ${displayName} - Email: ${email} - Access Level: ${access} - ID: ${member.id.workspace_member_id} - Created: ${member.created_at} - Updated: ${member.updated_at}`; }, } as ToolConfig,
- src/handlers/tools/registry.ts:101-103 (registration)Global tool registry where workspace members tools are registered under ResourceType.WORKSPACE_MEMBERS.// Workspace members for user discovery (Issue #684) [ResourceType.WORKSPACE_MEMBERS]: workspaceMembersToolDefinitions, }