Skip to main content
Glama

VisiData MCP Server

A Model Context Protocol (MCP) server that provides access to VisiData functionality with enhanced data visualization and analysis capabilities.

🚀 Features

📊 Data Visualization

  • create_correlation_heatmap - Generate correlation matrices with beautiful heatmap visualizations

  • create_distribution_plots - Create statistical distribution plots (histogram, box, violin, kde)

  • create_graph - Custom graphs (scatter, line, bar, histogram) with categorical grouping support

🧠 Advanced Skills Analysis

  • parse_skills_column - Parse comma-separated skills into individual skills with one-hot encoding

  • analyze_skills_by_location - Comprehensive skills frequency and distribution analysis by location

  • create_skills_location_heatmap - Visual heatmap showing skills distribution across locations

  • analyze_salary_by_location_and_skills - Advanced salary statistics by location and skills combination

🔧 Core Data Tools

  • load_data - Load and inspect data files from various formats

  • get_data_sample - Get a preview of your data with configurable row count

  • analyze_data - Perform comprehensive data analysis with column types and statistics

  • convert_data - Convert between different data formats (CSV ↔ JSON ↔ Excel, etc.)

  • filter_data - Filter data based on conditions (equals, contains, greater/less than)

  • get_column_stats - Get detailed statistics for specific columns

  • sort_data - Sort data by any column in ascending or descending order

Related MCP server: MCP Tabular Data Analysis Server

📦 Installation

npm install -g @moeloubani/visidata-mcp@beta

Prerequisites: Python 3.10+ (the installer will check and guide you if needed)

Alternative: Python Install

pip install visidata-mcp

Development Install

git clone https://github.com/moeloubani/visidata-mcp.git
cd visidata-mcp
pip install -e .

⚙️ Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "visidata": {
      "command": "visidata-mcp"
    }
  }
}

Cursor AI

Create .cursor/mcp.json in your project:

{
  "mcpServers": {
    "visidata": {
      "command": "visidata-mcp"
    }
  }
}

Restart your AI application after configuration changes.

🎯 Example Usage

Data Visualization

# Create a correlation heatmap
create_correlation_heatmap("sales_data.csv", "correlation_heatmap.png")

# Generate distribution plots for all numeric columns
create_distribution_plots("sales_data.csv", "distributions.png", plot_type="histogram")

# Create a scatter plot with categorical grouping
create_graph("sales_data.csv", "price", "sales", "scatter_plot.png", 
            graph_type="scatter", category_column="region")

Skills Analysis

# Parse comma-separated skills into individual columns
parse_skills_column("jobs.csv", "required_skills", "skills_parsed.csv")

# Analyze skills distribution by location
analyze_skills_by_location("jobs.csv", "required_skills", "location", "skills_analysis.json")

# Create skills-location heatmap
create_skills_location_heatmap("jobs.csv", "required_skills", "location", "skills_heatmap.png")

# Comprehensive salary analysis
analyze_salary_by_location_and_skills("jobs.csv", "salary", "location", "required_skills", "salary_analysis.xlsx")

Basic Data Operations

# Load and analyze data
load_data("data.csv")
get_data_sample("data.csv", 10)
analyze_data("data.csv")

# Transform data
convert_data("data.csv", "data.json")
filter_data("data.csv", "revenue", "greater_than", "1000", "high_revenue.csv")
sort_data("data.csv", "date", False, "sorted_data.csv")

📊 Supported Data Formats

  • Spreadsheets: CSV, TSV, Excel (XLSX/XLS)

  • Structured Data: JSON, JSONL, XML, YAML

  • Databases: SQLite

  • Scientific: HDF5, Parquet, Arrow

  • Archives: ZIP, TAR, GZ, BZ2, XZ

  • Web: HTML tables

🔧 Troubleshooting

Common Issues

"No module named 'matplotlib'"

  • Make sure you're using the correct MCP server path

  • For local development: /path/to/visidata-mcp/venv/bin/visidata-mcp

  • Restart your AI application after configuration changes

"0 tools available"

  • Verify the MCP server path in your configuration

  • Check that Python 3.10+ is installed

  • Restart your AI application completely

Verification

Test your installation:

# Check if server starts
visidata-mcp

# Test with Python
python -c "from visidata_mcp.server import main; print('✅ Server ready')"

🎨 Key Features

  • ✅ Complete visualization support with matplotlib, seaborn, and scipy

  • ✅ Advanced skills analysis for job market and HR data

  • ✅ Skills-location correlation analysis and visualization

  • ✅ Salary analysis by location and skills combination

  • ✅ Enhanced error handling with dependency validation

  • ✅ Publication-ready visualizations (300 DPI PNG output)

📈 Use Cases

Job Market Analysis

  • Skills demand analysis by geographic location

  • Salary benchmarking across locations and skill sets

  • Market trend visualization with correlation analysis

Data Science Workflows

  • Complete statistical analysis pipeline

  • Publication-ready visualizations

  • Advanced text processing for categorical data

Business Intelligence

  • Location-based performance analysis

  • Skills gap identification

  • Compensation analysis and benchmarking

🛠 Development

# Install for development
git clone https://github.com/moeloubani/visidata-mcp.git
cd visidata-mcp
pip install -e .

# Build package
python -m build

# Run tests
python -c "from visidata_mcp.server import main; print('✅ Ready')"

📄 License

MIT License - see LICENSE for details.

Available Tools

15 tools
analyze_dataC

Perform basic analysis on a dataset.

Args: file_path: Path to the data file

Returns: Analysis results including statistics and data types

Inputs: file_path (required). Returns: result

analyze_salary_by_location_and_skillsC

Analyze salary statistics by location and skills combination.

Args: file_path: Path to the data file salary_column: Column name containing salary information location_column: Column name containing location information skills_column: Column name containing comma-separated skills output_path: Optional path to save the analysis results

Returns: Salary analysis by location and skills

Inputs: file_path (required), salary_column (required), location_column (required), skills_column (required), +1 more. Returns: result

analyze_skills_by_locationC

Analyze skills frequency and distribution by location.

Args: file_path: Path to the data file skills_column: Column name containing comma-separated skills location_column: Column name containing location information output_path: Optional path to save the analysis results

Returns: Skills analysis by location

Inputs: file_path (required), skills_column (required), location_column (required), output_path. Returns: result

convert_dataC

Convert data from one format to another using pandas.

Args: input_path: Path to the input data file output_path: Path for the output file output_format: Target format (csv, json, xlsx, etc.)

Returns: Success message or error details

Inputs: input_path (required), output_path (required), output_format. Returns: result

create_correlation_heatmapB

Create a correlation heatmap from numeric columns in the dataset.

Args: file_path: Path to the data file output_path: Path where to save the heatmap image columns: Optional list of specific columns to include (if None, uses all numeric columns)

Returns: Information about the created heatmap

Inputs: file_path (required), output_path (required), columns. Returns: result

create_distribution_plotsC

Create distribution plots for numeric columns.

Args: file_path: Path to the data file output_path: Path where to save the distribution plots columns: Optional list of specific columns to plot (if None, uses all numeric columns) plot_type: Type of distribution plot (histogram, box, violin, kde)

Returns: Information about the created distribution plots

Inputs: file_path (required), output_path (required), columns, plot_type. Returns: result

create_graphB

Create a graph/plot from data using matplotlib/seaborn.

Args: file_path: Path to the data file x_column: Column name for x-axis (must be numeric) y_column: Column name for y-axis (must be numeric) output_path: Path where to save the graph image graph_type: Type of graph (scatter, line, bar, histogram) category_column: Optional categorical column for grouping/coloring

Returns: Information about the created graph

Inputs: file_path (required), x_column (required), y_column (required), output_path (required), +2 more. Returns: result

create_skills_location_heatmapB

Create a heatmap showing skills distribution across locations.

Args: file_path: Path to the data file skills_column: Column name containing comma-separated skills location_column: Column name containing location information output_path: Path where to save the heatmap image top_skills: Number of top skills to include (default: 15) top_locations: Number of top locations to include (default: 10)

Returns: Information about the created skills-location heatmap

Inputs: file_path (required), skills_column (required), location_column (required), output_path (required), +2 more. Returns: result

filter_dataC

Filter data based on a condition.

Args: file_path: Path to the data file column: Column name to filter on condition: Filter condition (equals, contains, greater_than, less_than) value: Value to filter by output_path: Optional path to save filtered data

Returns: Information about the filtered data

Inputs: file_path (required), column (required), condition (required), value (required), +1 more. Returns: result

get_column_statsC

Get statistics for a specific column.

Args: file_path: Path to the data file column: Column name to analyze

Returns: Column statistics in JSON format

Inputs: file_path (required), column (required). Returns: result

get_data_sampleB

Get a sample of data from a file.

Args: file_path: Path to the data file rows: Number of rows to return (default: 10)

Returns: Sample data in JSON format

Inputs: file_path (required), rows. Returns: result

get_supported_formatsA

Get a list of supported file formats in VisiData.

Returns: List of supported formats and their descriptions

Inputs: no named parameters. Returns: result

load_dataC

Load data from a file using VisiData.

Args: file_path: Path to the data file file_type: Optional file type hint (csv, json, xlsx, etc.)

Returns: String representation of the loaded data structure

Inputs: file_path (required), file_type. Returns: result

parse_skills_columnB

Parse comma-separated skills into individual skills and create one-hot encoding.

Args: file_path: Path to the data file skills_column: Column name containing comma-separated skills output_path: Optional path to save the processed data

Returns: Information about the parsed skills data

Inputs: file_path (required), skills_column (required), output_path. Returns: result

sort_dataB

Sort data by a specific column.

Args: file_path: Path to the data file column: Column name to sort by descending: Sort in descending order (default: False) output_path: Optional path to save sorted data

Returns: Information about the sorted data

Inputs: file_path (required), column (required), descending, output_path. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 15 tools

    Disambiguation3/5

    There is significant functional overlap between tools, particularly among the analysis and visualization tools. For example, 'analyze_data', 'analyze_salary_by_location_and_skills', 'analyze_skills_by_location', 'get_column_stats', and 'create_graph' all perform data analysis with unclear boundaries. However, the descriptions help differentiate some specific use cases like salary analysis or skills parsing.

    Naming Consistency4/5

    Most tools follow a consistent verb_noun pattern (e.g., 'analyze_data', 'convert_data', 'filter_data', 'sort_data', 'load_data'). There are minor deviations with tools like 'get_column_stats' and 'get_data_sample' using 'get_' prefix instead of action verbs, and 'parse_skills_column' uses 'parse_' rather than 'analyze_' or 'process_', but overall the naming is readable and predictable.

    Tool Count4/5

    With 15 tools, the count is slightly high but reasonable for a data analysis server covering loading, conversion, filtering, sorting, analysis, and visualization. It's borderline heavy but each tool appears to serve a specific function in the data workflow, though some redundancy exists.

    Completeness4/5

    The toolset provides comprehensive coverage for data analysis workflows including loading, conversion, filtering, sorting, sampling, statistical analysis, and visualization. Minor gaps exist such as no explicit data cleaning or transformation tools beyond parsing skills, and no update/delete operations for datasets, but agents can work around these with the available tools.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers