CSV MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CSV MCP Servershow schema of processes.csv"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CSV MCP Server
A Python MCP (Model Context Protocol) server that enables AI assistants to answer natural language questions about company processes and operational data stored in CSV files. Built with FastMCP and Polars for efficient CSV processing with server-side filter expressions.
Technologies
Technology | Purpose |
Python 3.10+ | Runtime |
MCP server framework | |
High-performance CSV loading and filtering | |
Containerized deployment | |
Testing framework |
Available Tools
Tool | Description |
| Lists all CSV files in the configured directory |
| Shows column names, data types, and sample rows for a CSV file |
| Queries a CSV file using a Polars filter expression |
Quick Start
Without Docker
Install dependencies:
pip install mcp polarsPlace your CSV files in the
./data/directory (or setCSV_DIRto a custom path).Run the server:
python server.pyThe server starts in
stdiomode by default, which is what AI clients like Claude Desktop and Cursor expect.
With Docker
Place your CSV files in the
./data/directory.Build and start the container:
docker compose up -dThe server runs in HTTP mode on
http://localhost:8000/mcp.Verify connectivity:
curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}},"id":1}'
Configuration
Environment Variables
Variable | Default | Description |
|
| Path to the directory containing CSV files |
|
| Transport mode: |
|
| Host address for HTTP mode |
|
| Port for HTTP mode |
AI Client Integration
OpenCode
Add to your opencode.json:
Local (stdio):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"csv-mcp": {
"type": "local",
"command": ["python", "server.py"],
"environment": {
"CSV_DIR": "./data"
},
"enabled": true
}
}
}Docker (HTTP):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"csv-mcp": {
"type": "remote",
"url": "http://localhost:8000/mcp",
"enabled": true
}
}
}Claude Desktop / Cursor
For stdio mode:
{
"mcpServers": {
"csv-mcp": {
"command": "python",
"args": ["/path/to/server.py"],
"env": {
"CSV_DIR": "/path/to/data"
}
}
}
}For Docker (HTTP):
{
"mcpServers": {
"csv-mcp": {
"url": "http://localhost:8000/mcp"
}
}
}Usage Examples
Once connected, ask your AI assistant questions like:
"List all available CSV files"
"Show the schema of processes.csv"
"Find all rows where status equals 'active' in processes.csv"
The ask_csv_question tool accepts Polars filter expressions:
Expression | Description |
| Filter by exact match |
| Filter by numeric comparison |
| Filter by substring match |
Testing
# Run all tests
python -m pytest tests/ -v
# Run with coverage
COVERAGE_FILE=/tmp/.coverage python -m pytest tests/ --cov=server --cov-report=term-missingSecurity
Path traversal protection: All file paths are resolved and validated to stay within
CSV_DIRExpression sanitization: Filter expressions are checked against dangerous patterns (
import,exec,eval, etc.) before evaluation
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/cledupe/mcp-csv'
If you have feedback or need assistance with the MCP directory API, please join our Discord server