RisingWave MCP Server
RisingWave MCP Server is a comprehensive Model Context Protocol (MCP) server that lets you query and manage your RisingWave streaming database using natural language through AI assistants like VS Code Copilot and Claude Desktop.
Features
Real-time access to RisingWave tables, materialized views, and streaming data
Complete management of sources, sinks, connections, indexes, and UDFs
Streaming job monitoring with fragment, actor, and backfill tracking
Storage analysis with Hummock/compaction insights
Built on FastMCP and risingwave-py with high-performance STDIO transport
Seamless integration with VS Code Copilot, Claude Desktop, and other MCP-compatible tools
Installation
Option 1: Docker (Recommended)
docker pull risingwavelabs/risingwave-mcp-server:0.1.0
Copy
Option 2: From Source
Requires Python 3.10 or newer.
git clone https://github.com/risingwavelabs/risingwave-mcp.git
cd risingwave-mcp
pip install -r requirements.txt
Copy
Setting Up
You'll need a running RisingWave instance—either locally or in the cloud.
Option 1: Run RisingWave Locally
# Install RisingWave standalone
curl -L https://risingwave.com/sh | sh
# macOS
risingwave
# Linux
./risingwave
Copy
For Docker or other options, see the docs:
https://docs.risingwave.com/get-started/quickstart
Option 2: Use RisingWave Cloud
You can also spin up a free-tier cluster in seconds:
https://cloud.risingwave.com/auth/signin
Integration
VS Code Copilot
In the VS Code Chat panel: Agent Mode → Select Tools → Create MCP Server.
Add the following to .vscode/mcp.json.
Option 1: Use a connection string
{
"servers": {
"risingwave-mcp": {
"type": "stdio",
"command": "python",
"args": ["path_to/risingwave-mcp/src/main.py"],
"env": {
"RISINGWAVE_CONNECTION_STR": "postgresql://root:root@localhost:4566/dev"
}
}
}
}
Copy
Explanation:
postgresql:// — Use PostgreSQL protocol (RisingWave is compatible)
root:root@ — Username and password
localhost:4566 — Host and port
/dev — Database name
Option 2: Use individual parameters
{
"servers": {
"risingwave-mcp": {
"type": "stdio",
"command": "python",
"args": ["path_to/risingwave-mcp/src/main.py"],
"env": {
"RISINGWAVE_HOST": "localhost",
"RISINGWAVE_PORT": "4566",
"RISINGWAVE_USER": "root",
"RISINGWAVE_PASSWORD": "root",
"RISINGWAVE_DATABASE": "dev",
"RISINGWAVE_SSLMODE": "disable"
}
}
}
}
Copy
Start chatting!
Ask questions like:
"List my tables"
"Create a materialized view that aggregates payments by minute"
"Show me the backfill progress for all streaming jobs"
"What's the cluster status?"
Claude Desktop
Add the MCP server to your claude_desktop_config.json under mcpServers:
{
"mcpServers": {
"risingwave-mcp": {
"command": "python",
"args": ["path_to/risingwave-mcp/src/main.py"],
"env": {
"RISINGWAVE_CONNECTION_STR": "postgresql://root:root@localhost:4566/dev"
}
}
}
}
Copy
Restart Claude Desktop to apply changes.
Docker
Run the MCP server as a container with HTTP transport:
docker run -p 8000:8000 \
-e RISINGWAVE_CONNECTION_STR="postgresql://root:root@host.docker.internal:4566/dev" \
risingwavelabs/risingwave-mcp-server:0.1.0
Copy
The server listens on http://localhost:8000/mcp by default. You can configure it with environment variables:
Variable Default Description MCP_TRANSPORTstreamable-httpTransport protocol (streamable-http, sse, stdio) MCP_HOST0.0.0.0Listen address MCP_PORT8000Listen port
Verify It Works
# Check the server is running
curl -s http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Copy
Manual Testing (Dev / CI)
You can run the MCP server directly from the CLI:
This will listen for MCP messages over STDIN/STDOUT.
Available Tools
The MCP server provides 100+ tools organized into the following categories:
Query Tools
Tool Name Description run_select_queryExecute a SELECT query against RisingWave table_row_countGet the row count for a specific table get_table_statsGet comprehensive statistics for a table
Explain Tools
Tool Name Description explain_queryGet query execution plan without running it explain_analyzeExecute EXPLAIN ANALYZE for detailed runtime statistics explain_distsqlGet distributed execution plan for streaming statements
Schema Tools
Tool Name Description show_tablesList all tables in the database list_databasesList all databases in the cluster describe_tableDescribe table structure (columns, types) describe_materialized_viewDescribe materialized view structure show_create_tableShow CREATE TABLE statement show_create_materialized_viewShow CREATE MATERIALIZED VIEW statement check_table_existsCheck if a table or MV exists list_schemasList all schemas in the database list_materialized_viewsList all materialized views in a schema get_table_columnsGet detailed column information list_subscriptionsList all subscriptions in a schema list_table_privilegesList privileges for a table list_sinksList all sinks in the database show_create_sinkShow CREATE SINK statement get_relation_infoGet info about any relation by name show_create_sourceShow CREATE SOURCE statement
DDL Tools (Data Definition)
Tool Name Description create_schemaCreate a new schema drop_tableDrop a table add_table_columnAdd a column to a table drop_table_columnRemove a column from a table rename_tableRename a table alter_table_parallelismChange table parallelism alter_table_source_rate_limitModify source rate limit for tables create_materialized_viewCreate a new materialized view drop_materialized_viewDrop a materialized view alter_mv_parallelismChange MV parallelism alter_mv_backfill_rate_limitModify MV backfill rate limit rename_materialized_viewRename a materialized view swap_materialized_viewsAtomically swap two MVs execute_ddl_statementExecute generic DDL statements create_kafka_tableCreate a table with Kafka connector add_table_commentAdd comment to a table add_column_commentAdd comment to a column
DML Tools (Data Manipulation)
Tool Name Description insert_single_rowInsert a single row into a table insert_multiple_rowsBatch insert multiple rows update_rowsUpdate rows in a table delete_rowsDelete rows from a table
Source Tools
Tool Name Description list_sourcesList all sources describe_sourceDescribe source structure alter_source_parallelismChange source parallelism alter_source_rate_limitModify source ingestion rate refresh_source_schemaRefresh schema from registry rename_sourceRename a source drop_sourceDrop a source
Sink Tools
Tool Name Description describe_sinkDescribe sink structure alter_sink_parallelismChange sink parallelism alter_sink_rate_limitModify sink output rate rename_sinkRename a sink drop_sinkDrop a sink
Connection Tools
Tool Name Description list_connectionsList all connections show_create_connectionShow CREATE CONNECTION statement drop_connectionDrop a connection
Secret Tools
Tool Name Description list_secretsList all secrets (values hidden) drop_secretDrop a secret
Index Tools
Tool Name Description list_indexesList indexes for a table describe_indexDescribe index structure show_create_indexShow CREATE INDEX statement drop_indexDrop an index
Function Tools (UDFs)
Tool Name Description list_functionsList all user-defined functions show_create_functionShow CREATE FUNCTION statement drop_functionDrop a function
User & Access Control Tools
Tool Name Description list_usersList all users get_user_privilegesGet privileges for a user get_schema_privilegesGet schema-level privileges get_database_privilegesGet database-level privileges
Cluster Tools
Tool Name Description show_clusterDisplay cluster node details show_jobsList active streaming jobs cancel_jobsCancel running jobs recover_clusterTrigger manual recovery get_cluster_infoGet comprehensive cluster info
Database Management Tools
Tool Name Description get_database_versionGet RisingWave version info show_running_queriesShow currently running queries flush_databaseForce flush pending writes
Session Tools
Tool Name Description set_session_variableSet a session variable show_session_variableShow a session variable value show_all_session_variablesShow all session variables alter_system_variableAlter system-wide defaults
Iceberg Tools
Tool Name Description vacuum_tableExpire old snapshots on Iceberg table vacuum_full_tableFull compaction + vacuum
Streaming Infrastructure Tools
Tool Name Description get_worker_nodesGet all worker nodes with status get_actor_distributionShow actor count per worker get_fragment_statsGet fragment statistics get_fragment_communication_costCalculate shuffle overhead list_fragmentsList all fragments get_fragment_detailsGet detailed fragment info list_actorsList all actors get_actors_for_fragmentGet actors for a fragment get_object_id_by_nameGet internal ID by name get_mv_by_fragment_idFind MV by fragment ID get_mv_by_actor_idTrace actor to MV get_worker_for_actorFind worker for actor get_workers_for_fragmentFind workers for fragment get_streaming_job_fragmentsGet fragments for a job get_streaming_job_actorsGet actors for a job get_backfill_progressGet backfill progress get_fragment_backfill_progressGet fragment-level backfill get_upstream_fragmentsGet upstream fragments get_downstream_fragmentsGet downstream fragments get_fragments_by_state_tableFind fragments by state table get_streaming_parallelismGet parallelism settings get_mv_worker_distributionGet MV actor distribution get_job_by_state_table_idFind job by state table get_internal_tablesGet internal state tables check_vnode_distributionCheck for data skew get_downstream_dependentsFind dependent MVs get_upstream_dependentsFind upstream dependencies get_sink_decouple_statusCheck sink decouple status get_sink_logstore_lagMonitor decoupled sink lag
Storage Tools (Hummock)
Tool Name Description get_table_storage_statsGet storage stats for a table get_all_table_storage_statsGet storage stats for all tables get_sst_level_layoutCheck SST layout per level get_compaction_group_configsGet compaction configs get_sst_delete_ratioCheck SST delete ratios get_sst_vnode_distributionCheck vnode distribution in SSTs get_large_state_tables_in_compaction_groupFind large state tables get_l0_statsGet L0 level statistics get_jobs_in_compaction_groupFind jobs in compaction group get_meta_snapshot_infoGet meta snapshot info get_compaction_group_summaryGet compaction group summary
System Catalog Tools
Tool Name Description get_table_constraintsGet table constraints get_views_infoGet views information get_all_objects_in_schemaList all objects in schema get_object_commentsGet object comments get_streaming_job_statusGet streaming job status get_system_tables_infoList system tables query_system_catalogQuery any system catalog
Architecture
src/
├── main.py # Entry point, registers all tools
├── connection.py # Database connection setup
├── query_tools.py # SELECT queries and table stats
├── explain.py # EXPLAIN and EXPLAIN ANALYZE
├── schema_tools.py # Schema inspection tools
├── ddl_tools.py # CREATE, ALTER, DROP operations
├── dml_tools.py # INSERT, UPDATE, DELETE operations
├── source_tools.py # Source management
├── sink_tools.py # Sink management
├── connection_tools.py # Connection management
├── secret_tools.py # Secret management
├── index_tools.py # Index management
├── function_tools.py # UDF management
├── user_tools.py # User and access control
├── cluster_tools.py # Cluster management
├── management_tools.py # Database management
├── session_tools.py # Session variables
├── iceberg_tools.py # Iceberg/vacuum operations
├── streaming_tools.py # Fragments, actors, backfill
├── storage_tools.py # Hummock/compaction analysis
└── catalog_tools.py # System catalog queries
Copy
Example Conversations
Query Data
User: Show me all tables in the public schema
Assistant: [calls show_tables]
User: What's in the orders table?
Assistant: [calls describe_table with table_name="orders"]
User: Get me the last 10 orders
Assistant: [calls run_select_query with query="SELECT * FROM orders ORDER BY created_at DESC LIMIT 10"]
Copy
Monitor Streaming Jobs
User: What's the backfill progress?
Assistant: [calls get_backfill_progress]
User: Show me the cluster status
Assistant: [calls show_cluster]
User: Are there any running jobs?
Assistant: [calls show_jobs]
Copy
Manage Objects
User: Create a materialized view that counts orders per customer
Assistant: [calls create_materialized_view with appropriate SQL]
User: Change the parallelism of mv_orders to 4
Assistant: [calls alter_mv_parallelism with mv_name="mv_orders", parallelism="4"]
User: Drop the old_source source
Assistant: [calls drop_source with source_name="old_source"]
Copy
Debug Performance
User: Explain this query: SELECT * FROM orders WHERE status = 'pending'
Assistant: [calls explain_query]
User: What's the storage usage for each table?
Assistant: [calls get_all_table_storage_stats]
User: Check for data skew in the orders table
Assistant: [calls check_vnode_distribution with table_name="orders", distribution_key="customer_id"]
Copy
Testing
The MCP server includes comprehensive testing tools:
1. Unit Tests (with mocked connections)
# Install test dependencies
pip install pytest
# Run all unit tests
pytest tests/test_tools.py -v
# Run specific test class
pytest tests/test_tools.py::TestSchemaTools -v
Copy
2. Integration Tests (requires running RisingWave)
# Set connection string
export RISINGWAVE_CONNECTION_STR="postgresql://root:root@localhost:4566/dev"
# Run all integration tests
python tests/integration_test.py
# Run specific category
python tests/integration_test.py --category schema
python tests/integration_test.py --category cluster
python tests/integration_test.py --category streaming
# Verbose output
python tests/integration_test.py -v
Copy
Available test categories: schema, source, sink, cluster, management, session, streaming, storage, catalog, connection, secret, function, user, explain, query
3. Interactive MCP Inspector
# Start interactive mode
python tests/mcp_inspector.py
# List all tools
python tests/mcp_inspector.py --list
# List tools by category
python tests/mcp_inspector.py --list --category schema
# Run a specific tool
python tests/mcp_inspector.py --tool show_tables
# Run a tool with arguments
python tests/mcp_inspector.py --tool describe_table --args '{"table_name": "orders"}'
Copy
Interactive mode commands:
mcp> list # List all tools
mcp> list schema # List schema tools
mcp> run show_tables # Run a tool
mcp> run describe_table {"table_name": "orders"} # Run with args
mcp> help show_cluster # Show tool details
mcp> quit # Exit
Copy
4. Manual Testing with MCP CLI
If you have the MCP CLI installed:
# Test the server directly
echo '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}' | python src/main.py
Copy
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.