Koskamo

Skeletable MCP

A public library of tables where each cell links to the exact words that prove it, allowing agents to access source-backed data with citations and claim checks for topics like AI pricing, laws, and hardware specs.

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.

Skeletable MCP logo, by SkeletableCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Skeletable
MCP endpoint (Streamable HTTP)
https://skeletable.com/mcp
Vendor documentation

What you can do with it

  • Query AI model API prices per million tokens
  • Check AI provider data terms for training and retention
  • Find US data breach notification law requirements
  • Compare e-reader specifications and features

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
skeletable 1.0.0
MCP protocol
2025-06-18
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Skeletable is a library of tables where every value links to the source that states it. Use list_tables to find a table, get_table to read it, get_cell for a value's source and exact quote, and check_claim to test a statement against a cell. A null value means no acceptable source stated it: say it's unknown rather than filling it in. Check a table's scope and lastRead before relying on it. When you use a value, cite the source and give the cell's `url`, so a reader can see the proof. With a token you can build a table: create_table makes a private draft, and fill_cells adds values with their proof. Use the owner's own pages, copy each quote word for word, never get around a block, and say where you looked when no source states a value. A person reviews and publishes a draft.

Tools

9 advertised

list_tables
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find tables in the library. Each result gives its slug, the question it answers, its size and when it was last read.

list_tables input schema
{
  "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."
    }
  }
}
list_tables annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_table
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a table: its scope, its columns with the rule for each, and its rows. A null value means no acceptable source stated it.

get_table input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "maxLength": 120,
      "description": "From list_tables"
    }
  }
}
get_table annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_cell
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_cell input schema
{
  "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"
    }
  }
}
get_cell annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_claim
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_claim input schema
{
  "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"
    }
  }
}
check_claim annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
propose_change
Advertised by the server during the last successful anonymous check.
Open-world

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.

propose_change input schema
{
  "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"
    }
  }
}
propose_change annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
create_table
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_table input schema
{
  "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"
    }
  }
}
create_table annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
add_columns
Advertised by the server during the last successful anonymous check.
Open-world

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.

add_columns input schema
{
  "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_columns annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
add_rows
Advertised by the server during the last successful anonymous check.
Open-world

Add rows to a draft you run, as you find what belongs in it. A name it already has is skipped. Needs a token.

add_rows input schema
{
  "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
    }
  }
}
add_rows annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
fill_cells
Advertised by the server during the last successful anonymous check.
Open-world

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.

fill_cells input schema
{
  "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
    }
  }
}
fill_cells annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
363 ms
95th percentile latency
363 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 363 ms · metadata changed · 9 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http skeletable-mcp https://skeletable.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add skeletable-mcp --url https://skeletable.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable skeletable-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "skeletable-mcp": {
      "url": "https://skeletable.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "skeletable-mcp": {
      "type": "streamableHttp",
      "url": "https://skeletable.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start skeletable-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "skeletable-mcp": {
      "type": "http",
      "url": "https://skeletable.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http skeletable-mcp https://skeletable.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "skeletable-mcp": {
      "url": "https://skeletable.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "skeletable-mcp": {
      "serverUrl": "https://skeletable.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Skeletable MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.