Skip to main content
Glama
santoshray02

CSV Editor

by santoshray02

export_csv

Export CSV data from editing sessions to files for sharing, analysis, or backup. Supports multiple formats and encodings to meet different workflow requirements.

Instructions

Export session data to various formats.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
session_idYes
file_pathNo
formatNocsv
encodingNoutf-8
indexNo

Implementation Reference

  • Core implementation of the export_csv tool handler. Retrieves dataframe from session, handles multiple export formats (CSV, TSV, JSON, Excel, Parquet, HTML, Markdown), writes to file (auto-generates path if not provided), and returns operation result with file details.
    async def export_csv(
        session_id: str,
        file_path: Optional[str] = None,
        format: ExportFormat = ExportFormat.CSV,
        encoding: str = "utf-8",
        index: bool = False,
        ctx: Context = None
    ) -> Dict[str, Any]:
        """Export session data to various formats.
        
        Args:
            session_id: Session ID to export
            file_path: Optional output file path (auto-generated if not provided)
            format: Export format (csv, tsv, json, excel, parquet, html, markdown)
            encoding: Output encoding
            index: Whether to include index in output
            ctx: FastMCP context
        
        Returns:
            Operation result with file path
        """
        try:
            # Get session
            session_manager = get_session_manager()
            session = session_manager.get_session(session_id)
            
            if not session or session.df is None:
                return OperationResult(
                    success=False,
                    message="Session not found or no data loaded",
                    error="Invalid session ID"
                ).model_dump()
            
            if ctx:
                await ctx.info(f"Exporting data in {format.value} format")
                await ctx.report_progress(0.1, "Preparing export...")
            
            # Generate file path if not provided
            if not file_path:
                timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                filename = f"export_{session_id[:8]}_{timestamp}"
                
                # Determine extension based on format
                extensions = {
                    ExportFormat.CSV: ".csv",
                    ExportFormat.TSV: ".tsv",
                    ExportFormat.JSON: ".json",
                    ExportFormat.EXCEL: ".xlsx",
                    ExportFormat.PARQUET: ".parquet",
                    ExportFormat.HTML: ".html",
                    ExportFormat.MARKDOWN: ".md"
                }
                
                file_path = tempfile.gettempdir() + "/" + filename + extensions[format]
            
            file_path = Path(file_path)
            df = session.df
            
            if ctx:
                await ctx.report_progress(0.5, f"Writing {format.value} file...")
            
            # Export based on format
            if format == ExportFormat.CSV:
                df.to_csv(file_path, encoding=encoding, index=index)
            elif format == ExportFormat.TSV:
                df.to_csv(file_path, sep='\t', encoding=encoding, index=index)
            elif format == ExportFormat.JSON:
                df.to_json(file_path, orient='records', indent=2)
            elif format == ExportFormat.EXCEL:
                df.to_excel(file_path, index=index, engine='openpyxl')
            elif format == ExportFormat.PARQUET:
                df.to_parquet(file_path, index=index)
            elif format == ExportFormat.HTML:
                df.to_html(file_path, index=index)
            elif format == ExportFormat.MARKDOWN:
                df.to_markdown(file_path, index=index)
            else:
                return OperationResult(
                    success=False,
                    message=f"Unsupported format: {format}",
                    error="Invalid export format"
                ).model_dump()
            
            # Record operation
            session.record_operation(
                OperationType.EXPORT,
                {"format": format.value, "file_path": str(file_path)}
            )
            
            if ctx:
                await ctx.report_progress(1.0, "Export complete!")
                await ctx.info(f"Exported to {file_path}")
            
            return OperationResult(
                success=True,
                message=f"Successfully exported data to {format.value}",
                session_id=session_id,
                data={
                    "file_path": str(file_path),
                    "format": format.value,
                    "rows_exported": len(df),
                    "file_size_bytes": file_path.stat().st_size
                }
            ).model_dump()
            
        except Exception as e:
            if ctx:
                await ctx.error(f"Failed to export data: {str(e)}")
            return OperationResult(
                success=False,
                message="Failed to export data",
                error=str(e)
            ).model_dump()
  • MCP tool registration for export_csv using @mcp.tool decorator. Converts string format to ExportFormat enum and delegates to the core handler in io_operations.
    @mcp.tool
    async def export_csv(
        session_id: str,
        file_path: Optional[str] = None,
        format: str = "csv",
        encoding: str = "utf-8",
        index: bool = False,
        ctx: Context = None
    ) -> Dict[str, Any]:
        """Export session data to various formats."""
        from .models import ExportFormat
        format_enum = ExportFormat(format)
        return await _export_csv(session_id, file_path, format_enum, encoding, index, ctx)
  • Pydantic Enum defining the supported export formats (CSV, TSV, JSON, Excel, Parquet, HTML, Markdown) used for input validation in export_csv tool.
    class ExportFormat(str, Enum):
        """Supported export formats."""
        
        CSV = "csv"
        TSV = "tsv"
        JSON = "json"
        EXCEL = "excel"
        PARQUET = "parquet"
        HTML = "html"
        MARKDOWN = "markdown"

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/santoshray02/csv-editor'

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