Build Google Sheets FILTER, RANK and UNIQUE formulas and clean text. No sign-in.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run ReplaceKit cleanups on text (up to 50,000 characters), in the order given: double-spaces, space-before-punct, trailing-spaces, empty-paragraphs, line-breaks, nbsp, curly-quotes, straight-quotes. Returns the cleaned text and how many replacements each made.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http sheets https://mcp-sheets.tuper.app/mcp
Run ReplaceKit cleanups on text (up to 50,000 characters), in the order given: double-spaces, space-before-punct, trailing-spaces, empty-paragraphs, line-breaks, nbsp, curly-quotes, straight-quotes. Returns the cleaned text and how many replacements each made.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| cleanups* | array |
{
"type": "object",
"required": [
"text",
"cleanups"
],
"properties": {
"text": {
"type": "string",
"maxLength": 50000
},
"cleanups": {
"type": "array",
"items": {
"enum": [
"double-spaces",
"space-before-punct",
"trailing-spaces",
"empty-paragraphs",
"line-breaks",
"nbsp",
"curly-quotes",
"straight-quotes"
],
"type": "string"
},
"minItems": 1
}
},
"additionalProperties": false
}Given matched texts and a replacement, return the replacement in the case shape of each match (ALL CAPS, Title Case, First letter, lower). The rule ReplaceKit uses for "Keep the case of each match" in Google Docs.
| Argument | Type | Description |
|---|---|---|
| matches* | array | |
| replacement* | string |
{
"type": "object",
"required": [
"matches",
"replacement"
],
"properties": {
"matches": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1
},
"replacement": {
"type": "string"
}
},
"additionalProperties": false
}Build a FILTER formula that shows the rows of a range matching 1-3 conditions (equals, contains, starts/ends with, one of, blank, number and date comparisons), optionally sorted and with a "no match" message. Returns the formula and a note.
| Argument | Type | Description |
|---|---|---|
| join | string | |
| order | string | Sort the result by its first column |
| range* | string | Rows to show, first and last column: A2:D, A2:D500, A:D or Data!A2:D |
| separator | string | Argument separator: "," (US/UK locale) or ";" (many European locales) |
| conditions* | array | |
| skip_blanks | boolean | |
| case_sensitive | boolean | |
| cells_are_text | boolean | Numbers/dates are stored as text: wrap in VALUE / DATEVALUE |
| no_match_message | string |
Build a formula that ranks one column, with a choice of tie handling (min: 1,2,2,4; dense: 1,2,2,3; avg: 1,2.5,2.5,4; unique: 1,2,3,4) and optional ranking within a group column. mode "column" fills the whole column from one cell; mode "row" is a per-row formula to drag down.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| ties | string | |
| group | string | Optional column letter; ranks restart in each group |
| range* | string | One column with its first row, header left out: B2:B, B2:B200 or Data!B2:B |
| direction | string | desc: largest value is rank 1 |
| separator | string | Argument separator: "," (US/UK locale) or ";" (many European locales) |
{
"type": "object",
"required": [
"range"
],
"properties": {
"mode": {
"enum": [
"column",
"row"
],
"type": "string",
"default": "column"
},
"ties": {
"enum": [
"min",
"dense",
"avg",
"unique"
],
"type": "string",
"default": "min"
},
"group": {
"type": "string",
"description": "Optional column letter; ranks restart in each group"
},
"range": {
"type": "string",
"description": "One column with its first row, header left out: B2:B, B2:B200 or Data!B2:B"
},
"direction": {
"enum": [
"desc",
"asc"
],
"type": "string",
"default": "desc",
"description": "desc: largest value is rank 1"
},
"separator": {
"enum": [
",",
";"
],
"type": "string",
"default": ",",
"description": "Argument separator: \",\" (US/UK locale) or \";\" (many European locales)"
}
},
"additionalProperties": false
}Build a formula for unique values: a UNIQUE list, COUNTUNIQUE, a value/count table, only the repeated values, or only the values that appear once.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| order | string | |
| range* | string | A2:A, A2:A500, A:A or Data!A2:C (several columns only for mode "list") |
| separator | string | Argument separator: "," (US/UK locale) or ";" (many European locales) |
| ignore_case | boolean | |
| skip_blanks | boolean |
{
"type": "object",
"required": [
"range"
],
"properties": {
"mode": {
"enum": [
"list",
"count",
"counts",
"dupes",
"once"
],
"type": "string",
"default": "list"
},
"order": {
"enum": [
"none",
"asc",
"desc"
],
"type": "string",
"default": "none"
},
"range": {
"type": "string",
"description": "A2:A, A2:A500, A:A or Data!A2:C (several columns only for mode \"list\")"
},
"separator": {
"enum": [
",",
";"
],
"type": "string",
"default": ",",
"description": "Argument separator: \",\" (US/UK locale) or \";\" (many European locales)"
},
"ignore_case": {
"type": "boolean",
"default": false
},
"skip_blanks": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
| If set, wrap in IFERROR and show this text when no row matches |
{
"type": "object",
"required": [
"range",
"conditions"
],
"properties": {
"join": {
"enum": [
"and",
"or"
],
"type": "string",
"default": "and"
},
"order": {
"enum": [
"none",
"asc",
"desc"
],
"type": "string",
"default": "none",
"description": "Sort the result by its first column"
},
"range": {
"type": "string",
"description": "Rows to show, first and last column: A2:D, A2:D500, A:D or Data!A2:D"
},
"separator": {
"enum": [
",",
";"
],
"type": "string",
"default": ",",
"description": "Argument separator: \",\" (US/UK locale) or \";\" (many European locales)"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"column",
"op"
],
"properties": {
"op": {
"enum": [
"eq",
"neq",
"contains",
"ncontains",
"starts",
"ends",
"oneof",
"blank",
"notblank",
"num_eq",
"gt",
"gte",
"lt",
"lte",
"after",
"before",
"onafter",
"onbefore"
],
"type": "string"
},
"value": {
"type": "string",
"description": "Value to compare (not needed for blank / notblank). Dates as 2026-03-31, numbers with a dot."
},
"column": {
"type": "string",
"description": "Column letter to test, e.g. C"
}
},
"additionalProperties": false
},
"maxItems": 3,
"minItems": 1
},
"skip_blanks": {
"type": "boolean",
"default": false
},
"case_sensitive": {
"type": "boolean",
"default": false
},
"cells_are_text": {
"type": "boolean",
"default": false,
"description": "Numbers/dates are stored as text: wrap in VALUE / DATEVALUE"
},
"no_match_message": {
"type": "string",
"description": "If set, wrap in IFERROR and show this text when no row matches"
}
},
"additionalProperties": false
}