
Source-backed public tables with citations, claim checks, and reviewable corrections.
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.
Add columns to a draft you run, such as a blank one a person started. Returns the new column ids for fill_cells. Needs a token.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http skeletable https://skeletable.com/mcp
Add columns to a draft you run, such as a blank one a person started. Returns the new column ids for fill_cells. Needs a token.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| columns* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"columns"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120
},
"columns": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"type"
],
"properties": {
"rule": {
"type": "string",
"maxLength": 500,
"description": "What counts as this value, so two readers would fill it in the same way"
},
"type": {
"enum": [
"text",
"number",
"boolean"
],
"type": "string"
},
"unit": {
"type": "string",
"maxLength": 30
},
"label": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 20,
"minItems": 1
}
}
}Add rows to a draft you run, as you find what belongs in it. A name it already has is skipped. Needs a token.
| Argument | Type | Description |
|---|---|---|
| rows* | array | |
| slug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"rows"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 200,
"minItems": 1
},
"slug": {
"type": "string",
"maxLength": 120
}
}
}Test a statement against one cell, such as whether a value in a draft or an answer is right. The verdict is `matches`, `differs` (with what the source states), `disputed` (sources disagree, see `conflicts`) or `unknown` (no acceptable source stated it, so say so). It compares values and doesn't judge meaning, so read the quote before relying on a text verdict. Use list_tables and get_table to find the cell first.
| Argument | Type | Description |
|---|---|---|
| row* | string | The row's key, from get_table |
| slug* | string | From list_tables |
| value* | string | The value being claimed |
| column* | string | The column's id, from get_table |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"row",
"column",
"value"
],
"properties": {
"row": {
"type": "string",
"maxLength": 200,
"description": "The row's key, from get_table"
},
"slug": {
"type": "string",
"maxLength": 120,
"description": "From list_tables"
},
"value": {
"type": "string",
"maxLength": 300,
"description": "The value being claimed"
},
"column": {
"type": "string",
"maxLength": 80,
"description": "The column's id, from get_table"
}
}
}Make a private draft table, ready to fill. Only `title`, `columns` and `rows` are needed now, but give `question`, `scope`, and a `rule` for each column if you can: a person has to supply them before publishing. Returns the column ids fill_cells needs, and the sheet's link, so tell your person to open it and watch it fill. Needs a token.
| Argument | Type | Description |
|---|---|---|
| rows* | array | |
| owner | string | A team you're on. Leave out for your own account |
| scope | string | What belongs in the table and what doesn't |
| title* | string | |
| topic | string | A broad subject, like Law or Consumer tech |
| columns* | array | |
| question | string | The question the table answers |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"columns",
"rows"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 200,
"minItems": 1
},
"owner": {
"type": "string",
"maxLength": 60,
"description": "A team you're on. Leave out for your own account"
},
"scope": {
"type": "string",
"maxLength": 800,
"description": "What belongs in the table and what doesn't"
},
"title": {
"type": "string",
"maxLength": 120
},
"topic": {
"type": "string",
"maxLength": 40,
"description": "A broad subject, like Law or Consumer tech"
},
"columns": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"type"
],
"properties": {
"rule": {
"type": "string",
"maxLength": 500,
"description": "What counts as this value, so two readers would fill it in the same way"
},
"type": {
"enum": [
"text",
"number",
"boolean"
],
"type": "string"
},
"unit": {
"type": "string",
"maxLength": 30
},
"label": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 20,
"minItems": 1
},
"question": {
"type": "string",
"maxLength": 300,
"description": "The question the table answers"
}
}
}Fill up to 25 cells of a draft you run. Each cell gives `value`, `source` and `quote`, where the quote is word for word from the source and states the value; each is checked and the page opened before it's saved. If no acceptable source states it, give `checked` with the pages you read instead of a value, and add `none_stated` only if you read the whole source and it has no such value. Bad cells come back with a reason and don't stop the rest. Needs a token.
| Argument | Type | Description |
|---|---|---|
| slug* | string | From create_table or list_tables |
| cells* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"cells"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"description": "From create_table or list_tables"
},
"cells": {
"type": "array",
"items": {
"type": "object",
"required": [
"row",
"column"
],
"properties": {
"row": {
"type": "string",
"maxLength": 200
},
"quote": {
"type": "string",
"maxLength": 400
},
"value": {
"type": "string",
"maxLength": 300
},
"column": {
"type": "string",
"maxLength": 80,
"description": "The column's id, from get_table"
},
"source": {
"type": "string",
"maxLength": 2000
},
"checked": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 10
},
"none_stated": {
"type": "boolean"
}
}
},
"maxItems": 25,
"minItems": 1
}
}
}The evidence for one value: the source, the exact quote, what kind of source it is and when it was read. For a missing value, where we looked, and `absent` means the source was read and gives no such value. `url` is the cell's lasting address, showing its proof, for citing. `confirmed` says how a second reader backed it up, and without it the value has been read once. `conflicts` lists sources that state something else, `history` lists past values, and `watch` says whether the quote was still on its page at the last check.
| Argument | Type | Description |
|---|---|---|
| row* | string | The row's key, from get_table |
| slug* | string | From list_tables |
| column* | string | The column's id, from get_table |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"row",
"column"
],
"properties": {
"row": {
"type": "string",
"maxLength": 200,
"description": "The row's key, from get_table"
},
"slug": {
"type": "string",
"maxLength": 120,
"description": "From list_tables"
},
"column": {
"type": "string",
"maxLength": 80,
"description": "The column's id, from get_table"
}
}
}Read a table: its scope, its columns with the rule for each, and its rows. A null value means no acceptable source stated it.
| Argument | Type | Description |
|---|---|---|
| slug* | string | From list_tables |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"description": "From list_tables"
}
}
}Find tables in the library. Each result gives its slug, the question it answers, its size and when it was last read.
| Argument | Type | Description |
|---|---|---|
| query | string | Words to look for in titles, questions, columns and rows. Leave out to list everything. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"description": "Words to look for in titles, questions, columns and rows. Leave out to list everything."
}
}
}Suggest a new value for a cell, with its proof. The quote must be word for word from the source and state the value. The owner reviews it before anything changes. Needs a token sent as a Bearer token.
| Argument | Type | Description |
|---|---|---|
| row* | string | The row's exact key, from get_table |
| note | string | Why this should change |
| slug* | string | From list_tables |
| quote* | string | The exact words on that page |
| value* | string | The new value, following the column's rule |
| column* | string | The column's id, from get_table |
| source* | string | The page that states it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"row",
"column",
"value",
"source",
"quote"
],
"properties": {
"row": {
"type": "string",
"maxLength": 200,
"description": "The row's exact key, from get_table"
},
"note": {
"type": "string",
"maxLength": 500,
"description": "Why this should change"
},
"slug": {
"type": "string",
"maxLength": 120,
"description": "From list_tables"
},
"quote": {
"type": "string",
"maxLength": 400,
"description": "The exact words on that page"
},
"value": {
"type": "string",
"maxLength": 300,
"description": "The new value, following the column's rule"
},
"column": {
"type": "string",
"maxLength": 80,
"description": "The column's id, from get_table"
},
"source": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "The page that states it"
}
}
}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 1, 2026.