Mcp
Clickhouse MCP
Model Context Protocol reference for clickhouse.do - Cloud-native analytical database
Clickhouse MCP
Cloud-native analytical database
Overview
The Model Context Protocol (MCP) provides AI models with direct access to clickhouse.do through a standardized interface.
Installation
pnpm add @modelcontextprotocol/sdkConfiguration
Add to your MCP server configuration:
{
"mcpServers": {
"clickhouse": {
"command": "npx",
"args": ["-y", "@dotdo/mcp-server"],
"env": {
"DO_API_KEY": "your-api-key"
}
}
}
}Tools
clickhouse/invoke
Main tool for clickhouse.do operations.
{
"name": "clickhouse/invoke",
"description": "Cloud-native analytical database",
"inputSchema": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "Operation to perform"
},
"parameters": {
"type": "object",
"description": "Operation parameters"
}
},
"required": ["operation"]
}
}Usage in AI Models
Claude Desktop
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"clickhouse": {
"command": "npx",
"args": ["-y", "@dotdo/mcp-server", "--tool=clickhouse"],
"env": {
"DO_API_KEY": "undefined"
}
}
}
}OpenAI GPTs
# Custom GPT configuration
tools:
- type: mcp
server: clickhouse
operations:
- invoke
- query
- executeCustom Integration
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
const transport = new StdioClientTransport({
command: 'npx',
args: ['-y', '@dotdo/mcp-server', '--tool=clickhouse'],
})
const client = new Client(
{
name: 'clickhouse-client',
version: '1.0.0',
},
{
capabilities: {},
}
)
await client.connect(transport)
// Call tool
const result = await client.callTool({
name: 'clickhouse/invoke',
arguments: {
operation: 'clickhouse',
parameters: {},
},
})Tool Definitions
Available Tools
{
"tools": [
{
"name": "clickhouse/invoke",
"description": "Invoke clickhouse.do",
"inputSchema": {
/* ... */
}
},
{
"name": "clickhouse/query",
"description": "Query clickhouse.do resources",
"inputSchema": {
/* ... */
}
},
{
"name": "clickhouse/status",
"description": "Check clickhouse.do status",
"inputSchema": {
/* ... */
}
}
]
}Resources
Available Resources
{
"resources": [
{
"uri": "clickhouse://config",
"name": "Clickhouse Configuration",
"mimeType": "application/json"
},
{
"uri": "clickhouse://docs",
"name": "Clickhouse Documentation",
"mimeType": "text/markdown"
}
]
}Prompts
Pre-configured Prompts
{
"prompts": [
{
"name": "clickhouse-quick-start",
"description": "Quick start guide for clickhouse.do",
"arguments": []
},
{
"name": "clickhouse-best-practices",
"description": "Best practices for clickhouse.do",
"arguments": []
}
]
}Examples
Basic Usage
// AI model calls tool via MCP
mcp call clickhouse/queryWith Parameters
// Call with parameters
await mcp.callTool('clickhouse/invoke', {
operation: 'process',
parameters: {
// Operation-specific parameters
},
options: {
timeout: 30000,
},
})Error Handling
try {
const result = await mcp.callTool('clickhouse/invoke', {
operation: 'process',
})
return result
} catch (error) {
if (error.code === 'TOOL_NOT_FOUND') {
console.error('Clickhouse tool not available')
} else {
throw error
}
}AI Integration Patterns
Agentic Workflows
// AI agent uses clickhouse.do in workflow
const workflow = {
steps: [
{
tool: 'clickhouse/invoke',
operation: 'analyze',
input: 'user-data',
},
{
tool: 'clickhouse/process',
operation: 'transform',
input: 'analysis-result',
},
],
}Chain of Thought
AI models can reason about clickhouse.do operations:
User: "I need to process this data"
AI: "I'll use the clickhouse tool to:
1. Validate the data format
2. Process it through clickhouse.do
3. Return the results
Let me start..."
[Calls: mcp call clickhouse/query]Server Implementation
Custom MCP Server
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
const server = new Server(
{
name: 'clickhouse-server',
version: '1.0.0',
},
{
capabilities: {
tools: {},
resources: {},
prompts: {},
},
}
)
// Register tool
server.setRequestHandler('tools/call', async (request) => {
if (request.params.name === 'clickhouse/invoke') {
// Handle clickhouse.do operation
return {
content: [
{
type: 'text',
text: JSON.stringify(result),
},
],
}
}
})
const transport = new StdioServerTransport()
await server.connect(transport)Best Practices
- Tool Design - Keep tools focused and single-purpose
- Error Messages - Provide clear, actionable errors
- Documentation - Include examples in tool descriptions
- Rate Limiting - Implement appropriate limits
- Security - Validate all inputs from AI models
- Monitoring - Track tool usage and errors