get_person
Retrieve comprehensive team member details including contact information, role, activity timestamps, and custom metadata from Productive.io for specific person identification.
Instructions
Get detailed information about a specific team member/person.
Returns comprehensive person details including:
Full name, email, and contact information
Role, title, and organizational details
Activity timestamps (joined, last seen)
Custom fields and additional metadata
Avatar and profile information
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | The unique Productive person identifier |
Implementation Reference
- server.py:548-562 (registration)MCP tool registration for 'get_person' with input schema (Annotated[int, Field]) and docstring description. Thin wrapper delegating to tools.get_person.@mcp.tool async def get_person( ctx: Context, person_id: Annotated[int, Field(description="The unique Productive person identifier")], ) -> Dict[str, Any]: """Get detailed information about a specific team member/person. Returns comprehensive person details including: - Full name, email, and contact information - Role, title, and organizational details - Activity timestamps (joined, last seen) - Custom fields and additional metadata - Avatar and profile information """ return await tools.get_person(ctx, person_id)
- tools.py:762-783 (handler)Core handler implementation: calls client.get_person, applies filter_response, handles ProductiveAPIError and general exceptions with ctx logging.async def get_person(ctx: Context, person_id: int) -> ToolResult: """Fetch a single person/team member by ID. Developer notes: - Wraps client.get_person(person_id). - Applies utils.filter_response to sanitize output. - Returns detailed information about a specific team member. """ try: await ctx.info(f"Fetching person with ID: {person_id}") result = await client.get_person(person_id) await ctx.info("Successfully retrieved person") filtered = filter_response(result) return filtered except ProductiveAPIError as e: await _handle_productive_api_error(ctx, e, f"person {person_id}") except Exception as e: await ctx.error(f"Unexpected error fetching person: {str(e)}") raise e
- productive_client.py:137-139 (helper)Client library helper: makes HTTP GET request to Productive API endpoint /people/{person_id}.async def get_person(self, person_id: int) -> Dict[str, Any]: """Get person by ID""" return await self._request("GET", f"/people/{str(person_id)}")