Skip to main content
Glama

get_category_page_content

Retrieve the full HTML and text content of a Document360 page by providing the category ID and page ID.

Instructions

Get category page content by ID from Document360

Args: category_id: Document360 category ID (UUID string) page_id: Document360 page ID (UUID string) ctx: MCP context for logging and error handling

Returns: Full page content including HTML/text content and formatting

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
category_idYesDocument360 category ID (UUID string)
page_idYesDocument360 page ID (UUID string)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • server.py:39-55 (registration)
    MCP tool registration via @mcp.tool decorator. Defines the tool name 'get_category_page_content' with Pydantic-annotated parameters (category_id, page_id) and delegates to tools.get_category_page_content().
    @mcp.tool
    async def get_category_page_content(
        category_id: Annotated[str, Field(description="Document360 category ID (UUID string)")],
        page_id: Annotated[str, Field(description="Document360 page ID (UUID string)")],
        ctx: Context
    ) -> dict:
        """Get category page content by ID from Document360
        
        Args:
            category_id: Document360 category ID (UUID string)
            page_id: Document360 page ID (UUID string)
            ctx: MCP context for logging and error handling
        
        Returns:
            Full page content including HTML/text content and formatting
        """
        return await tools.get_category_page_content(category_id, page_id, ctx)
  • Core handler function that implements the tool logic. Calls the Document360 client to fetch page content, with error handling for 404, 401, and unexpected errors, logging via MCP context.
    async def get_category_page_content(category_id: str, page_id: str, ctx: Context) -> Dict[str, Any]:
        """Get category page content by ID from Document360
        
        Args:
            category_id: Document360 category ID (UUID string)
            page_id: Document360 page ID (UUID string)
            ctx: MCP context for logging and error handling
            
        Returns:
            Page content data from Document360 API
        """
        try:
            await ctx.info(f"Fetching content for page {page_id} from category {category_id}")
            
            result = await client.get_category_page_content(category_id, page_id)
            
            await ctx.info("Successfully retrieved page content")
            return result
            
        except Document360APIError as e:
            await ctx.error(f"Document360 API error: {e.message}")
            if e.status_code == 404:
                await ctx.warning(f"Page content {page_id} in category {category_id} not found")
            elif e.status_code == 401:
                await ctx.error("Invalid API key - check configuration")
            raise e
        except Exception as e:
            await ctx.error(f"Unexpected error fetching page content: {str(e)}")
            raise e
  • Raw API client method. Makes an HTTP GET request to /v2/categories/{category_id}/pages/{page_id}/content to fetch category page content from Document360.
    async def get_category_page_content(self, category_id: str, page_id: str) -> Dict[str, Any]:
        """Get category page content by ID"""
        return await self._request("GET", f"/categories/{category_id}/pages/{page_id}/content")
  • FastMCP server instructions mention this tool. The Pydantic Field annotations (lines 41-42) define parameter schemas: category_id and page_id are UUID strings.
    # Initialize FastMCP server
    mcp = FastMCP(
        name="Document360 MCP Server",
        instructions="""
    Use this server to access Document360 projects, categories and articles. Search and retrieves categories, articles and pages.
    - If no project_version_id is provided in the context, search for relevant projects using `list_project_versions`. Inform the user if no relevant projects can be found
    - If not article_id is provided, use `search_in_project` to find relevant articles, their IDs and contents
    - While using `search_in_project` pay attention to relevant categoryIds, use `get_category` and `get_category_page_content` if you need to do a deep research on a particular topic
    - If the user mentions a specific ID, prioritize it over `search_in_project`
    - Provide the links to the relevant articles as resources
        """,
        lifespan=lifespan,
        # include_tags={"document360", "api"},
        on_duplicate_tools="warn",
        on_duplicate_resources="warn", 
        on_duplicate_prompts="warn"
    )
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral disclosure. It states the return type ('Full page content including HTML/text content and formatting'), indicating a read operation. However, it does not mention potential errors, rate limits, or side effects, which is acceptable for a simple retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with an Args/Returns block, which is clear but somewhat verbose. It includes 'ctx: MCP context for logging and error handling' that is not a tool parameter, adding noise. The core information is front-loaded, but the extra detail could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required string parameters) and the presence of an output schema, the description adequately covers the essentials: what it does and what it returns. It could mention that both IDs are required, but the schema already marks them as required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description literally repeats the schema's parameter descriptions ('Document360 category ID (UUID string)' and 'Document360 page ID (UUID string)'), adding no new meaning. It also mentions a 'ctx' parameter not in the schema, which is confusing and slightly detracts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Get category page content by ID from Document360', specifying the verb and resource. It is distinct from sibling tools like 'get_article' and 'get_category' by its focus on page content within a category, though it does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., 'get_article' for a single article, 'search_in_project' for searching). It lacks any 'when to use' or 'when not to use' instructions, leaving the agent to infer context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/druellan/document360-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server