> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Catchr MCP server

The Catchr MCP connector routes your AI agent's tool calls to Catchr's own MCP server through Scalekit. Each user signs in to Catchr once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 8 tools.

**Authentication:** OAuth2.1/DCR
**Categories:** Analytics, Automation
**Tools:** 8: 7 read, 1 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=CATCHRMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Catchr MCP connection

   In **AgentKit > Connections**, create a Catchr MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Catchr MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'catchrmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Catchr MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'catchrmcp_describe_run_api_request_schema',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "catchrmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Catchr MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="catchrmcp_describe_run_api_request_schema",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'catchrmcp_describe_run_api_request_schema',
  toolInput: {},
  connector: 'catchrmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="catchrmcp_describe_run_api_request_schema",
    tool_input={},
    connection_name="catchrmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `catchrmcp_describe_run_api_request_schema`

Describe Run Api Request Schema · Read-only

Return the detailed input schema and filter guide for run_api_request_json.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `catchrmcp_list_all_fields`

List All Fields · Read-only

List all published fields across all platforms from Catchr field catalog.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `groupByPlatform` (`boolean`, optional): When true, fields are grouped per platform in the response. Default: `true`.

Example input: `{}`

### `catchrmcp_list_available_accounts`

List Available Accounts · Read-only

List available accounts for a platform and company, optionally scoped to one authorization.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `platform` (`string`, required): Catchr platform identifier.
- `authorizationId` (`string`, optional): Filter accounts to those belonging to a specific authorization source.
- `includeParentAccounts` (`boolean`, optional): When true, include parent-level accounts in the response. Default: `false`.
- `parentAccountId` (`string`, optional): Filter to children of a specific parent account ID.

Example input: `{"platform":"<platform>"}`

### `catchrmcp_list_fields_by_platform`

List Fields By Platform · Read-only

List all fields for one platform. Includes calculated/runtime fields when available.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `platform` (`string`, required): Catchr platform identifier (for example: "facebook-ads").
- `report` (`string`, optional): Optional provider report key used by restricted field providers.

Example input: `{"platform":"<platform>"}`

### `catchrmcp_list_fields_for_account`

List Fields For Account · Read-only

List all fields for a specific account and authorization pair on a platform.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `accountId` (`string`, required): The account ID scoped to the platform.
- `authorizationId` (`integer`, required): The authorization (source) ID linked to this account.
- `platform` (`string`, required): Catchr platform identifier.
- `report` (`string`, optional): Optional provider report key used by restricted field providers.

Example input: `{"accountId":"<accountId>","authorizationId":1,"platform":"<platform>"}`

### `catchrmcp_list_platforms`

List Platforms · Read-only

List Catchr platforms. You can list only connected platforms for the authenticated company.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `connectedOnly` (`boolean`, optional): When true, return only platforms that are connected for the authenticated company. Default: `false`.

Example input: `{}`

### `catchrmcp_list_sources`

List Sources · Read-only

List network authorizations (sources) for the authenticated company, with optional available accounts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `includeAvailableAccounts` (`boolean`, optional): When true, include the list of available accounts for each source. Default: `true`.
- `platform` (`string`, optional): Filter sources to a specific platform identifier.

Example input: `{}`

### `catchrmcp_run_api_request_json`

Run Api Request Json · Write

Execute the Catchr API request in JSON mode for one or multiple accounts.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `accounts` (`array`, required): One or more accounts to include in the request. Each entry requires id and authorization_id.
- `platform` (`string`, required): Catchr platform identifier.
- `date` (`string`, optional): Preset date range or CUSTOM to use start_date/end_date. One of: `TODAY`, `YESTERDAY`, `LAST_7_DAYS`, `LAST_14_DAYS`, `LAST_28_DAYS`, `LAST_90_DAYS`, `THIS_WEEK_START_SUNDAY`, `LAST_WEEK_START_SUNDAY`, `THIS_WEEK_START_MONDAY`, `LAST_WEEK_START_MONDAY`, `THIS_MONTH`, `LAST_MONTH`, `LAST_X_MONTH`, `LAST_X_WEEK`, `LAST_X_DAY`, `LAST_X_YEAR`, `THIS_QUARTER`, `LAST_QUARTER`, `THIS_YEAR`, `LAST_YEAR`, `LAST_365_DAYS`, `CUSTOM`, `SINCE`. Default: `CUSTOM`.
- `dimensions` (`array`, optional): List of dimension field keys to break down the data by.
- `end_date` (`string`, optional): End date in YYYY-MM-DD format. Required when date is CUSTOM.
- `filters` (`array`, optional): List of filter conditions to apply to the query.
- `include_current_date` (`boolean`, optional): Whether to include the current (partial) date in the results. Default: `false`.
- `max_rows` (`integer`, optional): Maximum number of rows to return. Minimum 1. Default: `1000`.
- `metrics` (`array`, optional): List of metric field keys to include in the response.
- `offset_time` (`string`, optional): Timezone offset in hours applied to date boundaries.
- `options` (`object`, optional): Additional platform-specific options as a JSON object.
- `since` (`string`, optional): ISO 8601 timestamp used when date is SINCE.
- `sorts` (`array`, optional): List of sort instructions applied to the result set.
- `start_date` (`string`, optional): Start date in YYYY-MM-DD format. Required when date is CUSTOM.

Example input: `{"accounts":[],"platform":"<platform>"}`

## Related

Other Analytics connectors ([all 95](/agentkit/connectors/?category=analytics)):

- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Snowflake](/agentkit/connectors/snowflake/): Scalekit connector, OAuth, 42 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
