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
Available Tools
9 toolscreate_importer_from_promptCreate Importer From PromptA
Generate a COMPLETE CSVBox sheet from a natural-language prompt via a configured LLM, validate it locally, then create it via POST /1.1/sheet. Returns { generated_schema, source, validation, api_response }. Aborts (no API call) if no LLM provider is configured or if validation fails. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY plus CSVBox credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Natural-language description of the importer, e.g. "Create customer importer with columns name, email, phone; allow for example.com". |
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. It discloses the full sequence (generate, validate locally, create via POST), the return object, the abort condition (no LLM provider or validation failure), and the required credentials (ANTHROPIC_API_KEY or OPENAI_API_KEY plus CSVBox credentials). This is comprehensive and honest about side effects (it creates a sheet).
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?
Three sentences deliver the purpose, flow, return value, abort conditions, and required credentials without waste. The main action is front-loaded, followed by essential caveats. Every sentence earns its place.
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 tool with one parameter, no output schema, and no annotations, the description covers the essential decision points: what it does, what it returns, when it aborts, and what credentials are needed. Missing is any detail on the validation failure behavior beyond aborting, and there is no example output or error handling guidance, but these are not critical for invoking the tool correctly.
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 description coverage is 100%, and the description for 'prompt' in the schema already explains it as a natural-language description of the importer. The tool description adds no extra detail about how the prompt is used, format expectations, or examples beyond what the schema provides. Baseline 3 is appropriate when schema fully documents the parameter.
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 states a specific verb ('Generate ... then create') and a clear resource (CSVBox sheet via POST /1.1/sheet). It is distinct from siblings like create_sheet (which likely creates without generation) and generate_sheet_json (which likely generates without creation). The flow is explicit and unambiguous.
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 clearly implies use when you have a natural-language prompt and want a complete, validated sheet. It notes that an LLM provider must be configured and that it aborts if not, which hints at alternative workflows, but it does not explicitly name alternatives or state when to prefer create_sheet or generate_sheet_json over this tool. The context is clear but exclusions are not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sheetCreate CSVBox SheetC
Create a new CSVBox sheet via POST /1.1/sheet. Input: { sheet }. Returns the API response.
| Name | Required | Description | Default |
|---|---|---|---|
| sheet | Yes | The full CSVBox sheet object to create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears full responsibility for disclosing behavior. It only states that it returns the API response, but gives no detail on side effects, error handling, idempotency, or what happens on duplicate creation. For a creation tool this is a significant 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 brief and front-loaded with the action, which is good. However, its brevity comes at the cost of essential context, so it is under-specified rather than appropriately concise. A few extra sentences clarifying behavior and usage would be justified.
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?
The tool has no output schema, so the description should clarify what the response contains, but it only says 'Returns the API response' without specifics. The nested 'sheet' object is intentionally open-ended, but the description doesn't hint at required fields or validation. Given the simplicity of the tool and sibling complexity, the description is incomplete.
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?
The input schema already provides full coverage of the sole parameter, describing the 'sheet' as 'The full CSVBox sheet object to create.' The tool description adds nothing beyond restating the parameter name and format. Since coverage is 100%, the description meets the baseline but adds no extra value.
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 states a clear action: creating a new CSVBox sheet via a POST request, and identifies the resource explicitly. It distinguishes from siblings like update_sheet and patch_sheet by indicating creation, though it doesn't explicitly call out the distinction. The purpose is unambiguous.
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 provides no guidance on when to use this tool versus alternatives such as update_sheet or patch_sheet. It does not mention any prerequisites, when creation is appropriate, or when another sibling might be better. An agent would have to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_import_codeGenerate CSVBox Integration CodeA
Generate complete CSVBox importer integration code for a framework (vanilla-js, react, vuejs2 [Vue 2], vuejs3 [Vue 3], angular [Angular 8-13], angular2 [Angular 14+]). Input: { framework }. Replace the license key placeholder with your sheet's license key.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | Target framework: vanilla-js | react | vuejs2 (Vue 2) | vuejs3 (Vue 3) | angular (Angular 8-13) | angular2 (Angular 14+). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions replacing the license key placeholder, which is a useful note, but it does not state whether the tool has side effects, what the output format is, or any prerequisites. The agent is left guessing about the return value and if any state changes occur. This is a notable gap for a tool that generates code.
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 a single, information-dense sentence. It front-loads the main action, immediately lists the supported frameworks with version clarifications, and includes the only crucial auxiliary instruction (replacing the license key placeholder). There is zero redundancy.
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 one-parameter tool with no output schema, the description covers the essential information: what it does, the input, and a critical post-processing step. While it doesn't explicitly describe the return format, the term 'integration code' makes it obvious. Minor omission: it doesn't state whether the code is returned as a string, file, or other, but this is not critical for invoking the tool correctly.
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 description coverage is 100%, so the parameter `framework` is already fully documented via enum and description. The tool description merely repeats 'Input: { framework }' without adding new parameter-specific details. The license key placeholder note concerns the output, not the input, so it doesn't enhance parameter understanding. Baseline 3 is appropriate.
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 states a clear action ('generate complete CSVBox importer integration code'), a specific resource (CSVBox importer integration), and the parameter (framework). It lists all supported values, distinguishing it from sibling tools like generate_sheet_json or create_sheet. It is unambiguous.
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 is self-contained and clearly implies when to use it: whenever you need integration code for a listed framework. It does not explicitly mention alternatives or exclusions, but the context is clear enough that an agent can infer appropriate usage without confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_sheet_functionsGenerate CSVBox Sheet FunctionsA
Author CSVBox virtual_columns, validation_functions, and data_transforms from a natural-language prompt using a configured LLM. Does NOT call the CSVBox API — it returns JSON so you can REVIEW the generated JavaScript before applying it with patch_sheet. Collections the request does not imply are omitted, never returned as empty arrays. Returns { virtual_columns?, validation_functions?, data_transforms?, source, validation }. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY; without one it returns an error pointing to the csvbox_sheet_functions MCP prompt. Input: { prompt, sheet? }.
| Name | Required | Description | Default |
|---|---|---|---|
| sheet | No | The existing sheet the functions will be applied to. Supplying it lets the model reference real column names and lets validation check those references. CSVBox exposes no read endpoint, so this must be passed inline. | |
| prompt | Yes | Natural-language description of the functions to author, e.g. "add a virtual column joining first and last name, and validate that every email contains an @". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that the tool does not call the API, omits unmentioned collections rather than returning empty arrays, returns a specific JSON shape, requires ANTHROPIC_API_KEY or OPENAI_API_KEY, and names the error fallback. This is unusually transparent.
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 dense but every sentence earns its place: purpose, non-API behavior, output contract, authentication requirement, error handling, and input shape. The structure front-loads the main purpose before moving to constraints and fallbacks.
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?
Even though there is no output schema, the description provides the return contract, omission behavior, auth prerequisites, and the downstream patch_sheet step. With only two parameters and one required, nothing essential is left for the agent to infer.
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 description coverage is 100%, so the schema already documents both parameters well. The description only restates the input shape as '{ prompt, sheet? }' and adds no new meaning beyond what the schema's per-parameter descriptions provide. Baseline 3 is appropriate.
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?
Uses a specific verb and resource ('Author CSVBox virtual_columns, validation_functions, and data_transforms') and clearly states it returns reviewable JSON rather than calling the CSVBox API. This distinguishes it from patch_sheet, create_sheet, and generate_import_code even before reading schemas.
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?
Establishes a clear workflow: generate functions, review the returned JSON, then apply with patch_sheet. It also says the tool does not call the API and warns about missing API keys, but it does not explicitly contrast itself with generation siblings like generate_sheet_json or generate_import_code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_sheet_jsonGenerate CSVBox Sheet JSONA
Generate a COMPLETE CSVBox sheet (title, sheet_columns, destinations, webhooks, security_settings, steps) from a natural-language prompt using a configured LLM. Does NOT call the CSVBox API. Returns { sheet, source, validation }. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY; without one it returns an error pointing to the create_csvbox_sheet MCP prompt. Input: { prompt }.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Natural-language description of the importer, e.g. "Create employee importer with columns name, email, salary, joining date; destination as testapi; allow only xlsx files". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses several key behaviors: no API call, key requirements, error fallback, and the return shape { sheet, source, validation }. However, it does not describe whether the call is synchronous, how long it may take, token/rate-limit considerations, or the meaning of the returned 'source' and 'validation' fields — moderate disclosure but not rich.
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?
Three sentences, all load-bearing: the exclusions ('Does NOT call...') and key requirement ('Requires ANTHROPIC_API_KEY...') are front-loaded before the input spec. The use of ALL-CAPS for emphasis is a minor stylistic distraction, but overall it is compact with no wasted sentences.
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 single-input-parameter tool with no output schema and no annotations, the description covers the essentials: what it returns, its prerequisites, a common failure mode, and what the prompt parameter expects. The only notable gap is the absence of a minimal output/JSON example structure, which would help the agent gauge the result format.
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?
The single parameter prompt is fully documented in the schema (100% coverage, with a concrete example). The description adds only 'natural-language prompt' context, which marginally reinforces but does not extend the schema. Baseline 3 is appropriate where the schema already carries the parameter meaning.
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 uses a specific verb+resource ('Generate a COMPLETE CSVBox sheet') and enumerates the exact fields produced (title, sheet_columns, destinations, webhooks, security_settings, steps). It distinguishes itself from the API-calling siblings by explicitly stating 'Does NOT call the CSVBox API,' which is the key differentiator among the sibling list.
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 states the enabling condition (ANTHROPIC_API_KEY or OPENAI_API_KEY required) and the failure behavior when absent (returns an error pointing to create_csvbox_sheet). It clearly implies this tool generates JSON only and is the predecessor to an API-calling tool, though it doesn't name an explicit 'when not to use' sibling or a direct comparison to create_importer_from_prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_sheetPatch CSVBox SheetA
Partially update a CSVBox sheet via PATCH /1.1/sheet/{sheet_license_key}. Sends only the changes object. Input: { sheet_license_key, changes }. Returns the API response. PATCH MERGES: only the items you list are touched and nothing is deleted implicitly, so an empty array is a no-op. Items in virtual_columns, validation_functions and data_transforms are matched by column_name / function_name / transform_name respectively — an unmatched name creates a new item. To remove one, send it with _delete: true; every other field on a _delete item is ignored, including js_code. This is the safe verb for applying generated functions. Run validate_schema with mode 'patch' first.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | Only the partial changes to apply to the sheet. | |
| sheet_license_key | Yes | The license key of the sheet to patch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses substantial behavior: PATCH merges, only listed items are touched, empty array is a no-op, matching by names with unmatched creating new items, _delete: true for removal, and that other fields on a _delete item are ignored. It also mentions the return is 'the API response.' This exceeds typical descriptions, though it omits error handling or permission nuances.
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 dense but each sentence earns its place: purpose, input/output, merge semantics, matching rules, deletion, and usage advice. It's front-loaded with the purpose, and while it's longer than average, the complexity of the operation justifies the length. No wasted words.
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?
Given the complexity (nested objects, merge behavior, deletion), the description covers all critical aspects: how partial updates work, how to target items, how to delete, and the prerequisite validation step. It returns the API response but doesn't detail error cases, which is acceptable without an output schema. The description is sufficient for an agent to call correctly.
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 100%, so baseline is 3. The description adds significant meaning to the 'changes' object by explaining the internal structure (virtual_columns, validation_functions, data_transforms), how items are matched by names, and the _delete flag semantics. This goes well beyond the schema's minimal 'Only the partial changes to apply to the sheet.'
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?
States a specific verb ('Partially update'), resource ('CSVBox sheet'), and the HTTP method (PATCH /1.1/sheet/{sheet_license_key}'). It clearly differentiates from sibling tools like update_sheet by emphasizing 'partial' and 'PATCH', and from create_sheet by 'update'. The purpose is unambiguous.
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?
Provides clear context: 'This is the safe verb for applying generated functions' and instructs to 'Run validate_schema with mode patch first.' While it doesn't explicitly name update_sheet as an alternative, the 'partial' vs full update distinction and the 'safe verb' guidance effectively imply when to prefer this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_fileSubmit File via CSVBox REST File APIA
Submit a file for import via POST /1.1/file. Provide exactly one of public_file_url (JSON submission) or file_base64 + file_name (multipart direct upload — file_base64 is decoded server-side and sent to CSVBox as true binary multipart content, never as a base64 string). Input: { sheet_license_key, public_file_url? | (file_base64?, file_name?), file_sheet_name?, user?, options?, dynamic_columns? }. Returns the API response.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Custom user reference object attached to the import. | |
| options | No | Import options: has_header (0/1), max_rows, auto_map. | |
| file_name | No | File name for the direct upload. Required with file_base64. | |
| file_base64 | No | Base64-encoded file content for direct upload. This is an MCP-transport-only encoding: the server decodes it into raw bytes and sends CSVBox a true multipart/form-data 'file' part, never a base64 string. Mutually exclusive with public_file_url. Requires file_name. Prefer public_file_url for large files. | |
| dynamic_columns | No | Dynamic column definitions with validators. | |
| file_sheet_name | No | Worksheet name to import, for multi-tab files. | |
| public_file_url | No | Public URL of the file to import. Mutually exclusive with file_base64. | |
| sheet_license_key | Yes | The license key of the sheet to import into. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key behavior: it explains the server-side decoding of file_base64 into true binary multipart content, the alternative JSON path, and that it returns the API response. It does not mention authentication or side effects, but the mutation is implied by 'submit for import' and the transport detail goes beyond basic expectations.
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 two sentences with no filler. It front-loads the endpoint and the primary decision (which submission mode), then presents the full input structure compactly. Every clause contributes information.
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 tool with 8 parameters, nested objects, and two mutually exclusive alternatives, the description is thorough: it maps the parameter combos, explains the encoding nuance, and notes the return value. It omits authentication prerequisites and error handling, but those are commonly left to the API docs and the schema already covers required fields.
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 100%, but the description adds real value beyond the schema by showing the exact input structure with alternatives and grouping, clarifying the mutual exclusivity already hinted in properties, and adding the file-size preference. This is more than the baseline 3 would require.
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 action (submit a file for import), the resource (via POST /1.1/file), and the two distinct submission modes (JSON vs multipart). It distinguishes this tool from siblings like create_sheet or generate_import_code by focusing on the file submission action.
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 explicitly lays out the mutually exclusive parameter combinations ('Provide exactly one of...') and even adds a practical preference ('Prefer public_file_url for large files'). It does not explicitly contrast with sibling tools, but the sibling set is clearly different in function, so this gap is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sheetUpdate (Replace) CSVBox SheetA
Replace an existing CSVBox sheet via PUT /1.1/sheet/{sheet_license_key}. Input: { sheet_license_key, sheet }. Returns the API response. DESTRUCTIVE: PUT is authoritative for every collection it sends — items listed are created or updated in place, and any existing item the array does not name is DELETED. This applies to virtual_columns, validation_functions and data_transforms: sending an empty array DELETES ALL of that collection's items, while OMITTING the key leaves them untouched. _delete is not valid here; use patch_sheet to remove a single item. Run validate_schema with mode 'put' first to catch a destructive body.
| Name | Required | Description | Default |
|---|---|---|---|
| sheet | Yes | The full replacement CSVBox sheet object. | |
| sheet_license_key | Yes | The license key of the sheet to replace. |
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 — and it excels. It discloses the destructive PUT semantics (unnamed items are DELETED), which collections are affected (virtual_columns, validation_functions, data_transforms), the critical empty-array-deletes vs omit-preserves distinction, and invalidates `_delete`. The safety warnings cover all dangerous behavior an agent needs to avoid.
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 long, but every sentence earns its place for a destructive operation — the PUT-authoritative semantics, collection scope, and empty-vs-omit warning are all essential safety information. Core purpose is front-loaded before the behavioral warnings. Slightly verbose, justified by the risk profile.
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 destructive mutation with zero annotations and no output schema, this is complete. It covers what gets destroyed, the collection semantics, the invalid `_delete`, and pre-validates via validate_schema. Return value is minimally stated ('Returns the API response'), which is acceptable given no output schema exists. Nothing an agent needs to call this safely is missing.
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 100%, so both parameters (sheet_license_key, sheet) are already documented inline, warranting baseline 3. The description adds some value by clarifying the destructive behavior of collections inside the `sheet` object, but it doesn't add syntax or format details beyond the schema's 'full replacement CSVBox sheet object'.
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?
States a specific verb ('Replace'), resource ('an existing CSVBox sheet'), and HTTP method (PUT /1.1/sheet/{sheet_license_key}'). The title reinforces the replace-vs-patch distinction, and the description names patch_sheet for partial updates, making it distinguishable from siblings without opening schemas.
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?
Explicitly routes to alternatives with conditions: 'use patch_sheet to remove a single item', declares `_delete` is not valid here, and instructs 'Run validate_schema with mode put first'. This gives clear when-to/when-not guidance and names the safety pre-check, which is ideal for a destructive tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_schemaValidate CSVBox SchemaA
Validate a CSVBox sheet schema locally (no API call). Requires a non-empty title; sheet_columns is optional (absent passes, empty yields a warning). When columns are present, checks for missing column_name/display_label/type, unsupported types, duplicate names, duplicate positions, and invalid dependent column references. Also checks virtual_columns, validation_functions, and data_transforms: per-sheet caps, duplicate and colliding names, missing or oversized js_code, scope/run_at enums, column references against sheet_columns, and dependency URLs (https, allowed CDN hosts, .js/.mjs, integrity digest). Pass mode ('create' | 'put' | 'patch', default 'create') so empty-array and _delete rules match the verb you are about to use. Returns { valid, errors, warnings }.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which write verb this payload is headed for. "create" (default) for POST, "put" for a full replace, "patch" for a partial update. Affects only the function collections: an empty array is an error under "put" (it deletes every item); `_delete` is fully valid under "patch", redundant (warning only) under "put", and an error under "create". | |
| sheet | Yes | The CSVBox sheet object to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly describes what the tool does: it performs a local validation, enumerates all the checks (missing fields, duplicates, types, references, dependency rules), explains the mode-dependent behavior (empty array vs _delete), and states the return shape { valid, errors, warnings }. This is exceptionally transparent and leaves no ambiguity about side effects or limitations.
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 a single, information-dense paragraph that front-loads the core purpose and then systematically covers prerequisites, specific checks, mode handling, and return format. Every sentence adds value; there is no filler or repetition. The structure is logical and allows an agent to quickly grasp the tool's behavior.
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?
Given the tool's complexity (many validation rules), the minimal schema, and absence of annotations, the description is remarkably complete. It covers all relevant inputs (sheet, mode), the exact validation logic, the behavior under different modes, and the output structure. There is no critical information missing for an agent to call this tool correctly.
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?
Although the schema descriptions cover both parameters, the tool description adds significant meaning. For 'mode', it explains the impact of each enum value on validation rules, which the schema description only partially hints at. For 'sheet', since the schema only says 'object', the description is the sole source of truth for what the sheet object should contain (sheet_columns, virtual_columns, validation_functions, data_transforms). This goes well beyond the schema's generic definition.
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 opens with a specific verb and resource: 'Validate a CSVBox sheet schema locally (no API call).' This clearly distinguishes it from sibling tools like create_sheet or update_sheet, which perform mutations. The phrase 'no API call' further separates it from any network-dependent tool. The purpose is unmistakable.
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 clearly conveys when to use this tool: before an API call to validate the schema against the intended write verb, as shown by the mode parameter explanation ('Pass mode... so empty-array and _delete rules match the verb you are about to use'). However, it does not explicitly name alternative tools or state 'use this instead of X,' so it stops short of full exclusion guidance. The context is adequate for an agent to infer usage.
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.
9 tool updates
v1.0.1- First observed
create_importer_from_prompt - First observed
create_sheet - First observed
generate_import_code - First observed
generate_sheet_functions - First observed
generate_sheet_json - First observed
patch_sheet - First observed
submit_file - First observed
update_sheet - First observed
validate_schema
TDQS
Scored across 9 tools
Tools are mostly distinct: create/update/patch/validate/submit/generate each target different actions. The three 'generate_' tools produce different outputs (sheet JSON, code, functions), but 'create_importer_from_prompt' and 'generate_sheet_json' both involve prompt-based sheet generation, with the former actually creating while the latter only returns JSON, which could cause minor confusion.
Most names follow a verb_noun pattern (create_sheet, update_sheet, patch_sheet, validate_schema, submit_file, generate_sheet_json, generate_import_code, generate_sheet_functions). The exception is 'create_importer_from_prompt', which uses 'importer' instead of the more consistent 'sheet' and breaks the pattern slightly.
With 9 tools, the surface is well-scoped for a CSV import integration server. Each tool covers a distinct aspect (schema creation, modification, validation, file submission, and generation helpers) without redundancy, and the count fits comfortably in the ideal range.
The set covers create, update (PUT/PATCH), validation, and file submission, but lacks read operations (e.g., get_sheet, list_sheets) and explicit sheet deletion. While patch supports _delete, there is no direct delete_sheet tool. This creates a gap for agents that need to inspect or manage existing sheets outside of updates.
Maintenance
Related MCP Connectors
Remote MCP: JSON repair, JSON Schema validation, JSON to TypeScript, CSV to JSON and JSON to CSV.
Manage Pipefork API projects, drafts, connections, secrets, and deployments through MCP.
Create and manage trading strategies, bots, webhooks and signals from any MCP client.
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-
- AlicenseBqualityDmaintenanceEnables 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 gradedqualityDmaintenanceMCP server that exposes Google Sheets as read-only resources, providing static and templated URI access to sheet data as CSV.-
- AlicenseNot gradedqualityBmaintenanceEnables reading, writing, appending, and creating Google Sheets spreadsheets through MCP tools, with support for exploring spreadsheet structure and creating new sheets.10 npmMIT