> ## Documentation Index
> Fetch the complete documentation index at: https://ngquct-docs-fix-500-query-results.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# External API

> URL scheme, MCP server, pairing flow, terminal, and iOS Shortcuts for driving TablePro from other apps

Deep links drive the GUI. MCP moves data. That one split decides which page you need, and pairing is
the step in front of MCP that gets a client its token.

<CardGroup cols={3}>
  <Card title="URL scheme" icon="link" href="/external-api/url-scheme">
    `tablepro://` deep links open connections, tables, and queries in the GUI.
  </Card>

  <Card title="MCP server" icon="plug" href="/external-api/mcp-tools">
    JSON-RPC tools, resources and prompts for AI clients, over stdio or local HTTP.
  </Card>

  <Card title="Pairing" icon="handshake" href="/external-api/pairing">
    One-click flow that issues a scoped token to an extension.
  </Card>
</CardGroup>

Two surfaces build on those. macOS hands TablePro plain database URLs (`mysql://…`) and `.sql` files,
which is what the [Terminal and DDEV](/external-api/terminal) integration rides on. On iPhone and
iPad, App Intents put three actions in [Shortcuts](/external-api/ios-shortcuts).

## Quick start

Opening something in the GUI needs no setup at all:

```bash theme={null}
open "tablepro://connect/9f1f0c3e-2e3d-4b14-9c3a-1d2f4ad1f6f1"
```

Reading data back needs a token. Install the [Raycast extension](/external-api/raycast) and run
**Pair with TablePro**, or wire stdio MCP into your own [MCP client](/external-api/mcp-clients) and
skip the extension.

## Security model

The MCP server binds `127.0.0.1`, and on stock settings every request carries a token. A call is
allowed only where the token's scope, the token's connection allowlist, and the connection's own
**External Clients** level all permit it; the effective permission is the lowest of them.
[Tokens](/external-api/tokens) has the full model. On top of that, an AI policy of **Never** refuses
the connection outright, and [Safe Mode](/features/safe-mode) still holds destructive statements
behind a confirmation.

Each request lands in the activity log with the token behind it, and a statement is stored as a
SHA-256 digest rather than as text. Open **Settings > Integrations** and click **View Activity** to
read it.

## Versioning

Paths, tools and result fields are additive within a major version, and the app is still on 0.x. See
[Versioning](/external-api/versioning) for what that means for a client you have to keep working.
