Skip to main content
Glama
jamesbrink

MCP Server for Coroot

create_application_category

Group applications by namespace/name patterns to organize monitoring and configure incident/deployment notifications in Coroot.

Instructions

Create a new application category.

Creates a category for grouping applications based on namespace/name patterns. Patterns must be space-separated and in format namespace/name (e.g., "test/* demo/*"). Each pattern must contain exactly one '/' and cannot start with '/'.

Args: project_id: Project ID name: Category name (lowercase letters, numbers, hyphens, underscores; min 3 chars) custom_patterns: Space-separated glob patterns (e.g., "test/* demo/*") notify_incidents: Whether to notify about incidents (default: True) notify_deployments: Whether to notify about deployments (default: False) slack_channel: Slack channel for notifications (optional)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYes
nameYes
custom_patternsYes
notify_incidentsNo
notify_deploymentsNo
slack_channelNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Primary MCP tool handler: the @mcp.tool()-decorated function that defines the tool interface, input parameters, and calls the implementation. This is the exact implementation executed when the tool is called.
    @mcp.tool()
    async def create_application_category(
        project_id: str,
        name: str,
        custom_patterns: str,
        notify_incidents: bool = True,
        notify_deployments: bool = False,
        slack_channel: str | None = None,
    ) -> dict[str, Any]:
        """Create a new application category.
    
        Creates a category for grouping applications based on namespace/name patterns.
        Patterns must be space-separated and in format namespace/name
        (e.g., "test/* demo/*").
        Each pattern must contain exactly one '/' and cannot start with '/'.
    
        Args:
            project_id: Project ID
            name: Category name (lowercase letters, numbers, hyphens,
                underscores; min 3 chars)
            custom_patterns: Space-separated glob patterns (e.g., "test/* demo/*")
            notify_incidents: Whether to notify about incidents (default: True)
            notify_deployments: Whether to notify about deployments (default: False)
            slack_channel: Slack channel for notifications (optional)
        """
        return await create_application_category_impl(  # type: ignore[no-any-return]
            project_id,
            name,
            custom_patterns,
            notify_incidents,
            notify_deployments,
            slack_channel,
        )
  • Supporting implementation function that constructs the category configuration dictionary (with patterns, notifications) and calls the CorootClient method.
    async def create_application_category_impl(
        project_id: str,
        name: str,
        custom_patterns: str,
        notify_incidents: bool = True,
        notify_deployments: bool = False,
        slack_channel: str | None = None,
    ) -> dict[str, Any]:
        """Create a new application category."""
        category: dict[str, Any] = {
            "name": name,
            "builtin": False,
            "default": False,
            "builtin_patterns": "",
            "custom_patterns": custom_patterns,
            "notification_settings": {
                "incidents": {
                    "enabled": notify_incidents,
                },
                "deployments": {
                    "enabled": notify_deployments,
                },
            },
        }
    
        # Add Slack channel if specified
        if slack_channel:
            notifications = category["notification_settings"]
            notifications["incidents"]["slack"] = {
                "enabled": True,
                "channel": slack_channel,
            }
            notifications["deployments"]["slack"] = {
                "enabled": notify_deployments,
                "channel": slack_channel,
            }
    
        await get_client().create_application_category(project_id, category)
        return {
            "success": True,
            "message": f"Application category '{name}' created successfully",
        }
  • CorootClient HTTP client method that sends the POST request to Coroot API endpoint /api/project/{project_id}/application_categories to create the application category.
    async def create_application_category(
        self, project_id: str, category: dict[str, Any]
    ) -> dict[str, Any]:
        """Create a new application category.
    
        Args:
            project_id: Project ID.
            category: Category object with name and patterns.
    
        Returns:
            Created category.
        """
        response = await self._request(
            "POST", f"/api/project/{project_id}/application_categories", json=category
        )
        return self._parse_json_response(response)
  • FastMCP tool registration decorator @mcp.tool() that registers the create_application_category function as an MCP tool.
    @mcp.tool()
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the creation behavior and pattern format rules, but doesn't mention permissions needed, whether creation is idempotent, rate limits, or what the response contains. It adds some behavioral context (pattern format constraints) but lacks comprehensive operational details.

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement followed by detailed parameter explanations. It's appropriately sized for a 6-parameter creation tool, though the parameter section is somewhat lengthy. Every sentence adds value, with no redundant information.

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?

For a creation tool with 6 parameters, 0% schema coverage, no annotations, but with an output schema, the description provides good coverage. It explains the tool's purpose and all parameters thoroughly. The existence of an output schema means return values don't need explanation, making this reasonably complete for the context.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining all 6 parameters in detail. It provides format requirements for 'name' and 'custom_patterns', default values for notification parameters, and clarifies optionality for 'slack_channel'. This adds substantial value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the verb ('Create') and resource ('application category'), and explains the purpose ('grouping applications based on namespace/name patterns'). It distinguishes from siblings like 'update_application_category' or 'delete_application_category' by specifying it creates new categories rather than modifying or removing existing ones.

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

Usage Guidelines3/5

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

The description implies usage when needing to group applications by patterns, but doesn't explicitly state when to use this tool versus alternatives like 'update_application_category' or 'get_application_categories'. No exclusions or prerequisites are mentioned, though the required parameters provide some implicit context.

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/jamesbrink/mcp-coroot'

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