Skip to main content
Glama
geneontology

Noctua MCP Server

Official
by geneontology

list_guidelines

List all available GO-CAM guideline documents to identify which guidelines can be accessed for detailed content.

Instructions

List all available GO-CAM guideline documents.

Returns a list of available guideline names that can be accessed using the get_guideline_content tool.

Returns: Dictionary with 'guidelines' key containing list of available guidelines

Examples: # List all available guidelines result = list_guidelines() for guide in result['guidelines']: print(guide)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The main tool handler for 'list_guidelines' - an MCP tool decorated with @mcp.tool() that lists all available GO-CAM guideline documents. It calls _get_available_guidelines() helper and returns a dictionary with guidelines list, count, and a note about using get_guideline_content.
    @mcp.tool()
    async def list_guidelines() -> Dict[str, Any]:
        """List all available GO-CAM guideline documents.
    
        Returns a list of available guideline names that can be accessed
        using the get_guideline_content tool.
    
        Returns:
            Dictionary with 'guidelines' key containing list of available guidelines
    
        Examples:
            # List all available guidelines
            result = list_guidelines()
            for guide in result['guidelines']:
                print(guide)
        """
        guidelines = _get_available_guidelines()
    
        return {
            "guidelines": guidelines,
            "count": len(guidelines),
            "note": "Use get_guideline_content(guideline_name) to fetch any guideline"
        }
  • Registration of the 'list_guidelines' tool via the @mcp.tool() decorator on the async function. This registers the function as an MCP tool with the FastMCP server.
    @mcp.tool()
  • Helper function _get_available_guidelines() used by list_guidelines to scan the GUIDELINES_DIR for .md files and return sorted list of available guideline names (file stems).
    def _get_available_guidelines() -> List[str]:
        """Get list of available guideline files."""
        if not GUIDELINES_DIR.exists():
            return []
        return sorted([f.stem for f in GUIDELINES_DIR.glob("*.md")])
  • Helper function _inject_guideline_list() used by resource handlers to append a formatted list of available guidelines to content.
    def _inject_guideline_list(content: str, title: str) -> str:
        """Inject list of available guidelines at the end of content."""
        guidelines = _get_available_guidelines()
        if not guidelines:
            return content
    
        # Create formatted list
        guideline_section = "\n\n## Available GO-CAM Guidelines\n\n"
        guideline_section += f"This is the '{title}' guideline. Other available guidelines include:\n\n"
    
        for guide in guidelines:
            # Skip the current one
            if guide == title:
                continue
            # Make the filename more readable
            readable_name = guide.replace("_", " ").replace("-", " ")
            guideline_section += f"- {readable_name}\n"
    
        guideline_section += "\nUse the `get_guideline_content` tool to access any specific guideline."
    
        return content + guideline_section
  • Companion tool get_guideline_content() that pairs with list_guidelines to fetch specific guideline content by name.
    @mcp.tool()
    async def get_guideline_content(guideline_name: str) -> Dict[str, Any]:
        """Fetch specific GO-CAM guideline content.
    
        Args:
            guideline_name: Name of guideline file (without .md extension).
                           Use list_guidelines() to see available options.
    
        Returns:
            Dictionary with guideline content or error message
    
        Examples:
            # Get a specific guideline
            content = get_guideline_content("E3_ubiquitin_ligases")
    
            # Get transcription factor guidelines
            content = get_guideline_content("DNA-binding_transcription_factor_activity_annotation_guidelines")
        """
        file_path = GUIDELINES_DIR / f"{guideline_name}.md"
    
        if not file_path.exists():
            available = _get_available_guidelines()
            return {
                "success": False,
                "error": f"Guideline '{guideline_name}' not found",
                "available_guidelines": available,
                "hint": "Use one of the available guideline names listed above"
            }
    
        try:
            with open(file_path) as f:
                content = f.read()
    
            # Extract first heading as description
            lines = content.split('\n')
            description = ""
            for line in lines:
                if line.strip():
                    description = line.strip('#').strip()
                    break
    
            return {
                "success": True,
                "guideline_name": guideline_name,
                "description": description,
                "content": content,
                "length": len(content)
            }
        except Exception as e:
            return {
                "success": False,
                "error": f"Failed to read guideline: {str(e)}",
                "guideline_name": guideline_name
            }
Behavior4/5

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

With no annotations, the description carries full burden. It clearly indicates a read-only list operation, returns a dictionary with a 'guidelines' key, and includes an example. No hidden side effects or destructive behavior is implied.

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 brief purpose, return description, and code example. The example is helpful but adds a few lines; it could be trimmed slightly without losing clarity.

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 zero parameters and the presence of an output schema, the description covers necessary context: what the tool does, what it returns, and how it connects to a sibling tool. It is complete for a simple listing tool.

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?

There are zero parameters and input schema coverage is 100%. The description adds value by explaining the return structure and usage, but param semantics are inherently complete due to no parameters.

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 'List all available GO-CAM guideline documents' with a specific verb and resource. It also mentions the return type and links to a sibling tool (get_guideline_content), but does not explicitly differentiate from siblings like add_entity_set or search_models, leaving some ambiguity.

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 hints at usage by stating the returned list can be used with get_guideline_content, but it lacks explicit when-to-use guidance or exclusion conditions. There is no mention of alternatives or when not to use this tool.

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/geneontology/noctua-mcp'

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