Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tablepro.app/llms.txt

Use this file to discover all available pages before exploring further.

Tokens

Every external request needs a bearer token. Tokens carry a scope, an optional connection allowlist, and an optional expiry. Tokens are stored hashed (SHA-256 + salt) at ~/Library/Application Support/TablePro/mcp-tokens.json with 0600 permissions. The plaintext is shown once at creation and never again.

Token shape

struct MCPAuthToken {
    let id: UUID
    var name: String
    let prefix: String                // First 8 chars of plaintext, e.g. "tp_a1b2c3"
    let hashedToken: String           // SHA-256 + salt of the plaintext
    var permissions: TokenPermissions // readOnly, readWrite, fullAccess
    var allowedConnectionIds: Set<UUID>?  // nil means all connections
    var expiresAt: Date?              // nil means never
    var isActive: Bool
    let createdAt: Date
    var lastUsedAt: Date?
}
The prefix is shown in the token list so the user can identify a token without revealing the secret.

Scopes

ScopeRead schemaSELECTINSERT/UPDATE/DELETEDROP/TRUNCATEUI mutation
readOnlyyesyesnonono
readWriteyesyesyesnoyes
fullAccessyesyesyesyes (with phrase)yes
UI mutation covers open_connection_window, open_table_tab, focus_query_tab. These open windows and tabs in the running app. DROP and TRUNCATE always require an explicit confirmation phrase via confirm_destructive_operation, even with fullAccess. There is no token scope that bypasses the phrase.

Connection allowlist

Each token can be limited to a subset of connections.
  • allowedConnectionIds = nil means all connections.
  • allowedConnectionIds = { uuid1, uuid2 } means only those.
A request that targets a connection outside the allowlist returns 403 forbidden before any per-connection check runs.

External access combination

The effective permission is MIN(token.scope, connection.externalAccess).
Token scopeConnection accessEffective
readOnlyreadWritereadOnly
readWritereadOnlyreadOnly
fullAccessreadOnlyreadOnly
fullAccessreadWritereadWrite (no destructive)
fullAccessblockeddenied
anyblockeddenied
A fullAccess token cannot mutate data on a readOnly connection. A token’s reach is bounded by both itself and the connection.

Creation

Tokens are created in three ways:
  1. Pairing flow (most common). See Pairing.
  2. Settings UI. Settings > Integrations > Authentication, then Generate Token. Pick name, scope, allowlist, expiry. The plaintext is shown once in a reveal sheet.
  3. AppleScript-style URL is not supported. Tokens are not exposed as a URL scheme action.
The plaintext format is tp_<base64url(32 bytes)>. The first 8 chars are the prefix.

Expiry

Optional. If set, the token stops authenticating at the expiry time. Expired requests return 401 unauthorized with message: "Token expired". Recommended values:
  • readWrite and fullAccess for human-driven extensions: 90 days.
  • readOnly for personal use: never.
  • CI or automation: 30 days, rotated.

Revocation

Settings > Integrations > Authentication lists all tokens with prefix, name, scope, allowlist, last-used time, and expiry. Each row has:
  • Revoke: marks the token inactive. Stays in the list with status Revoked. Cannot be reactivated.
  • Delete: removes the row entirely.
A revoked token returns 401 unauthorized immediately. The MCP server invalidates any cached session for the token within one second. After revoking a token used by an extension, the extension shows an “unauthorized” state on the next call. The user runs the pairing command again to mint a new token.

Audit log

Every authentication, every tool call, every resource read is recorded in ~/Library/Application Support/TablePro/mcp-audit.db with the token id (not the plaintext). The activity log view in Settings > Integrations > Activity Log shows:
FieldExample
Timestamp2026-04-26 10:14:22
TokenRaycast on macbook-pro (tp_a1b2c3)
Categoryquery, auth, access, admin
Actionexecute_query, pair, revoke
ConnectionProduction (or -)
Outcomesuccess, denied, error
Entries are kept for 90 days, auto-pruned on app launch.

Rate limits

Per-IP, on failed auth:
FailuresLockout
21 second
35 seconds
430 seconds
5+5 minutes
A successful auth resets the counter. During lockout the server returns 429 Too Many Requests.

What tokens cannot do

CapabilityState
Read connection passwordsno
Read SSH keysno
Read license datano
Read app settingsno
Read local files outside ~/Library/Application Support/TablePro/no
Mutate Safe Mode rulesno
Mutate other tokensno
Mutate connection recordsno
The token surface is the MCP tool catalog and the URL scheme. Anything not on those lists is not reachable.