Data File Analysis 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., "@Data File Analysis MCP ServerCan you summarize the sample CSV file?"
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.
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
Related MCP server: MCP File Analyzer
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 fileInstallation
Install uv (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | shCreate and activate virtual environment:
uv venv source .venv/bin/activateInstall dependencies:
uv add "mcp[cli]" pandas pyarrow
Usage
Running the Server
Start the MCP server:
uv run main.pyUsing 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.
{
"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
summarize_csv_file(filename: str)
Summarizes a CSV file by reporting its number of rows and columns
Example:
summarize_csv_file("sample.csv")
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
Create a new file in the
tools/directoryImport the MCP server instance:
from server import mcpDefine your tool function with the
@mcp.tool()decoratorImport the new tool module in
main.py
Adding New File Formats
Add utility functions in
utils/file_reader.pyCreate corresponding tools in the
tools/directoryImport 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.
Available Tools
2 toolssummarize_csv_fileA
Summarize a CSV file by reporting its number of rows and columns. Args: filename: Name of the CSV file in the /data directory (e.g., 'sample.csv') Returns: A string describing the file's dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes the operation (reporting rows and columns) which is a read-only analysis, but doesn't explicitly state it's non-destructive or disclose edge cases like malformed CSVs, empty files, or large files. The return value is described as 'a string describing the file's dimensions,' which is helpful, but behavioral detail is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: a single summary sentence plus minimal Args/Returns documentation. Every sentence earns its place, with zero waste or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-param read-only tool with an output schema. The description explains purpose, parameter format, and return type. For the tool's low complexity, it is reasonably complete. Minor gaps: no handling of error cases or explicit confirmation of non-destructive read behavior, but these are minor for a summary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter. It does: 'filename: Name of the CSV file in the /data directory (e.g., 'sample.csv')' adds the directory constraint and a concrete example format, which goes beyond the bare schema field. Baseline for 1 param with 0% coverage would be 4, and this delivers exactly that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb+resource: 'Summarize a CSV file by reporting its number of rows and columns.' It clearly distinguishes from sibling summarize_parquet_file (CSV vs parquet). Could be improved but purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the file must be in the /data directory, providing some context, and the tool is clearly for CSV vs parquet. However, it doesn't explicitly note when to use this vs summarize_parquet_file or any exclusions, relying on the format in the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_parquet_fileB
Summarize a Parquet file by reporting its number of rows and columns. Args: filename: Name of the Parquet file in the /data directory (e.g., 'sample.parquet') Returns: A string describing the file's dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description mentions the return value (a string describing dimensions) but does not disclose the actual output format, whether it reads the entire file into memory, error behavior for missing files, or whether it handles nested/partitioned Parquet files. For a read-only tool, the absence of annotations and lack of behavioral detail is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and uses the Args/Returns structure for clarity. It's front-loaded with the core purpose in the first sentence. Every sentence earns its place, though the Args/Returns formatting is slightly verbose for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter, read-only tool with an output schema present, the description is reasonably complete. It states inputs and return type. However, the return format is vague ('a string describing the file's dimensions') and the /data directory constraint could use more precision (absolute vs relative paths, access permissions). Given the low complexity, this is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 0% schema description coverage, the description compensates somewhat by specifying the filename format with an example ('sample.parquet') and the /data directory location. However, it doesn't clarify whether the path extension matters, whether it accepts paths with subdirectories under /data, or what happens with invalid filenames. The description adds moderate value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb+resource: 'Summarize a Parquet file by reporting its number of rows and columns.' This is specific about what it does and distinguishes it from the sibling summarize_csv_file by explicitly naming the Parquet format. However, it doesn't explicitly contrast itself with the sibling tool, so it doesn't fully maximize sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating the tool works on files in the /data directory, but gives no explicit guidance on when to choose this over summarize_csv_file or any exclusions. The file-format naming (Parquet vs CSV) makes the usage distinction implicit but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
summarize_csv_file - First observed
summarize_parquet_file
TDQS
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Standardize, reshape, and normalize messy data — CSV, Excel, Parquet, S3, databases.
Transform your data analysis with our Data Compute & Stats Bot. Effortlessly calculate descriptive
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables conversational analysis of CSV and Parquet files through natural language, providing statistics, summaries, data type information, and comprehensive multi-step data analysis.-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables the analysis of CSV and Parquet files by providing tools for statistical summaries, data previews, and structure exploration. It allows users to query local datasets and create sample data using natural language.-
- FlicenseNot gradedqualityDmaintenanceEnables AI models to interact with local CSV and Parquet data through MCP tools, providing summarization and analysis capabilities.1-
- AlicenseAqualityAmaintenanceEnables LLMs to profile and analyze tabular data files (CSV, Parquet, Excel, JSON) by extracting schema, statistics, data quality issues, and dtype suggestions, returning structured JSON.72MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/llm-guy/mcp_server_public'
If you have feedback or need assistance with the MCP directory API, please join our Discord server