SheetShift MCP
SheetShift provides MCP tools for AI assistants to convert and clean tables. It supports converting between CSV, TSV, JSON, and Markdown formats, cleaning messy data by trimming whitespace and deduplicating rows, computing column statistics like sum and average, and splitting columns on delimiters. All processing is done per request with no data storage.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://sheet-shift.magicteams.ai/mcpWhat its tools do
4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Convert CSV to JSON format
- Sum values in a specific column
- Deduplicate rows and drop empty cells
- Split a column into multiple columns
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- sheet-shift 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 4 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
convert_table — Convert table
Convert a table from CSV, TSV or JSON into CSV, TSV, JSON (array of objects) or a Markdown table. Cell values are kept as text. Use when the user wants the same table in another format. Do NOT use to trim, dedupe or drop rows; use clean_table.
{
"type": "object",
"required": [
"data",
"from_format",
"to_format"
],
"properties": {
"data": {
"type": "string",
"minLength": 1,
"description": "The whole table as text, first row = header. CSV/TSV text (quoted cells allowed), or a JSON array of flat objects, e.g. \"name,age\\nAsha,30\"."
},
"to_format": {
"enum": [
"csv",
"tsv",
"json",
"markdown"
],
"type": "string",
"description": "Output format: csv, tsv, json (array of objects keyed by header) or markdown (pipe table)."
},
"from_format": {
"enum": [
"csv",
"tsv",
"json"
],
"type": "string",
"description": "Format of the input 'data': csv, tsv or json."
}
}
}{
"type": "object",
"required": [
"text",
"rows",
"columns"
],
"properties": {
"rows": {
"type": "integer",
"description": "Number of data rows (excluding the header)."
},
"text": {
"type": "string",
"description": "The converted table as text in to_format."
},
"columns": {
"type": "integer",
"description": "Number of columns in the header row."
}
}
}{
"title": "Convert table",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}clean_table — Clean table
Clean a table: trim whitespace in cells, drop fully empty rows, and optionally remove duplicate rows; returns the table in the same format with before/after row counts. Use when preparing messy pasted data. Do NOT use to change format; use convert_table.
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "string",
"minLength": 1,
"description": "The whole table as text, first row = header. CSV/TSV text (quoted cells allowed), or a JSON array of flat objects, e.g. \"name,age\\nAsha,30\"."
},
"trim": {
"type": "boolean",
"description": "Trim leading/trailing whitespace in every cell. Default true."
},
"dedupe": {
"type": "boolean",
"description": "Remove exact duplicate data rows, keeping the first. Default false."
},
"format": {
"enum": [
"csv",
"tsv",
"json"
],
"type": "string",
"description": "Format of 'data' and of the returned table: csv, tsv or json. Default csv."
},
"drop_empty_rows": {
"type": "boolean",
"description": "Remove rows whose cells are all empty. Default true."
}
}
}{
"type": "object",
"required": [
"text",
"rows_before",
"rows_after"
],
"properties": {
"text": {
"type": "string",
"description": "The cleaned table as text in the input format."
},
"rows_after": {
"type": "integer",
"description": "Data rows after cleaning (excluding header)."
},
"rows_before": {
"type": "integer",
"description": "Data rows before cleaning (excluding header)."
}
}
}{
"title": "Clean table",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}column_stats — Column stats
Compute one statistic over a single column: sum, avg, min or max (numeric, rounded to 2 dp, blanks ignored), count of non-empty cells, or the sorted distinct values. Use for quick answers like 'total of the price column'. Do NOT use to reshape the table; use split_column or convert_table.
{
"type": "object",
"required": [
"data",
"column",
"op"
],
"properties": {
"op": {
"enum": [
"sum",
"avg",
"min",
"max",
"count",
"distinct"
],
"type": "string",
"description": "Statistic: sum, avg, min, max (column must be numeric), count (non-empty cells) or distinct (unique values)."
},
"data": {
"type": "string",
"minLength": 1,
"description": "The whole table as text, first row = header. CSV/TSV text (quoted cells allowed), or a JSON array of flat objects, e.g. \"name,age\\nAsha,30\"."
},
"column": {
"type": "string",
"minLength": 1,
"description": "Column to use: the exact header name (case-sensitive), or a 0-based column index as digits, e.g. \"price\" or \"2\"."
},
"format": {
"enum": [
"csv",
"tsv",
"json"
],
"type": "string",
"description": "Format of 'data' and of the returned table: csv, tsv or json. Default csv."
}
}
}{
"type": "object",
"required": [
"column",
"op",
"result"
],
"properties": {
"op": {
"type": "string",
"description": "The statistic that was computed."
},
"column": {
"type": "string",
"description": "Header name of the column that was analysed."
},
"result": {
"anyOf": [
{
"type": "number"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Numeric result for sum/avg/min/max/count, or a sorted array of distinct string values for distinct."
}
}
}{
"title": "Column stats",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}split_column — Split column
Split one column into several columns on a delimiter (e.g. 'full name' on a space), inserted in place; short rows are padded with empty cells. Returns the table in the same format. Use when one column packs several values. Do NOT use to clean or change format; use clean_table or convert_table.
{
"type": "object",
"required": [
"data",
"column",
"delimiter"
],
"properties": {
"data": {
"type": "string",
"minLength": 1,
"description": "The whole table as text, first row = header. CSV/TSV text (quoted cells allowed), or a JSON array of flat objects, e.g. \"name,age\\nAsha,30\"."
},
"column": {
"type": "string",
"minLength": 1,
"description": "Column to use: the exact header name (case-sensitive), or a 0-based column index as digits, e.g. \"price\" or \"2\"."
},
"format": {
"enum": [
"csv",
"tsv",
"json"
],
"type": "string",
"description": "Format of 'data' and of the returned table: csv, tsv or json. Default csv."
},
"delimiter": {
"type": "string",
"minLength": 1,
"description": "Literal text to split on, e.g. \" \", \"-\" or \"|\"."
},
"new_names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Header names for the new columns; count must equal the maximum number of parts. Default <column>_1, <column>_2, ..."
}
}
}{
"type": "object",
"required": [
"text",
"parts"
],
"properties": {
"text": {
"type": "string",
"description": "The resulting table as text in the input format."
},
"parts": {
"type": "integer",
"description": "Number of new columns the split produced."
}
}
}{
"title": "Split column",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 284 ms
- 95th percentile latency
- 284 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 284 ms · metadata changed · 4 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http sheetshift-mcp https://sheet-shift.magicteams.ai/mcpCodex
codex mcp add sheetshift-mcp --url https://sheet-shift.magicteams.ai/mcpCursor
{
"mcpServers": {
"sheetshift-mcp": {
"url": "https://sheet-shift.magicteams.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"sheetshift-mcp": {
"type": "streamableHttp",
"url": "https://sheet-shift.magicteams.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"sheetshift-mcp": {
"type": "http",
"url": "https://sheet-shift.magicteams.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http sheetshift-mcp https://sheet-shift.magicteams.ai/mcpClaude Desktop
https://sheet-shift.magicteams.ai/mcpWindsurf
{
"mcpServers": {
"sheetshift-mcp": {
"serverUrl": "https://sheet-shift.magicteams.ai/mcp"
}
}
}Let your agent find its tools
Find servers like SheetShift MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.