spacetimedb-mcp
v1.3.1
Published
Model Context Protocol server for SpacetimeDB - query databases, call reducers, and manage your SpacetimeDB instances
Downloads
23
Maintainers
Readme
spacetimedb-mcp
Model Context Protocol (MCP) server for SpacetimeDB. Query databases, call reducers, inspect schemas, and manage your SpacetimeDB instances directly from your MCP-enabled AI assistant.
Features
- 🔍 Query Schemas: Get detailed information about database tables and reducers
- 🗄️ Run SQL Queries: Execute SQL queries to inspect and modify data
- ⚡ Call Reducers: Invoke reducer functions on your databases
- 📋 View Logs: Fetch and parse database logs
- ✅ Test Connections: Verify connectivity to your SpacetimeDB instance
Installation
npm install spacetimedb-mcpConfiguration
Add the server to your mcp.json configuration file (typically located in your home directory under .config/mcp.json or similar, depending on your MCP client).
Basic Configuration (Global Installation)
If you've installed the package globally (npm install -g spacetimedb-mcp), use one of these methods:
Option 1: Use npx (Recommended)
{
"mcpServers": {
"spacetimedb": {
"command": "npx",
"args": ["-y", "spacetimedb-mcp"],
"env": {
"SPACETIMEDB_HOST": "http://localhost:3000",
"SPACETIMEDB_TOKEN": "your-token-here",
"SPACETIMEDB_DEFAULT_DATABASE": "strc"
}
}
}
}Option 2: Use the global package path
First, find your global node_modules path:
npm root -gThen use that path in your config:
{
"mcpServers": {
"spacetimedb": {
"command": "node",
"args": ["C:/nvm4w/nodejs/node_modules/spacetimedb-mcp/dist/index.js"],
"env": {
"SPACETIMEDB_HOST": "http://localhost:3000",
"SPACETIMEDB_TOKEN": "your-token-here",
"SPACETIMEDB_DEFAULT_DATABASE": "strc"
}
}
}
}Note: Replace C:/nvm4w/nodejs/node_modules with your actual global npm root path from npm root -g.
Local Installation
If you prefer installing locally in your project:
npm install spacetimedb-mcpThen configure:
{
"mcpServers": {
"spacetimedb": {
"command": "node",
"args": ["node_modules/spacetimedb-mcp/dist/index.js"],
"env": {
"SPACETIMEDB_HOST": "http://localhost:3000",
"SPACETIMEDB_TOKEN": "your-token-here",
"SPACETIMEDB_DEFAULT_DATABASE": "strc"
}
}
}
}Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| SPACETIMEDB_HOST | No | http://localhost:3000 | The base URL of your SpacetimeDB instance |
| SPACETIMEDB_TOKEN | Yes | - | Authentication token (Bearer token) |
| SPACETIMEDB_DEFAULT_DATABASE | No | - | Default database name to use when not specified in tool calls |
Available Tools
test_connection
Test the connection to the SpacetimeDB instance.
Example:
{
"tool": "test_connection"
}Response:
{
"status": "connected",
"host": "http://localhost:3000"
}get_schema
Get the schema of a database, including all tables and reducers.
Parameters:
database(string, optional): Database name (uses default if not specified)
Example:
{
"tool": "get_schema",
"arguments": {
"database": "strc"
}
}Response: Formatted schema showing tables with columns and reducers with parameters.
sql_query
Run a SQL query against the database.
Parameters:
database(string, optional): Database name (uses default if not specified)query(string, required): SQL query to executeformat(string, optional): Output format (jsonormarkdown, defaultjson)
Example:
{
"tool": "sql_query",
"arguments": {
"database": "strc",
"query": "SELECT * FROM users LIMIT 10",
"format": "markdown"
}
}Response: Query results with schema and rows.
(Publishing section removed)
describe_database
Get metadata about a database.
Parameters:
database(string, optional): Database name (uses default if not specified)
Example:
{
"tool": "describe_database",
"arguments": {
"database": "strc"
}
}Response: Database metadata as JSON.
get_database_identity
Get the identity for a database name.
Parameters:
database(string, optional): Database name (uses default if not specified)
Example:
{
"tool": "get_database_identity",
"arguments": {
"database": "strc"
}
}Response: Identity string for the database.
delete_database
Delete a database.
Parameters:
database(string, optional): Database name (uses default if not specified)
Example:
{
"tool": "delete_database",
"arguments": {
"database": "strc"
}
}Response: Result from the delete operation.
list_databases
List databases owned by an identity.
Parameters:
identity(string, required): SpacetimeDB identity
Example:
{
"tool": "list_databases",
"arguments": {
"identity": "0xabc123"
}
}Response: Array of database addresses.
add_database_alias
Add a friendly alias to a database identity.
Parameters:
identity(string, required): Database identityname(string, required): Alias to add
Example:
{
"tool": "add_database_alias",
"arguments": {
"identity": "0xabc123",
"name": "chat-app"
}
}Response: Result from the alias creation.
get_database_aliases
List aliases for a database identity.
Parameters:
identity(string, required): Database identity
Example:
{
"tool": "get_database_aliases",
"arguments": {
"identity": "0xabc123"
}
}Response: Array of aliases.
call_reducer
Call a reducer function on the database.
Parameters:
database(string, optional): Database name (uses default if not specified)reducer(string, required): Name of the reducer functionargs(array, required): Arguments for the reducer as a JSON array
Example:
{
"tool": "call_reducer",
"arguments": {
"database": "strc",
"reducer": "CreateUser",
"args": [
"username_123",
"[email protected]"
]
}
}Response: Result from the reducer call (may be empty for void returns).
get_logs
Get recent logs from the database.
Parameters:
database(string, optional): Database name (uses default if not specified)count(number, optional): Number of log lines to fetch (default: 50)
Example:
{
"tool": "get_logs",
"arguments": {
"database": "strc",
"count": 20
}
}Response: Formatted log lines with timestamps, levels, and messages.
Usage Examples
Getting Started
Install the package:
npm install spacetimedb-mcpConfigure your
mcp.jsonwith your SpacetimeDB credentialsRestart your MCP client (e.g., Cursor, Claude Desktop)
Start using the tools through your AI assistant!
Common Workflows
Inspect Database Schema:
Use get_schema to see all tables and reducers in the databaseQuery Data:
Use sql_query to SELECT data from tablesCreate Entities:
Use call_reducer to invoke reducer functions like CreateUserMonitor Activity:
Use get_logs to see recent database activityTroubleshooting
Connection Errors
If you see connection errors:
- Verify
SPACETIMEDB_HOSTis correct - Check that your SpacetimeDB instance is running
- Ensure
SPACETIMEDB_TOKENis valid
Authentication Errors
If you get 401/403 errors:
- Verify your
SPACETIMEDB_TOKENis a valid Bearer token - Check token permissions for the database operations
Database Not Found
If you see 404 errors for database operations:
- Verify the database name is correct
- Check that the database exists on your SpacetimeDB instance
- Ensure your token has access to the database
SQL Parser Errors
Some SQL queries may not be supported. The parser has limitations on:
- Complex
ORDER BYclauses - Certain
WHEREclause formats - Some advanced SQL features
Try simplifying your queries if you encounter parser errors.
Development
Building
npm run buildThis compiles TypeScript source files to dist/index.js.
Testing
npm testPublishing
Manual publish helper (builds, tests, packs, publishes):
npm run publish-releaseProject Structure
spacetimedb-mcp/
├── src/
│ ├── client.ts # SpacetimeDB HTTP client
│ ├── index.ts # CLI entry point
│ ├── server.ts # MCP server wiring
│ └── types.ts # Shared type definitions
├── dist/
│ └── index.js # Compiled output
├── tests/
│ ├── client.test.ts # Client unit tests
│ └── server-handlers.test.ts # Server handler unit tests
├── package.json
├── tsconfig.json
├── vitest.config.ts
└── README.mdRequirements
- Node.js >= 18.0.0
- Access to a SpacetimeDB instance
- Valid SpacetimeDB authentication token
License
MIT
