- 1. MCP คืออะไร
- 2. สิ่งที่ต้องเตรียม
- 3. สร้าง Project
- 4. สร้าง FastMCP Server
- 5. ทดลองรัน Server
- 6. ตั้งค่า MCP สำหรับ VS Code / GitHub Copilot
- 7. Start MCP Server ใน VS Code
- 8. เรียก Tool ผ่าน GitHub Copilot
- 9. เพิ่ม Tool สำหรับข้อมูล Software Engineering
- 10. การทำงานภายใน
- 11. โครงสร้าง Project ที่แนะนำ
- 12. Troubleshooting
- 13. Security
- 14. สรุป
- แหล่งอ้างอิง
อัปเดตแนวทางสำหรับ FastMCP 4 และการตั้งค่า MCP แบบ portable ของ VS Code / GitHub Copilot
#1. MCP คืออะไร
Model Context Protocol (MCP) เป็นมาตรฐานที่ทำให้ AI Agent เชื่อมต่อกับเครื่องมือ (Tools), แหล่งข้อมูล (Resources) และ Prompt ที่ระบบภายนอกจัดเตรียมไว้ได้อย่างเป็นรูปแบบเดียวกัน
ใน Workshop นี้ เราจะสร้าง MCP Server ด้วย FastMCP + Python แล้วให้ GitHub Copilot Agent ใน VS Code เรียกใช้ Tool จาก Server ดังกล่าว
โครงสร้างการทำงาน:
Developer
|
v
VS Code + GitHub Copilot Agent
|
| MCP
v
FastMCP Server
|
+-- add()
+-- calculate_bmi()
+-- get_course_info()
#2. สิ่งที่ต้องเตรียม
- Python 3
- VS Code รุ่นปัจจุบัน
- GitHub Copilot ที่ใช้งาน Copilot Chat / Agent ได้
- Workspace ที่เชื่อถือได้ (Workspace Trust)
- FastMCP
ตรวจสอบ Python:
python --version
หรือบนบางระบบ:
python3 --version
#3. สร้าง Project
mkdir fastmcp-copilot-demo
cd fastmcp-copilot-demo
python -m venv .venv
เปิดใช้งาน Virtual Environment
#Windows PowerShell
.venv\Scripts\Activate.ps1
#macOS / Linux
source .venv/bin/activate
ติดตั้ง FastMCP:
pip install -U fastmcp
#4. สร้าง FastMCP Server
สร้างไฟล์ server.py
from fastmcp import FastMCP
mcp = FastMCP("SE Workshop MCP")
@mcp.tool
def add(a: float, b: float) -> float:
"""Add two numbers."""
return a + b
@mcp.tool
def calculate_bmi(weight_kg: float, height_m: float) -> dict:
"""Calculate BMI from weight in kilograms and height in meters."""
if height_m <= 0:
raise ValueError("height_m must be greater than zero")
bmi = weight_kg / (height_m ** 2)
if bmi < 18.5:
category = "Underweight"
elif bmi < 25:
category = "Normal"
elif bmi < 30:
category = "Overweight"
else:
category = "Obesity"
return {
"bmi": round(bmi, 2),
"category": category,
}
@mcp.tool
def get_course_info(course_code: str) -> dict:
"""Return sample course information by course code."""
courses = {
"SE101": {
"name": "Introduction to Software Engineering",
"credits": 3,
},
"SE201": {
"name": "Software Testing",
"credits": 3,
},
"SE301": {
"name": "DevOps Engineering",
"credits": 3,
},
}
return courses.get(
course_code.upper(),
{"error": "Course not found"},
)
if __name__ == "__main__":
mcp.run()
@mcp.tool ทำให้ Python function ถูกประกาศเป็น MCP Tool โดย FastMCP จะสร้าง metadata และ input schema ที่ MCP client ใช้ค้นหาและเรียก Tool
#5. ทดลองรัน Server
python server.py
เมื่อใช้ mcp.run() โดยทั่วไป Server แบบ local จะทำงานผ่าน stdio ซึ่งเหมาะกับการให้ VS Code เป็นผู้เริ่ม process และสื่อสารผ่าน MCP โดยตรง
อย่าใช้
print()เพื่อ log แบบสุ่มลง stdout ของ stdio server เพราะ stdout เป็นช่องทางของ protocol; หากต้อง debug ควรใช้ logging ที่เหมาะสมหรือ stderr
#6. ตั้งค่า MCP สำหรับ VS Code / GitHub Copilot
แนวทางปัจจุบันของ VS Code แนะนำ portable workspace configuration ที่ไฟล์:
.mcp.json
สร้างไฟล์ .mcp.json ที่ root ของ project:
{
"mcpServers": {
"fastmcp-workshop": {
"type": "stdio",
"command": "${workspaceFolder}/.venv/bin/python",
"args": [
"${workspaceFolder}/server.py"
]
}
}
}
#Windows
Path ของ Python ใน virtual environment ต่างออกไป จึงสามารถใช้:
{
"mcpServers": {
"fastmcp-workshop": {
"type": "stdio",
"command": "${workspaceFolder}\\.venv\\Scripts\\python.exe",
"args": [
"${workspaceFolder}\\server.py"
]
}
}
}
อีกทางหนึ่ง VS Code ยังรองรับ .vscode/mcp.json ซึ่งใช้ top-level key ชื่อ servers:
{
"servers": {
"fastmcp-workshop": {
"type": "stdio",
"command": "${workspaceFolder}/.venv/bin/python",
"args": [
"${workspaceFolder}/server.py"
]
}
}
}
สำหรับ project ใหม่ ควรพิจารณา .mcp.json เพราะเป็น portable format และใช้ร่วมกับ Copilot tooling ได้กว้างกว่า
#7. Start MCP Server ใน VS Code
เปิด Command Palette:
Ctrl + Shift + P
ค้นหา:
MCP: List Servers
เลือก:
fastmcp-workshop
จากนั้น Start server
หากแก้ไขรายการ Tool แล้ว VS Code ยังแสดง Tool เก่า ให้ใช้:
MCP: Reset Cached Tools
และ Restart server
#8. เรียก Tool ผ่าน GitHub Copilot
เปิด GitHub Copilot Chat และเลือก Agent mode
ตรวจสอบ Tool picker ว่าเห็น Tools เช่น:
add
calculate_bmi
get_course_info
จากนั้นทดลอง Prompt:
ใช้ MCP tool คำนวณ 125 + 875
Copilot สามารถเลือก add และส่ง argument:
{
"a": 125,
"b": 875
}
ผลลัพธ์:
1000
ทดลอง BMI:
ใช้ MCP tool คำนวณ BMI สำหรับน้ำหนัก 70 kg และส่วนสูง 1.75 m
หรือ:
เรียก get_course_info เพื่อดูข้อมูลวิชา SE201
Agent จะพิจารณา Tool schema และเลือก Tool ที่สัมพันธ์กับคำสั่ง ผู้ใช้อาจต้องอนุมัติการเรียก Tool ตามการตั้งค่าความปลอดภัย
#9. เพิ่ม Tool สำหรับข้อมูล Software Engineering
@mcp.tool
def recommend_test_type(requirement: str) -> dict:
"""Recommend a software testing type from a requirement."""
text = requirement.lower()
if "performance" in text or "load" in text:
test_type = "Performance Testing"
elif "api" in text:
test_type = "API Testing"
elif "security" in text:
test_type = "Security Testing"
elif "ui" in text or "browser" in text:
test_type = "UI / End-to-End Testing"
else:
test_type = "Functional Testing"
return {
"requirement": requirement,
"recommended_test": test_type,
}
Restart MCP Server แล้ว Prompt:
ใช้ MCP วิเคราะห์ว่า requirement
"ระบบต้องรองรับผู้ใช้พร้อมกัน 10,000 คน"
ควรทดสอบแบบใด
#10. การทำงานภายใน
sequenceDiagram
participant U as Developer
participant C as GitHub Copilot Agent
participant M as FastMCP Server
participant T as Python Tool
U->>C: ขอให้คำนวณ BMI
C->>M: tools/list
M-->>C: calculate_bmi schema
C->>M: tools/call
M->>T: calculate_bmi(70, 1.75)
T-->>M: BMI result
M-->>C: MCP result
C-->>U: สรุปผล
ประเด็นสำคัญคือ LLM ไม่จำเป็นต้องรู้ implementation ภายใน Tool แต่ใช้ชื่อ คำอธิบาย และ schema ของ Tool เพื่อวางแผนเรียกใช้งาน
#11. โครงสร้าง Project ที่แนะนำ
fastmcp-copilot-demo/
├── .mcp.json
├── .venv/
├── server.py
├── requirements.txt
└── README.md
สร้าง requirements.txt:
fastmcp
#12. Troubleshooting
#MCP Server ไม่ขึ้น
ตรวจสอบ interpreter:
.venv/bin/python --version
Windows:
.venv\Scripts\python.exe --version
และทดลองรัน:
python server.py
#Copilot ไม่เห็น Tool
ใช้ Command Palette:
MCP: List Servers
MCP: Reset Cached Tools
จากนั้น Restart server และเปิด Agent mode ใหม่
#Workspace ถูก block
Workspace MCP configuration ต้องอาศัย Workspace Trust หาก folder อยู่ใน Restricted Mode server อาจไม่เริ่มทำงาน
#JSON configuration ผิด format
จำความแตกต่าง:
.mcp.json -> mcpServers
.vscode/mcp.json -> servers
#Server start แล้วหยุดทันที
ให้ใช้ Python executable จาก virtual environment โดยตรง และตรวจสอบว่า fastmcp ถูกติดตั้งอยู่ใน environment เดียวกัน
#13. Security
MCP Server แบบ local สามารถรันโค้ดและเข้าถึงทรัพยากรบนเครื่องตามสิทธิ์ของ process ได้ ดังนั้น:
- ใช้ MCP Server จากแหล่งที่เชื่อถือได้
- ตรวจสอบ command และ args ก่อน Start
- ไม่ hardcode API key ลง repository
- จำกัดสิทธิ์ Tool เท่าที่จำเป็น
- แยก read-only Tool ออกจาก Tool ที่แก้ไขข้อมูล
- ตรวจสอบ argument ก่อนนำไปใช้กับ shell, SQL หรือ filesystem
- ใช้ environment variables / secret management สำหรับ credentials
#14. สรุป
FastMCP ช่วยลด boilerplate ในการสร้าง MCP Server ด้วย Python โดย developer สามารถเปลี่ยน function ให้เป็น AI-callable tool ผ่าน decorator ได้อย่างตรงไปตรงมา
Workflow หลักคือ:
Python Function
↓
@mcp.tool
↓
FastMCP Server
↓ MCP / stdio
VS Code
↓
GitHub Copilot Agent
↓
เลือกและเรียก Tool
↓
ผลลัพธ์กลับสู่ Agent
แนวทางนี้เหมาะสำหรับสร้าง Developer Tools, Database Tools, API Tools, Testing Tools, DevOps Automation, RAG retrieval tools และ internal enterprise tools ที่ต้องการให้ AI Agent เรียกใช้แบบมี schema และขอบเขตชัดเจน
#แหล่งอ้างอิง
- FastMCP Documentation: https://gofastmcp.com/
- FastMCP 4 GA announcement: https://blog.gofastmcp.com/3mufbh2vcv22o
- VS Code — Add and manage MCP servers: https://code.visualstudio.com/docs/agent-customization/mcp-servers
- VS Code — MCP configuration reference: https://code.visualstudio.com/docs/agents/reference/mcp-configuration
- GitHub Docs — Extending GitHub Copilot Chat with MCP servers: https://docs.github.com/en/copilot/how-tos/provide-context/use-mcp-in-your-ide/extend-copilot-chat-with-mcp