ClickHouse
ทางการสอบถามเซิร์ฟเวอร์ฐานข้อมูล ClickHouse ของคุณ
คุณทำอะไรได้บ้างด้วย Click House MCP?
- รันคำสั่ง SQL แบบอ่านอย่างเดียว — ขอให้ผู้ช่วยดำเนินการ
SELECTquery ใดๆ กับคลัสเตอร์ ClickHouse ของคุณโดยใช้run_query - แสดงรายการฐานข้อมูลและตาราง — สำรวจ schema ของคุณโดยแสดงรายการฐานข้อมูลทั้งหมดด้วย
list_databasesหรือแบ่งหน้าตารางในฐานข้อมูลเฉพาะด้วยlist_tables - สอบถามไฟล์และ URL โดยตรงผ่าน chDB — ใช้
run_chdb_select_queryเพื่อรัน SQL กับไฟล์ในเครื่องหรือแหล่งข้อมูลระยะไกลโดยไม่ต้องโหลดเข้าสู่ ClickHouse ก่อน - ควบคุมการเขียนและการดำเนินการที่ทำลายข้อมูล — เปิดใช้งาน
CLICKHOUSE_ALLOW_WRITE_ACCESSสำหรับ DDL/DML และเลือกเปิดCLICKHOUSE_ALLOW_DROPเพื่ออนุญาตคำสั่งDROPหรือTRUNCATEในระหว่างเซสชันที่ใช้ AI ช่วยเหลือ
เอกสาร
ClickHouse MCP Server
เซิร์ฟเวอร์ MCP สำหรับ ClickHouse
คุณสมบัติ
เครื่องมือ ClickHouse
-
run_query- รันคำสั่ง SQL บนคลัสเตอร์ ClickHouse ของคุณ
- อินพุต:
query(string): คำสั่ง SQL ที่ต้องการรัน - คำสั่งจะทำงานในโหมดอ่านอย่างเดียวโดยค่าเริ่มต้น (
CLICKHOUSE_ALLOW_WRITE_ACCESS=false) แต่สามารถเปิดใช้งานการเขียนได้อย่างชัดเจนหากจำเป็น
-
list_databases- แสดงรายการฐานข้อมูลทั้งหมดบนคลัสเตอร์ ClickHouse ของคุณ
-
list_tables- แสดงรายการตารางในฐานข้อมูลพร้อมการแบ่งหน้า
- อินพุตที่จำเป็น:
database(string) - อินพุตเสริม:
like/not_like(string): ใช้ตัวกรองLIKEหรือNOT LIKEกับชื่อตารางpage_token(string): โทเค็นที่ส่งคืนจากการเรียกก่อนหน้าเพื่อดึงหน้าถัดไปpage_size(int, ค่าเริ่มต้น50): จำนวนตารางที่ส่งคืนต่อหน้าinclude_detailed_columns(bool, ค่าเริ่มต้นtrue): เมื่อเป็นfalseจะละเว้นข้อมูลเมตาของคอลัมน์เพื่อการตอบสนองที่เบากว่า แต่ยังคงcreate_table_queryไว้ครบถ้วน
- รูปแบบการตอบสนอง:
tables: อาร์เรย์ของออบเจกต์ตารางสำหรับหน้าปัจจุบันnext_page_token: ส่งค่านี้กลับไปเพื่อดึงหน้าถัดไป หรือnullเมื่อไม่มีตารางเหลือแล้วtotal_tables: จำนวนตารางทั้งหมดที่ตรงกับตัวกรองที่ให้มา
เครื่องมือ chDB
run_chdb_select_query- รันคำสั่ง SQL โดยใช้เอนจิน ClickHouse แบบฝังตัวของ chDB
- อินพุต:
query(string): คำสั่ง SQL ที่ต้องการรัน - สืบค้นข้อมูลโดยตรงจากแหล่งต่างๆ (ไฟล์, URL, ฐานข้อมูล) โดยไม่ต้องผ่านกระบวนการ ETL
- ต้องการ
chdbextra ที่เป็นทางเลือก:pip install 'mcp-clickhouse[chdb]'
ปลายทางตรวจสอบความสมบูรณ์
เมื่อทำงานด้วยการขนส่ง HTTP หรือ SSE จะมีปลายทางตรวจสอบความสมบูรณ์ที่ /health ปลายทางนี้:
- ส่งคืน
200 OK(body:OK) หากเซิร์ฟเวอร์ทำงานปกติและสามารถเชื่อมต่อกับ ClickHouse ได้ - ส่งคืน
503 Service Unavailableพร้อมข้อความแสดงข้อผิดพลาดทั่วไป หากเซิร์ฟเวอร์ไม่สามารถเชื่อมต่อกับ ClickHouse ได้
ปลายทางนี้ไม่มีการตรวจสอบสิทธิ์โดยเจตนา เพื่อให้โพรบจากตัวจัดการ (เช่น Kubernetes liveness/readiness, load balancers) สามารถเข้าถึงได้โดยไม่ต้องใช้ข้อมูลประจำตัว เนื้อหาการตอบสนองถูกทำให้เหลือน้อยที่สุดโดยเจตนาเพื่อหลีกเลี่ยงการรั่วไหลของสตริงเวอร์ชันแบ็กเอนด์หรือรายละเอียดข้อผิดพลาด ให้ตรวจแก้จุดบกพร่องความล้มเหลวผ่านบันทึกของเซิร์ฟเวอร์
ตัวอย่าง:
curl http://localhost:8000/health
# Response: OK
ความปลอดภัย
การตรวจสอบสิทธิ์สำหรับการขนส่ง HTTP/SSE
เมื่อใช้การขนส่ง HTTP หรือ SSE จำเป็นต้องมีการตรวจสอบสิทธิ์ตามค่าเริ่มต้น การขนส่ง stdio (ค่าเริ่มต้น) ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ เนื่องจากสื่อสารผ่านอินพุต/เอาต์พุตมาตรฐานเท่านั้น
รองรับโหมดการตรวจสอบสิทธิ์สามแบบ เลือกอย่างใดอย่างหนึ่ง:
| โหมด | เมื่อใดที่ควรใช้ | ตัวแปรสภาพแวดล้อม |
|---|---|---|
| โทเค็น bearer แบบคงที่ | การปรับใช้แบบง่าย, บริการภายใน | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (ผ่าน FastMCP) | Azure Entra, Google, GitHub, WorkOS, ฯลฯ | FASTMCP_SERVER_AUTH=<provider-class-path> (+ ตัวแปร FASTMCP_SERVER_AUTH_* เฉพาะของผู้ให้บริการ) |
| ปิดใช้งาน | การพัฒนาในเครื่องเท่านั้น | CLICKHOUSE_MCP_AUTH_DISABLED=true |
การเริ่มต้นจะล้มเหลวหากไม่มีการกำหนดค่าใดๆ เหล่านี้สำหรับการขนส่ง HTTP/SSE
การตั้งค่าการตรวจสอบสิทธิ์
-
สร้างโทเค็นที่ปลอดภัย (สามารถเป็นสตริงสุ่มใดๆ ก็ได้):
# Using uuidgen (macOS/Linux) uuidgen # Using openssl openssl rand -hex 32 -
กำหนดค่าเซิร์ฟเวอร์ด้วยโทเค็น:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token" -
กำหนดค่าไคลเอนต์ MCP ของคุณให้รวมโทเค็นในคำขอ:
สำหรับ Claude Desktop ที่ใช้การขนส่ง HTTP/SSE:
{ "mcpServers": { "mcp-clickhouse": { "url": "http://127.0.0.1:8000", "headers": { "Authorization": "Bearer your-generated-token" } } } }หมายเหตุ: ปลายทาง
/healthไม่มีการตรวจสอบสิทธิ์โดยเจตนา (ดู ปลายทางตรวจสอบความสมบูรณ์ ด้านบน) เพื่อตรวจสอบว่าการตรวจสอบสิทธิ์ด้วยโทเค็น bearer ปฏิเสธคำขอที่ไม่ได้รับอนุญาตจริงหรือไม่ ให้เข้าถึงปลายทาง MCP โดยตรง เช่น ด้วย MCP Inspector หรือโดยการ POST คำขอ JSON-RPC ไปยัง/mcpทั้งที่มีและไม่มีส่วนหัวAuthorizationและยืนยันว่าการเรียกที่ไม่ได้รับอนุญาตส่งคืน401
OAuth / OIDC ผ่าน FastMCP
สำหรับการปรับใช้ในสภาพแวดล้อมจริงที่มีผู้ให้บริการข้อมูลประจำตัว (Azure Entra, Google, GitHub, WorkOS, ฯลฯ) ให้มอบหมายการตรวจสอบสิทธิ์ให้กับ ผู้ให้บริการการตรวจสอบสิทธิ์ในตัวของ FastMCP แทนการใช้โทเค็นแบบคงที่ ตั้งค่า FASTMCP_SERVER_AUTH เป็น พาธคลาสแบบเต็ม ของผู้ให้บริการการตรวจสอบสิทธิ์ FastMCP พร้อมกับตัวแปร FASTMCP_SERVER_AUTH_* เฉพาะของผู้ให้บริการ และปล่อย CLICKHOUSE_MCP_AUTH_TOKEN ว่างไว้
ตัวอย่าง (Azure Entra):
export FASTMCP_SERVER_AUTH=fastmcp.server.auth.providers.azure.AzureProvider
export FASTMCP_SERVER_AUTH_AZURE_TENANT_ID="<tenant-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_ID="<client-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_SECRET="<client-secret>"
ดู เอกสาร FastMCP สำหรับรายชื่อผู้ให้บริการทั้งหมดและตัวแปรสภาพแวดล้อมที่จำเป็น
โหมดการพัฒนา (ปิดใช้งานการตรวจสอบสิทธิ์)
สำหรับการพัฒนาและทดสอบในเครื่องเท่านั้น คุณสามารถปิดใช้งานการตรวจสอบสิทธิ์ได้โดยตั้งค่า:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
คำเตือน: ใช้สำหรับการพัฒนาในเครื่องเท่านั้น อย่าปิดใช้งานการตรวจสอบสิทธิ์เมื่อเซิร์ฟเวอร์ถูกเปิดเผยต่อเครือข่ายใดๆ
การกำหนดค่า
เซิร์ฟเวอร์ MCP นี้รองรับทั้ง ClickHouse และ chDB คุณสามารถเปิดใช้งานอย่างใดอย่างหนึ่งหรือทั้งสองอย่างได้ตามความต้องการของคุณ
-
เปิดไฟล์การกำหนดค่า Claude Desktop ที่อยู่:
- บน macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - บน Windows:
%APPDATA%/Claude/claude_desktop_config.json
- บน macOS:
-
เพิ่มสิ่งต่อไปนี้:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_ROLE": "<clickhouse-role>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
อัปเดตตัวแปรสภาพแวดล้อมให้ชี้ไปยังบริการ ClickHouse ของคุณเอง
หรือหากคุณต้องการทดลองใช้กับ ClickHouse SQL Playground คุณสามารถใช้การกำหนดค่าต่อไปนี้:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "sql-clickhouse.clickhouse.com",
"CLICKHOUSE_PORT": "8443",
"CLICKHOUSE_USER": "demo",
"CLICKHOUSE_PASSWORD": "",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
สำหรับ chDB (เอนจิน ClickHouse แบบฝังตัว) ให้เพิ่มการกำหนดค่าต่อไปนี้:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CHDB_ENABLED": "true",
"CLICKHOUSE_ENABLED": "false",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
คุณยังสามารถเปิดใช้งานทั้ง ClickHouse และ chDB พร้อมกันได้:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30",
"CHDB_ENABLED": "true",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
-
ค้นหารายการคำสั่งสำหรับ
uvและแทนที่ด้วยพาธสัมบูรณ์ไปยังไฟล์ปฏิบัติการuvเพื่อให้แน่ใจว่ามีการใช้uvเวอร์ชันที่ถูกต้องเมื่อเริ่มต้นเซิร์ฟเวอร์ บน mac คุณสามารถค้นหาพาธนี้ได้โดยใช้which uv -
รีสตาร์ท Claude Desktop เพื่อใช้การเปลี่ยนแปลง
การเข้าถึงการเขียนที่เป็นทางเลือก
ตามค่าเริ่มต้น MCP นี้จะบังคับใช้คำสั่งอ่านอย่างเดียว เพื่อไม่ให้เกิดการเปลี่ยนแปลงโดยไม่ตั้งใจระหว่างการสำรวจ หากต้องการอนุญาตคำสั่ง DDL หรือ INSERT/UPDATE ให้ตั้งค่าตัวแปรสภาพแวดล้อม CLICKHOUSE_ALLOW_WRITE_ACCESS เป็น true เซิร์ฟเวอร์จะยังคงบังคับใช้โหมดอ่านอย่างเดียวหากอินสแตนซ์ ClickHouse เองไม่อนุญาตให้เขียน
การป้องกันการดำเนินการทำลายล้าง
แม้ว่าจะเปิดใช้งานการเข้าถึงการเขียน (CLICKHOUSE_ALLOW_WRITE_ACCESS=true) แล้ว การดำเนินการทำลายล้าง (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE) จำเป็นต้องมีแฟล็กการยินยอมเพิ่มเติมเพื่อความปลอดภัย ซึ่งจะป้องกันการลบข้อมูลโดยไม่ตั้งใจระหว่างการสำรวจด้วย AI
ในการเปิดใช้งานการดำเนินการทำลายล้าง ให้ตั้งค่าทั้งสองแฟล็ก:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
แนวทางสองระดับนี้ช่วยให้แน่ใจว่าการทำลายโดยไม่ตั้งใจเป็นเรื่องยากมาก:
- การดำเนินการเขียน (INSERT, UPDATE, CREATE) ต้องการ
CLICKHOUSE_ALLOW_WRITE_ACCESS=true - การดำเนินการทำลายล้าง (DROP, TRUNCATE) ต้องการ
CLICKHOUSE_ALLOW_DROP=trueเพิ่มเติม
การรันโดยไม่ใช้ uv (ใช้ System Python)
หากคุณต้องการใช้การติดตั้ง Python ของระบบแทน uv คุณสามารถติดตั้งแพ็คเกจจาก PyPI และรันได้โดยตรง:
-
ติดตั้งแพ็คเกจโดยใช้ pip:
python3 -m pip install mcp-clickhouseเพื่อติดตั้งการรองรับ chDB ด้วย:
python3 -m pip install 'mcp-clickhouse[chdb]'เพื่ออัปเกรดเป็นเวอร์ชันล่าสุด:
python3 -m pip install --upgrade mcp-clickhouse -
อัปเดตการกำหนดค่า Claude Desktop ของคุณให้ใช้ Python โดยตรง:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "python3",
"args": [
"-m",
"mcp_clickhouse.main"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
หรือคุณสามารถใช้สคริปต์ที่ติดตั้งไว้ได้โดยตรง:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "mcp-clickhouse",
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
หมายเหตุ: ตรวจสอบให้แน่ใจว่าใช้พาธแบบเต็มไปยังไฟล์ปฏิบัติการ Python หรือสคริปต์ mcp-clickhouse หากไม่อยู่ใน PATH ของระบบ คุณสามารถค้นหาพาธได้โดยใช้:
which python3สำหรับไฟล์ปฏิบัติการ Pythonwhich mcp-clickhouseสำหรับสคริปต์ที่ติดตั้ง
มิดเดิลแวร์แบบกำหนดเอง
คุณสามารถเพิ่มมิดเดิลแวร์แบบกำหนดเองไปยังเซิร์ฟเวอร์ MCP ได้โดยไม่ต้องแก้ไขซอร์สโค้ด FastMCP มีระบบมิดเดิลแวร์ที่ช่วยให้คุณสามารถดักจับและประมวลผลข้อความโปรโตคอล MCP (การเรียกใช้เครื่องมือ, การอ่านทรัพยากร, พรอมต์, ฯลฯ)
วิธีใช้
- สร้างโมดูล Python ด้วยคลาสมิดเดิลแวร์ที่ขยาย
Middlewareและฟังก์ชันsetup_middleware(mcp):
# my_middleware.py
import logging
from fastmcp.server.middleware import Middleware, MiddlewareContext, CallNext
logger = logging.getLogger("my-middleware")
class LoggingMiddleware(Middleware):
"""Log all tool calls."""
async def on_call_tool(self, context: MiddlewareContext, call_next: CallNext):
tool_name = context.message.name if hasattr(context.message, 'name') else 'unknown'
logger.info(f"Calling tool: {tool_name}")
result = await call_next(context)
logger.info(f"Tool {tool_name} completed")
return result
def setup_middleware(mcp):
"""Register middleware with the MCP server."""
mcp.add_middleware(LoggingMiddleware())
- ตั้งค่าตัวแปรสภาพแวดล้อม
MCP_MIDDLEWARE_MODULEเป็นชื่อโมดูล (โดยไม่มีนามสกุล.py):
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": ["run", "--with", "mcp-clickhouse", "--python", "3.10", "mcp-clickhouse"],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"MCP_MIDDLEWARE_MODULE": "my_middleware"
}
}
}
}
- ตรวจสอบให้แน่ใจว่าโมดูลมิดเดิลแวร์ของคุณอยู่ในพาธการนำเข้าของ Python (เช่น ในไดเรกทอรีเดียวกับที่เซิร์ฟเวอร์ MCP ทำงาน หรือติดตั้งเป็นแพ็คเกจ)
ตัวอย่างมิดเดิลแวร์
มีโมดูลมิดเดิลแวร์ตัวอย่างให้ใน example_middleware.py ซึ่งแสดงรูปแบบทั่วไป:
- การบันทึกคำขอ MCP ทั้งหมด
- การบันทึกการเรียกใช้เครื่องมือโดยเฉพาะ
- การวัดเวลาการประมวลผลคำขอ
วิธีใช้ตัวอย่าง:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
ความสามารถของมิดเดิลแวร์
คลาสพื้นฐาน Middleware มี hooks สำหรับการดำเนินการ MCP ต่างๆ:
on_message(context, call_next)- เรียกใช้สำหรับข้อความทั้งหมดon_request(context, call_next)- เรียกใช้สำหรับคำขอทั้งหมดon_notification(context, call_next)- เรียกใช้สำหรับการแจ้งเตือนทั้งหมดon_call_tool(context, call_next)- เรียกใช้เมื่อมีการเรียกใช้เครื่องมือon_read_resource(context, call_next)- เรียกใช้เมื่อมีการอ่านทรัพยากรon_get_prompt(context, call_next)- เรียกใช้เมื่อมีการเรียกค้นพรอมต์on_list_tools(context, call_next)- เรียกใช้เมื่อแสดงรายการเครื่องมือon_list_resources(context, call_next)- เรียกใช้เมื่อแสดงรายการทรัพยากรon_list_resource_templates(context, call_next)- เรียกใช้เมื่อแสดงรายการเทมเพลตทรัพยากรon_list_prompts(context, call_next)- เรียกใช้เมื่อแสดงรายการพรอมต์
แต่ละ hook ได้รับออบเจกต์ MiddlewareContext ที่ประกอบด้วยข้อความและข้อมูลเมตา และฟังก์ชัน call_next เพื่อดำเนินการไปป์ไลน์ต่อไป
การกำหนดค่าไคลเอนต์แบบไดนามิกผ่าน Context State
มิดเดิลแวร์สามารถแทนที่การกำหนดค่าไคลเอนต์ ClickHouse ตามแต่ละคำขอได้ โดยใช้คีย์สถานะบริบท CLIENT_CONFIG_OVERRIDES_KEY เซิร์ฟเวอร์จะรวมการแทนที่เหล่านี้เข้ากับการกำหนดค่าพื้นฐานจากตัวแปรสภาพแวดล้อม
from fastmcp.server.dependencies import get_context
from mcp_clickhouse.mcp_server import CLIENT_CONFIG_OVERRIDES_KEY
ctx = get_context()
ctx.set_state(CLIENT_CONFIG_OVERRIDES_KEY, {
"connect_timeout": 60,
"send_receive_timeout": 120
})
สิ่งนี้ช่วยให้เกิดกรณีการใช้งานขั้นสูง เช่น การปรับไทม์เอาต์แบบไดนามิก, การกำหนดเส้นทางเฉพาะผู้เช่า หรือการตั้งค่าการเชื่อมต่อต่อผู้ใช้
การพัฒนา
-
ในไดเรกทอรี
test-servicesรันdocker compose up -dเพื่อเริ่มคลัสเตอร์ ClickHouse -
เพิ่มตัวแปรต่อไปนี้ลงในไฟล์
.envในรูทของที่เก็บ
หมายเหตุ: การใช้ผู้ใช้ default ในบริบทนี้มีจุดประสงค์เพื่อการพัฒนาในเครื่องเท่านั้น
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
รัน
uv syncเพื่อติดตั้งการพึ่งพา ในการติดตั้งuvให้ทำตามคำแนะนำ ที่นี่ จากนั้นทำsource .venv/bin/activate -
เพื่อการทดสอบที่ง่ายดายด้วย MCP Inspector ให้รัน
fastmcp dev mcp_clickhouse/mcp_server.pyเพื่อเริ่มเซิร์ฟเวอร์ MCP -
เพื่อทดสอบด้วยการขนส่ง HTTP และปลายทางตรวจสอบความสมบูรณ์:
# For development, disable authentication CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_DISABLED=true python -m mcp_clickhouse.main # Or with authentication (generate a token first) CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_TOKEN="your-token" python -m mcp_clickhouse.main # Then in another terminal: curl http://localhost:8000/health
ตัวแปรสภาพแวดล้อม
การกำหนดค่าถูกแบ่งออกเป็นกลุ่มที่เป็นอิสระต่อกัน การผสมกันเป็นสาเหตุทั่วไปของความล้มเหลวในการเชื่อมต่อที่แก้จุดบกพร่องได้ยาก:
| กลุ่ม | ตัวแปร | ควบคุม |
|---|---|---|
| การเชื่อมต่อฐานข้อมูล ClickHouse | CLICKHOUSE_HOST, CLICKHOUSE_PORT, CLICKHOUSE_SECURE, CLICKHOUSE_VERIFY, … | วิธีที่เซิร์ฟเวอร์ MCP นี้เชื่อมต่อกับคลัสเตอร์ ClickHouse ของคุณผ่านอินเทอร์เฟซ HTTP |
| เซิร์ฟเวอร์ MCP / การขนส่ง | CLICKHOUSE_MCP_*, FASTMCP_SERVER_AUTH, FASTMCP_SERVER_AUTH_* | การขนส่ง MCP, การตรวจสอบสิทธิ์ และขีดจำกัดการเรียกใช้เครื่องมือสืบค้น |
| มิดเดิลแวร์ / chDB | MCP_MIDDLEWARE_MODULE, CHDB_* | ส่วนขยายที่เป็นทางเลือก |
[!IMPORTANT] ตัวแปรเช่น
CLICKHOUSE_SECURE,CLICKHOUSE_VERIFYและCLICKHOUSE_PORTใช้กับการเชื่อมต่อฐานข้อมูล ClickHouse เท่านั้น ตัวแปรเหล่านี้ไม่ได้กำหนดค่า TLS, พอร์ต หรือการตรวจสอบสิทธิ์สำหรับปลายทางโปรโตคอล MCPตัวอย่าง: หากเซิร์ฟเวอร์ MCP ทำงานใน Kubernetes หลัง ingress ที่สิ้นสุด TLS นั่นเป็นข้อกังวลของการขนส่ง MCP ให้รักษา
CLICKHOUSE_SECUREให้สอดคล้องกับวิธีที่พ็อดเข้าถึง ClickHouse เอง (HTTPS →true, plain HTTP →false) การตั้งค่าCLICKHOUSE_SECURE=falseเนื่องจากเซิร์ฟเวอร์ MCP อยู่หลัง ingress จะทำให้เซิร์ฟเวอร์ต่อสายไปยัง ClickHouse ผ่าน HTTP—ซึ่งมักจะต่อกับพอร์ต HTTPS เท่านั้น—และทำให้เกิดข้อผิดพลาด HTTP/TLS ที่ไม่ชัดเจนในบันทึกของเซิร์ฟเวอร์
การเชื่อมต่อฐานข้อมูล ClickHouse
ตัวแปรเหล่านี้กำหนดค่าไคลเอนต์ HTTP clickhouse-connect และพฤติกรรมของเครื่องมือที่ใช้ ClickHouse เป็นแบ็กเอนด์ เช่น run_query, list_databases และ list_tables
ตัวแปรที่จำเป็น
CLICKHOUSE_HOST: ชื่อโฮสต์ของเซิร์ฟเวอร์ ClickHouse ของคุณ (ปลายทางฐานข้อมูล ไม่ใช่ที่อยู่การเชื่อมต่อของเซิร์ฟเวอร์ MCP)CLICKHOUSE_USER: ชื่อผู้ใช้สำหรับการตรวจสอบสิทธิ์ ClickHouseCLICKHOUSE_PASSWORD: รหัสผ่านสำหรับการตรวจสอบสิทธิ์ ClickHouse
[!CAUTION] สิ่งสำคัญคือต้องปฏิบัติต่อผู้ใช้ฐานข้อมูล MCP ของคุณเช่นเดียวกับไคลเอนต์ภายนอกใดๆ ที่เชื่อมต่อกับฐานข้อมูลของคุณ โดยให้สิทธิ์ขั้นต่ำที่จำเป็นสำหรับการดำเนินงานเท่านั้น ควรหลีกเลี่ยงการใช้ผู้ใช้เริ่มต้นหรือผู้ดูแลระบบอย่างเคร่งครัดตลอดเวลา
ตัวแปรเสริม
CLICKHOUSE_PORT: พอร์ตอินเทอร์เฟซ HTTP ของเซิร์ฟเวอร์ ClickHouse ของคุณ- ค่าเริ่มต้น:
8443หากCLICKHOUSE_SECURE=true,8123หากCLICKHOUSE_SECURE=false - โดยปกติไม่จำเป็นต้องตั้งค่า เว้นแต่จะใช้พอร์ตที่ไม่ได้มาตรฐาน
- ต้องเป็นพอร์ตอินเทอร์เฟซ HTTP ไม่ใช่พอร์ตโปรโตคอล TCP ดั้งเดิมที่ใช้โดย
clickhouse-client - ค่าทั่วไป:
- HTTP:
8123(ธรรมดา) /8443(TLS) — ใช้โดยเซิร์ฟเวอร์นี้และ ClickHouse Cloud HTTPS - Native TCP (ไม่รองรับที่นี่):
9000(ธรรมดา) /9440(TLS) — ใช้โดยclickhouse-client
- HTTP:
- หากเซิร์ฟเวอร์ตอบสนองด้วย
Port 9000 is for clickhouse-client programแสดงว่าคุณกำลังชี้ไปที่โปรโตคอลดั้งเดิม ให้เปลี่ยนไปใช้พอร์ต HTTP (8123/8443หรือการแมป HTTP ของการปรับใช้ของคุณ)
- ค่าเริ่มต้น:
CLICKHOUSE_ROLE: บทบาท ClickHouse ที่จะใช้สำหรับการตรวจสอบสิทธิ์- ค่าเริ่มต้น: ไม่มี
- ตั้งค่านี้หากผู้ใช้ของคุณต้องการบทบาทเฉพาะ
CLICKHOUSE_SECURE: เปิดใช้งาน HTTPS สำหรับการเชื่อมต่อฐานข้อมูล ClickHouse (ไม่ใช่สำหรับไคลเอนต์ MCP)- ค่าเริ่มต้น:
"true" - ตั้งค่าเป็น
"false"เฉพาะเมื่อเซิร์ฟเวอร์ MCP เข้าถึง ClickHouse ผ่าน HTTP ธรรมดา (โดยทั่วไปสำหรับ Docker Compose ในเครื่องบนพอร์ต8123) - ปล่อยให้เป็น
"true"สำหรับ ClickHouse Cloud และปลายทางฐานข้อมูล HTTPS ใดๆ แม้ว่าเซิร์ฟเวอร์ MCP เองจะถูกเปิดเผยผ่าน HTTP, stdio หรือ ingress ที่สิ้นสุด TLS แยกต่างหาก - การตั้งค่าสถานะนี้ไม่ตรงกับพอร์ตฐานข้อมูล (เช่น
CLICKHOUSE_SECURE=falseกับพอร์ต8443) เป็นข้อผิดพลาดในการตั้งค่าที่พบบ่อย และมักจะแสดงเป็นข้อผิดพลาดของไคลเอนต์ HTTP ที่สับสน แทนที่จะเป็นข้อความ "รูปแบบผิด" ที่ชัดเจน
- ค่าเริ่มต้น:
CLICKHOUSE_VERIFY: เปิด/ปิดใช้งานการตรวจสอบใบรับรอง SSL สำหรับการเชื่อมต่อ HTTPS ของ ClickHouse- ค่าเริ่มต้น:
"true" - ตั้งค่าเป็น
"false"เพื่อปิดใช้งานการตรวจสอบใบรับรอง (ไม่แนะนำสำหรับการใช้งานจริง) - ใบรับรอง TLS: แพ็คเกจใช้ที่เก็บความน่าเชื่อถือของระบบปฏิบัติการของคุณสำหรับการตรวจสอบใบรับรอง TLS ผ่าน
truststoreเราเรียกtruststore.inject_into_ssl()เมื่อเริ่มต้นเพื่อให้แน่ใจว่ามีการจัดการใบรับรองที่เหมาะสม พฤติกรรม SSL เริ่มต้นของ Python ถูกใช้เป็นทางเลือกสำรองเฉพาะเมื่อเกิดข้อผิดพลาดที่ไม่คาดคิด
- ค่าเริ่มต้น:
CLICKHOUSE_SERVER_HOST_NAME: ชื่อโฮสต์เซิร์ฟเวอร์สำหรับการแทนที่ SNI และการตรวจสอบใบรับรองในการเชื่อมต่อ ClickHouse- ค่าเริ่มต้น: ไม่มี (ใช้ชื่อโฮสต์การเชื่อมต่อ)
- สิ่งนี้มีประโยชน์เมื่อเชื่อมต่อผ่านพร็อกซีหรือตัวจัดสรรภาระงานที่ชื่อโฮสต์ของใบรับรองแตกต่างจากชื่อโฮสต์การเชื่อมต่อ เมื่อตั้งค่าแล้ว ชื่อโฮสต์นี้จะถูกใช้สำหรับทั้ง SNI (การระบุชื่อเซิร์ฟเวอร์) ระหว่างการจับมือ TLS และสำหรับการตรวจสอบชื่อโฮสต์ของใบรับรอง
CLICKHOUSE_PROXY_PATH: คำนำหน้าเส้นทาง URL สำหรับปลายทาง HTTP ของ ClickHouse- ค่าเริ่มต้น: ไม่มี
- ตั้งค่านี้เมื่ออินเทอร์เฟซ HTTP ของ ClickHouse ถูกเปิดเผยหลังพร็อกซีย้อนกลับภายใต้คำนำหน้าเส้นทาง (ตัวอย่างเช่น
/clickhouse)
CLICKHOUSE_CONNECT_TIMEOUT: ระยะหมดเวลาการเชื่อมต่อเป็นวินาทีสำหรับไคลเอนต์ ClickHouse- ค่าเริ่มต้น:
"30" - เพิ่มค่านี้หากคุณพบปัญหาการหมดเวลาการเชื่อมต่อ
- ค่าเริ่มต้น:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT: ระยะหมดเวลาการส่ง/รับเป็นวินาทีสำหรับไคลเอนต์ ClickHouse- ค่าเริ่มต้น:
"300" - เพิ่มค่านี้สำหรับคิวรีที่ทำงานเป็นเวลานาน
- ค่าเริ่มต้น:
CLICKHOUSE_DATABASE: ฐานข้อมูล ClickHouse เริ่มต้นที่จะใช้- ค่าเริ่มต้น: ไม่มี (ใช้ค่าเริ่มต้นของเซิร์ฟเวอร์)
- ตั้งค่านี้เพื่อเชื่อมต่อกับฐานข้อมูลเฉพาะโดยอัตโนมัติ
CLICKHOUSE_ENABLED: เปิด/ปิดใช้งานเครื่องมือฐานข้อมูล ClickHouse- ค่าเริ่มต้น:
"true" - ตั้งค่าเป็น
"false"เพื่อปิดใช้งานเครื่องมือ ClickHouse เมื่อใช้ chDB เท่านั้น
- ค่าเริ่มต้น:
CLICKHOUSE_ALLOW_WRITE_ACCESS: อนุญาตการดำเนินการเขียน (DDL และ DML) กับ ClickHouse- ค่าเริ่มต้น:
"false" - ตั้งค่าเป็น
"true"เพื่ออนุญาตการดำเนินการ DDL (CREATE, ALTER, DROP) และ DML (INSERT, UPDATE, DELETE) - เมื่อปิดใช้งาน (ค่าเริ่มต้น) คิวรีจะทำงานด้วยการตั้งค่า
readonly=1เพื่อป้องกันการแก้ไขข้อมูล
- ค่าเริ่มต้น:
CLICKHOUSE_ALLOW_DROP: อนุญาตการดำเนินการทำลายล้าง (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE)- ค่าเริ่มต้น:
"false" - มีผลเฉพาะเมื่อตั้งค่า
CLICKHOUSE_ALLOW_WRITE_ACCESS=trueด้วย - ตั้งค่าเป็น
"true"เพื่ออนุญาตการดำเนินการ DROP และ TRUNCATE ที่ทำลายล้างอย่างชัดเจน - นี่คือคุณลักษณะด้านความปลอดภัยเพื่อป้องกันการลบข้อมูลโดยไม่ตั้งใจระหว่างการสำรวจของ AI
- ค่าเริ่มต้น:
เซิร์ฟเวอร์ MCP และการขนส่ง
ตัวแปรเหล่านี้ควบคุมกระบวนการ MCP เอง รวมถึงการขนส่ง การตรวจสอบสิทธิ์ และขีดจำกัดการดำเนินการของเครื่องมือคิวรี ซึ่งเป็นอิสระจากการตั้งค่าฐานข้อมูล ClickHouse ข้างต้น ดูเพิ่มเติมที่ การตรวจสอบสิทธิ์สำหรับการขนส่ง HTTP/SSE
CLICKHOUSE_MCP_SERVER_TRANSPORT: ตั้งค่าวิธีการขนส่งสำหรับเซิร์ฟเวอร์ MCP- ค่าเริ่มต้น:
"stdio" - ตัวเลือกที่ถูกต้อง:
"stdio","http","sse"สิ่งนี้มีประโยชน์สำหรับการพัฒนาในเครื่องด้วยเครื่องมือเช่น MCP Inspector stdioเป็นเรื่องปกติสำหรับ Claude Desktop;http/sseเปิดเผยตัวรับฟังเครือข่าย (โฮสต์/พอร์ตการเชื่อมต่อด้านล่าง)
- ค่าเริ่มต้น:
CLICKHOUSE_MCP_BIND_HOST: โฮสต์ที่จะเชื่อมต่อเซิร์ฟเวอร์ MCP เมื่อใช้การขนส่ง HTTP หรือ SSE- ค่าเริ่มต้น:
"127.0.0.1" - ตั้งค่าเป็น
"0.0.0.0"เพื่อเชื่อมต่อกับอินเทอร์เฟซเครือข่ายทั้งหมด (มีประโยชน์สำหรับ Docker หรือการเข้าถึงระยะไกล) - ใช้เฉพาะเมื่อการขนส่งเป็น
"http"หรือ"sse"— ไม่เกี่ยวข้องกับCLICKHOUSE_HOST
- ค่าเริ่มต้น:
CLICKHOUSE_MCP_BIND_PORT: พอร์ตที่จะเชื่อมต่อเซิร์ฟเวอร์ MCP เมื่อใช้การขนส่ง HTTP หรือ SSE- ค่าเริ่มต้น:
"8000" - ใช้เฉพาะเมื่อการขนส่งเป็น
"http"หรือ"sse"— ไม่เกี่ยวข้องกับCLICKHOUSE_PORT
- ค่าเริ่มต้น:
CLICKHOUSE_MCP_QUERY_TIMEOUT: ระยะหมดเวลาเป็นวินาทีสำหรับเครื่องมือคิวรี- ค่าเริ่มต้น:
"30" - เพิ่มค่านี้หากคุณเห็นข้อผิดพลาด
Query timed out after ...สำหรับคิวรีหนัก
- ค่าเริ่มต้น:
CLICKHOUSE_MCP_AUTH_TOKEN: โทเค็น bearer แบบคงที่สำหรับการขนส่ง HTTP/SSE- ค่าเริ่มต้น: ไม่มี
- จำเป็นต้องมีหนึ่งใน
CLICKHOUSE_MCP_AUTH_TOKEN,FASTMCP_SERVER_AUTHหรือCLICKHOUSE_MCP_AUTH_DISABLED=trueสำหรับการขนส่ง HTTP/SSE - สร้างโดยใช้
uuidgenหรือopenssl rand -hex 32 - ไคลเอนต์ต้องส่งโทเค็นนี้ในส่วนหัว
Authorization: Bearer <token>
FASTMCP_SERVER_AUTH: มอบหมายการตรวจสอบสิทธิ์ให้กับ ผู้ให้บริการตรวจสอบสิทธิ์ FastMCP- ค่าเริ่มต้น: ไม่มี
- ค่าคือ เส้นทางคลาสแบบเต็ม ของคลาสย่อย AuthProvider เช่น
fastmcp.server.auth.providers.azure.AzureProviderหรือfastmcp.server.auth.providers.google.GoogleProvider - เมื่อตั้งค่าแล้ว FastMCP จะโหลดผู้ให้บริการโดยอัตโนมัติจากตัวแปรสภาพแวดล้อม
FASTMCP_SERVER_AUTH_*ของตัวเอง ปล่อยให้CLICKHOUSE_MCP_AUTH_TOKENไม่ได้ตั้งค่าในโหมดนี้
CLICKHOUSE_MCP_AUTH_DISABLED: ปิดใช้งานการตรวจสอบสิทธิ์สำหรับการขนส่ง HTTP/SSE- ค่าเริ่มต้น:
"false"(เปิดใช้งานการตรวจสอบสิทธิ์) - ตั้งค่าเป็น
"true"เพื่อปิดใช้งานการตรวจสอบสิทธิ์สำหรับการพัฒนา/ทดสอบในเครื่องเท่านั้น - คำเตือน: ใช้สำหรับการพัฒนาในเครื่องเท่านั้น อย่าปิดใช้งานเมื่อเปิดเผยต่อเครือข่าย
- ค่าเริ่มต้น:
ตัวแปรมิดเดิลแวร์
MCP_MIDDLEWARE_MODULE: ชื่อโมดูล Python ที่มีมิดเดิลแวร์แบบกำหนดเองเพื่อแทรกลงในเซิร์ฟเวอร์ MCP- ค่าเริ่มต้น: ไม่มี (ไม่มีการโหลดมิดเดิลแวร์)
- ตั้งค่าเป็นชื่อโมดูล (ไม่มีนามสกุล
.py) ของโมดูลมิดเดิลแวร์ของคุณ - โมดูลต้องมีฟังก์ชัน
setup_middleware(mcp) - ดู มิดเดิลแวร์แบบกำหนดเอง สำหรับรายละเอียดและตัวอย่าง
ตัวแปร chDB
CHDB_ENABLED: เปิด/ปิดใช้งานฟังก์ชันการทำงานของ chDB- ค่าเริ่มต้น:
"false" - ตั้งค่าเป็น
"true"เพื่อเปิดใช้งานเครื่องมือ chDB - ต้องติดตั้งส่วนเสริมเพิ่มเติม:
mcp-clickhouse[chdb]
- ค่าเริ่มต้น:
CHDB_DATA_PATH: เส้นทางไปยังไดเรกทอรีข้อมูล chDB- ค่าเริ่มต้น:
":memory:"(ฐานข้อมูลในหน่วยความจำ) - ใช้
:memory:สำหรับฐานข้อมูลในหน่วยความจำ - ใช้เส้นทางไฟล์สำหรับการจัดเก็บข้อมูลถาวร (เช่น
/path/to/chdb/data)
- ค่าเริ่มต้น:
ข้อผิดพลาดในการกำหนดค่าทั่วไป
CLICKHOUSE_SECUREกับ MCP / ingress TLS — การปิดCLICKHOUSE_SECUREเนื่องจากเซิร์ฟเวอร์ MCP อยู่หลัง Kubernetes ingress, พร็อกซีย้อนกลับ หรือเข้าถึงผ่าน HTTP ธรรมดา ไม่ได้ปิดใช้งาน TLS ของฐานข้อมูล แต่จะเปลี่ยนเฉพาะวิธีที่กระบวนการนี้เชื่อมต่อกับ ClickHouse กำหนดค่า ingress TLS แยกต่างหากจากการตั้งค่าไคลเอนต์ฐานข้อมูล- พอร์ตโปรโตคอลดั้งเดิม —
CLICKHOUSE_PORTต้องกำหนดเป้าหมายไปที่อินเทอร์เฟซ HTTP ของ ClickHouse (8123/8443ตามค่าเริ่มต้น) พอร์ต9000/9440มีไว้สำหรับโปรโตคอล TCP ดั้งเดิม (clickhouse-client) และจะไม่ทำงานกับเซิร์ฟเวอร์นี้ - ความสับสนของโฮสต์ —
CLICKHOUSE_HOSTคือชื่อโฮสต์ฐานข้อมูลCLICKHOUSE_MCP_BIND_HOSTเป็นเพียงที่อยู่ที่เซิร์ฟเวอร์ MCP HTTP/SSE รับฟัง
ตัวอย่างการกำหนดค่า
สำหรับการพัฒนาในเครื่องด้วย Docker:
# Required variables
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
# Optional: Override defaults for local development
CLICKHOUSE_SECURE=false # Uses port 8123 automatically
CLICKHOUSE_VERIFY=false
สำหรับ ClickHouse Cloud:
# Required variables
CLICKHOUSE_HOST=your-instance.clickhouse.cloud
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=your-password
# Optional: These use secure defaults
# CLICKHOUSE_SECURE=true # Uses port 8443 automatically
# CLICKHOUSE_DATABASE=your_database
สำหรับ ClickHouse SQL Playground:
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
# Uses secure defaults (HTTPS on port 8443)
สำหรับ chDB เท่านั้น (ในหน่วยความจำ):
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
# CHDB_DATA_PATH defaults to :memory:
สำหรับ chDB พร้อมการจัดเก็บข้อมูลถาวร:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
CHDB_DATA_PATH=/path/to/chdb/data
สำหรับ MCP Inspector หรือการเข้าถึงระยะไกลด้วยการขนส่ง HTTP:
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_BIND_HOST=0.0.0.0 # Bind to all interfaces
CLICKHOUSE_MCP_BIND_PORT=4200 # Custom port (default: 8000)
CLICKHOUSE_MCP_AUTH_TOKEN=your-generated-token # One auth mode required for HTTP/SSE (or FASTMCP_SERVER_AUTH, or CLICKHOUSE_MCP_AUTH_DISABLED=true)
สำหรับการพัฒนาในเครื่องด้วยการขนส่ง HTTP (ปิดใช้งานการตรวจสอบสิทธิ์):
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_AUTH_DISABLED=true # Only for local development!
เมื่อใช้การขนส่ง HTTP เซิร์ฟเวอร์จะทำงานบนพอร์ตที่กำหนดค่าไว้ (ค่าเริ่มต้น 8000) ตัวอย่างเช่น ด้วยการกำหนดค่าข้างต้น:
- ปลายทาง MCP:
http://localhost:4200/mcp - การตรวจสอบความสมบูรณ์:
http://localhost:4200/health
คุณสามารถตั้งค่าตัวแปรเหล่านี้ในสภาพแวดล้อมของคุณ ในไฟล์ .env หรือในการกำหนดค่า Claude Desktop:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_DATABASE": "<optional-database>",
"CLICKHOUSE_MCP_SERVER_TRANSPORT": "stdio",
"CLICKHOUSE_MCP_BIND_HOST": "127.0.0.1",
"CLICKHOUSE_MCP_BIND_PORT": "8000"
}
}
}
}
หมายเหตุ: การตั้งค่าโฮสต์และพอร์ตการเชื่อมต่อจะใช้เฉพาะเมื่อตั้งค่าการขนส่งเป็น "http" หรือ "sse"
การรันการทดสอบ
uv sync --all-extras --dev # install dev dependencies
uv run ruff check . # run linting
docker compose up -d test_services # start ClickHouse
uv run pytest -v tests
uv run pytest -v tests/test_tool.py # ClickHouse only
CHDB_ENABLED=true uv run --extra chdb pytest -v tests/test_chdb_tool.py # chDB only
