-
Notifications
You must be signed in to change notification settings - Fork 0
MCP Database Server Example
Mo Abualruz edited this page Dec 6, 2025
·
1 revision
Status: ✅ Complete
Last Updated: December 6, 2025
This example demonstrates integrating a database MCP server with RiceCoder. The database server provides tools for querying, inserting, updating, and deleting data.
# Install via pip
pip install database-mcp-server
# Or use uvx
uvx database-mcp-server@latestCreate .ricecoder/mcp-servers.yaml:
servers:
- id: database-server
name: Database Tools
command: uvx
args:
- database-mcp-server@latest
env:
DB_URL: postgresql://localhost/mydb
DB_USER: admin
DB_PASSWORD: ${DB_PASSWORD}
DB_POOL_SIZE: "10"
LOG_LEVEL: INFO
timeout_ms: 5000
auto_reconnect: true
max_retries: 3export DB_PASSWORD=your_passwordricecoder tools listExpected output:
Available Tools:
database-query (database-server)
Description: Execute database queries
Category: database
Parameters: query (string, required)
Returns: object
database-insert (database-server)
Description: Insert data into database
Category: database
Parameters: table (string, required), data (object, required)
Returns: object
database-update (database-server)
Description: Update data in database
Category: database
Parameters: table (string, required), id (string, required), data (object, required)
Returns: object
database-delete (database-server)
Description: Delete data from database
Category: database
Parameters: table (string, required), id (string, required)
Returns: object
Create .ricecoder/permissions.yaml:
permissions:
# Allow all database reads
- pattern: "database-query"
level: allow
# Ask for database writes
- pattern: "database-insert"
level: ask
- pattern: "database-update"
level: ask
- pattern: "database-delete"
level: askricecoder tools invoke database-query \
--query "SELECT * FROM users WHERE age > 18"Output:
{
"success": true,
"rows": [
{
"id": 1,
"name": "Alice",
"age": 25,
"email": "alice@example.com"
},
{
"id": 2,
"name": "Bob",
"age": 30,
"email": "bob@example.com"
}
],
"count": 2
}ricecoder tools invoke database-insert \
--table users \
--data '{"name": "Charlie", "age": 28, "email": "charlie@example.com"}'Output:
{
"success": true,
"id": 3,
"message": "Record inserted successfully"
}ricecoder tools invoke database-update \
--table users \
--id 3 \
--data '{"age": 29}'Output:
{
"success": true,
"message": "Record updated successfully"
}ricecoder tools invoke database-delete \
--table users \
--id 3Output:
{
"success": true,
"message": "Record deleted successfully"
}The code generator can use database tools to:
- Query existing database schema
- Insert generated code into database
- Update documentation in database
// In agent code
let schema = agent.invoke_tool("database-query",
json!({"query": "SELECT * FROM information_schema.tables"})
).await?;
// Generate code based on schema
let generated_code = generate_code(&schema);
// Store in database
agent.invoke_tool("database-insert",
json!({
"table": "generated_code",
"data": {
"code": generated_code,
"timestamp": now()
}
})
).await?;The data analysis agent can use database tools to:
- Query data for analysis
- Store analysis results
- Update data based on analysis
// Query data
let data = agent.invoke_tool("database-query",
json!({"query": "SELECT * FROM metrics WHERE date > NOW() - INTERVAL 7 DAY"})
).await?;
// Analyze data
let analysis = analyze_metrics(&data);
// Store results
agent.invoke_tool("database-insert",
json!({
"table": "analysis_results",
"data": analysis
})
).await?;servers:
- id: database-server
name: Database Tools
command: uvx
args:
- database-mcp-server@latest
env:
DB_URL: postgresql://localhost/mydb
DB_USER: admin
DB_PASSWORD: ${DB_PASSWORD}
DB_POOL_SIZE: "10"
LOG_LEVEL: INFO
timeout_ms: 5000
auto_reconnect: true
max_retries: 3permissions:
# Allow all database reads
- pattern: "database-query"
level: allow
# Ask for database writes
- pattern: "database-insert"
level: ask
- pattern: "database-update"
level: ask
- pattern: "database-delete"
level: ask
# Per-agent: Allow data processor to write
- pattern: "database-insert"
level: allow
agent_id: data-processor
- pattern: "database-update"
level: allow
agent_id: data-processorError: Failed to connect to database server
Solutions:
- Check database is running:
psql -U admin -d mydb - Verify connection string:
DB_URL=postgresql://localhost/mydb - Check credentials:
DB_USER=admin,DB_PASSWORD=... - Check network connectivity
Error: Tool 'database-query' timed out after 5000ms
Solutions:
- Increase timeout:
timeout_ms: 10000 - Optimize query
- Check database performance
- Add indexes to frequently queried columns
Error: Permission denied for tool 'database-insert'
Solutions:
- Check permissions in
.ricecoder/permissions.yaml - Verify permission level is not "deny"
- Check per-agent permissions
- Update permissions if needed
Last updated: December 6, 2025