Skip to main content
Glama
minuetai
by minuetai

search_agents

Locate ERC-8004 AI agents by matching name substrings through Minuet's indexed relationship graph. Optionally limit the number of results for targeted discovery.

Instructions

Search indexed ERC-8004 agents.

Args: query: Optional substring to match against agent name. limit: Maximum number of agents to return (default 25).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNo
limitNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The actual tool handler for search_agents. Uses MinuetClient to call list_agents with optional name query and limit, then returns a dict with count and agents.
    @mcp.tool()
    async def search_agents(query: str | None = None, limit: int = 25) -> dict[str, Any]:
        """Search indexed ERC-8004 agents.
    
        Args:
            query: Optional substring to match against agent name.
            limit: Maximum number of agents to return (default 25).
        """
        async with MinuetClient() as client:
            data = await client.list_agents(name=query, limit=limit)
        agents = data.get("agents", [])[:limit]
        return {"count": len(agents), "agents": agents}
  • The @mcp.tool() decorator registers search_agents as an MCP tool on the FastMCP instance.
    @mcp.tool()
  • The MinuetClient.list_agents helper invoked by the search_agents handler. Makes an async GET request to /api/agents with optional query parameters.
    async def list_agents(
        self,
        name: str | None = None,
        mcp_tools: str | None = None,
        active: bool | None = None,
        limit: int | None = None,
    ) -> dict[str, Any]:
        params: dict[str, Any] = {}
        if name:
            params["name"] = name
        if mcp_tools:
            params["mcpTools"] = mcp_tools
        if active is not None:
            params["active"] = "true" if active else "false"
        if limit is not None:
            params["limit"] = limit
        return await self._get("/api/agents", params=params or None)
  • Input schema: query (optional str) and limit (optional int, default 25). Output schema: dict with count (int) and agents (list).
    async def search_agents(query: str | None = None, limit: int = 25) -> dict[str, Any]:
  • The FastMCP instance that hosts all tool registrations, including search_agents.
    mcp = FastMCP("minuet-mcp")
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions default limit but does not describe pagination, ordering, side effects, or authorization needs. Basic parameter info is provided, but comprehensive behavior is missing.

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 extremely concise: one sentence for purpose and two lines for parameters. No wasted words, and the key action is front-loaded.

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 2 simple parameters and presence of an output schema, the description is minimally complete. It covers action and parameters but omits usage context, result format, and behavioral details like ordering or filtering capabilities.

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?

Schema description coverage is 0%, so the description fully compensates. It explains that query is an optional substring match and limit is the maximum with a default of 25, adding clear meaning beyond the raw 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 states 'Search indexed ERC-8004 agents', which clearly identifies the action (search) and the resource (agents). This distinguishes it from siblings like get_agent (single agent) and other tools.

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?

No guidance on when to use this tool versus alternatives (e.g., get_agent for a specific agent, get_hub_agents for hub-specific). The description does not mention when not to use it or provide context for choosing this tool over others.

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/minuetai/minuet-mcp'

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