mcpField
C
CSV Analyzer MCP Server

CSV Analyzer MCP Server

ローカル
github.com/juanmaaltデータ・分析135 週間前に更新

CSV Analyzer MCP Server について

CSV Analyzer MCP Serverは、MCPクライアントからCSVテキストを分析し、統計、フィルタリング、外れ値検出、比較をJSONまたはMarkdownで返します。計算結果を必要とするアシスタントやワークフロー向けです。

主な機能

  1. 01列統計と型の検出
  2. 02頻度分布
  3. 03IQRとz-scoreによる外れ値検出
  4. 04条件による行の絞り込み
  5. 05CSVのプレビューと比較
  6. 06JSONまたはMarkdown出力

活用シーン

  1. 01欠損値と列統計の要約
  2. 02分析前のデータセット絞り込み
  3. 03数値の異常レコードの検出
  4. 04データセットの各版の比較

MCP 対応

MCP対応クライアントにCSV分析ツールを提供します。CSVテキストを受け取り、計算結果を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

CSV アナライザー MCP サーバー

MCP に対応したあらゆるクライアントから呼び出せるツールとして、CSV 分析を提供する軽量な MCP サーバーです。

CSV の生データを渡すと、行数、型の検出、NULL 率、重複、分布、外れ値の検出など、構造化された統計情報を JSON または Markdown で取得できます。


MCP とは?

Model Context Protocol は、AI アシスタントが外部ツールを呼び出せるようにするオープン標準です。このサーバーは CSV 分析を MCP ツールとして提供するため、Claude に「この CSV を分析して、NULL が最も多い列を教えて」や「収益が 10000 を超える行をフィルタリングしてから、結果を分析して」といったことを依頼し、実際に計算された結果を取得できます。


機能

  • 列ごとの分析 — 型の検出、NULL 率、一意な値、最小値/最大値/平均値/中央値/標準偏差、四分位数、最頻値、日付範囲
  • 頻度分布 — 任意の列について、値の出現回数と割合をランキング形式で表示
  • 外れ値の検出 — すべての数値列に対し、IQR 法と z スコア法を使用
  • 行のフィルタリング — 列の条件でフィルタリングし、さらに分析を連鎖して実行
  • データのプレビュー — 分析前に、先頭 N 行を Markdown テーブルで確認
  • CSV の比較 — スキーマ、行の内容、またはその両方で 2 つのファイルを比較
  • データのクリーニング — 分析前に重複の削除や NULL を含む行の削除を任意で実行
  • 2 種類の出力形式 — プログラムでの利用に適した構造化 JSON、または読みやすい要約を表示する Markdown
  • カスタム区切り文字 — コンマ、セミコロン、タブ、パイプ、その他任意の区切り文字に対応
  • コンテンツベース — ファイルパスではなく CSV の生テキストを受け付けるため、安全でリモート環境にも対応

インストール

前提条件: Python ≥ 3.12 および uv

git clone https://github.com/juanmaalt/csv_analyzer_mcp_server.git
cd csv_analyzer_mcp_server
uv sync

MCP クライアントへの接続

Claude Desktop

次の内容を claude_desktop_config.json に追加してください (macOS では通常 ~/Library/Application Support/Claude/claude_desktop_config.json にあります)。

{
  "mcpServers": {
    "csv_analyzer": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/csv_analyzer_mcp_server",
        "python",
        "main.py"
      ]
    }
  }
}
Cursor / VS Code(MCP 拡張機能)
{
  "mcp": {
    "servers": {
      "csv_analyzer": {
        "command": "uv",
        "args": [
          "run",
          "--directory",
          "/absolute/path/to/csv_analyzer_mcp_server",
          "python",
          "main.py"
        ]
      }
    }
  }
}

設定を保存した後、クライアントを再起動してください。すべてのツールが使用可能なツール一覧に表示されます。


使用可能なツール

analyze_csv

CSV ファイルの統計を包括的に分析します。型、NULL 率、一意な値の数、型に応じた統計情報を含む、列ごとの要約を返します。

パラメーター型デフォルト説明
csv_contentstr必須CSV の全文(ファイルパスではありません)
delimiterstr","値を区切る文字
remove_duplicatesboolTrue分析前に完全に重複する行を削除
remove_non_valid_databoolTrue分析前に欠損または空のフィールドを含む行を削除
output_formatstr"json""json" または "markdown"

JSON 出力の構造:

{
  "total_rows": 38,
  "rows_removed": 2,
  "columns": {
    "age": {
      "null_count": "N/A",
      "null_percentage": "N/A",
      "duplicate_count": "N/A",
      "unique_values": 22,
      "type": "int",
      "min": 19,
      "max": 74,
      "avg": 43.5,
      "median": 42.0,
      "std": 14.2,
      "q25": 31.0,
      "q75": 57.0
    },
    "plan_type": {
      "null_count": "N/A",
      "null_percentage": "N/A",
      "duplicate_count": "N/A",
      "unique_values": 3,
      "type": "string",
      "most_repeated_value": "Premium",
      "top_values": [
        {"value": "Premium", "count": 18},
        {"value": "Basic", "count": 12},
        {"value": "Enterprise", "count": 8}
      ]
    }
  }
}

get_csv_preview

CSV の先頭 N 行を Markdown テーブルで返します。完全な分析を実行する前に、構造や値を確認するのに便利です。クリーニングは適用されません。

パラメーター型デフォルト説明
csv_contentstr必須CSV の全文
delimiterstr","値を区切る文字
n_rowsint5返す行数

出力例:

| customer_id | age | plan_type | monthly_fee |
| --- | --- | --- | --- |
| 1001 | 34 | Premium | 49.99 |
| 1002 | 27 | Basic | 19.99 |

filter_csv

列の条件に基づいて行をフィルタリングし、結果を CSV 文字列として返します。出力は analyze_csv やその他のツールにそのまま渡せます。

ParameterTypeDefaultDescription
csv_contentstrrequiredCSV 全体のテキスト内容
columnstrrequiredフィルタリング対象の列名
operatorstrrequired次のいずれか:>、<、>=、<=、==、!=、contains
valuestrrequired比較する値(列の型に自動変換されます)
delimiterstr","値を区切る文字

対応する演算子:

OperatorBehavior
> < >= <=数値の比較
== !=等価性(すべての型で使用できます)
contains文字列列に対する、大文字と小文字を区別しない部分文字列の照合

get_column_distribution

指定した列の順位付き度数表を返します。各値の出現回数と、行全体に占める割合を示します。

ParameterTypeDefaultDescription
csv_contentstrrequiredCSV 全体のテキスト内容
columnstrrequired分析する列名
delimiterstr","値を区切る文字
top_nint10返す値の最大数

出力例:

[
  {"value": "Premium", "count": 18, "percentage": 45.0},
  {"value": "Basic", "count": 12, "percentage": 30.0},
  {"value": "Enterprise", "count": 8, "percentage": 20.0}
]

detect_outliers

IQR または z-score を使用して、数値列の外れ値を含む行を検出します。フラグが付けられた行を、列名、値、理由とともに返します。

ParameterTypeDefaultDescription
csv_contentstrrequiredCSV 全体のテキスト内容
delimiterstr","値を区切る文字
methodstr"iqr""iqr" または "zscore"
columnslist[str]Noneチェックする特定の列。省略した場合は、すべての数値列をチェックします

手法:

  • iqr — Q1 - 1.5 * IQR 未満または Q3 + 1.5 * IQR を超える値にフラグを付けます
  • zscore — 平均から標準偏差 3 つ分を超えて離れた値にフラグを付けます

出力例:

[
  {"row_index": 4, "column": "monthly_fee", "value": 999.99, "reason": "outside IQR bounds [10.5, 89.3]"},
  {"row_index": 21, "column": "age", "value": 3, "reason": "outside IQR bounds [22.0, 68.0]"}
]

compare_csvs

スキーマ(列の差異)および/または行の内容に基づいて、2 つの CSV ファイルを比較します。同じデータセットのバージョン間の変更を検出するのに便利です。

ParameterTypeDefaultDescription
csv_content_astrrequired1 つ目のファイルの CSV 全体のテキスト内容
csv_content_bstrrequired2 つ目のファイルの CSV 全体のテキスト内容
delimiterstr","両方のファイルで値を区切る文字
modestr"both""schema"、"rows"、または "both"

出力例(mode="both"):

{
  "schema": {
    "columns_only_in_a": ["notes"],
    "columns_only_in_b": ["region"],
    "common_columns": ["client", "revenue", "date"]
  },
  "rows": {
    "total_rows_a": 25,
    "total_rows_b": 28,
    "rows_only_in_a": 4,
    "rows_only_in_b": 7,
    "common_rows": 21
  }
}

ツールの組み合わせ

ツールは連鎖して使えるように設計されています。便利なパターンをいくつか紹介します。

# Preview first, then analyze
get_csv_preview → analyze_csv

# Filter a subset, then analyze it
filter_csv (churned == True) → analyze_csv

# Check distribution before deciding how to filter
get_column_distribution → filter_csv → analyze_csv

# Find outliers, then filter them out and re-analyze
detect_outliers → filter_csv (!= outlier_value) → analyze_csv

設定

設定はプロジェクトのルートにある .env ファイルから読み込まれます。

VariableDefaultDescription
MAX_ROWS_TO_ANALYZE500リクエストごとに処理する行の最大数
DEFAULT_OUTPUT_FORMATmarkdownフォールバック時の出力形式
MAX_PREVIEW_ROWS10要約に含めるプレビュー行の数
NULL_THRESHOLD_WARNING0.3警告を表示する欠損値率のしきい値
OUTLIER_STDDEV_CUTOFF3.0外れ値検出に使用する z-score のしきい値

プロジェクト構成

csv_analyzer_mcp_server/
├── core/
│   ├── loader.py        # CSV string → pandas DataFrame
│   ├── analyzer.py      # Per-column statistics, distribution, outlier detection, comparison
│   ├── formatter.py     # JSON / Markdown output, table preview
│   └── transformer.py   # Column name normalization, row filtering
├── config/
│   └── settings.py      # Environment-based configuration
├── data/                # Sample CSV files for testing
├── main.py              # MCP server entry point — all tool definitions
├── pyproject.toml       # Project metadata and dependencies
└── .env                 # Local configuration (not committed)

サンプルデータ

テスト用に、3 つのサンプル CSV ファイルが data/ に含まれています。

FileRowsDescription
sample_data_usage.csv40通信事業者の顧客利用状況(年齢、プラン、データ、解約)
sample_heart_checks.csv40医療記録(コレステロール、血圧、糖尿病、心疾患)
sample_project_revenue.csv25意図的に欠損値を含めたプロジェクトの請求データ

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。