PocketBase MCP Server
by brynnjocelyn
README.md
# PocketBase MCP Server
A comprehensive Model Context Protocol (MCP) server that provides tools for managing PocketBase instances. This server enables LLMs to interact with PocketBase databases through a standardized protocol.
## Overview
This MCP server exposes PocketBase functionality as tools that can be used by any MCP-compatible client (like Claude Desktop, Cursor, or other LLM applications). It provides comprehensive access to PocketBase features with 60+ tools covering all major operations.
## Features
### Collection Management
- List, get, create, update, and delete collections
- Import/export collections in bulk
- Full schema management support
### Record Operations
- CRUD operations with filtering, sorting, and pagination
- `getFullList` for retrieving all records without pagination
- `getFirstListItem` for finding the first matching record
- Advanced query support with field selection and relation expansion
- Batch operations for efficient bulk processing
### Authentication & User Management
- Multiple auth methods: password, OAuth2, OTP
- Complete auth flow support: registration, login, password reset, email verification
- Email change functionality
- Auth token refresh
- List available auth methods for collections
### File Management
- Generate file URLs with thumbnail support
- Private file token generation
- Download forcing support
### System Operations
- Health monitoring
- Settings management
- Log viewing with statistics
- Cron job management and execution
### Backup & Restore
- Create, list, download, and delete backups
- Full backup restoration support
### Hook Management
- List, read, create, and delete JavaScript hooks
- Pre-built templates for common patterns
## Installation
```bash
npm install
npm run build
```
## Configuration
The server can be configured to connect to different PocketBase instances using (in order of precedence):
1. **Local config file** (`.pocketbase-mcp.json` in your project directory):
```json
{
"url": "http://localhost:8091"
}
```
2. **Environment variable**:
- `POCKETBASE_URL`: URL of your PocketBase instance
3. **Default**: `http://127.0.0.1:8090`
### Multi-Project Setup
#### Option 1: Project-Specific Configuration (Recommended)
Each project can have its own MCP configuration:
```bash
# In project directory
claude mcp add-json pocketbase '{"command": "node", "args": ["/path/to/pocketbase-mcp-server/dist/mcp-server.js"], "env": {"POCKETBASE_URL": "http://localhost:8091"}}' --scope project
```
#### Option 2: Config File
Create a `.pocketbase-mcp.json` in your project root:
```json
{
"url": "https://api.myproject.com"
}
```
#### Option 3: Multiple Named Servers
Add different PocketBase instances globally:
```bash
claude mcp add-json pb-local '{"command": "node", "args": ["/path/to/pocketbase-mcp-server/dist/mcp-server.js"], "env": {"POCKETBASE_URL": "http://localhost:8090"}}'
claude mcp add-json pb-prod '{"command": "node", "args": ["/path/to/pocketbase-mcp-server/dist/mcp-server.js"], "env": {"POCKETBASE_URL": "https://api.myapp.com"}}'
```
## Usage with Claude Desktop
Add this configuration to your Claude Desktop MCP settings:
```json
{
"mcpServers": {
"pocketbase": {
"command": "node",
"args": ["/path/to/pocketbase-mcp-server/dist/mcp-server.js"],
"env": {
"POCKETBASE_URL": "http://localhost:8090"
}
}
}
}
```
## Available Tools
### Collection Management Tools
- `list_collections` - List all collections with pagination and filtering
- `get_collection` - Get a specific collection by ID or name
- `create_collection` - Create a new collection with schema
- `update_collection` - Update collection settings and schema
- `delete_collection` - Delete a collection
- `import_collections` - Import multiple collections at once
### Record Management Tools
- `list_records` - List records with pagination, filtering, sorting, and field selection
- `get_full_list` - Get all records without pagination (batch processing)
- `get_first_list_item` - Get the first record matching a filter
- `get_record` - Get a specific record by ID
- `create_record` - Create a new record
- `update_record` - Update an existing record
- `delete_record` - Delete a record
### Batch Operations
- `batch_create` - Create multiple records in a single transaction
- `batch_update` - Update multiple records in a single transaction
- `batch_delete` - Delete multiple records in a single transaction
- `batch_upsert` - Upsert multiple records in a single transaction
### Authentication Tools
- `list_auth_methods` - Get available authentication methods
- `auth_with_password` - Authenticate with email/username and password
- `auth_with_oauth2` - Get OAuth2 authentication URL
- `auth_refresh` - Refresh authentication token
- `request_otp` - Request OTP for email authentication
- `auth_with_otp` - Authenticate with OTP
- `request_password_reset` - Send password reset email
- `confirm_password_reset` - Confirm password reset with token
- `request_verification` - Send verification email
- `confirm_verification` - Confirm email verification
- `request_email_change` - Request email change
- `confirm_email_change` - Confirm email change
### File Management Tools
- `get_file_url` - Generate URL for accessing files with options
- `get_file_token` - Get private file access token
### Log Management Tools
- `list_logs` - List system logs with filtering
- `get_log` - Get a specific log entry
- `get_log_stats` - Get log statistics
### Cron Job Tools
- `list_cron_jobs` - List all cron jobs
- `run_cron_job` - Manually run a cron job
### System Tools
- `get_health` - Check PocketBase health status
- `get_settings` - Get PocketBase settings (requires admin auth)
- `update_settings` - Update PocketBase settings (requires admin auth)
### Backup Tools
- `create_backup` - Create a backup
- `list_backups` - List available backups
- `download_backup` - Get download URL for a backup
- `delete_backup` - Delete a backup
- `restore_backup` - Restore from a backup
### Hook Management Tools
- `list_hooks` - List JavaScript hook files in the pb_hooks directory
- `read_hook` - Read the contents of a hook file
- `create_hook` - Create or update a JavaScript hook file
- `delete_hook` - Delete a hook file
- `create_hook_template` - Generate hook templates for common patterns:
- `record-validation`: Field validation for records
- `record-auth`: Custom authentication logic
- `custom-route`: API endpoint creation
- `file-upload`: File upload validation
- `scheduled-task`: Cron job setup
## Tool Examples
### List Records with Filtering
```json
{
"tool": "list_records",
"arguments": {
"collection": "posts",
"filter": "published = true && created >= '2024-01-01'",
"sort": "-created",
"expand": "author",
"fields": "id,title,content,author",
"skipTotal": true
}
}
```
### Get All Records Without Pagination
```json
{
"tool": "get_full_list",
"arguments": {
"collection": "categories",
"sort": "name",
"batch": 1000
}
}
```
### Batch Create Records
```json
{
"tool": "batch_create",
"arguments": {
"requests": [
{
"collection": "posts",
"data": {
"title": "First Post",
"content": "Content 1"
}
},
{
"collection": "posts",
"data": {
"title": "Second Post",
"content": "Content 2"
}
}
]
}
}
```
### OAuth2 Authentication
```json
{
"tool": "auth_with_oauth2",
"arguments": {
"collection": "users",
"provider": "google",
"redirectURL": "https://myapp.com/auth/callback"
}
}
```
### OTP Authentication Flow
```json
// Step 1: Request OTP
{
"tool": "request_otp",
"arguments": {
"collection": "users",
"email": "user@example.com"
}
}
// Step 2: Authenticate with OTP
{
"tool": "auth_with_otp",
"arguments": {
"collection": "users",
"otpId": "otp_id_from_step_1",
"password": "123456"
}
}
```
### Get File URL with Thumbnail
```json
{
"tool": "get_file_url",
"arguments": {
"collection": "products",
"recordId": "abc123",
"filename": "photo.jpg",
"thumb": "300x200"
}
}
```
### Create a Hook Template
```json
{
"tool": "create_hook_template",
"arguments": {
"type": "record-validation",
"collection": "posts"
}
}
```
## Query Syntax
The MCP server supports PocketBase's full query syntax:
### Filter Examples
- `title = "example"` - Exact match
- `created >= "2024-01-01"` - Date comparison
- `title ~ "search"` - Contains text
- `tags ?~ "important"` - Any array element contains
- `user.name = "John"` - Nested field access
### Sort Examples
- `created` - Ascending by created
- `-created` - Descending by created
- `name,-created` - Multiple sort fields
### Expand Examples
- `author` - Expand single relation
- `author,tags` - Expand multiple relations
- `author.profile` - Nested expansion
### Field Selection
- `id,title,content` - Select specific fields
- `*,expand.author.name` - Include expanded fields
## Performance Optimization
- Use `skipTotal: true` when you don't need the total count
- Use `fields` parameter to limit data transfer
- Use `get_full_list` with appropriate batch sizes for large datasets
- Use batch operations for bulk record modifications
## Development
### Running in Development Mode
```bash
npm run dev
```
### Building
```bash
npm run build
```
## Architecture
The MCP server follows the Model Context Protocol specification:
1. **MCP Server**: Handles tool registration and execution
2. **PocketBase Client**: Uses the official PocketBase JavaScript SDK
3. **Tool Handlers**: Implement specific PocketBase operations with proper error handling
## Error Handling
All tools include comprehensive error handling and return descriptive error messages. Common errors include:
- Invalid authentication
- Missing required fields
- Network connectivity issues
- Permission denied errors
## Security Considerations
- Admin operations require appropriate authentication
- Use environment variables for sensitive configuration
- The server inherits PocketBase's security model and access rules
- OAuth2 state parameters are handled securely
## Version Compatibility
- Requires PocketBase v0.20.0 or higher
- Uses PocketBase JavaScript SDK v0.21.0+
- Implements MCP protocol version 1.0
## Contributing
Contributions are welcome! Please ensure that any new tools:
- Follow the existing naming patterns
- Include proper TypeScript types
- Have comprehensive error handling
- Are documented in this README
## License
ISCThis server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues