Model Context Protocol (MCP) is a standardized protocol designed to manage context between large language models (LLMs) and external systems. This repository provides an installer and an MCP Server for Singlestore, enabling seamless integration.
With MCP, you can use Claude Desktop, Cursor, or any compatible MCP client to interact with SingleStore using natural language, making it easier to perform complex operations effortlessly.
đź’ˇ Pro Tip: Not sure what the MCP server can do? Just call the /help
prompt in your chat!
The simplest way to set up the MCP server is to use the initialization command:
uvx singlestore-mcp-server init
This command will:
To specify a client (e.g., claude
or cursor
), use the --client
flag:
uvx singlestore-mcp-server init --client=<client>
To install mcp-server-singlestore
automatically via Smithery:
npx -y @smithery/cli install @singlestore-labs/mcp-server-singlestore --client=<client>
Replace <client>
with claude
or cursor
as needed.
{
"mcpServers": {
"singlestore-mcp-server": {
"command": "uvx",
"args": [
"singlestore-mcp-server",
"start"
]
}
}
}
No API keys, tokens, or environment variables required! The server automatically handles authentication via browser OAuth when started.
To build the Docker image for the MCP server, run the following command in the project root:
docker build -t mcp-server-singlestore .
To run the Docker container, use the following command:
docker run -d \
-p 8000:8000 \
-e MCP_API_KEY="your_api_key_here" \
-it \
--name mcp-server \
mcp-server-singlestore
Note: An API key is needed when using Docker because the OAuth flow isn't supported locally for servers running in a Docker container. We're working with the Docker team to enable OAuth for local servers in the future. For better security, we recommend using Docker Desktop to configure the S2 MCP server—see this blog post for details on Docker's new MCP Catalog.
The server implements the following tools:
workspaceGroupID
(string)workspace_group_identifier
, workspace_identifier
, username
, password
, database
, sql_query
name
: Name of the starter workspacedatabase_name
: Name of the database to createusername
: Username for accessing the workspacepassword
: Password for the userworkspace_group
: Object containing name
(optional) and cellID
(mandatory)virtual_workspace_id
, username
, password
, sql_query
notebook_name
, content
(optional)name
: Name for the jobnotebook_path
: Path to the notebook to executeschedule_mode
: Once or Recurringexecution_interval_minutes
: Minutes between executions (optional)start_at
: When to start the job (optional)description
: Description of the job (optional)create_snapshot
: Whether to create notebook snapshots (optional)runtime_name
: Name of the runtime environmentparameters
: Parameters for the job (optional)target_config
: Target configuration for the job (optional)job_id
job_id
, start
(optional), end
(optional)git clone https://github.com/singlestore-labs/mcp-server-singlestore.git
cd mcp-server-singlestore
uv sync --dev
uv run pre-commit install
# Quick quality checks (fast feedback)
./scripts/check.sh
# Run tests independently
./scripts/test.sh
# Comprehensive validation (before PRs)
./scripts/check-all.sh
# Create and publish releases
./scripts/release.sh
# Run test suite with coverage
./scripts/test.sh
# Or use pytest directly
uv run pytest
uv run pytest --cov=src --cov-report=html
We use Ruff for both linting and formatting:
# Format code
uv run ruff format src/ tests/
# Lint code
uv run ruff check src/ tests/
# Lint and fix issues automatically
uv run ruff check --fix src/ tests/
Releases are managed through git tags and automated PyPI publication:
./scripts/release.sh
(interactive tool)See scripts/dev-workflow.md
for detailed workflow documentation.