An MCP server for NocoDB, the open-source Airtable alternative. It allows interaction with your NocoDB instance via API.
A Model Context Protocol (MCP) server that provides a comprehensive interface to NocoDB - the open source Airtable alternative. This server enables AI agents to interact with NocoDB databases, making it perfect for storing and managing operational data across multiple AI teams.
npm install -g @andrewlwn77/nocodb-mcp
npx @andrewlwn77/nocodb-mcp
Create a .env
file in your project root:
# Required
NOCODB_BASE_URL=http://localhost:8080
NOCODB_API_TOKEN=your_api_token_here
# Optional
NOCODB_DEFAULT_BASE=your_default_base_id
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"nocodb": {
"command": "npx",
"args": ["@andrewlwn77/nocodb-mcp"],
"env": {
"NOCODB_BASE_URL": "http://localhost:8080",
"NOCODB_API_TOKEN": "your_api_token_here"
}
}
}
}
Or if installed globally:
{
"mcpServers": {
"nocodb": {
"command": "nocodb-mcp",
"env": {
"NOCODB_BASE_URL": "http://localhost:8080",
"NOCODB_API_TOKEN": "your_api_token_here"
}
}
}
}
list_bases
- List all available databases/projectsget_base_info
- Get detailed information about a specific baselist_tables
- List all tables in a baseget_table_info
- Get table schema and column informationcreate_table
- Create a new table with custom schemadelete_table
- Delete a tableadd_column
- Add a new column to an existing tabledelete_column
- Delete a column from a tableinsert_record
- Insert a single recordbulk_insert
- Insert multiple records at onceget_record
- Retrieve a specific record by IDlist_records
- List records with filtering and paginationupdate_record
- Update an existing recorddelete_record
- Delete a recordsearch_records
- Full-text search across recordsquery
- Advanced filtering with multiple conditionsaggregate
- Perform SUM, COUNT, AVG, MIN, MAX operationsgroup_by
- Group records by a columnlist_views
- List all views for a tablecreate_view
- Create a new viewget_view_data
- Get records from a specific viewupload_attachment
- Upload a local file to NocoDB storageupload_attachment_by_url
- Upload files from URLsattach_file_to_record
- Upload and attach a file to a recordget_attachment_info
- Get attachment information from a record{
"tool": "create_table",
"arguments": {
"base_id": "p_abc123",
"table_name": "customers",
"columns": [
{
"title": "Name",
"uidt": "SingleLineText",
"rqd": true
},
{
"title": "Email",
"uidt": "Email",
"unique": true
},
{
"title": "Revenue",
"uidt": "Number",
"dt": "decimal"
},
{
"title": "Status",
"uidt": "SingleSelect",
"dtxp": "'active','inactive','pending'"
}
]
}
}
The add_column
tool allows you to dynamically add columns to existing tables. Here are some examples:
{
"tool": "add_column",
"arguments": {
"table_id": "table_id_here",
"title": "Description",
"uidt": "LongText"
}
}
{
"tool": "add_column",
"arguments": {
"table_id": "table_id_here",
"title": "Product Code",
"uidt": "SingleLineText",
"unique": true,
"rqd": true
}
}
{
"tool": "add_column",
"arguments": {
"table_id": "table_id_here",
"title": "Priority",
"uidt": "SingleSelect",
"meta": {
"options": [
{"title": "Low", "color": "#059669"},
{"title": "Medium", "color": "#d97706"},
{"title": "High", "color": "#dc2626"},
{"title": "Critical", "color": "#7c3aed"}
]
}
}
}
{
"tool": "add_column",
"arguments": {
"table_id": "table_id_here",
"title": "Price",
"uidt": "Currency",
"meta": {
"currency_code": "USD"
}
}
}
For more column type examples, see Column Types Examples.
The delete_column
tool allows you to remove columns from existing tables. You can identify the column to delete by either its ID or name.
{
"tool": "delete_column",
"arguments": {
"table_id": "table_id_here",
"column_id": "column_id_to_delete"
}
}
{
"tool": "delete_column",
"arguments": {
"table_id": "table_id_here",
"column_name": "ColumnToDelete"
}
}
Note: The tool will search for columns matching either the column_name
or title
field, making it flexible for different naming conventions.
{
"tool": "insert_record",
"arguments": {
"base_id": "p_abc123",
"table_name": "customers",
"data": {
"Name": "Acme Corp",
"Email": "contact@acme.com",
"Revenue": 50000,
"Status": "active"
}
}
}
{
"tool": "query",
"arguments": {
"base_id": "p_abc123",
"table_name": "customers",
"where": "(Status,eq,active)~and(Revenue,gt,10000)",
"sort": ["-Revenue", "Name"],
"fields": ["Name", "Email", "Revenue"],
"limit": 10
}
}
{
"tool": "aggregate",
"arguments": {
"base_id": "p_abc123",
"table_name": "customers",
"column_name": "Revenue",
"function": "sum",
"where": "(Status,eq,active)"
}
}
{
"tool": "upload_attachment",
"arguments": {
"file_path": "/path/to/document.pdf",
"storage_path": "documents/2024"
}
}
{
"tool": "upload_attachment_by_url",
"arguments": {
"urls": [
"https://example.com/image1.png",
"https://example.com/image2.jpg"
],
"storage_path": "images"
}
}
{
"tool": "attach_file_to_record",
"arguments": {
"base_id": "p_abc123",
"table_name": "products",
"record_id": "42",
"attachment_field": "ProductImages",
"file_path": "/path/to/product-photo.jpg"
}
}
{
"tool": "get_attachment_info",
"arguments": {
"base_id": "p_abc123",
"table_name": "products",
"record_id": "42",
"attachment_field": "ProductImages"
}
}
Supported UI data types (uidt) for columns:
SingleLineText
- Short text fieldLongText
- Multi-line textNumber
- Integer numeric valuesDecimal
- Decimal numbers with precisionCheckbox
- Boolean true/falseDate
- Date without timeDateTime
- Date with timeTime
- Time onlyDuration
- Time durationEmail
- Email addresses with validationURL
- Web linksPhoneNumber
- Phone numbers (note: use "PhoneNumber" not "Phone")Currency
- Money values (requires meta.currency_code
)Percent
- Percentage valuesRating
- Star ratingSingleSelect
- Dropdown with single selection (requires meta.options
)MultiSelect
- Multiple selections (requires meta.options
)Attachment
- File uploadsJSON
- JSON data storageFormula
- Calculated fieldsRollup
- Aggregate related recordsLookup
- Lookup values from related recordsQrCode
- Generate QR codes (requires meta.fk_qr_value_column_id
)Barcode
- Generate barcodes (requires meta.fk_barcode_value_column_id
)LinkToAnotherRecord
- Relationships between tablesLinks
- Many-to-many relationshipsSome column types require additional parameters in the meta
field:
meta.options
array with {title, color}
objectsmeta.currency_code
(e.g., "USD", "EUR")meta.fk_qr_value_column_id
- ID of column to encodemeta.fk_barcode_value_column_id
- ID of column to encode, optional meta.barcode_format
NocoDB uses a specific syntax for filtering:
(field,operator,value)
- Basic condition~and
- AND operator~or
- OR operator~not
- NOT operatoreq
- Equal toneq
- Not equal togt
- Greater thange
- Greater than or equallt
- Less thanle
- Less than or equallike
- Contains (use % for wildcards)nlike
- Does not containnull
- Is nullnotnull
- Is not null(Status,eq,active)
- Status equals "active"(Revenue,gt,1000)~and(Status,eq,active)
- Revenue > 1000 AND Status = "active"(Name,like,%Corp%)
- Name contains "Corp"# Clone the repository
git clone https://github.com/your-org/nocodb-mcp.git
cd nocodb-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Run in development mode
npm run dev
npm test
The server provides detailed error messages for common issues:
bulk_insert
for multiple recordsContributions are welcome! Please feel free to submit a Pull Request.
MIT
For issues and feature requests, please create an issue on the GitHub repository.
Official MCP server for dbt (data build tool) providing integration with dbt Core/Cloud CLI, project metadata discovery, model information, and semantic layer querying capabilities.
Read and write access to Airtable databases.
An AI-powered server that generates PyAirbyte pipeline code and instructions using OpenAI and connector documentation.
Access financial statements, including income, balance sheets, and cash flow, for companies listed on the Securities Exchange of Thailand (SET).
Interact with Snowflake databases to query and manage data.
Update various databases (PostgreSQL, MySQL, MongoDB, SQLite) using data from CSV and Excel files.
Hydrolix time-series datalake integration providing schema exploration and query capabilities to LLM-based workflows.
Implement semantic memory layer on top of the Qdrant vector search engine
A read-only MCP server for Pipedrive, enabling LLMs to query live data using the CData JDBC Driver.
Token Metrics integration for fetching real-time crypto market data, trading signals, price predictions, and advanced analytics.