> **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 NocoDB MCP server

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

**Authentication:** OAuth 2.1/DCR
**Categories:** Databases, Productivity, Collaboration
**Tools:** 11: 9 read, 0 write, 2 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=NOCODBMCP)

## 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 NocoDB MCP connection

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

   Scalekit credentials are available for NocoDB 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 = 'nocodbmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize NocoDB 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: 'nocodbmcp_getbaseinfo',
     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 = "nocodbmcp"
   identifier = "user_123"

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

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="nocodbmcp_getbaseinfo",
       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: 'nocodbmcp_aggregate',
  toolInput: {
    aggregations: [],
    filterGroups: [],
    tableId: '<tableId>',
  },
  connector: 'nocodbmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="nocodbmcp_aggregate",
    tool_input={
        "aggregations": [],
        "filterGroups": [],
        "tableId": "<tableId>",
    },
    connection_name="nocodbmcp",
    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.

### `nocodbmcp_aggregate`

Aggregate · Read-only

Perform aggregations (sum, count, avg, etc.) on table data with filtering and grouping

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

Inputs:

- `aggregations` (`array`, required): List of aggregation operations to perform on the table fields.
- `filterGroups` (`array`, required): List of filter groups; each group produces a separate set of aggregation results.
- `tableId` (`string`, required): The unique ID of the NocoDB table to aggregate data from.
- `viewId` (`string`, optional): Optional view ID to scope the aggregation to a specific view's configuration.

Example input: `{"aggregations":[],"filterGroups":[],"tableId":"<tableId>"}`

### `nocodbmcp_countrecords`

CountRecords · Read-only

Count Records in a Table

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

Inputs:

- `tableId` (`string`, required): The unique ID of the NocoDB table to count records in.
- `where` (`string`, optional): Filter expression to limit which records are counted. Uses NocoDB query syntax: (field,operator,value). Combine conditions with ~and / ~or.

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

### `nocodbmcp_createrecords`

CreateRecords · Read-only

Create records in a table

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

Inputs:

- `records` (`array`, required): List of records to create. Each record is an object with a 'fields' key containing field name-value pairs.
- `tableId` (`string`, required): The unique ID of the NocoDB table to insert records into.

Example input: `{"records":[],"tableId":"<tableId>"}`

### `nocodbmcp_getbaseinfo`

GetBaseInfo · Read-only

Fetch information about current base

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

Inputs: none.

Example input: `{}`

### `nocodbmcp_getrecord`

GetRecord · Read-only

Fetch a record by ID

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

Inputs:

- `recordId` (`string`, required): The ID or primary key value of the record to fetch.
- `tableId` (`string`, required): The unique ID of the NocoDB table containing the record.
- `fields` (`string`, optional): Comma-separated list of field names to include in the response. Leave blank to return all fields.

Example input: `{"recordId":"<recordId>","tableId":"<tableId>"}`

### `nocodbmcp_gettableschema`

GetTableSchema · Read-only

Get the table schema including fields and views information

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

Inputs:

- `tableId` (`string`, required): The unique ID of the NocoDB table to retrieve the schema for.

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

### `nocodbmcp_gettableslist`

GetTablesList · Read-only

List tables accessible by user

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

Inputs: none.

Example input: `{}`

### `nocodbmcp_queryrecords`

QueryRecords · Read-only

Query Records from a Table

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

Inputs:

- `tableId` (`string`, required): The unique ID of the NocoDB table to query records from.
- `fields` (`array`, optional): List of field names to include in the response. Returns all fields when omitted.
- `page` (`number`, optional): Page number for pagination. Starts at 1.
- `pageSize` (`number`, optional): Number of records to return per page. Default is 50.
- `sort` (`array`, optional): List of sort options. Each entry specifies a field name and sort direction.
- `where` (`string`, optional): Filter expression using NocoDB query syntax: (field,operator,value). Combine with ~and / ~or.

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

### `nocodbmcp_readattachment`

ReadAttachment · Read-only

Read attachments in a record

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

Inputs:

- `files` (`array`, required): List of attachment objects from NocoDB. Each attachment must include title, mimeType, size, and either a URL or a path.

Example input: `{"files":[]}`

### `nocodbmcp_deleterecords`

DeleteRecords · Destructive

Delete records in a table

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

Inputs:

- `records` (`array`, required): List of records to delete. Each entry must include the record ID.
- `tableId` (`string`, required): The unique ID of the NocoDB table to delete records from.

Example input: `{"records":[],"tableId":"<tableId>"}`

### `nocodbmcp_updaterecords`

UpdateRecords · Destructive

Update records in a table

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

Inputs:

- `records` (`array`, required): List of records to update. Each entry must include the record ID and a 'fields' object with the updated values.
- `tableId` (`string`, required): The unique ID of the NocoDB table to update records in.

Example input: `{"records":[],"tableId":"<tableId>"}`

## Related

Other Databases connectors ([all 18](/agentkit/connectors/?category=databases)):

- [Snowflake](/agentkit/connectors/snowflake/): Scalekit connector, OAuth, 42 tools
- [AWS Redshift](/agentkit/connectors/redshift/): Scalekit connector, Trusted identity provider, 10 tools
- [Google BigQuery](/agentkit/connectors/bigquery/): Scalekit connector, OAuth, 47 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 |
