Skip to main content
Glama

magg_kit_info

Retrieve comprehensive details about a specific kit by providing its name. This tool is part of the MAGG MCP server, which enhances LLM capabilities through dynamic tool management and aggregation.

Instructions

Get detailed information about a specific kit.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesKit name to get information about

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorsNo
outputNo

Implementation Reference

  • Handler method for the 'magg_kit_info' tool. Calls kit_manager.get_kit_details(name) and returns a formatted MaggResponse.
            self,
            name: Annotated[str, Field(description="Kit name to get information about")],
    ) -> MaggResponse:
        """Get detailed information about a specific kit."""
        try:
            info = self.kit_manager.get_kit_details(name)
    
            if info:
                return MaggResponse.success(info)
            else:
                return MaggResponse.error(f"Kit '{name}' not found")
    
        except Exception as e:
            return MaggResponse.error(f"Failed to get kit info: {str(e)}")
  • Registration of all Magg tools including 'magg_kit_info' via self.mcp.tool() in the loop after this list. self_prefix_ is 'magg_'.
    tools = [
        (self.add_server, f"{self_prefix_}add_server", None),
        (self.remove_server, f"{self_prefix_}remove_server", None),
        (self.list_servers, f"{self_prefix_}list_servers", None),
        (self.enable_server, f"{self_prefix_}enable_server", None),
        (self.disable_server, f"{self_prefix_}disable_server", None),
        (self.search_servers, f"{self_prefix_}search_servers", None),
        (self.smart_configure, f"{self_prefix_}smart_configure", None),
        (self.analyze_servers, f"{self_prefix_}analyze_servers", None),
        (self.status, f"{self_prefix_}status", None),
        (self.check, f"{self_prefix_}check", None),
        (self.reload_config_tool, f"{self_prefix_}reload_config", None),
        (self.load_kit, f"{self_prefix_}load_kit", None),
        (self.unload_kit, f"{self_prefix_}unload_kit", None),
        (self.list_kits, f"{self_prefix_}list_kits", None),
        (self.kit_info, f"{self_prefix_}kit_info", None),
    ]
  • Core helper method implementing the logic to retrieve kit details, either from loaded kits or by discovering and loading from file.
    def get_kit_details(self, kit_name: str) -> dict[str, Any] | None:
        """Get detailed information about a specific kit.
    
        Returns:
            Kit information dict or None if not found
        """
        loaded_kits = self.kits
        if kit_name in loaded_kits:
            kit_config = loaded_kits[kit_name]
            return {
                'loaded': True,
                'name': kit_config.name,
                'description': kit_config.description,
                'author': kit_config.author,
                'version': kit_config.version,
                'keywords': kit_config.keywords,
                'links': kit_config.links,
                'servers': {
                    name: server.model_dump(mode="json", exclude_unset=True, exclude_none=True, exclude_defaults=True)
                    for name, server in kit_config.servers.items()
                }
            }
    
        available_kits = self.discover_kits()
        if kit_name in available_kits:
            kit_path = available_kits[kit_name]
            kit_config = self.load_kit(kit_path)
            if kit_config:
                return {
                    'loaded': False,
                    'path': str(kit_path),
                    'name': kit_config.name,
                    'description': kit_config.description,
                    'author': kit_config.author,
                    'version': kit_config.version,
                    'keywords': kit_config.keywords,
                    'links': kit_config.links,
                    'servers': {
                        name: server.model_dump(mode="json", exclude_unset=True, exclude_none=True, exclude_defaults=True)
                        for name, server in kit_config.servers.items()
                    }
                }
    
        return None
  • Pydantic model used for kit metadata in configuration, part of the output structure.
    class KitInfo(BaseModel):
        """Information about a loaded kit."""
        model_config = {
            "extra": "allow",
            "validate_assignment": True,
        }
    
        name: str = Field(..., description="Kit name")
        description: str | None = Field(None, description="Kit description")
        path: str | None = Field(None, description="Path to kit file (if file-based)")
        source: str | None = Field(None, description="Source of the kit (file, inline, etc)")
  • Pydantic model for parsing kit configuration files, used by get_kit_details to extract details.
    class KitConfig(BaseSettings):
        """Configuration for a kit - a bundle of related MCP servers."""
        model_config = SettingsConfigDict(
            extra="allow",
            validate_assignment=True,
        )
    
        name: str = Field(..., description="Unique kit name")
        description: str = Field("", description="What this kit provides")
        author: str | None = Field(None, description="Kit author/maintainer")
        version: str | None = Field(None, description="Kit version")
        keywords: list[str] = Field(default_factory=list, description="Keywords for discovery")
        links: dict[str, str] = Field(default_factory=dict, description="Related links (homepage, docs, etc)")
    
        servers: dict[str, ServerConfig] = Field(
            default_factory=dict,
            description="Servers included in this kit"
        )
    
        @field_validator('servers', mode='before')
        def validate_servers(cls, v: dict[str, Any]) -> dict[str, ServerConfig]:
            """Convert raw server data to ServerConfig objects."""
            if not isinstance(v, dict):
                return {}
    
            servers = {}
            for name, server_data in v.items():
                try:
                    if isinstance(server_data, ServerConfig):
                        servers[name] = server_data
                    else:
                        if isinstance(server_data, dict):
                            server_data = server_data.copy()
                            server_data.pop('kits', None)  # Remove any kits field, only allowed in config.json
    
                        server_data['name'] = name
                        servers[name] = ServerConfig(**server_data)
                except Exception as e:
                    logger.error("Error loading server %r in kit: %s", name, e)
                    continue
    
            return servers
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states this is a read operation ('Get'), implying it's non-destructive, but doesn't disclose behavioral traits like error handling (e.g., what happens if the kit doesn't exist), authentication needs, rate limits, or the format of the returned information. This leaves significant gaps for a tool that retrieves data.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

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

Completeness3/5

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

Given the tool has an output schema (which should document return values), the description's job is reduced. However, with no annotations and a read operation that might involve errors or constraints, the description should ideally add more context about behavior. It's minimally adequate but lacks depth for a tool that interacts with system resources.

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%, with the single parameter 'name' documented as 'Kit name to get information about'. The description adds no additional meaning beyond this, such as clarifying the format of the name (e.g., case sensitivity, allowed characters) or examples. Baseline 3 is appropriate since the schema does the heavy lifting.

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 verb 'Get' and resource 'detailed information about a specific kit', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'magg_list_kits' which might list kits without details, or 'magg_load_kit' which might load a kit rather than retrieve information about it.

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 like 'magg_list_kits' or 'magg_load_kit'. It doesn't mention prerequisites, such as whether the kit must be loaded or available, nor does it specify use cases like checking kit details before loading or after listing.

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

Related 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/sitbon/magg'

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