Baasix MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Baasix MCP Server create a new collection called products with fields name, price, and category"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
⚠️ 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/mcpThe 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 install2. Configure environment
cp .env.example .env
# Edit .env with your Baasix server details3. Start the MCP server
npm startConfiguration
Environment Variables
Variable | Required | Default | Description |
| Yes |
| Baasix server URL |
| No* | - | Pre-obtained JWT token |
| No* | - | Email for auto-authentication |
| 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 environmentnpm start- Start with production environmentnpm run dev- Development mode with auto-restartnpm test- Run testsnpm 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 startVS 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 |
| List all collections with search/pagination |
| Get detailed schema for a collection |
| Create a new collection schema |
| Update existing schema |
| Delete a collection schema |
| Add index to collection |
| Remove index from collection |
| Add missing FK indexes to all collections |
| Create M2O/O2M/M2M/M2A relationship |
| Update existing relationship |
| Delete a relationship |
| Export all schemas as JSON |
| Import schemas from JSON |
Item Management (5 tools)
Tool | Description |
| Query items with filters, sort, pagination |
| Get specific item by ID |
| Create new item |
| Update existing item |
| Delete item |
File Management (3 tools)
Tool | Description |
| List files with metadata |
| Get file details |
| Delete file |
Authentication (10 tools)
Tool | Description |
| Check authentication status |
| Refresh authentication token |
| Register new user |
| Login with email/password |
| Logout current user |
| Get current user info |
| Send user invitation |
| Verify invitation token |
| Send magic link/code |
| Get user's available tenants |
| Switch tenant context |
Permissions (9 tools)
Tool | Description |
| List all roles |
| List all permissions |
| Get permission by ID |
| Get permissions for a role |
| Create new permission |
| Update permission |
| Delete permission |
| Bulk update role permissions |
| Reload permission cache |
Reports & Analytics (2 tools)
Tool | Description |
| Generate reports with grouping |
| Get collection statistics |
Notifications (3 tools)
Tool | Description |
| List user notifications |
| Send notification to users |
| Mark notification as seen |
Settings (2 tools)
Tool | Description |
| Get application settings |
| Update settings |
Realtime (5 tools)
Tool | Description |
| Get realtime service status |
| Check PostgreSQL WAL configuration |
| List collections with realtime enabled |
| Enable realtime for a collection |
| Disable realtime for a collection |
Utilities (2 tools)
Tool | Description |
| Get server health/info |
| 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 equalString 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 emptyList 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 betweenArray 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 emptyJSONB 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 queryGeospatial 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 nowRelation 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 |
| number | Minimum value for numeric fields |
| number | Maximum value for numeric fields |
| boolean | Validate as integer |
| boolean | String cannot be empty |
| boolean | Valid email format |
| boolean | Valid URL format |
| [min, max] | String length range |
| 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 |
| Random UUID v4 |
| Short unique ID (compact, URL-safe) |
| Current timestamp |
| Auto-incrementing integer |
| Custom SQL expression |
Static | Any constant value ( |
// 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 VARCHARText: 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 IDJSONB: 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}_junctionCustom name: Use
throughproperty (max 63 characters for PostgreSQL)Schema property: Junction tables have
isJunction: truein their schema definitionAuto-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-serverUsage
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 baasixFile 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 managementRequirements
Node.js 18+
Baasix server running (v0.1.0-alpha.2+)
PostgreSQL 14+ (with PostGIS for geospatial)
Links
Baasix Website: https://baasix.dev
Documentation: https://baasix.dev/docs
npm Package: https://www.npmjs.com/package/@tspvivek/baasix
License
MIT
Available Tools
57 toolsbaasix_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_magic_linkC
Send magic link or code for authentication
Inputs: email (required), link, mode.
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
Scored across 57 tools
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.
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.
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.
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
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables MCP clients to interact with Microsoft Dynamics 365 Business Central entities, providing tools to get schemas, list, create, update, and delete records.6MIT
- FlicenseNot gradedqualityDmaintenanceEnables remote database access (RDBMS and MongoDB) through MCP tools, supporting read/write queries, schema management, and more.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to read and modify Mendix application models through MCP tools for creating modules, entities, pages, microflows, deploying, and querying runtime data.1ISC
- AlicenseNot gradedqualityAmaintenanceEnables creating and managing collections, performing record CRUD operations with pagination and expansions, handling user authentication, and backing up PocketBase databases through MCP tools.20 npmISC