Skip to main content
Glama
Baasix MCP Server
by tspvivek

⚠️ THIS REPOSITORY HAS MOVED ⚠️

This repository is no longer maintained. The project has been moved to a monorepo.

👉 New Repository: github.com/baasix/baasix

New package name: @baasix/mcp

The MCP Server is now part of the Baasix monorepo at packages/mcp.

npm install @baasix/mcp

Baasix MCP Server

A Model Context Protocol (MCP) server that provides Claude Desktop and other MCP clients with direct access to Baasix Backend-as-a-Service operations.

Baasix is an open-source BaaS that generates REST APIs from data models, featuring 50+ filter operators, visual workflows, multi-tenancy, and real-time subscriptions.

Features

  • 45+ MCP Tools for comprehensive Baasix operations

  • Schema Management - Create, update, delete collections and relationships

  • CRUD Operations - Full item management with powerful query capabilities

  • 50+ Filter Operators - From basic comparison to geospatial and JSONB queries

  • Relations - M2O, O2M, M2M, and polymorphic M2A relationships

  • Aggregation - SUM, AVG, COUNT, MIN, MAX with groupBy

  • Permissions - Role-based access control management

  • File Management - Upload, list, and manage files

  • Authentication - Login, register, magic links, invitations

  • Multi-tenancy - Tenant management and switching

  • Realtime - Enable/disable WAL-based realtime per collection

Related MCP server: database-remote-mcp

Quick Start

1. Install dependencies

cd mcp
npm install

2. Configure environment

cp .env.example .env
# Edit .env with your Baasix server details

3. Start the MCP server

npm start

Configuration

Environment Variables

Variable

Required

Default

Description

BAASIX_URL

Yes

http://localhost:8056

Baasix server URL

BAASIX_AUTH_TOKEN

No*

-

Pre-obtained JWT token

BAASIX_EMAIL

No*

-

Email for auto-authentication

BAASIX_PASSWORD

No*

-

Password for auto-authentication

*Either BAASIX_AUTH_TOKEN OR both BAASIX_EMAIL and BAASIX_PASSWORD must be provided.

Environment Files

  • .env - Development environment (default)

  • .env.production - Production environment

Available Scripts

  • npm run development - Start with development environment

  • npm start - Start with production environment

  • npm run dev - Development mode with auto-restart

  • npm test - Run tests

  • npm run debug - Start with MCP inspector for debugging

IDE Integration

Baasix MCP Server integrates with various AI-powered development tools. Below are configuration examples for popular IDEs and tools.

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "baasix": {
      "command": "node",
      "args": ["/path/to/baasix/mcp/server.js"],
      "env": {
        "BAASIX_URL": "http://localhost:8056",
        "BAASIX_EMAIL": "admin@baasix.com",
        "BAASIX_PASSWORD": "admin@123"
      }
    }
  }
}

Claude Code (Anthropic CLI)

For Claude Code CLI, create a .mcp.json file in your project root:

{
  "mcpServers": {
    "baasix": {
      "command": "node",
      "args": ["./mcp-server.js"],
      "env": {
        "BAASIX_URL": "http://localhost:8056",
        "BAASIX_EMAIL": "admin@baasix.com",
        "BAASIX_PASSWORD": "admin@123"
      }
    }
  }
}

Or add via CLI:

claude mcp add baasix npm run start

VS Code with GitHub Copilot

For VS Code with GitHub Copilot, create .vscode/mcp.json in your project:

{
  "servers": {
    "baasix": {
      "type": "stdio",
      "command": "node",
      "args": ["./mcp-server.js"],
      "env": {
        "BAASIX_URL": "http://localhost:8056",
        "BAASIX_EMAIL": "admin@baasix.com",
        "BAASIX_PASSWORD": "admin@123"
      }
    }
  },
  "inputs": []
}

Cursor IDE

For Cursor, add to your Cursor settings or create a project-level configuration:

{
  "mcpServers": {
    "baasix": {
      "command": "node",
      "args": ["./mcp-server.js"],
      "env": {
        "BAASIX_URL": "http://localhost:8056",
        "BAASIX_EMAIL": "admin@baasix.com",
        "BAASIX_PASSWORD": "admin@123"
      }
    }
  }
}

Using the npm Package

If you're using the published npm package instead of the source:

{
  "mcpServers": {
    "baasix": {
      "command": "npx",
      "args": ["@tspvivek/baasix-mcp-server"],
      "env": {
        "BAASIX_URL": "http://localhost:8056",
        "BAASIX_EMAIL": "admin@baasix.com",
        "BAASIX_PASSWORD": "admin@123"
      }
    }
  }
}

Available Tools

Schema Management (13 tools)

Tool

Description

baasix_list_schemas

List all collections with search/pagination

baasix_get_schema

Get detailed schema for a collection

baasix_create_schema

Create a new collection schema

baasix_update_schema

Update existing schema

baasix_delete_schema

Delete a collection schema

baasix_add_index

Add index to collection

baasix_remove_index

Remove index from collection

baasix_migrate_indexes

Add missing FK indexes to all collections

baasix_create_relationship

Create M2O/O2M/M2M/M2A relationship

baasix_update_relationship

Update existing relationship

baasix_delete_relationship

Delete a relationship

baasix_export_schemas

Export all schemas as JSON

baasix_import_schemas

Import schemas from JSON

Item Management (5 tools)

Tool

Description

baasix_list_items

Query items with filters, sort, pagination

baasix_get_item

Get specific item by ID

baasix_create_item

Create new item

baasix_update_item

Update existing item

baasix_delete_item

Delete item

File Management (3 tools)

Tool

Description

baasix_list_files

List files with metadata

baasix_get_file_info

Get file details

baasix_delete_file

Delete file

Authentication (10 tools)

Tool

Description

baasix_auth_status

Check authentication status

baasix_refresh_auth

Refresh authentication token

baasix_register_user

Register new user

baasix_login

Login with email/password

baasix_logout

Logout current user

baasix_get_current_user

Get current user info

baasix_send_invite

Send user invitation

baasix_verify_invite

Verify invitation token

baasix_send_magic_link

Send magic link/code

baasix_get_user_tenants

Get user's available tenants

baasix_switch_tenant

Switch tenant context

Permissions (9 tools)

Tool

Description

baasix_list_roles

List all roles

baasix_list_permissions

List all permissions

baasix_get_permission

Get permission by ID

baasix_get_permissions

Get permissions for a role

baasix_create_permission

Create new permission

baasix_update_permission

Update permission

baasix_delete_permission

Delete permission

baasix_update_permissions

Bulk update role permissions

baasix_reload_permissions

Reload permission cache

Reports & Analytics (2 tools)

Tool

Description

baasix_generate_report

Generate reports with grouping

baasix_collection_stats

Get collection statistics

Notifications (3 tools)

Tool

Description

baasix_list_notifications

List user notifications

baasix_send_notification

Send notification to users

baasix_mark_notification_seen

Mark notification as seen

Settings (2 tools)

Tool

Description

baasix_get_settings

Get application settings

baasix_update_settings

Update settings

Realtime (5 tools)

Tool

Description

baasix_realtime_status

Get realtime service status

baasix_realtime_config

Check PostgreSQL WAL configuration

baasix_realtime_collections

List collections with realtime enabled

baasix_realtime_enable

Enable realtime for a collection

baasix_realtime_disable

Disable realtime for a collection

Utilities (2 tools)

Tool

Description

baasix_server_info

Get server health/info

baasix_sort_items

Reorder items in collection

Filter Operators Reference

When using baasix_list_items, the filter parameter supports 50+ operators:

Comparison Operators

{"field": {"eq": "value"}}      // Equal
{"field": {"neq": "value"}}     // Not equal
{"field": {"gt": 100}}          // Greater than
{"field": {"gte": 100}}         // Greater than or equal
{"field": {"lt": 100}}          // Less than
{"field": {"lte": 100}}         // Less than or equal

String Operators

{"field": {"contains": "text"}}       // Contains substring
{"field": {"icontains": "text"}}      // Contains (case-insensitive)
{"field": {"startswith": "pre"}}      // Starts with
{"field": {"istartswith": "pre"}}     // Starts with (case-insensitive)
{"field": {"endswith": "fix"}}        // Ends with
{"field": {"iendswith": "fix"}}       // Ends with (case-insensitive)
{"field": {"like": "pat%tern"}}       // SQL LIKE pattern
{"field": {"ilike": "pat%tern"}}      // LIKE (case-insensitive)
{"field": {"regex": "^\\d+$"}}        // Regular expression
{"field": {"iregex": "pattern"}}      // Regex (case-insensitive)

Null/Empty Operators

{"field": {"isNull": true}}           // IS NULL
{"field": {"isNull": false}}          // IS NOT NULL
{"field": {"empty": true}}            // Empty string or null
{"field": {"empty": false}}           // Not empty

List Operators

{"field": {"in": ["a", "b", "c"]}}    // In list
{"field": {"nin": ["x", "y"]}}        // Not in list
{"field": {"between": [10, 100]}}     // Between range
{"field": {"nbetween": [10, 100]}}    // Not between

Array Operators

{"tags": {"arraycontains": ["a", "b"]}}    // Contains all elements
{"tags": {"arraycontainsany": ["a", "b"]}} // Contains any element
{"tags": {"arraylength": 3}}               // Array has exact length
{"tags": {"arrayempty": true}}             // Array is empty

JSONB Operators (PostgreSQL)

{"meta": {"jsoncontains": {"key": "val"}}}      // JSON contains
{"meta": {"jsoncontainedby": {"a": 1}}}         // JSON contained by
{"meta": {"jsonhaskey": "key"}}                 // Has key
{"meta": {"jsonhasanykeys": ["a", "b"]}}        // Has any keys
{"meta": {"jsonhasallkeys": ["a", "b"]}}        // Has all keys
{"meta": {"jsonpath": "$.store.book[0].title"}} // JSONPath query

Geospatial Operators (PostGIS)

{"location": {"dwithin": {"geometry": {"type": "Point", "coordinates": [-73.9, 40.7]}, "distance": 5000}}}
{"location": {"intersects": {"type": "Polygon", "coordinates": [...]}}}
{"location": {"contains": {"type": "Point", "coordinates": [...]}}}
{"location": {"within": {"type": "Polygon", "coordinates": [...]}}}
{"location": {"overlaps": {"type": "Polygon", "coordinates": [...]}}}

Logical Operators

{"AND": [{"status": {"eq": "active"}}, {"price": {"lt": 100}}]}
{"OR": [{"type": {"eq": "A"}}, {"type": {"eq": "B"}}]}
{"NOT": {"deleted": {"eq": true}}}

Dynamic Variables

{"author_Id": {"eq": "$CURRENT_USER"}}    // Current user's ID
{"createdAt": {"gte": "$NOW"}}            // Current timestamp
{"createdAt": {"gte": "$NOW-DAYS_7"}}     // 7 days ago
{"dueDate": {"lte": "$NOW+MONTHS_1"}}     // 1 month from now

Relation Filtering

// Filter by related collection fields
{"category.name": {"eq": "Electronics"}}
{"author.role.name": {"eq": "admin"}}

Query Parameters for baasix_list_items

{
  collection: "products",           // Required: collection name
  filter: {...},                    // Filter object (see above)
  sort: "createdAt:desc",          // Sort: "field:asc" or "field:desc"
  page: 1,                         // Page number
  limit: 10,                       // Items per page (-1 for all)
  fields: ["*", "category.*"],     // Fields to include (* for all)
  search: "keyword",               // Full-text search
  searchFields: ["name", "desc"],  // Fields to search in
  aggregate: {                     // Aggregation functions
    total: {function: "sum", field: "price"},
    count: {function: "count", field: "id"}
  },
  groupBy: ["category_Id"],        // Group by fields
  relConditions: {                 // Filter related records
    "reviews": {"approved": {"eq": true}}
  }
}

Schema Definition Example

When using baasix_create_schema:

{
  collection: "products",
  schema: {
    name: "Product",
    timestamps: true,        // Adds createdAt, updatedAt
    paranoid: false,         // Set true for soft deletes
    fields: {
      id: {
        type: "UUID",
        primaryKey: true,
        defaultValue: {type: "UUIDV4"}
      },
      sku: {
        type: "SUID",
        unique: true,
        defaultValue: {type: "SUID"}
      },
      name: {
        type: "String",
        allowNull: false,
        values: {length: 255},
        validate: {notEmpty: true, len: [3, 255]}
      },
      price: {
        type: "Decimal",
        values: {precision: 10, scale: 2},
        defaultValue: 0.00,
        validate: {min: 0, max: 999999.99}
      },
      quantity: {
        type: "Integer",
        defaultValue: 0,
        validate: {isInt: true, min: 0}
      },
      email: {
        type: "String",
        validate: {isEmail: true}
      },
      tags: {
        type: "Array",
        values: {type: "String"},
        defaultValue: []
      },
      metadata: {
        type: "JSONB",
        defaultValue: {}
      }
    }
  }
}

Field Validation Rules

Rule

Type

Description

min

number

Minimum value for numeric fields

max

number

Maximum value for numeric fields

isInt

boolean

Validate as integer

notEmpty

boolean

String cannot be empty

isEmail

boolean

Valid email format

isUrl

boolean

Valid URL format

len

[min, max]

String length range

is / matches

regex

Pattern matching

// Validation examples
{
  "email": {
    "type": "String",
    "validate": {"isEmail": true, "notEmpty": true}
  },
  "age": {
    "type": "Integer",
    "validate": {"isInt": true, "min": 0, "max": 120}
  },
  "username": {
    "type": "String",
    "validate": {"notEmpty": true, "len": [3, 50]}
  },
  "phone": {
    "type": "String",
    "validate": {"matches": "^\\+?[1-9]\\d{1,14}$"}
  }
}

Default Value Types

Type

Description

UUIDV4

Random UUID v4

SUID

Short unique ID (compact, URL-safe)

NOW

Current timestamp

AUTOINCREMENT

Auto-incrementing integer

SQL

Custom SQL expression

Static

Any constant value ("active", false, 0)

// Default value examples
{
  "id": {"type": "UUID", "defaultValue": {"type": "UUIDV4"}},
  "shortCode": {"type": "SUID", "defaultValue": {"type": "SUID"}},
  "createdAt": {"type": "DateTime", "defaultValue": {"type": "NOW"}},
  "orderNum": {"type": "Integer", "defaultValue": {"type": "AUTOINCREMENT"}},
  "sortOrder": {"type": "Integer", "defaultValue": {"type": "SQL", "value": "(SELECT MAX(sort)+1 FROM items)"}},
  "status": {"type": "String", "defaultValue": "pending"},
  "isActive": {"type": "Boolean", "defaultValue": true}
}

Supported Field Types

  • String: values: {length: 255} for VARCHAR

  • Text: Unlimited length text

  • Integer, BigInt: Whole numbers

  • Decimal: values: {precision: 10, scale: 2}

  • Float, Real, Double: Floating point

  • Boolean: true/false

  • Date, DateTime, Time: Date/time values

  • UUID: defaultValue: {type: "UUIDV4"}

  • SUID: defaultValue: {type: "SUID"} - Short unique ID

  • JSONB: JSON with indexing

  • Array: values: {type: "String|Integer|etc"}

  • Geometry, Geography: PostGIS spatial types

  • Enum: values: {values: ["A", "B", "C"]}

Relationship Types

When using baasix_create_relationship:

// Many-to-One (products.category_Id → categories.id)
{
  sourceCollection: "products",
  relationshipData: {
    type: "M2O",
    name: "category",      // Creates category_Id field
    target: "categories",
    alias: "products"      // Reverse relation name
  }
}

// Many-to-Many (products ↔ tags)
// Auto-generates junction table: products_tags_tags_junction
{
  sourceCollection: "products",
  relationshipData: {
    type: "M2M",
    name: "tags",
    target: "tags",
    alias: "products"
  }
}

// Many-to-Many with custom junction table name
// Useful when auto-generated name exceeds PostgreSQL's 63 char limit
{
  sourceCollection: "products",
  relationshipData: {
    type: "M2M",
    name: "tags",
    target: "tags",
    alias: "products",
    through: "product_tags"  // Custom junction table name (max 63 chars)
  }
}

// Many-to-Any (polymorphic - comments can belong to posts OR products)
{
  sourceCollection: "comments",
  relationshipData: {
    type: "M2A",
    name: "commentable",
    tables: ["posts", "products"],
    alias: "comments",
    through: "comment_refs"  // Optional custom junction table name
  }
}

Junction Tables (M2M/M2A)

  • Auto-generated name: {source}_{target}_{name}_junction

  • Custom name: Use through property (max 63 characters for PostgreSQL)

  • Schema property: Junction tables have isJunction: true in their schema definition

  • Auto-indexed: Foreign key columns are automatically indexed for better query performance

Permission Structure

When using baasix_create_permission:

{
  role_Id: "uuid-of-role",
  collection: "products",
  action: "read",                    // read, create, update, delete
  fields: ["*"],                     // Or specific: ["name", "price"]
  conditions: {                      // Row-level security
    "published": {"eq": true}
  },
  relConditions: {                   // Filter related data
    "reviews": {"approved": {"eq": true}}
  }
}

Package Usage

Installation

npm install @tspvivek/baasix-mcp-server

Usage

import { startMCPServer } from '@tspvivek/baasix-mcp-server';

startMCPServer().catch((error) => {
  console.error('Failed to start MCP server:', error);
  process.exit(1);
});

Custom Server Instance

import { BaasixMCPServer } from '@tspvivek/baasix-mcp-server';

const server = new BaasixMCPServer();
server.run().catch(console.error);

Claude Code CLI Commands

# Add MCP server
claude mcp add baasix npm run start

# Remove MCP server
claude mcp remove baasix

File Structure

mcp/
├── server.js              # Entry point
├── package.json           # Dependencies and scripts
├── .env                   # Development config
├── .env.example           # Template
├── .env.production        # Production config
├── README.md              # This file
└── baasix/
    ├── index.js           # MCP server implementation
    └── config.js          # Configuration management

Requirements

  • Node.js 18+

  • Baasix server running (v0.1.0-alpha.2+)

  • PostgreSQL 14+ (with PostGIS for geospatial)

License

MIT

Available Tools

57 tools
baasix_add_indexB

Add an index to a collection schema

Inputs: collection (required), indexDefinition (required).

baasix_auth_statusA

Check the current authentication status and token validity

Inputs: no named parameters.

baasix_collection_statsC

Get collection statistics and analytics

Inputs: timeframe, collections.

baasix_create_itemC

Create a new item in a collection

Inputs: data (required), collection (required).

baasix_create_permissionA

Create a new permission for role-based access control.

ACTIONS: create, read, update, delete

FIELDS:

  • ["*"] for all fields

  • ["name", "price"] for specific fields

CONDITIONS (Row-level security):

  • Uses same filter operators as queries

  • {"published": {"eq": true}} - only published records

  • {"author_Id": {"eq": "$CURRENT_USER"}} - only own records

RELCONDITIONS (Filter related data):

  • {"reviews": {"approved": {"eq": true}}} - only approved reviews in response

EXAMPLE: { "role_Id": "uuid", "collection": "products", "action": "read", "fields": ["*"], "conditions": {"published": {"eq": true}} }

Inputs: action (required), role_Id (required), collection (required), fields, +3 more.

baasix_create_relationshipA

Create a relationship between collections.

RELATIONSHIP TYPES:

  • M2O (Many-to-One): Creates foreign key with auto-index. products.category → categories

  • O2M (One-to-Many): Virtual reverse of M2O. categories.products → products

  • O2O (One-to-One): Creates foreign key with auto-index. user.profile → profiles

  • M2M (Many-to-Many): Creates junction table with auto-indexed FKs. products ↔ tags

  • M2A (Many-to-Any): Polymorphic junction table. comments → posts OR products

AUTO-INDEXING: All foreign key columns are automatically indexed for better query performance:

  • M2O/O2O: Index on the FK column (e.g., category_Id)

  • M2M/M2A: Indexes on both FK columns in junction tables

JUNCTION TABLES (M2M/M2A):

  • Auto-generated name: {source}{target}{name}_junction

  • Custom name: Use "through" property (max 63 chars for PostgreSQL)

  • Junction tables are marked with isJunction: true in schema

EXAMPLE M2O: { "name": "category", // Creates category_Id field + index "type": "M2O", "target": "categories", "alias": "products", // Reverse relation name "onDelete": "CASCADE" // CASCADE, RESTRICT, SET NULL }

EXAMPLE M2M: { "name": "tags", "type": "M2M", "target": "tags", "alias": "products" }

EXAMPLE M2M with custom junction table: { "name": "tags", "type": "M2M", "target": "tags", "alias": "products", "through": "product_tag_mapping" // Custom junction table name }

Inputs: relationshipData (required), sourceCollection (required).

baasix_create_schemaA

Create a new collection schema in Baasix.

FIELD TYPES:

  • String: VARCHAR with values.length (e.g., 255)

  • Text: Unlimited text

  • Integer, BigInt: Whole numbers

  • Decimal: values.precision & values.scale

  • Float, Real, Double: Floating point

  • Boolean: true/false

  • Date, DateTime, Time: Date/time

  • UUID: With defaultValue.type: "UUIDV4"

  • SUID: Short unique ID with defaultValue.type: "SUID"

  • JSONB: JSON with indexing

  • Array: values.type specifies element type

  • Geometry, Geography: PostGIS spatial

  • Enum: values.values array

DEFAULT VALUE TYPES:

  • { type: "UUIDV4" } - Random UUID v4

  • { type: "SUID" } - Short unique ID

  • { type: "NOW" } - Current timestamp

  • { type: "AUTOINCREMENT" } - Auto-incrementing integer

  • { type: "SQL", value: "..." } - Custom SQL expression

  • Static values: "active", false, 0, etc.

VALIDATION RULES:

  • min: number - Minimum value (numeric fields)

  • max: number - Maximum value (numeric fields)

  • isInt: true - Must be integer

  • notEmpty: true - String cannot be empty

  • isEmail: true - Valid email format

  • isUrl: true - Valid URL format

  • len: [min, max] - String length range

  • is/matches: "regex" - Pattern matching

SCHEMA OPTIONS:

  • timestamps: true adds createdAt/updatedAt

  • paranoid: true enables soft deletes (deletedAt)

EXAMPLE: { "name": "Product", "timestamps": true, "fields": { "id": {"type": "UUID", "primaryKey": true, "defaultValue": {"type": "UUIDV4"}}, "sku": {"type": "SUID", "unique": true, "defaultValue": {"type": "SUID"}}, "name": {"type": "String", "allowNull": false, "values": {"length": 255}, "validate": {"notEmpty": true}}, "price": {"type": "Decimal", "values": {"precision": 10, "scale": 2}, "validate": {"min": 0}}, "email": {"type": "String", "validate": {"isEmail": true}}, "quantity": {"type": "Integer", "defaultValue": 0, "validate": {"isInt": true, "min": 0}} } }

Inputs: schema (required), collection (required).

baasix_delete_fileB

Delete a file

Inputs: id (required).

baasix_delete_itemC

Delete an item from a collection

Inputs: id (required), collection (required).

baasix_delete_permissionC

Delete a permission

Inputs: id (required).

baasix_delete_relationshipC

Delete a relationship

Inputs: fieldName (required), sourceCollection (required).

baasix_delete_schemaB

Delete a collection schema

Inputs: collection (required).

baasix_export_schemasA

Export all schemas as JSON

Inputs: no named parameters.

baasix_generate_reportC

Generate reports with grouping and aggregation for a collection

Inputs: collection (required), filter, groupBy, dateRange.

baasix_get_current_userB

Get current user information with role and permissions

Inputs: fields.

baasix_get_file_infoB

Get detailed information about a specific file

Inputs: id (required).

baasix_get_itemA

Get a specific item by ID from a collection, optionally including related data

Inputs: id (required), collection (required), fields.

baasix_get_permissionB

Get a specific permission by ID

Inputs: id (required).

baasix_get_permissionsA

Get permissions for a specific role

Inputs: role (required).

baasix_get_schemaB

Get detailed schema information for a specific collection

Inputs: collection (required).

baasix_get_settingsC

Get application settings

Inputs: key.

baasix_get_templateA

Get a specific email template by ID

Inputs: id (required).

baasix_get_user_tenantsA

Get available tenants for the current user

Inputs: no named parameters.

baasix_import_schemasC

Import schemas from JSON data

Inputs: schemas (required).

baasix_list_filesC

List files with metadata and optional filtering

Inputs: page, limit, filter.

baasix_list_itemsA

Query items from a collection with powerful filtering, sorting, pagination, relations, and aggregation.

FILTER OPERATORS (50+):

  • Comparison: eq, neq, gt, gte, lt, lte

  • String: contains, icontains, startswith, endswith, like, ilike, regex

  • Null: isNull (true/false), empty (true/false)

  • List: in, nin, between, nbetween

  • Array: arraycontains, arraycontainsany, arraylength, arrayempty

  • JSONB: jsoncontains, jsonhaskey, jsonhasanykeys, jsonhasallkeys, jsonpath

  • Geospatial: dwithin, intersects, contains, within, overlaps

  • Logical: AND, OR, NOT

DYNAMIC VARIABLES:

  • $CURRENT_USER: Current user's ID

  • $NOW: Current timestamp

  • $NOW-DAYS_7: 7 days ago

  • $NOW+MONTHS_1: 1 month from now

FILTER EXAMPLES:

  • {"status": {"eq": "active"}}

  • {"AND": [{"price": {"gte": 10}}, {"price": {"lte": 100}}]}

  • {"tags": {"arraycontains": ["featured"]}}

  • {"author_Id": {"eq": "$CURRENT_USER"}}

  • {"category.name": {"eq": "Electronics"}} (relation filter)

Inputs: collection (required), page, sort, limit, +7 more.

baasix_list_notificationsA

List notifications for the authenticated user

Inputs: page, seen, limit.

baasix_list_permissionsC

List all permissions with optional filtering

Inputs: page, sort, limit, filter.

baasix_list_rolesA

List all available roles

Inputs: no named parameters.

baasix_list_schemasA

Get all available collections/schemas in Baasix with optional search and pagination

Inputs: page, sort, limit, search.

baasix_list_templatesA

List all email templates with optional filtering

Inputs: page, limit, filter.

baasix_loginB

Login user with email and password

Inputs: email (required), password (required), authMode, tenant_Id.

baasix_logoutA

Logout the current user

Inputs: no named parameters.

baasix_mark_notification_seenC

Mark a notification as seen

Inputs: id (required).

baasix_realtime_collectionsA

Get list of collections with realtime enabled and their action configurations

Inputs: no named parameters.

baasix_realtime_configA

Check PostgreSQL replication configuration for WAL-based realtime.

Returns:

  • walLevel: Should be 'logical' for realtime to work

  • maxReplicationSlots: Number of available replication slots

  • maxWalSenders: Number of WAL sender processes

  • replicationSlotExists: Whether the baasix slot exists

  • publicationExists: Whether the baasix publication exists

  • tablesInPublication: List of tables currently in the publication

Inputs: no named parameters.

baasix_realtime_disableB

Disable realtime for a collection

Inputs: collection (required).

baasix_realtime_enableB

Enable realtime for a collection. Changes will be broadcast via WebSocket when data is modified.

The realtime config is stored in the schema definition and can include specific actions to broadcast.

Inputs: collection (required), actions, replicaIdentityFull.

baasix_realtime_statusA

Get the status of the realtime service including WAL configuration.

Returns information about:

  • Whether realtime is initialized and consuming WAL

  • PostgreSQL replication configuration (wal_level, max_replication_slots)

  • Publication and replication slot status

  • Collections with realtime enabled

Inputs: no named parameters.

baasix_refresh_authA

Force refresh the authentication token (only works for email/password auth)

Inputs: no named parameters.

baasix_register_userC

Register a new user

Inputs: email (required), password (required), tenant, authMode, +4 more.

baasix_reload_permissionsB

Reload the permission cache

Inputs: no named parameters.

baasix_remove_indexB

Remove an index from a collection schema

Inputs: indexName (required), collection (required).

baasix_send_inviteC

Send an invitation to a user

Inputs: link (required), email (required), role_Id (required), tenant_Id.

baasix_send_notificationC

Send a notification to specified users

Inputs: title (required), message (required), recipients (required), type.

baasix_server_infoA

Get Baasix server information and health status

Inputs: no named parameters.

baasix_sort_itemsA

Sort items within a collection (move item before/after another)

Inputs: to (required), item (required), collection (required).

baasix_switch_tenantC

Switch to a different tenant context

Inputs: tenant_Id (required).

baasix_update_itemC

Update an existing item in a collection

Inputs: id (required), data (required), collection (required).

baasix_update_permissionC

Update an existing permission

Inputs: id (required), action, fields, role_Id, +4 more.

baasix_update_permissionsC

Update permissions for a role

Inputs: role (required), permissions (required).

baasix_update_relationshipD

Update an existing relationship

Inputs: fieldName (required), updateData (required), sourceCollection (required).

baasix_update_schemaC

Update an existing collection schema

Inputs: schema (required), collection (required).

baasix_update_settingsC

Update application settings

Inputs: settings (required).

baasix_update_templateA

Update an email template's subject, description, or body content.

TEMPLATE TYPES:

  • magic_link: Magic link authentication emails

  • invite: User invitation emails

  • password_reset: Password reset emails

  • welcome: Welcome emails

  • verification: Email verification emails

AVAILABLE VARIABLES:

  • User: {{user.firstName}}, {{user.lastName}}, {{user.fullName}}, {{user.email}}

  • Tenant: {{tenant.name}}, {{tenant.logo}}, {{tenant.website}}

  • Auth: {{magicLink}}, {{magicCode}}, {{resetPasswordLink}}, {{inviteLink}}

  • DateTime: {{currentDate}}, {{currentTime}}, {{currentYear}}

Inputs: id (required), body, subject, isActive, +1 more.

baasix_verify_inviteC

Verify an invitation token

Inputs: token (required), link.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 57 tools

    Disambiguation3/5

    Most tools target distinct resources and actions, but several clusters are easy to confuse: list_permissions/get_permission/get_permissions, update_permission/update_permissions, and realtime_status/realtime_config/realtime_collections overlap in name and output. Detailed descriptions reduce but do not eliminate the risk of misselection.

    Naming Consistency4/5

    Tool names consistently follow a baasix_ verb_noun pattern, such as create_schema, update_item, and delete_relationship. A few exceptions like login/logout, auth_status, and realtime_enable deviate slightly, but the overall convention is predictable.

    Tool Count1/5

    With 57 tools, this is a very large MCP surface that will overwhelm context windows and make tool selection costly. Even for a broad BaaS domain, this count exceeds a manageable tool set.

    Completeness3/5

    The set covers CRUD well for schemas, items, relationships, permissions, notifications, settings, and templates. However, notable lifecycle gaps exist: no password reset or email verification trigger despite template support, no file upload/create, and no user list/update/delete. These create dead ends for common backend workflows.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables remote database access (RDBMS and MongoDB) through MCP tools, supporting read/write queries, schema management, and more.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to read and modify Mendix application models through MCP tools for creating modules, entities, pages, microflows, deploying, and querying runtime data.
      1
      ISC
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables creating and managing collections, performing record CRUD operations with pagination and expansions, handling user authentication, and backing up PocketBase databases through MCP tools.
      20 npm
      ISC