Skip to main content
Glama

list_resources

Discover and retrieve all available resources from connected MCP servers, including URIs, names, descriptions, and MIME types for accurate access.

Instructions

List all resources available on the connected MCP server.

Retrieves comprehensive information about all resources exposed by the target server, including URIs, names, descriptions, and MIME types to enable accurate resource access.

Returns: Dictionary with resource listing including: - success: True on successful retrieval - resources: List of resource objects with uri, name, description, mimeType - metadata: Total count, server info, timing information

Raises: Returns error dict if not connected or retrieval fails

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The @mcp.tool decorated handler function that implements the list_resources tool. It lists resources from a connected MCP server, handles connection errors, formats the response with metadata, and provides detailed logging and user feedback.
    @mcp.tool
    async def list_resources(ctx: Context) -> dict[str, Any]:
        """List all resources available on the connected MCP server.
    
        Retrieves comprehensive information about all resources exposed by the target
        server, including URIs, names, descriptions, and MIME types to enable
        accurate resource access.
    
        Returns:
            Dictionary with resource listing including:
            - success: True on successful retrieval
            - resources: List of resource objects with uri, name, description, mimeType
            - metadata: Total count, server info, timing information
    
        Raises:
            Returns error dict if not connected or retrieval fails
        """
        start_time = time.perf_counter()
    
        try:
            # Verify connection exists
            client, state = ConnectionManager.require_connection()
    
            # User-facing progress update
            await ctx.info("Listing resources from connected MCP server")
            # Detailed technical log
            logger.info("Listing resources from connected MCP server")
    
            # Get resources from the server
            resources_result = await client.list_resources()
    
            elapsed_ms = (time.perf_counter() - start_time) * 1000
    
            # Convert resources to dictionary format with full metadata
            # Note: client.list_resources() returns a list directly, not an object with .resources
            resources_list = []
            for resource in resources_result:
                resource_dict = {
                    "uri": resource.uri,
                    "name": resource.name if resource.name else "",
                    "description": resource.description if resource.description else "",
                    "mimeType": resource.mimeType if hasattr(resource, "mimeType") and resource.mimeType else None,
                }
                resources_list.append(resource_dict)
    
            metadata = {
                "total_resources": len(resources_list),
                "server_url": state.server_url,
                "retrieved_at": time.time(),
                "request_time_ms": round(elapsed_ms, 2),
            }
    
            # Add server info if available
            if state.server_info:
                metadata["server_name"] = state.server_info.get("name", "unknown")
                metadata["server_version"] = state.server_info.get("version")
    
            # User-facing success update
            await ctx.info(f"Retrieved {len(resources_list)} resources from server")
            # Detailed technical log
            logger.info(
                f"Retrieved {len(resources_list)} resources from server",
                extra={
                    "resource_count": len(resources_list),
                    "server_url": state.server_url,
                    "duration_ms": elapsed_ms,
                },
            )
    
            return {
                "success": True,
                "resources": resources_list,
                "metadata": metadata,
            }
    
        except ConnectionError as e:
            elapsed_ms = (time.perf_counter() - start_time) * 1000
    
            # User-facing error update
            await ctx.error(f"Not connected: {str(e)}")
            # Detailed technical log
            logger.error(f"Not connected: {str(e)}", extra={"duration_ms": elapsed_ms})
    
            return {
                "success": False,
                "error": {
                    "error_type": "not_connected",
                    "message": str(e),
                    "details": {},
                    "suggestion": "Use connect_to_server() to establish a connection first",
                },
                "resources": [],
                "metadata": {
                    "request_time_ms": round(elapsed_ms, 2),
                },
            }
    
        except Exception as e:
            elapsed_ms = (time.perf_counter() - start_time) * 1000
    
            # User-facing error update
            await ctx.error(f"Failed to list resources: {str(e)}")
            # Detailed technical log
            logger.exception("Failed to list resources", extra={"duration_ms": elapsed_ms})
    
            # Increment error counter
            ConnectionManager.increment_stat("errors")
    
            return {
                "success": False,
                "error": {
                    "error_type": "execution_error",
                    "message": f"Failed to list resources: {str(e)}",
                    "details": {"exception_type": type(e).__name__},
                    "suggestion": "Check that the server supports the resources capability and is responding correctly",
                },
                "resources": [],
                "metadata": {
                    "request_time_ms": round(elapsed_ms, 2),
                },
            }
  • Import statement that triggers registration of tools from the resources module (containing list_resources) via @mcp.tool decorators by importing the module.
    from .tools import connection, tools, resources, prompts, llm

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/rdwj/mcp-test-mcp'

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