Transform how AI assistants work with CSV data. CSV Editor is a high-performance MCP server that gives Claude, ChatGPT, and other AI assistants powerful data manipulation capabilities through simple commands.
AI assistants struggle with complex data operations - they can read files but lack tools for filtering, transforming, analyzing, and validating CSV data efficiently.
CSV Editor bridges this gap by providing AI assistants with 40+ specialized tools for CSV operations, turning them into powerful data analysts that can:
- Clean messy datasets in seconds
- Perform complex statistical analysis
- Validate data quality automatically
- Transform data with natural language commands
- Track all changes with undo/redo capabilities
| Feature | CSV Editor | Traditional Tools |
|---|---|---|
| AI Integration | Native MCP protocol | Manual operations |
| Auto-Save | Automatic with strategies | Manual save required |
| History Tracking | Full undo/redo with snapshots | Limited or none |
| Session Management | Multi-user isolated sessions | Single user |
| Data Validation | Built-in quality scoring | Separate tools needed |
| Performance | Handles GB+ files with chunking | Memory limitations |
# Your AI assistant can now do this:
"Load the sales data and remove duplicates"
"Filter for Q4 2024 transactions over $10,000"
"Calculate correlation between price and quantity"
"Fill missing values with the median"
"Export as Excel with the analysis"
# All with automatic history tracking and undo capability!Claude Desktop (Click to expand)
Add to the MCP Settings file
( Claude -> Settings -> Developer -> Show MCP Settings --> claude_mcp_settings.json ):
{
"mcpServers": {
"csv-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jonpspri/csv-editor.git", "csv-editor"],
"env": {
"CSV_EDITOR_MAX_FILE_SIZE_MB": "1024",
"CSV_EDITOR_CSV_HISTORY_DIR": "/tmp/csv_history"
}
}
}
}Other Clients (Continue, Cline, Windsurf, Zed)
Edit ~/.continue/config.json:
{
"mcpServers": {
"csv-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jonpspri/csv-editor.git", "csv-editor"]
}
}
}Add to VS Code settings (settings.json):
{
"cline.mcpServers": {
"csv-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jonpspri/csv-editor.git", "csv-editor"]
}
}
}Edit ~/.windsurf/mcp_servers.json:
{
"mcpServers": {
"csv-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jonpspri/csv-editor.git", "csv-editor"]
}
}
}Edit ~/.config/zed/settings.json:
{
"experimental.mcp_servers": {
"csv-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jonpspri/csv-editor.git", "csv-editor"]
}
}
}# Morning: Load yesterday's data
session = load_csv("daily_sales.csv")
# Clean: Remove duplicates and fix types
remove_duplicates(session_id)
change_column_type("date", "datetime")
fill_missing_values(strategy="median", columns=["revenue"])
# Analyze: Get insights
get_statistics(columns=["revenue", "quantity"])
detect_outliers(method="iqr", threshold=1.5)
get_correlation_matrix(min_correlation=0.5)
# Report: Export cleaned data
export_csv(format="excel", file_path="clean_sales.xlsx")# Extract from multiple sources
load_csv_from_url("https://api.example.com/data.csv")
# Transform with complex operations
filter_rows(conditions=[
{"column": "status", "operator": "==", "value": "active"},
{"column": "amount", "operator": ">", "value": 1000}
])
add_column(name="quarter", formula="Q{(month-1)//3 + 1}")
group_by_aggregate(group_by=["quarter"], aggregations={
"amount": ["sum", "mean"],
"customer_id": "count"
})
# Load to different formats
export_csv(format="parquet") # For data warehouse
export_csv(format="json") # For API# Validate incoming data
validate_schema(schema={
"customer_id": {"type": "integer", "required": True},
"email": {"type": "string", "pattern": r"^[^@]+@[^@]+\.[^@]+$"},
"age": {"type": "integer", "min": 0, "max": 120}
})
# Quality scoring
quality_report = check_data_quality()
# Returns: overall_score, missing_data%, duplicates, outliers
# Anomaly detection
anomalies = find_anomalies(methods=["statistical", "pattern"])- Load & Export: CSV, JSON, Excel, Parquet, HTML, Markdown
- Transform: Filter, sort, group, pivot, join
- Clean: Remove duplicates, handle missing values, fix types
- Calculate: Add computed columns, aggregations
- Statistics: Descriptive stats, correlations, distributions
- Outliers: IQR, Z-score, custom thresholds
- Profiling: Complete data quality reports
- Validation: Schema checking, quality scoring
- Auto-Save: Never lose work with configurable strategies
- History: Full undo/redo with operation tracking
- Sessions: Multi-user support with isolation
- Performance: Stream processing for large files
- Null Value Support: Full support for JSON
nullβ PythonNoneβ pandasNaN - Claude Code Compatible: Handles JSON string serialization automatically
- Type Safety: Improved type annotations with
CellValue,RowData,FilterCondition - Modular Architecture: Organized tool modules for better maintainability
Complete Tool List (40+ tools)
load_csv- Load from fileload_csv_from_url- Load from URLload_csv_from_content- Load from stringexport_csv- Export to various formatsget_session_info- Session detailslist_sessions- Active sessionsclose_session- Cleanup
filter_rows- Complex filteringsort_data- Multi-column sortselect_columns- Column selectionrename_columns- Rename columnsadd_column- Add computed columnsremove_columns- Remove columnsupdate_column- Update valueschange_column_type- Type conversionfill_missing_values- Handle nullsremove_duplicates- Deduplicate
get_statistics- Statistical summaryget_column_statistics- Column statsget_correlation_matrix- Correlationsgroup_by_aggregate- Group operationsget_value_counts- Frequency countsdetect_outliers- Find outliersprofile_data- Data profiling
validate_schema- Schema validationcheck_data_quality- Quality metricsfind_anomalies- Anomaly detection
configure_auto_save- Setup auto-saveget_auto_save_status- Check statusundo/redo- Navigate historyget_history- View operationsrestore_to_operation- Time travel
| Variable | Default | Description |
|---|---|---|
CSV_EDITOR_MAX_FILE_SIZE_MB |
1024 | Maximum file size in MB |
CSV_EDITOR_CSV_HISTORY_DIR |
"." | History directory path |
CSV_EDITOR_SESSION_TIMEOUT |
3600 | Session timeout in seconds |
CSV_EDITOR_CHUNK_SIZE |
10000 | Processing chunk size |
CSV_EDITOR_AUTO_SAVE |
true | Enable auto-save |
CSV Editor automatically saves your work with configurable strategies:
- Overwrite (default) - Update original file
- Backup - Create timestamped backups
- Versioned - Maintain version history
- Custom - Save to specified location
# Configure auto-save
configure_auto_save(
strategy="backup",
backup_dir="/backups",
max_backups=10
)Alternative Installation Methods
git clone https://github.com/jonpspri/csv-editor.git
cd csv-editor
pip install -e .pipx install git+https://github.com/jonpspri/csv-editor.git# Install latest version
pip install git+https://github.com/jonpspri/csv-editor.git
# Or using uv
uv pip install git+https://github.com/jonpspri/csv-editor.git
# Install specific version
pip install git+https://github.com/jonpspri/csv-editor.git@v1.0.1uv run test # Run tests
uv run test-cov # With coverage
uv run all-checks # Format, lint, type-check, testcsv-editor/
βββ src/csv_editor/ # Core implementation
β βββ server.py # FastMCP server entry point
β βββ models/ # Data models and session management
β β βββ csv_session.py # Session management & settings
β β βββ data_models.py # Core data types
β β βββ data_session.py # Data operations
β βββ tools/ # MCP tool implementations
β β βββ data_io.py # Load/export operations
β β βββ data_manipulation.py # Transform operations
β β βββ data_analysis.py # Statistics & analysis
β β βββ data_validation.py # Schema validation
β βββ exceptions.py # Custom error handling
β βββ _version.py # Dynamic version loading
βββ tests/ # Comprehensive test suite
βββ examples/ # Usage examples and demos
βββ scripts/ # Maintenance utilities
βββ docs/ # Docusaurus documentation site
- Type Safety: Full type annotations with Pydantic validation
- Modularity: Clear separation of concerns across modules
- Performance: Streaming operations for large datasets
- Reliability: Comprehensive error handling and logging
- Usability: Simple installation and configuration
- Maintainability: Modern tooling and clear documentation
We welcome contributions! See CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run
uv run all-checks - Submit a pull request
- SQL query interface
- Real-time collaboration
- Advanced visualizations
- Machine learning integrations
- Cloud storage support
- Performance optimizations for 10GB+ files
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
Apache 2.0 License - see LICENSE file
Full support for null values across all operations:
# Insert rows with null values
insert_row(session_id, -1, {
"name": "John Doe",
"email": null, # JSON null becomes Python None
"phone": null,
"notes": "Contact pending"
})
# Update cells to null
set_cell_value(session_id, 0, "email", null)
# Filter for null values
filter_rows(session_id, [{"column": "email", "operator": "is_null"}])Automatically handles Claude Code's JSON string serialization:
// Claude Code sends this:
{
"data": "{\"Company\": \"Acme\", \"Contact\": null, \"Status\": \"Active\"}"
}
// CSV Editor automatically parses it to:
{
"data": {"Company": "Acme", "Contact": null, "Status": "Active"}
}Built with:
Ready to supercharge your AI's data capabilities? Get started in 2 minutes β