Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.oborchers/tablestakes

PYPI · TABLESTAKES

Read and edit HTML/Markdown tables in GitBook-synced documents via MCP tools.

Available components

−4 this week 89 Trust /100

Last scanned (1 hour ago)

Scores higher than 92% of PyPI servers

Category Documents and Files

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 19 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency99
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to oborchers/tablestakes). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 225 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability72
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2092 tokens (~190/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management67
  • Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_row" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +16
    • Malware scan: unverified → pass ▲ security
  • 4 Nov 26 −20
    • Malware scan: pass → unverified ▼ security
    • Stability: pass → 0.63 functional
  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 2 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 1 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 30 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 29 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 26 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/tablestakes@1.1.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo oborchers/tablestakes
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/oborchers/tablestakes/.github/workflows/release.yml@refs/tags/v1.1.0
Rekor log index 1172838632
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:6fda35f6e263fa1f47b49ef25769064c5fcf1f127dd90c376fba022fb57d53a9

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 19 packages
Packages resolved 19
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 11 exposed · ~1,825 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
create_table ~240

Create a new table in a Markdown file. Provide content as a pipe table. The table is written in the specified format: "html" (default, collapsed single-line HTML suitable for GitBook) or "pipe" (GFM pipe table). No version hash needed — this creates, not edits. On success returns `v:{hash}` of the new table. Use this hash with read_table and write tools to edit the table immediately. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
contentstringyesTable in pipe format (header row + delimiter + data rows). Example: "| Name | Age |\n| --- | --- |\n| Alice | 30 |"
file_pathstringyesAbsolute path to the Markdown file. Created if it doesn't exist.
formatstring–"html" (default) or "pipe". HTML produces collapsed single-line GitBook-compatible output. GitBook will auto-add width/data-* attributes on sync.
positioninteger–1-based line number to insert AFTER. -1 appends (default). 0 inserts at top.

No output schema declared.

No examples provided.

delete_column ~116

Delete a column. Requires version hash from read_table. On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
columnstringyesColumn letter ("A"), name ("Priority"), or composite ("B:Priority").
file_pathstringyesAbsolute path to the Markdown file.
table_indexintegeryes0-based table index from list_tables.
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

delete_row ~116

Delete a row. Requires version hash from read_table. On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
row_indexintegeryes0-based data row index to delete (header row is NOT counted).
table_indexintegeryes0-based table index from list_tables.
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

insert_column ~164

Insert a new column. Requires version hash from read_table. All existing rows are populated with default_value (empty string if omitted). On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
default_valuestring–Value for all existing rows (default: empty string).
file_pathstringyesAbsolute path to the Markdown file.
namestringyesHeader text for the new column.
positioninteger–0-based column index for insertion. -1 appends to the right (default).
table_indexintegeryes0-based table index from list_tables.
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

insert_row ~193

Insert a new row. Requires version hash from read_table. Provide values as a dict mapping column identifiers to cell content. Column identifiers: letter ("A"), name ("Priority"), or composite ("B:Priority"). Omitted columns default to empty string. On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
positionintegeryes0-based row index for insertion. Use -1 to append at the end.
table_indexintegeryes0-based table index from list_tables.
valuesobjectyesDict mapping column identifiers to cell values. Example: {"Name": "Alice", "B": "30", "C:City": "NYC"}
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

list_tables ~94

List all tables in a Markdown file with column descriptors and row previews. Prefer this over grep for discovering table structure — returns column names, row counts, formats, and version hashes. Use search_tables to find specific data across tables.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
preview_rowsinteger–Number of data rows to preview (default 1, 0 for none).

No output schema declared.

No examples provided.

read_table ~166

Read a full table as a clean pipe table with version hash. Prefer this over reading files directly — handles HTML tables, preserves inline formatting, and returns the version hash needed for any edit. First line of output is metadata: v:{hash} {format} {rows}r {cols}c [{section}] Extract the 12-char hex hash after "v:" (e.g. "a1b2c3d4e5f6") and pass it as the version argument to any write tool. If a write returns STALE_READ, call read_table again for a fresh version.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
table_indexintegeryes0-based table index from list_tables (the number after T).

No output schema declared.

No examples provided.

rename_column ~137

Rename a column header. Row data is unchanged. Requires version from read_table. On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
new_namestringyesNew header text for the column.
old_namestringyesCurrent column identifier: letter ("A"), name, or composite ("B:Priority").
table_indexintegeryes0-based table index from list_tables.
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

replace_table ~156

Replace an entire table with new content. Requires version from read_table. Provide new_content as a pipe table string (header row + delimiter + data rows). The server writes back in the ORIGINAL file format: pipe stays pipe, GitBook HTML stays GitBook HTML (attributes preserved). On success returns ONLY `v:{new_hash}`. On error returns JSON with "error" and "message" fields.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
new_contentstringyesFull pipe table string including header and delimiter rows.
table_indexintegeryes0-based table index from list_tables.
versionstringyes12-char hex hash from read_table (after "v:").

No output schema declared.

No examples provided.

search_tables ~226

Search for rows matching a value across one or all tables in a file. Returns matching rows with table index, row index, and version hash so you can immediately follow up with a write tool. Prefer this over grep for table data — it understands column structure and handles HTML tables. Two search modes (regex overrides pattern if both given): - pattern: case-insensitive substring match (simple, no escaping needed) - regex: full regex via re.search (e.g. ``D 1\.\d+`` for sub-items) If neither pattern nor regex is provided, returns all rows.

NameTypeReqDescription
columnstring–Restrict search to a column (letter, name, or composite). Empty string searches all columns.
file_pathstringyesAbsolute path to the Markdown file.
patternstring–Case-insensitive substring to match in cell values.
regexstring–Regular expression to match in cell values (overrides pattern).
table_indexinteger–Search a specific table (0-based), or -1 for all tables.

No output schema declared.

No examples provided.

update_cells ~217

Batch-update cells. Requires version hash from read_table. Each update is {row, column, value} where: - row: 0-based data row index (header row is NOT counted) - column: letter ("A"), name ("Priority"), or composite ("B:Priority") - value: new cell content (Markdown inline formatting supported) On success returns ONLY `v:{new_hash}`. On error returns JSON: {"error": "STALE_READ"|"EDIT_ERROR"|..., "message": "..."}. If STALE_READ: call read_table again for current version, then retry.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Markdown file.
table_indexintegeryes0-based table index from list_tables.
updatesarrayyesList of {row: int, column: str, value: str} objects.
versionstringyes12-char hex hash from read_table (after "v:", e.g. "a1b2c3d4e5f6").

No output schema declared.

No examples provided.

Install

How do I install the io.github.oborchers/tablestakes MCP server?

io.github.oborchers/tablestakes runs locally as a PyPI package, launched with uvx tablestakes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · tablestakes

# add to Claude Code
claude mcp add oborchers-tablestakes -- uvx tablestakes
Common questions

What is the io.github.oborchers/tablestakes MCP server?

io.github.oborchers/tablestakes is an MCP server listed in the public MCP registry as io.github.oborchers/tablestakes. Read and edit HTML/Markdown tables in GitBook-synced documents via MCP tools. This page covers its PyPI package (tablestakes).

Is the io.github.oborchers/tablestakes MCP server safe to use?

io.github.oborchers/tablestakes scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.oborchers/tablestakes MCP server expose?

io.github.oborchers/tablestakes exposes 11 tools: update_cells, insert_row, delete_row, replace_table, create_table, and 6 more. Their descriptions and schemas cost roughly 1,825 tokens of context every time the server is loaded.

Is the io.github.oborchers/tablestakes MCP server still maintained?

io.github.oborchers/tablestakes is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.oborchers/tablestakes MCP server under?

io.github.oborchers/tablestakes declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.