ลองใช้ Microsoft SQL Server mcp server กับ Claude Desktop กัน

สำหรับ Blog นี้ จดบันทึกการใช้ Claude Desktop + Microsoft SQL Server mcp server และลองมาคิด Use Case ดูครับ ว่ามันจะเอาไปทำอะไรได้บ้างครับ

MCP คือ อะไร ?

MCP (Model Context Protocol) ภาษากลางที่ทำให้ LLM สามารถเชื่อมต่อกับสิ่งรอบตัวได้ เช่น API / HW เพื่อ Action (Output) และหาข้อมูลจาก Database / API / File ได้ แบบที่ไม่ต้องมโนแล้ว ที่นี้ MCP มีคนทำหลายค่ายเหมือนกันครับ ไปหาตามตลาดครับ เช่น smithery.ai / github.com/modelcontextprotocol / mcp.so /  mcpservers.org

MCP Microsoft SQL Server

ตัว MCP มันเป็นภาษากลาง พอมีภาษากลาง มันจูงใจคนให้เข้ามาพัฒนามากขึ้นทั้งจาก Official และ Community ตอนเลือกใช้ ต้องเลือกดีๆครับ อย่างของตัว MSSQL Server มีคนทำหลายคนเหมือนกัน

  • https://github.com/Azure-Samples/SQL-AI-samples/blob/main/MssqlMcp/ มีของ
    🕹️ node แต่มันจะไปหา EntraId ต้องโมนิดนึงใช้กับ Local ได้
    🕹️ dotnet เท่าที่ดู Code ต่อได้นะ แต่มัน Error กำลังไล่ Repo อยู่
ลองของ dotnet แล้วมันบึ้ม (debug ต่อไป)

สำหรับ Blog นีจะลองตัว mssql-mcp-server ของคุณ JexinSam ครับ ต่อไปเป็นการจดๆ วิธีใช้งานครับ ตามมาได้เลย

เตรียมตัว

  • ติดตั้ง Claude Desktop
  • ติดตั้ง Python (ของผมใช้ pyenv จัดการ Version สะดวก พอเป็น Windows ลงจากนี้เลย https://github.com/pyenv-win)
  • ติดตั้ง uv (ตัว uv เป็น package manager แบบ pip / nuget / npm / maven)
  • ติดตั้ง Microsoft ODBC Driver 18 for SQL Server ใช้มี Ver 17 ใชได้นะครับ แต่เก่ากว่านี้อย่าง SQL Server Native Client 11.0 อย่าหาลองนะครับ มันปรับพวก tls แล้ว เดี๋ยว Connection จะหลุด แบบงงๆกันครับ

หลังจากลง Runtime ที่จำเป็นกันแล้ว มาลงตัว https://github.com/JexinSam/mssql_mcp_server ด้วยคำสั่ง

pip install mssql-mcp-server

หลังจากลงเสร็จ เราต้องมาหาด้วยครับ ว่าตัวที่ลงอยู่ที่ path ไหนครับ เพราะต้องเอา path นั้นไปใช้ตอน setup mcp ใน Claude Desktop ด้วยคำสั่ง

pip show mssql-mcp-server

กำหนด User ใหม่ใน MSSQL Server

เพื่อไม่ให้มันทำ DB เราพัง เราอาจจะเปิดให้มัน read / write / update ได้ อย่างเดียว อย่าให้สิทธิ์ DELETE หรือ DROP เพื่อความปลอดภัย หรือ ถ้าแค่ View เอา SELECT อย่างเดียวพอ อย่างของผมจะเป็น POSDB (ใช้ AI Gen DB มาเทส อีกที)

-- สร้างผู้ใช้ใหม่
CREATE LOGIN mpcread WITH PASSWORD = 'StrongPassword123!';

CREATE LOGIN mpcread WITH PASSWORD = 'mpcread ';
CREATE USER mpcread FOR LOGIN mpcread ;

-- กำหนดสิทธิ์ขั้นต่ำที่จำเป็น อย่าให้สิทธิ์ DELETE หรือ DROP เพื่อความปลอดภัย หรือ ถ้าแค่ View เอา SELECT อย่างเดียวพอ อย่างของผมจะเป็น POS 
GRANT SELECT ON SCHEMA::POS TO mpcread;
GRANT INSERT ON SCHEMA::POS TO mpcread;
GRANT UPDATE ON SCHEMA::POS TO mpcread;  

แต่ข้อมูลเราส่งไปเป็น public นะ Claude เป็น Model ปิดนะ

เชื่อมกับ Claude Desktop

เปิดเมนู File >> Setting มาที่เมนู Develop กด Edit Config ไปหาไฟล์ claude_desktop_config.json

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows%APPDATA%\Claude\claude_desktop_config.json

เปิดไฟล์ claude_desktop_config.json จากนั้นแก้ไขข้อมูล ตามนี้

{
  "mcpServers": {
    "mssql": {
      "command": "uv",
      "args": [
        "--directory",
        "PATH_FROM_COMMAND pip show mssql-mcp-server + \\mssql_mcp_server ",
        "run",
        "mssql_mcp_server"
      ],
      "env": {
        "MSSQL_DRIVER": "YOUR_ODBC_DRIVER_NAME",
        "MSSQL_HOST": "YOUR_SERVER_NAME_OR_IP,YOUR_PORT_IF_CUSTOM",
        "MSSQL_DATABASE": "YOUR_DB_NAME",
        "MSSQL_USER": "YOUR_DB_USER",
        "MSSQL_PASSWORD": "YOUR_DB_PASS"
      }
    }
  }
}

Sample Config

{
  "mcpServers": {
    "mssql": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\Users\\chatri.ngam\\.pyenv\\pyenv-win\\versions\\3.13.5\\Lib\\site-packages\\mssql_mcp_server",
        "run",
        "mssql_mcp_server"
      ],
      "env": {
        "MSSQL_DRIVER": "ODBC Driver 17 for SQL Server",
        "MSSQL_HOST": "192.168.1.4,14330",
        "MSSQL_DATABASE": "POS_DB",
        "MSSQL_USER": "mcpread",
        "MSSQL_PASSWORD": "StrongPassword123!"
      }
    }
  }
}

ปิด Claude Desktop (ปิดแบบไม่มี Process ค้างเลยนะ) เมื่อเปิดขึ้นมาใหม่จะได้ ดังรูป

ลอง Prompt สักนิด

List Schema for table company

เวลามันทำอะไร จะขอ Permission เราครับ

ผลลัพธ์ที่ได้ครับ เอาข้อมูลออกมาตรงกับ Database จริงอยู่ครับ

จากนั้นก็เอาผลลัพธ์ที่ได้ลองให้มันจัด Format แบบเอกสาร Data Dictionary ครับ

ลองอีกโจทย์ดีกว่าพอดีมี DB อีกก้อนที่ลองทำ Scrapping Feature ของหลักทรัพย์ไว้ เลยลองถามไปว่า

ฉันต้องการ Bond ที่มีอายุมากที่สุดใน Database

step มันตามรูปเลยครับ ตัว AI มันจะดึง schema และ try & error จนว่าจะ join ได้ ถ้ามี comment หรือ Fk / Pk หรือ เราจะ Prompt บอกข้อมูลเบื้องต้น จะช่วย Guide AI ได้ครับ

ตัว MCP ถ้าเรากางกรอบมันออกมาดูจะเป็น Request (Query) / Response (ผลลัพธ์ที่ได้จาก SQL)

จบแล้วครับ จริงๆ ถ้าต่อกับ MCP Server อื่นๆ เราสามารถให้มัน Generate เป็นเอกสาร Data Dictionary ตัวเต็มได้ครับ เดี๋ยว Blog หน้ามาลองต่อกันว่า แบบเชื่อม mcp หลายตัว หรือ ใช้แบบ Open Source ด้วยครับ

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.