csv-mcp-server
by Navneet1710
README.md
# š CSV MCP Server ā Bring Your Data to Life in Claude
## Why This Matters
If you've ever tried to analyze CSV files in Claude.ai, you know the pain ā it can't read your files directly. You end up:
- Copying and pasting CSV snippets (and hitting character limits)
- Uploading your data to other tools
- Manually describing what's inside your CSV
That's time-consuming and breaks your workflow.
## Enter the CSV MCP Server
This lightweight connector lets Claude directly access and analyze your local CSV files ā privately, efficiently, and in real time.
With it, you can simply say:
**"Claude, show me all customers from New York with purchases over $1000,"**
and Claude will query your actual file.
## What This Server Does
Once connected, Claude can:
ā
List your local CSV files
ā
Preview structure and sample data
ā
Run queries using natural language or Pandas syntax
ā
Generate quick summaries (mean, median, count, etc.)
ā
Handle large datasets ā all without sending data online
Everything runs locally ā your files never leave your system.
## Why It's Different
- **Local-first & private**: your data stays on your device
- **Fast**: built using FastMCP
- **Extendable**: easily add Excel, TSV, or custom logic
- **Seamless**: Claude becomes your personal data assistant
## Quick Start
### Requirements
- Python 3.11 or higher
- Claude Desktop app
- [uv](https://docs.astral.sh/uv/) (recommended package manager)
### 1. Clone the Repository
```bash
git clone https://github.com/Navneet1710/csv_mcp_server.git
cd csv_mcp_server
uv init .
```
### 2. Install Dependencies
Using uv, add the required packages:
```bash
uv add fastmcp
uv add pandas
```
### 3. Set Your CSV Directory
Open `main.py` and edit line 14 to match where your CSV files are stored:
```python
CSV_DIRECTORY = Path.home() / "Documents" / "csv_files" # customize this if needed
```
### 4. Run the Server
Start the MCP server with:
```bash
uv run main.py
```
For development or inspection mode (to see tools, logs, and capabilities):
```bash
uv run fastmcp dev main.py
```
## Connecting to Claude Desktop
Open your Claude configuration file:
| OS | Path |
|---|---|
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Linux | `~/.config/Claude/claude_desktop_config.json` |
Add this MCP server entry:
```json
"csv-analyzer": {
"command": uv,
"args": [
"--directory",
"path\\to\\csv_mcp_server",
"run",
"main.py"
]
}
```
Save and restart Claude Desktop.
## Using It Inside Claude
Once connected, try commands like:
### List all CSVs
*"What CSV files are available?"*
### Preview a file
*"Show me the first few rows of sales_data.csv."*
### Run queries
*"From customer_data.csv, show all entries where purchase > 500."*
### Summarize data
*"Give me the average revenue in financial_report.csv."*
### Analyze relationships
*"Find the correlation between 'age' and 'satisfaction_score' in survey_results.csv."*
## Tools and Resources
| Type | Name | Description |
|---|---|---|
| Resource | `csv://list` | Lists all available CSV files |
| Resource | `csv://{filename}` | Preview a CSV (first 10 rows) |
| Tool | `read_csv(filename, rows)` | Read full or partial CSV data |
| Tool | `get_csv_info(filename)` | Get metadata and structure |
| Tool | `query_csv(filename, query)` | Filter data using Pandas query syntax |
| Tool | `get_csv_statistics(filename, column)` | Compute descriptive statistics |
## Default Folder Structure
By default, CSV files live in:
```
Documents/
āāā csv_files/
āāā sales_data.csv
āāā customer_info.csv
āāā inventory.csv
āāā financial_report.csv
```
## Customization
- **Change CSV directory** ā edit `CSV_DIRECTORY` in `main.py`
- **Add support for Excel/TSV** ā update the file-reading logic
- **Create your own tools** ā add new `@mcp.tool()` functions for custom analysis
## Troubleshooting
### "Directory does not exist"
ā Make sure the path exists or create it:
```bash
mkdir -p ~/Documents/csv_files
```
### "File not found"
ā Check spelling and ensure the file is inside your configured directory.
### Claude doesn't detect the server
ā Restart Claude Desktop and confirm the config file path.
### Permission issues
ā Ensure Claude has read access to the directory (run as admin on Windows if needed).
### Debugging
Run directly:
```bash
uv run main.py
```
## Contributing
Got an idea or improvement? Contributions are welcome!
1. Fork this repo
2. Create a feature branch
3. Add your changes
4. Submit a pull request
## License
Open source ā use, modify, and share freely.
## Built With
- [FastMCP](https://github.com/jlowin/fastmcp) ā for fast, local MCP integration
- [pandas](https://pandas.pydata.org/) ā for data manipulation and statistics
- [Anthropic's MCP](https://modelcontextprotocol.io/) ā for connecting Claude to your environment
---
## Turn Claude Into Your Personal Data Analyst
Set this up once ā and from then on, you can explore and analyze your CSVs right inside Claude.
**No uploads, no manual parsing, no limits.**
Run it locally. Keep your data private. Get instant insights.
**Make sure you don't forget to star the repo**
TDQS
B3.4/5.0
Scored across 4 tools
Disambiguation5/5
Each tool has a clear, distinct purpose: metadata (get_csv_info), statistics (get_csv_statistics), query/filtering (query_csv), and raw data retrieval (read_csv). No overlapping functionality.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern with snake_case, using 'get_csv_' for info and statistics, and straightforward verbs for the others.
Tool Count5/5
4 tools is a well-scoped set for a CSV server, covering the essential read operations without unnecessary bloat.
Completeness3/5
The tool surface covers read operations comprehensively but lacks write or edit capabilities (e.g., create, update, delete rows or columns), which limits full CRUD coverage.
Maintenance
ActivityInactive
ResponsivenessNo recent community issues