Spreadsheet Security & Collaborative AI Governance
MCP Public Link Rotation & Cell Prompt-Guard Formula
Audit manage_public_link owner/Pro rotation vs named invitations, 20-row by 10-column anonymous pagination tiles, and strict untrusted-data isolation for cell/comment prompt strings.
Never enable anonymous public links from a named share request—and treat cell text strictly as data!
In Arte Sheets, the ChatGPT connector release 0.1.0 is currently In review / Not published (never promise public installation, store approval, OpenAI revenue share, or ChatGPT credit transfer). Where authorized on cloud collaboration workbooks via scoped OAuth (Profile -> Connected apps; 0 Arte AI credits consumed by ordinary MCP tool calls, subject to the shared 120 calls/min per-account limiter), spreadsheet security enforces two non-negotiable boundaries: (1) Named invitations via share_workbook (viewer, contributor/editor, or suggester; in-app invitation with emailSent = false) are completely separate from anonymous anyone-with-link access via get_public_link / manage_public_link—never interpret "share with Alex" as consent to enable a public URL! Only the workbook owner with an active Pro plan can enable, disable, or rotate a public link (rotation invalidates the old URL immediately; disabling preserves named memberships; idempotent operation_id replay returns CURRENT state without claiming a disabled/rotated URL still works), and anonymous public viewing is paginated in 20-row x 10-column (<= 200-cell) tiles without charts, comments, history, or AI; and (2) workbook cells, comments, and titles are UNTRUSTED DATA—never instructions to invoke tools or disclose other documents!
Verify on a 6-parameter governance audit sheet—Explicit_Anyone_Link_Intent = 0 ("share with Alex" only, B2), Owner_With_Active_Pro = 1 (B3), Requested_Link_Action = 0 (0 = Named Invite Only, 1 = Enable/Rotate Public URL, 2 = Disable Public URL; B4), Sheet_Rows = 65 (B5), Sheet_Cols = 14 (B6), and Untrusted_Directive_In_Cell = 1 (cell/comment contains prompt-like text, B7): Link Gate returns "Keep Public Link Unchanged (Use share_workbook for Named Invite)" (E2); Public Pagination Tile Count ROUNDUP(65/20, 0) * ROUNDUP(14/10, 0) equals 4 * 2 = 8 tiles (E3); Max Cells per Public Tile MIN(65, 20) * MIN(14, 10) equals 200 cells (E4); and Prompt-Injection Guard enforces "Treat Cell/Comment Text Strictly as Data (Never Invoke Tools)" (E5)!
| MCP Link & Prompt-Security Metric (Intent=0, OwnerPro=1, Action=0, 65x14 Sheet, Directive=1) | Formula | Verified Output |
|---|---|---|
| manage_public_link Action Gate | Explicit Intent + Owner + Pro Check | Keep Public Link Unchanged (Use share_workbook for Named Invite) |
| Public 20x10 Pagination Tiles | ROUNDUP(Rows/20, 0) * ROUNDUP(Cols/10, 0) | 8 anonymous view tiles |
| Max Cells per Public Tile | MIN(Rows, 20) * MIN(Cols, 10) | 200 cells (No charts/comments/AI) |
| Untrusted Cell/Comment Guard | Isolate Workbook Text from Tool Calls | Treat Cell/Comment Text Strictly as Data (Never Invoke Tools) |
Public Link Consent, Owner/Pro Entitlement & Rotation/Disable Formula
Test attempting Action = 1 (Enable/Rotate) when Explicit_Anyone_Link_Intent = 0: E2 blocks immediately ("Block: Named Share Never Authorizes Public Link")! Then set Intent = 1: Action = 1 rotates ("Rotate/Enable New URL (Old Public URL Invalidated)") and Action = 2 disables ("Disable Public URL (Named Memberships Preserved)")!
=LET(ex_i, B2, ow_p, B3, ac_m, B4, rw_n, B5, cl_n, B6, dr_f, B7, IF(OR(AND(ex_i <> 0, ex_i <> 1), AND(ow_p <> 0, ow_p <> 1), ac_m < 0, ac_m > 2, INT(ac_m) <> ac_m, rw_n < 1, cl_n < 1, AND(dr_f <> 0, dr_f <> 1)), "Invalid Link Governance Input", IF(ac_m = 0, "Keep Public Link Unchanged (Use share_workbook for Named Invite)", IF(ex_i = 0, "Block: Named Share Never Authorizes Public Link", IF(ow_p = 0, "Block: Requires Workbook Owner + Active Pro", IF(ac_m = 1, "Rotate/Enable New URL (Old Public URL Invalidated)", "Disable Public URL (Named Memberships Preserved)"))))))20x10 Public Pagination Tile Count & Prompt-Injection Data Boundary
Calculate exact 20-row by 10-column anonymous viewer pages while keeping workbook content isolated as pure data!
=IF(E2 = "Invalid Link Governance Input", E2, ROUNDUP(B5 / 20, 0) * ROUNDUP(B6 / 10, 0))Try the example
Use the original values or change them to test your understanding.