csvbox-mcp-server
Officialcsvbox-mcp-server
CSVBox 用の汎用 Model Context Protocol(MCP)サーバーです。CSVBox のインポーターシート管理を MCP ツールとして公開し、MCP 互換クライアント(Claude Desktop、Cursor、Windsurf、Roo Code、Cline、VS Code、ChatGPT MCP など)からインポーターの作成、置換、パッチ適用、生成、検証、スキャフォールディングを実行できます。
stdio 上で動作するため、すべてのクライアントで同じように動作します。
ツール
ツール | 目的 | API 呼び出し |
| CSVBox シートを作成 |
|
| 既存のシートを置換 |
|
| シートを部分的に更新 |
|
| 自然言語プロンプト → 完全なシート JSON(LLM 経由) | なし(LLM を呼び出し) |
| 自然言語プロンプト → 検証 → 作成 |
|
| 統合コード(vanilla-js/react/vue/angular) | なし |
| 自然言語プロンプト → 仮想列 / 検証関数 / データ変換(LLM 経由) | なし(LLM を呼び出し) |
| ローカルでのスキーマ検証 | なし |
CSVBox には現在 GET エンドポイントも LIST エンドポイントもないため、
get_sheet/list_sheetツールは意図的に存在しません。
また、2つの MCP プロンプト も公開しています:
プロンプト | 目的 |
| ホストクライアント自身の LLM に完全な CSVBox シートを構築させる(サーバー側の LLM キーは不要)。 |
| ホストクライアント自身の LLM に仮想列、検証関数、データ変換を作成させる(サーバー側の LLM キーは不要)。 |
プロンプト → シート生成
generate_sheet_json と create_importer_from_prompt は LLM を使用して、自由形式のリクエストを完全な CSVBox シート(title、sheet_columns、destinations、webhooks、security_settings、steps)に変換します。実際のデータフィールドのみが列になります。宛先、ウェブフック、ドメイン、リージョン、ファイルアップロード、ステップ設定はそれぞれ適切な設定セクションに配置され、列に変換されることはありません。3つの階層があります:
サーバー LLM —
ANTHROPIC_API_KEYまたはOPENAI_API_KEYが設定されている場合、サーバーが直接 LLM を呼び出します。MCP Inspector やヘッドレス環境で動作します。MCP プロンプト(
create_csvbox_sheet)— サーバーキーがない場合、ホストクライアント(Cursor、Claude Desktop、Cline)が自身のモデルで生成を実行し、その後validate_schemaとcreate_sheetを呼び出します。無料です。未設定 —
generate_sheet_jsonは MCP プロンプトを指し示す構造化された「LLM プロバイダー未設定」エラーを返し、create_importer_from_promptは CSVBox API を呼び出しません。正規表現によるフォールバックはありません。
カテゴリ / モジュールの展開
ジェネレーターはプロンプトから自動的に選択される2つのモードのいずれかで動作します:
抽出(デフォルト)— プロンプトが具体的なフィールドを指定します(例: "columns name, email, phone")。指定されたものだけが列になり、それ以外は発明されません。
展開 — プロンプトがビジネスモジュール / カテゴリをリストとして指定する場合(例: "modules for: Company Information, Suppliers, Payroll, Invoice")、包括的/詳細なスキーマを要求する場合、または列数を要求する場合("at least 100 columns")。指定された各モジュールは、現実的でプレフィックス付きの適切な型の複数の列に展開されます(例: Suppliers →
supplier_id、supplier_name、supplier_gstin、supplier_email、…)。明示的な最小数は尊重され、すべてのcolumn_nameはグローバルに一意です。
データ型と検証は、フィールド名と要求された型から推論されます:
要求 / 暗黙の型 | 列 | バリデーター |
固定オプション付きドロップダウン / ステータス / カテゴリ |
|
|
パーセンテージ / パーセント |
|
|
正の数値(数量、カウント、在庫、コスト、年齢) |
|
|
ID / コード / 参照番号 |
| — |
メール |
| — |
電話 / 携帯 |
| — |
URL / ウェブサイト |
| — |
価格 / コスト / 金額 / 給与 |
| — |
日付フィールド |
|
|
ブール値 / is_* / active |
| — |
GST / GSTIN / 税 ID |
| GSTIN パターン |
PIN コード / 郵便番号(インド) |
|
|
大規模スキーマ: デフォルトモデル(
claude-haiku-4-5、gpt-4o-mini)は安価ですが、LLM_MODELでより強力なモデル(例:claude-sonnet-4-6)を指定すると、100列以上のスキーマで顕著に良い結果が得られます。出力上限は大きなシートに合わせて引き上げられます。それでもリクエストが大きすぎる場合、レスポンスはTRUNCATEDとしてフラグ付けされ(パースエラーとは異なる明確な結果)、CSVBox API は呼び出されません — 列数 / モジュールを減らすか、より大きな出力予算を持つモデルを使用して再試行してください。
Related MCP server: mcp-tabular
関数コレクション(仮想列、検証関数、データ変換)
6つのシートプロパティに加えて、CSVBox Sheet API は3つのコレクションを受け入れます。各項目には js_code 文字列が含まれ、CSVBox はインポート中にこれを実行します:
コレクション | 識別子 | 最大数 |
|
|
| 20 | 計算されたセル値を返す必要がある |
|
| 10 | エラー文字列の配列を返す必要がある( |
|
| 10 |
|
js_code 内では、csvbox オブジェクトが row、column、virtual、user、import、environment を公開します。2つのアクセサーは互換性がありません — 仮想列は行ごとであり csvbox.row.<name>(スカラー)を使用しますが、"column" スコープの関数は csvbox.column.<name>(配列)を介して列全体を参照します。
共有のオプションフィールド: scope(column | row。仮想列にはありません)、run_at(before_validation | after_validation。データ変換のみ)、columns / dynamic_columns、active、dependencies、_delete(PATCH のみ)。
作成方法
// generate_sheet_functions (requires ANTHROPIC_API_KEY or OPENAI_API_KEY)
{
"prompt": "add a virtual column joining first and last name, and check every email contains an @",
"sheet": { "title": "Customers", "sheet_columns": [ ... ] }
}{ "virtual_columns": [...], "validation_functions": [...], "source": ..., "validation": {...} } を返します。リクエストが暗示しないコレクションは省略され、空の配列として返されることはありません。
このツールは CSVBox API を呼び出しません。生成された js_code を読み、patch_sheet で自分で適用してください。モデルが実際の列名を参照し、バリデーターがそれらの参照をチェックできるように sheet を渡してください — CSVBox には読み取りエンドポイントがないため、インラインで指定する必要があります。LLM キーがない場合は、代わりに csvbox_sheet_functions MCP プロンプトを使用してください。
PUT と PATCH — 適用前に必ずお読みください
|
| |
送信するコレクション | 権威的 — 名前が指定されていない既存の項目は削除されます | マージ — 名前が指定されていない項目はそのまま残ります |
| 20個すべてを削除 | 何もしない |
キーが省略された場合 | 変更なし | 変更なし |
| 無効 | その項目を削除します(他のすべてのフィールドは無視されます) |
生成された関数を適用するには patch_sheet を使用してください。最初に一致する動詞で検証してください:
// validate_schema
{ "sheet": { "data_transforms": [ ... ] }, "mode": "patch" }mode は create(デフォルト)、put、patch です。関数コレクションにのみ影響します — put では空の配列は警告ではなくハードエラーになり、_delete は patch 以外では拒否されます。
依存関係
項目は最大5つのサードパーティスクリプトを読み込むことができます:
{ "url": "https://cdn.jsdelivr.net/npm/dayjs@1.11.10/dayjs.min.js",
"globals": ["dayjs"],
"integrity": "sha384-..." }許可されるのは cdn.jsdelivr.net、unpkg.com、cdnjs.cloudflare.com のみです。https のみ、.js/.mjs パス、クエリ文字列、フラグメント、ユーザー情報、ポートは使用できません。
セキュリティ。 このサーバーは
js_codeを決して実行しません — ここでは不透明な文字列です。生成された JavaScript は未レビューのモデル出力であるため、本番インポーターに PATCH する前に必ず読んでください。integrityダイジェストのない依存関係は、いつでも顧客の環境で変更される可能性があります。validate_schemaは、それが欠落している場合に警告を出します。
完全なペイロードについては docs/sheet-functions-example.json を参照してください。
インストール
npm install @csvbox/mcp-serverまたはソースからビルド:
git clone <this-repo> csvbox-mcp-server
cd csvbox-mcp-server
npm install
npm run buildこれにより dist/index.js が生成されます — MCP クライアントが起動するエントリーポイントです。
環境変数
.env.example を .env にコピーし、CSVBox の認証情報を入力してください:
CSVBOX_API_KEY=your_api_key
CSVBOX_API_SECRET=your_api_secretCSVBox の認証情報は、API バックエンドのツール(create_sheet、update_sheet、patch_sheet、create_importer_from_prompt)にのみ必要です。validate_schema と generate_import_code は認証情報なしで動作します。
認証ヘッダーに関する注意: クライアントは
x-csvbox-api-keyとx-csvbox-secret-api-keyを送信します(CSVBox のリファレンスペイロードに一致)。アカウントで異なるヘッダー名を使用する場合、これらはsrc/services/csvbox-api.tsで定数として定義されています。
LLM プロバイダー(プロンプト → シート生成用)
generate_sheet_json と create_importer_from_prompt には LLM が必要です。次のいずれか1つを設定してください:
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...プロバイダーは自動検出されます:
条件 | プロバイダー | デフォルトモデル |
| Anthropic |
|
| OpenAI |
|
| Anthropic |
|
| OpenAI |
|
どちらのキーも設定されていない | なし — ツールは | — |
両方のキーが存在する場合、LLM_PROVIDER が曖昧さを解消します。LLM_MODEL は、選択されたプロバイダーに関係なくモデルを上書きします。大規模なカテゴリ/モジュールスキーマ(100列以上)の場合は、LLM_MODEL をより強力なモデル(例: claude-sonnet-4-6)に設定してください — カテゴリ/モジュールの展開 を参照してください。
MCP Inspector: サーバーLLMパスを使用するには、Inspector の環境変数パネルに LLM キーを設定してください。Inspector には独自のホストLLMがないため、
create_csvbox_sheetプロンプトをレンダリングすることはできますが、実行することはできません — キーレスパスの場合は、モデルを持つクライアント(Cursor、Claude Desktop、Cline)を使用してください。
ローカルでの実行
# After building:
npm start
# Or run the built file directly:
node dist/index.jsサーバーは stdio 上で MCP を話し、csvbox-mcp-server running on stdio を stderr にログ出力します(stdout はプロトコル用に予約されています)。
クライアント設定
公開インストールの場合は、npx で npm パッケージを使用します。env ブロックに CSVBOX_API_KEY / CSVBOX_API_SECRET を設定してください。
注: npm パッケージは
@csvbox/mcp-server、実行可能ファイルはcsvbox-mcp-serverです。
Claude Desktop
Claude Desktop の MCP 設定に以下を追加します:
{
"mcpServers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}Cursor
~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト単位)を編集します:
{
"mcpServers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}Windsurf
~/.codeium/windsurf/mcp_config.json を編集します:
{
"mcpServers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}Roo Code
Roo Code の MCP 設定(mcp_settings.json)で:
{
"mcpServers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}Cline
Cline の MCP 設定(cline_mcp_settings.json)で:
{
"mcpServers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}VS Code MCP
.vscode/mcp.json(またはグローバルの mcp.json)に追加します:
{
"servers": {
"csvbox": {
"command": "npx",
"args": [
"-y",
"--package=@csvbox/mcp-server",
"csvbox-mcp-server"
],
"env": {
"CSVBOX_API_KEY": "your_api_key",
"CSVBOX_API_SECRET": "your_api_secret"
}
}
}
}ツール呼び出しの例
プロンプトから完全なシートを生成する(LLM、CSVBox API 呼び出しなし):
// generate_sheet_json (requires ANTHROPIC_API_KEY or OPENAI_API_KEY)
{ "prompt": "Create employee importer with name, email, salary, joining date; destination as testapi; allow only xlsx files" }{ "sheet": { "title": ..., "sheet_columns": [...], "destinations": [...], "steps": {...} }, "source": "llm:anthropic:claude-haiku-4-5", "validation": { "valid": true, ... } } を返します。データフィールドは列になります(salary → currency、joining date → date)。宛先と xlsx 設定は列ではなく destinations / steps に格納されます。LLM キーがない場合は、create_csvbox_sheet プロンプトを指すエラーを返します。
送信前にスキーマを検証する:
// validate_schema
{ "sheet": { "title": "Customers", "sheet_columns": [
{ "column_name": "email", "display_label": "Email", "type": "email" }
] } }{ "valid": true, "errors": [], "warnings": [ ... ] } を返します。
シートを作成する:
// create_sheet
{ "sheet": { "title": "Customer Import", "sheet_columns": [
{ "column_name": "name", "display_label": "Name", "type": "text" },
{ "column_name": "email", "display_label": "Email", "type": "email" }
] } }生成と作成を1ステップで行う:
// create_importer_from_prompt (requires an LLM key + CSVBox credentials)
{ "prompt": "Create customer importer with name, email, phone; allow for example.com" }{ "generated_schema": { ... }, "source": ..., "validation": { ... }, "api_response": { ... } } を返します。LLM プロバイダーが設定されていない場合、または生成されたスキーマが検証に失敗した場合は、API を呼び出さずに中止します。
シートを置き換える:
// update_sheet
{ "sheet_license_key": "abc123", "sheet": { "title": "Updated", "sheet_columns": [ ... ] } }送信するコレクションに対して破壊的です — PUT vs PATCH を参照してください。
シートにパッチを適用する:
// patch_sheet
{ "sheet_license_key": "abc123", "changes": { "title": "New Title" } }他の部分に触れずに1つの関数を削除する:
// patch_sheet
{ "sheet_license_key": "abc123",
"changes": { "virtual_columns": [ { "column_name": "full_name", "_delete": true } ] } }統合コードを生成する:
// generate_import_code
{ "framework": "react" }サポートされている列タイプ
text、number、email、date、time、boolean、regex、ip、url、credit_card、phone_number、currency、list、dependent_list、dynamic_list、dependent_dynamic_list、multiselect_list、multiselect_dynamic_list。
開発
npm run build # compile TypeScript → dist/
npm start # run the built server
npm run lint # type-check without emitting
npm test # compile and run the unit suite (alias: npm run test:unit)テスト
npm test は src/tests/ をコンパイルし、Node の組み込みテストランナーで実行します — テストフレームワークもモッキングライブラリもありません。
このスイートは**密閉型(hermetic)**です。外部ホストに接続することはなく、環境の CSVBOX_API_* / ANTHROPIC_API_KEY / OPENAI_API_KEY を読み取ることも、実際の CSVBox アカウントに触れることもないため、認証情報が設定されているかどうかに関係なく同じように合格します。HTTP は axios アダプターでインターセプトされ、LLM はスクリプト化されたフェイクです。実際のリクエストエンコーディングを必要とする1つのテストは、127.0.0.1 で一時的なリスナーを起動し、その後閉じます。環境変数を読み取るテストは、必要なものを明示的に設定し、以前の値を復元します。
E2E テスト
npm run test:e2e # run the Playwright suite
npm run test:e2e:report # open the HTML report from the last run仕様は e2e/ にあり、playwright.config.ts で設定されます。ユニットスイートと同様に、このスイートも密閉型です。ループバック上でモックの CSVBox および LLM サーバーを起動し(e2e/support/mock-csvbox-server.ts、e2e/support/mock-llm-server.ts)、実際のビルド済みサーバー(dist/index.js)を MCP Inspector 経由で、それらのモックを指すフェイクの認証情報を使って駆動します — 実際の CSVBox アカウントや LLM プロバイダーに接続することはなく、.env も読み取りません。別のゼロ認証情報の Inspector インスタンスが「認証情報がありません」というエラーパスをカバーします。最初に npm run build が必要です(test:e2e の webServer エントリは自動的にビルドされます)。
サーバーの埋め込み
createServer() はエントリモジュールからエクスポートされます。すべてのツールとプロンプトを登録し、トランスポートを接続せずに McpServer を返すため、独自のトランスポートに接続できます:
import { createServer } from "@csvbox/mcp-server";
const server = createServer();
await server.connect(myTransport);モジュールをインポートしても何も起動しません。stdio サーバーは dist/index.js が直接実行された場合にのみ実行されます。
ライセンス
MIT
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 Servers
- FlicenseAqualityDmaintenanceEnables comprehensive CSV file management including creating, editing, analyzing, and transforming CSV data anywhere in the filesystem. Provides statistical analysis, data validation, filtering, and grouping capabilities through MCP protocol over stdio transport.15
- AlicenseBqualityCmaintenanceEnables SQL querying over CSV and Excel files using DuckDB, providing tools to load files, inspect schemas, and run read-only queries via MCP.5MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that exposes Google Sheets as read-only resources, providing static and templated URI access to sheet data as CSV.
- AlicenseNot gradedqualityCmaintenanceEnables reading, writing, appending, and creating Google Sheets spreadsheets through MCP tools, with support for exploring spreadsheet structure and creating new sheets.11MIT
Related MCP Connectors
CSV <-> JSON MCP.
Manage feature requests, votes, roadmaps, and changelogs from any MCP client.
Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.
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/csvbox-io/csvbox-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server