# MCP Server

The Paradime MCP Server is a single, authenticated remote endpoint that brings DinoAI's full context graph — your warehouse, repositories, dbt™ catalog, lineage, and Bolt orchestration — to any MCP-compatible AI client.

This guide walks you through generating an access token, configuring your client, and verifying the connection.

{% hint style="success" %}
**Setup takes about a minute.** If you already have a Paradime account, you can be connected and running queries in your AI client before this page finishes loading.
{% endhint %}

### Before you start

You need:

* A **Paradime account**. Business and read-only seats are free — if you don't have access, ask your data team to invite you to your workspace.
* An **MCP-compatible client**. Claude (Desktop or web), Claude Code, ChatGPT, GitHub Copilot, Cursor, and OpenCode are all supported. See [Client setup](https://claude.ai/chat/9c39d868-001c-4eab-aed5-60df4d2970b4#step-3-add-paradime-to-your-client) below.
* Your data team has **configured the workspace integrations** the MCP should expose (warehouse, code repository, BI tools). The MCP inherits your workspace's existing connections — there's nothing extra to configure on the MCP side.

{% hint style="info" %}
The MCP server uses the **same access boundaries** as the rest of Paradime. Your token can only reach the integrations your workspace has connected, and only with the permissions your role allows.
{% endhint %}

### Step 1: Generate your MCP token

1. Log in to Paradime at [app.paradime.io](https://app.paradime.io/).
2. Open **Settings → API keys** ([direct link](https://app.paradime.io/settings/api-keys)).
3. Click **Generate MCP token**.
4. Give the token a recognisable name (for example, `claude-desktop-laptop` or `cursor-work-mbp`). Naming tokens per device makes it easier to rotate or revoke them later and a lifetime in days
5. Copy the token **and** the MCP server URL shown next to it. You'll need both in Step 3.

{% hint style="warning" %}
**Treat your MCP token like a password.** It carries your full Paradime permissions. Never commit it to a repository, paste it into a shared document, or share it with teammates.\
\
If you suspect a token is compromised, return to **Settings → API keys** and revoke it. Generate a new one to replace it.
{% endhint %}

### Step 2: Copy the MCP server URL

The MCP server URL is shown alongside your token in the API keys page. It will look like:

```
https://<region>.paradime.io/api/v1/<company-token>/mcp
```

Copy this URL exactly as displayed. It's specific to your Paradime instance.

{% hint style="info" %}
If you belong to **multiple Paradime workspaces** - for example, separate workspaces for finance, marketing, and engineering, that's not a problem. One single MCP endpoint allows you to access across workspaces you have access to.
{% endhint %}

### Step 3: Add Paradime to your client

Pick the tab for your client below. The exact menu wording varies between client versions, but the flow is the same everywhere: add a remote MCP server, paste in the URL, paste in the token.

{% tabs %}
{% tab title="Claude Desktop or claude.ai" %}
**Claude Desktop or claude.ai**

1. Open **Settings → Connectors**.
2. Click **Add custom connector**.
3. Fill in:
   * **Name**: `Paradime`
   * **Remote MCP server URL**: paste the URL from Step 2.
4. Click **Add**, then **Connect**.
5. When prompted, paste in your MCP token from Step 1 and authorize.

You should see Paradime appear in your Connectors list. The 17 tools will be available the next time you start a chat.

<figure><img src="/files/S3NpY4TypVsFVSjlBUWb" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Custom connectors are available on Claude Pro, Max, Team, and Enterprise plans.
{% endhint %}
{% endtab %}

{% tab title="Claude Code" %}
**Claude Code (terminal)**

Run the `mcp add` command from any directory:

```bash
claude mcp add --transport http paradime <paradime-mcp-endpoint-url>
```

Replace the URL with your actual MCP server URL from Step 2.

When Claude Code prompts you for the token, paste in the MCP token from Step 1.

To verify the connection:

```bash
claude mcp list
```

You should see `paradime` listed with a `connected` status.

{% hint style="info" %}
Claude Code stores MCP credentials in `~/.claude.json`. To remove the connector, run `claude mcp remove paradime`.
{% endhint %}
{% endtab %}

{% tab title="Cursor" %}
**Cursor**

Open Cursor's settings file at `~/.cursor/mcp.json` (create it if it doesn't exist) and add the Paradime entry:

{% code title="\~/.cursor/mcp.json" %}

```json
{
  "mcpServers": {
    "paradime": {
      "url": "<mcp-endpoint-url>",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}
```

{% endcode %}

Replace `<mcp-endpoint-url>` with your URL from Step 2 and `YOUR_MCP_TOKEN` with the token from Step 1.

Restart Cursor. You can verify the connection under **Settings → MCP**, where Paradime should be listed with a green dot.
{% endtab %}

{% tab title="Github Copilot" %}
**GitHub Copilot in VS Code**

1. In your repository (or globally), create or open `.vscode/mcp.json`.
2. Add the Paradime entry:

{% code title=".vscode/mcp.json" %}

```json
{
  "servers": {
    "paradime": {
      "type": "http",
      "url": "<mcp-endpoint-url>",
      "headers": {
        "Authorization": "Bearer ${input:paradime-token}"
      }
    }
  },
  "inputs": [
    {
      "id": "paradime-token",
      "type": "promptString",
      "description": "Paradime MCP token",
      "password": true
    }
  ]
}
```

{% endcode %}

Replace `<mcp-endpoint-url>` with your URL from Step 2.

3. Reload VS Code. The first time you use Copilot Chat, you'll be prompted for the Paradime token. Paste in the token from Step 1.

{% hint style="info" %}
Using `${input:paradime-token}` keeps the token out of the file itself — VS Code stores it in its secret store. **Don't commit the file with the token inlined.**
{% endhint %}
{% endtab %}

{% tab title="OpenCode" %}
**OpenCode**

Edit your OpenCode config file (typically `~/.config/opencode/config.json`) and add Paradime under `mcp`:

{% code title="\~/.config/opencode/config.json" %}

```json
{
  "mcp": {
    "paradime": {
      "type": "remote",
      "url": "<mcp-endpoint-url>",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}
```

{% endcode %}

Replace `<mcp-endpoint-url>` with your URL from Step 2 and `YOUR_MCP_TOKEN` with the token from Step 1. Restart OpenCode.
{% endtab %}

{% tab title="Other Clients" %}
**Any MCP-compatible client**

The Paradime MCP server speaks the standard remote MCP protocol over HTTP with bearer-token authentication. To connect any other MCP-compatible client:

* **Server URL** — copy from **Settings → API keys** in Paradime.
* **Authentication** — `Authorization: Bearer <your-mcp-token>` header.
* **Transport** — HTTP/SSE (the client should support remote MCP servers, not just local stdio).

If your client requires a JSON config, the typical shape is:

```json
{
  "mcpServers": {
    "paradime": {
      "url": "<mcp-endpoint-url>",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}
```

If you run into issues, check that your client supports remote (not just local) MCP servers - older or stdio-only clients won't work.
{% endtab %}
{% endtabs %}

### Step 4: Verify the connection

To confirm your connection is healthy, ask your AI client a simple question that requires Paradime context. For example:

> *"Use Paradime to list my Bolt schedules."*

or

> *"Use Paradime to search the catalog for models that touch the orders table."*

If your client returns real data from your workspace, you're connected. If you get an error, jump to [Troubleshooting](https://claude.ai/chat/9c39d868-001c-4eab-aed5-60df4d2970b4#troubleshooting) below.

### Available tools

Once connected, your client has access to all 17 tools below.

#### Code & repository

| Tool                           | What it does                                                                    |
| ------------------------------ | ------------------------------------------------------------------------------- |
| `read_file`                    | Read any file in your connected code repository (SQL, Python, YAML, etc.).      |
| `rename_file`                  | Rename a file in the repo. Parent directories are created automatically.        |
| `search_files_and_directories` | Find files and folders by glob pattern (`**/*.sql`, `models/staging/**`).       |
| `ripgrep_search`               | High-speed regex search across the entire repo with context lines.              |
| `create_pull_request`          | Open a new PR - including drafts — using the connected user's GitHub account.   |
| `read_pull_request`            | Pull PR metadata, the full code diff, CI status, or review and inline comments. |
| `list_pull_requests`           | List PRs by state, branch, sort order, or popularity.                           |

#### Data warehouse & catalog

| Tool                       | What it does                                                                                              |
| -------------------------- | --------------------------------------------------------------------------------------------------------- |
| `run_sql_query`            | Execute SQL against your warehouse and return results as CSV (Snowflake, BigQuery, Databricks, Redshift). |
| `search_catalog`           | Search the unified catalog — dbt™ models, sources, tests, macros, plus Looker, Tableau, Fivetran assets.  |
| `get_column_level_lineage` | Trace upstream and downstream dependencies for any column in any model.                                   |

#### Bolt orchestration

| Tool                  | What it does                                                                           |
| --------------------- | -------------------------------------------------------------------------------------- |
| `list_bolt_schedules` | List every active Bolt schedule with name, UUID, cron, owner, and configured commands. |
| `get_bolt_run_logs`   | Pull AI-generated failure summaries for a specific run or the most recent run.         |

#### Workspace management

| Tool               | What it does                                                                      |
| ------------------ | --------------------------------------------------------------------------------- |
| `list_workspaces`  | List every Paradime workspace your account has access to.                         |
| `switch_workspace` | Switch the active workspace — useful when you have multiple workspaces connected. |

#### Web & research

| Tool                  | What it does                                                                              |
| --------------------- | ----------------------------------------------------------------------------------------- |
| `execute_web_search`  | General-purpose web search, with optional domain restrictions (e.g. limit to docs sites). |
| `perplexity_search`   | Real-time web search via the Perplexity API for up-to-date documentation and references.  |
| `extract_url_content` | Pull clean text content from any HTTP/HTTPS URL.                                          |

### Troubleshooting

<details>

<summary>"Authentication failed" or "401 Unauthorized"</summary>

Your token is either expired, revoked, or pasted incorrectly.

* Check **Settings → API keys** in Paradime to confirm the token still exists.
* Make sure you copied the **full** token without trailing whitespace.
* If unsure, generate a new token and re-add the connector with the fresh value.

</details>

<details>

<summary>"Connection failed" or the connector won't authorize</summary>

* Confirm the **MCP server URL** is correct — it includes a workspace ID at the end and is unique to your workspace.
* Check that your network or VPN isn't blocking outbound HTTPS to `*.paradime.io`.
* Make sure your client supports **remote** MCP servers (over HTTP/SSE), not just local stdio servers.

</details>

<details>

<summary>The MCP is connected but tools return empty results</summary>

The token is working, but the underlying integration may not be configured.

* For warehouse tools (`run_sql_query`), confirm your data team has connected a warehouse to your workspace.
* For repo tools (`read_file`, `ripgrep_search`, `create_pull_request`), confirm a code repository is connected and the connected user has access to it.
* For catalog/lineage tools, your dbt™ project needs to have been parsed at least once in Paradime.

</details>

<details>

<summary>"Tool not found" or the AI client doesn't see Paradime tools</summary>

* Some clients cache the MCP tool list at startup — try restarting the client after adding the connector.
* In Claude and ChatGPT, ensure Paradime is **enabled** in the connectors menu of your current chat.
* If you've recently rotated your token, the old connector may still be cached. Remove and re-add it.

</details>

<details>

<summary>I'm in multiple workspaces and the agent uses the wrong one</summary>

Use the `switch_workspace` tool — ask the agent to switch context: *"Switch to the marketing workspace before continuing."*

</details>

<details>

<summary>The agent is making too many tool calls / responses are slow</summary>

This is usually a sign the underlying client is sending the wrong context to the model. A few things to try:

* Be specific in your prompt — *"In the dbt catalog, find models that ref `stg_orders`"* routes more efficiently than *"find anything related to orders"*.
* On large monorepos, prefer `search_catalog` over `ripgrep_search` for catalog-aware queries.
* If using a smaller model, switch to a larger context model (Claude Sonnet/Opus, GPT-5) for complex multi-step tasks.

</details>

### FAQ

<details>

<summary>What happens when I leave my organisation?</summary>

When your Paradime account is deactivated, your MCP token is **revoked automatically**. Any AI client still configured with it will fail to authenticate on the next call. There are no leftover credentials to chase down.

</details>

<details>

<summary>Can I rotate my MCP token?</summary>

Yes. Generate a new token in **Settings → API keys**, replace the value in your client's connector config, then revoke the old token. Tokens can be rotated at any time without affecting the underlying workspace integrations.

</details>

<details>

<summary>Does the MCP token give me elevated access?</summary>

No. The token inherits **exactly** the permissions of your Paradime user. If you can't see the marketing workspace in Paradime, the MCP can't either. If you're a read-only user, the MCP can read but not write.

</details>

<details>

<summary>Are MCP requests audited?</summary>

Yes. All MCP tool calls are logged against your user account in Paradime, the same way warehouse queries and Bolt runs are.

</details>

<details>

<summary>How much does this cost?</summary>

The Paradime MCP Server is included with all paid Paradime plans, and free for business and read-only seats. Token consumption on the AI side (Claude, ChatGPT, etc.) is billed by your AI provider, not by Paradime.

</details>

<details>

<summary>Can I restrict which tools an MCP token can use?</summary>

You can use the configure page to set which tools are allowed, denied and needs permission before executing.

</details>

### Related

* [Announcement: The Paradime MCP Server is here](https://www.paradime.io/blog/paradime-mcp-server-is-here)
* [Generating Paradime API keys](https://app.paradime.io/settings/api-keys)
* [Model Context Protocol specification](https://modelcontextprotocol.io/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.paradime.io/app-help/documentation/dino-ai/mcp-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
