Data File Analysis MCP Server
# Basic MCP Server for Data File Analysis
A Model Context Protocol (MCP) server that provides tools for analyzing CSV and Parquet files.
## Features
- **CSV File Analysis**: Summarize CSV files by reporting row and column counts
- **Parquet File Analysis**: Summarize Parquet files by reporting row and column counts
- **Sample Data**: Includes sample user data in both CSV and Parquet formats
## Project Structure
```
mix_server/
│
├── data/ # Sample CSV and Parquet files
│ ├── sample.csv
│ └── sample.parquet
│
├── tools/ # MCP tool definitions
│ ├── __init__.py
│ ├── csv_tools.py
│ └── parquet_tools.py
│
├── utils/ # Reusable file reading logic
│ ├── __init__.py
│ └── file_reader.py
│
├── server.py # MCP server instance
├── main.py # Entry point for the MCP server
├── generate_parquet.py # Script to convert CSV to Parquet
└── README.md # This file
```
## Installation
1. **Install uv** (if not already installed):
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
2. **Create and activate virtual environment**:
```bash
uv venv
source .venv/bin/activate
```
3. **Install dependencies**:
```bash
uv add "mcp[cli]" pandas pyarrow
```
## Usage
### Running the Server
Start the MCP server:
```bash
uv run main.py
```
### Using with LM Studio
To use this MCP server with LM Studio, edit your `mcp.json` file and add:
This starts the MCP server for you.
```json
{
"mcpServers": {
"mix_server": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/mcp_server_public",
"run",
"main.py"
]
}
}
}
```
**Note**: Replace `/path/to/your/mcp_server_public` with the actual path to your mcp_server_public directory.
Once loaded you should see all available tools for your local LLM to use.
### Available Tools
1. **summarize_csv_file(filename: str)**
- Summarizes a CSV file by reporting its number of rows and columns
- Example: `summarize_csv_file("sample.csv")`
2. **summarize_parquet_file(filename: str)**
- Summarizes a Parquet file by reporting its number of rows and columns
- Example: `summarize_parquet_file("sample.parquet")`
### Sample Data
The server includes sample user data with the following structure:
- **id**: Unique identifier
- **name**: User's full name
- **email**: User's email address
- **signup_date**: Date when the user signed up
## Development
### Adding New Tools
1. Create a new file in the `tools/` directory
2. Import the MCP server instance: `from server import mcp`
3. Define your tool function with the `@mcp.tool()` decorator
4. Import the new tool module in `main.py`
### Adding New File Formats
1. Add utility functions in `utils/file_reader.py`
2. Create corresponding tools in the `tools/` directory
3. Import the new tools in `main.py`
## Dependencies
- **mcp[cli]**: Official MCP SDK and command-line tools
- **pandas**: For reading CSV and Parquet files
- **pyarrow**: Adds support for reading Parquet files via Pandas
## License
This project is open source and available under the MIT License.
TDQS
Scored across 2 tools
The two tools are clearly distinct by file type (Parquet vs CSV), so an agent should be able to tell them apart when the file format is known. However, they share the identical purpose and structure (summarizing file dimensions), and there is no unified or generic tool to handle either format, which could cause confusion if an agent must guess the format.
Both tools follow the same verb_noun pattern (summarize_parquet_file, summarize_csv_file), sharing the identical 'summarize' verb and 'file' suffix. The only variation is the file format in the middle, which is consistent and predictable, though the format should ideally be a parameter rather than baked into the tool name.
With only 2 tools, this sits at the boundary of 'too few.' It's not a single trivial tool, but two near-identical tools covering only file summarization feels thin for a 'Data File Analysis' server, which implies a much broader analysis scope than just counting rows and columns.
For a server named 'Data File Analysis,' this surface is severely limited: there is no way to read, sample, filter, compute statistics, inspect columns/types, or join files. Even for a narrow summarization-only scope, neither tool supports inspecting column schemas or data previews, leaving significant gaps that will cause agent failures for common analysis tasks.