get_page
Retrieve complete page details and content from Productive.io by providing a page identifier. This tool accesses specific documents with full JSON-formatted information for read-only data access.
Instructions
Get specific page/document details with full content.
Returns: Dictionary with complete page details including JSON-formatted content
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | The unique Productive page identifier |
Implementation Reference
- tools.py:656-676 (handler)Implements the core logic of the get_page tool: fetches the page from the Productive API client, applies response filtering, logs progress, and handles specific API errors and general exceptions.async def get_page(ctx: Context, page_id: int) -> ToolResult: """Fetch a single page by ID. Developer notes: - Body is JSON in attributes.body (caller may parse if needed). - Applies utils.filter_response to sanitize (body included via type='page'). """ try: await ctx.info(f"Fetching page with ID: {page_id}") result = await client.get_page(page_id) await ctx.info("Successfully retrieved page") filtered = filter_response(result) return filtered except ProductiveAPIError as e: await _handle_productive_api_error(ctx, e, f"page {page_id}") except Exception as e: await ctx.error(f"Unexpected error fetching page: {str(e)}") raise e
- server.py:512-523 (registration)MCP registration of the 'get_page' tool using @mcp.tool decorator. Includes input schema definition via Annotated type hint and comprehensive docstring describing the tool's purpose and return value.@mcp.tool async def get_page( ctx: Context, page_id: Annotated[int, Field(description="The unique Productive page identifier")], ) -> Dict[str, Any]: """Get specific page/document details with full content. Returns: Dictionary with complete page details including JSON-formatted content """ return await tools.get_page(ctx, page_id)
- server.py:515-516 (schema)Pydantic schema definition for the page_id input parameter using Annotated with Field for description.page_id: Annotated[int, Field(description="The unique Productive page identifier")], ) -> Dict[str, Any]:
- productive_client.py:121-123 (helper)Supporting API client method that issues the HTTP GET request to the Productive API endpoint /pages/{page_id} to retrieve the raw page data.async def get_page(self, page_id: int) -> Dict[str, Any]: """Get page by ID""" return await self._request("GET", f"/pages/{str(page_id)}")