TacTile›Launch TacTile›MCP surface·47 in this wave
notes.delete, document.delete, menu.delete and videoaudio.delete soft-delete any destination type the caller owns, and report success for a hash that matched nothingDone
Wave

MCP surface

Thesis pillar 3 — "Agentic AI + MCP." The investor deck claims first-in-category MCP-native. Audit (2026-07-26) found the hosted server IS live at mcp.tactile.to with real OAuth production traffic (14 clients, 11 tokens) — but the code's own deploy banner still says "NOT DEPLOYED" (stale), and tool coverage is genuinely incomplete: roughly half the 147-op catalog are proposer stubs that never mutate state, and 2 of 14 destination types (Action, Bluetooth) have zero MCP presence at all. Not cuttable: this is a stated structural moat.

TacTile › Launch TacTile › MCP surface
27/47 done20 open2 open blockers
Selected taskclear

notes.delete, document.delete, menu.delete and videoaudio.delete soft-delete any destination type the caller owns, and report success for a hash that matched nothing

DoneOwner · Vivt_35cf60f9

Found 16 Oct while auditing contact.delete's siblings (t_ec1ab373). packages/mcp-server/src/tools/destination-content.ts:56-63 softDeleteDestination PATCHes `destinations?hash_id=eq.<hash>` with deleted_at and NO type filter and NO return=representation read-back; makeSoftDeleteTool (:65-81) is notes.delete (:144), document.delete (:186), menu.delete (:434) and videoaudio.delete (:511). So notes.delete with a Wi-Fi, payment or website hash the caller owns sets deleted_at on it (the public link stops resolving), and any of the four returns ok:true for a hash that matched no row. Soft, not a hard delete, so recoverable by clearing deleted_at, but no MCP tool clears it. form.delete (form.ts:653) and linkhub.delete (link-hub.ts:351) already do it right: `&type=eq.form` / `&type=eq.link_hub` in the PATCH filter plus `return=representation` and an error on zero rows. destinations.delete (destinations.ts:413) is the intentionally generic soft delete and is not this bug.

No dependencies in this wave — nothing gates it, and nothing waits on it.

Show the prompt
To doIn progressDoneBlockedPick a wave on the left · tap a task to expand it