Connect to and query external databases (PostgreSQL, MySQL, etc.). Load this skill when user wants to query their database, analyze external data, or set up database connections.
Query external databases through Spikefrost's secure SQL proxy.
MCP call: spikefrost → find_tools
query: "sql database query"
This returns the SQL execution tool with full documentation.
User may have pre-configured database connections. Check what's available:
MCP call: spikefrost → find_tools
query: "list sql connections"
MCP call: [sql-tool] → execute
connection: "connection-id"
query: "SELECT * FROM users LIMIT 10"
-- PostgreSQL
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'users';
-- MySQL
SHOW TABLES;
DESCRIBE users;
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'orders'
ORDER BY ordinal_position;
SELECT * FROM orders ORDER BY created_at DESC LIMIT 5;
SELECT DATE(created_at) as date, COUNT(*) as count, SUM(total) as revenue
FROM orders
WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY DATE(created_at)
ORDER BY date;
When building web apps that query external databases via the Spikefrost SQL API, use this pattern:
export async function queryDatabase(env: Env, alias: string, sql: string): Promise<any[]> {
const response = await fetch('https://mcp.spikefrost.com/api/v1/execute', {
method: 'POST',
headers: {
'x-api-key': env.SPIKE_TENANT_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
provider: 'sql',
capability: 'sql_query',
params: {
alias: alias,
query: sql,
},
}),
});
if (!response.ok) {
console.error(`SQL query failed: HTTP ${response.status}`);
return [];
}
const data = await response.json();
// ⛔ CRITICAL: Check for 'status: completed' - NOT 'success: true'
if (data.status === 'completed' && data.result?.rows) {
return data.result.rows;
}
if (data.error || data.status === 'failed') {
console.error('SQL query error:', data.error);
}
return [];
}
The Spikefrost SQL API returns responses in this format:
{
"jobId": "...",
"status": "completed",
"result": {
"rows": [...],
"row_count": 1,
"truncated": false,
"execution_time_ms": 148,
"connection": { "alias": "mydb", "name": "mydb", "db_type": "postgresql", "database": "mydb" }
}
}
⛔ CRITICAL: Always check data.status === 'completed' to verify success. The API does NOT use data.success. Using data.success will cause queries to return empty results even when data exists.