Skip to main content
Glama
NovaAI-innovation

CSV MCP Server

filter_data

Filter CSV data by applying conditions to columns, returning matching rows with optional row limits for data analysis.

Instructions

Filter CSV data based on conditions.

Args:
    filename: Name of the CSV file
    conditions: Dictionary of column conditions. 
               Simple: {"column": "value"}
               Complex: {"column": {"gt": 5, "lt": 10, "contains": "text"}}
    limit: Optional limit on number of rows to return

Returns:
    Dictionary with filtered data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filenameYes
conditionsYes
limitNo

Implementation Reference

  • Registration and handler for the 'filter_data' MCP tool. This function is decorated with @mcp.tool() making it available as an MCP tool, and it delegates the logic to CSVManager.filter_data.
    @mcp.tool()
    def filter_data(
        filename: str,
        conditions: Dict[str, Any],
        limit: Optional[int] = None
    ) -> Dict[str, Any]:
        """
        Filter CSV data based on conditions.
        
        Args:
            filename: Name of the CSV file
            conditions: Dictionary of column conditions. 
                       Simple: {"column": "value"}
                       Complex: {"column": {"gt": 5, "lt": 10, "contains": "text"}}
            limit: Optional limit on number of rows to return
        
        Returns:
            Dictionary with filtered data
        """
        try:
            return csv_manager.filter_data(filename, conditions, limit)
        except Exception as e:
            return {"success": False, "error": str(e)}
  • Core implementation of data filtering logic in CSVManager class. Applies conditions to pandas DataFrame and returns filtered results.
    def filter_data(self, filename: str, conditions: Dict[str, Any], limit: Optional[int] = None) -> Dict[str, Any]:
        """Filter CSV data based on conditions."""
        filepath = self._get_file_path(filename)
        
        if not filepath.exists():
            raise FileNotFoundError(f"CSV file '{filename}' not found")
        
        try:
            df = pd.read_csv(filepath)
            
            # Apply filters
            for column, condition in conditions.items():
                if column not in df.columns:
                    raise ValueError(f"Column '{column}' not found in CSV")
                
                if isinstance(condition, dict):
                    # Handle complex conditions like {"gt": 5, "lt": 10}
                    if "eq" in condition:
                        df = df[df[column] == condition["eq"]]
                    if "ne" in condition:
                        df = df[df[column] != condition["ne"]]
                    if "gt" in condition:
                        df = df[df[column] > condition["gt"]]
                    if "gte" in condition:
                        df = df[df[column] >= condition["gte"]]
                    if "lt" in condition:
                        df = df[df[column] < condition["lt"]]
                    if "lte" in condition:
                        df = df[df[column] <= condition["lte"]]
                    if "contains" in condition:
                        df = df[df[column].astype(str).str.contains(condition["contains"], na=False)]
                else:
                    # Simple equality filter
                    df = df[df[column] == condition]
            
            # Apply limit if specified
            if limit and limit > 0:
                df = df.head(limit)
            
            return {
                "success": True,
                "filename": filename,
                "conditions": conditions,
                "filtered_data": df.to_dict('records'),
                "filtered_rows": len(df),
                "original_rows": len(pd.read_csv(filepath))
            }
        except Exception as e:
            logger.error(f"Failed to filter data: {e}")
            raise
  • Function signature defines the input schema (parameters) and output type for the MCP tool.
    def filter_data(
        filename: str,
        conditions: Dict[str, Any],
        limit: Optional[int] = None
    ) -> Dict[str, Any]:

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/NovaAI-innovation/csv-mcp-server'

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