Mở Rộng Khả Năng Của AI: Hướng Dẫn Toàn Diện về Model Context Protocol (MCP) và Cách Kết Nối Với Claude

Trí tuệ nhân tạo (AI) và các mô hình ngôn ngữ lớn (LLM) như Claude đang ngày càng trở nên thông minh và có khả năng hơn. Tuy nhiên, chúng vẫn có những hạn chế cố hữu - chúng không thể truy cập thông tin thời gian thực hoặc tương tác với các hệ thống bên ngoài một cách tự nhiên. Đây là lúc Model Context Protocol (MCP) xuất hiện.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu MCP là gì, cách xây dựng một máy chủ MCP đơn giản để cung cấp công cụ cho AI, và quan trọng nhất là cách kết nối nó với Claude để mở khóa những khả năng mới.

Model Context Protocol (MCP) là gì?

Model Context Protocol (MCP) là một giao thức chuẩn hóa cho phép các máy chủ (servers) cung cấp các công cụ (tools), tài nguyên (resources) và gợi ý (prompts) cho các máy khách (clients). Trong trường hợp này, máy khách chính là các mô hình ngôn ngữ lớn như Claude.

Hãy tưởng tượng bạn có một "hộp công cụ" kỹ thuật số. MCP chính là giao thức giúp AI (như Claude) có thể "nhìn" vào hộp công cụ đó, hiểu được có những công cụ gì và sử dụng chúng khi cần thiết để hoàn thành yêu cầu của bạn. Ví dụ, một công cụ có thể giúp AI lấy dữ liệu thời tiết mới nhất, tra cứu thông tin từ một API cụ thể, hoặc tương tác với cơ sở dữ liệu nội bộ của bạn.

Về cơ bản, MCP đóng vai trò là cầu nối, cho phép các LLM vượt ra ngoài giới hạn kiến thức đã được huấn luyện của chúng và tương tác với thế giới bên ngoài một cách an toàn và có kiểm soát.

Hướng Dẫn Xây Dựng Máy Chủ MCP: Ví Dụ Về Thời Tiết

Để hiểu rõ hơn, chúng ta sẽ cùng xây dựng một máy chủ MCP đơn giản cung cấp công cụ lấy thông tin thời tiết.

Yêu Cầu Chuẩn Bị

  • Kiến thức cơ bản về Python.
  • Python 3.10 trở lên được cài đặt trên máy.
  • Cài đặt thư viện MCP.

Bước 1: Cài Đặt Môi Trường

Mở terminal của bạn và chạy lệnh sau để cài đặt MCP SDK cùng với các công cụ giao diện dòng lệnh (CLI):

Bash

pip install "mcp[cli]"

Bước 2: Viết Mã Cho Máy Chủ

Chúng ta sẽ tạo một file Python, ví dụ weather_server.py, và xây dựng một máy chủ cung cấp hai công cụ: get_forecast (lấy dự báo thời tiết) và get_alerts (lấy cảnh báo thời tiết).

Máy chủ sẽ sử dụng lớp FastMCP từ SDK, giúp đơn giản hóa việc tạo công cụ bằng cách tận dụng Python type hints và docstrings.

Python

# weather_server.py
import httpx
from fastapi import FastAPI
from mcp_sdk.fastmcp import FastMCP
from pydantic import BaseModel, Field

# --- Các lớp Pydantic để định nghĩa cấu trúc dữ liệu ---
class Point(BaseModel):
    lat: float = Field(..., description="Vĩ độ")
    lon: float = Field(..., description="Kinh độ")

class Forecast(BaseModel):
    name: str
    temperature: int
    temperatureUnit: str
    detailedForecast: str

class Alert(BaseModel):
    areaDesc: str
    headline: str
    description: str
    instruction: str

# --- Máy chủ MCP ---
app = FastAPI()
mcp_server = FastMCP()

# --- Các hàm trợ giúp để tương tác với API thời tiết ---
NATIONAL_WEATHER_SERVICE_API = "https://api.weather.gov"

def get_point_for_location(lat: float, lon: float) -> dict:
    """Lấy thông tin gridpoint từ API thời tiết cho một vị trí cụ thể."""
    with httpx.Client() as client:
        response = client.get(f"{NATIONAL_WEATHER_SERVICE_API}/points/{lat},{lon}")
        response.raise_for_status()
        return response.json()["properties"]

# --- Định nghĩa các công cụ cho AI ---
@mcp_server.tool()
def get_forecast(lat: float, lon: float) -> Forecast:
    """Lấy dự báo thời tiết hàng giờ cho một vị trí cụ thể."""
    point_properties = get_point_for_location(lat, lon)
    forecast_url = point_properties["forecastHourly"]
    with httpx.Client() as client:
        response = client.get(forecast_url)
        response.raise_for_status()
        period = response.json()["properties"]["periods"][0]
        return Forecast(**period)

@mcp_server.tool()
def get_alerts(lat: float, lon: float) -> list[Alert]:
    """Lấy các cảnh báo thời tiết đang hoạt động cho một vị trí."""
    point_properties = get_point_for_location(lat, lon)
    zone = point_properties["forecastZone"].split("/")[-1]
    with httpx.Client() as client:
        response = client.get(f"{NATIONAL_WEATHER_SERVICE_API}/alerts/active/zone/{zone}")
        response.raise_for_status()
        return [Alert(**alert["properties"]) for alert in response.json()["features"]]

# Gắn máy chủ MCP vào ứng dụng FastAPI
app.mount("/", mcp_server)

Bước 3: Chạy Máy Chủ

Lưu file weather_server.py và chạy nó từ terminal bằng uvicorn:

Bash

uvicorn weather_server:app --host 127.0.0.1 --port 8000

Bây giờ, máy chủ MCP của bạn đang chạy và sẵn sàng lắng nghe các yêu cầu từ máy khách MCP tại địa chỉ http://127.0.0.1:8000.

Kết Nối Máy Chủ MCP Với Claude for Desktop

Sau khi máy chủ đã chạy, bước tiếp theo là "giới thiệu" nó cho Claude.

Bước 1: Tìm và Chỉnh Sửa File Cấu Hình

Bạn cần tìm đến file claude_desktop_config.json trong thư mục hỗ trợ ứng dụng của hệ điều hành của bạn.

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

Nếu file này chưa tồn tại, hãy tạo nó.

Bước 2: Thêm Cấu Hình Máy Chủ

Mở file claude_desktop_config.json và thêm vào một key là mcpServers. Key này sẽ chứa một mảng các đối tượng, mỗi đối tượng đại diện cho một máy chủ MCP bạn muốn kết nối.

JSON

{
  "mcpServers": [
    {
      "name": "My Weather Server",
      "command": [
        "/path/to/your/python/env/bin/uvicorn",
        "weather_server:app",
        "--host",
        "127.0.0.1",
        "--port",
        "8000"
      ],
      "workingDirectory": "/path/to/your/project/directory"
    }
  ]
}

Lưu ý quan trọng:

  • name: Tên bạn muốn đặt cho máy chủ để hiển thị trong Claude.
  • command: Một mảng chứa lệnh để khởi chạy máy chủ của bạn. Hãy chắc chắn rằng bạn sử dụng đường dẫn tuyệt đối đến trình thực thi uvicorn trong môi trường ảo của bạn (nếu có).
  • workingDirectory: Đường dẫn tuyệt đối đến thư mục chứa file weather_server.py của bạn.

Bước 3: Khởi Động Lại Claude và Trải Nghiệm

Lưu file cấu hình và khởi động lại ứng dụng Claude for Desktop. Giờ đây, Claude đã nhận biết được máy chủ thời tiết của bạn.

Hãy thử hỏi Claude một câu hỏi yêu cầu sử dụng công cụ mới này, ví dụ:

"What's the weather like in Sacramento?"

Claude sẽ nhận ra rằng nó cần một công cụ để trả lời câu hỏi này. Nó sẽ tìm thấy "My Weather Server", yêu cầu sự cho phép của bạn để sử dụng, sau đó gọi đến công cụ get_forecast trên máy chủ của bạn để lấy dữ liệu thời gian thực và cung cấp cho bạn câu trả lời chính xác.

Lời Kết

Model Context Protocol (MCP) mở ra một kỷ nguyên mới cho các mô hình ngôn ngữ lớn, cho phép chúng vượt qua ranh giới của dữ liệu tĩnh và tương tác trực tiếp với thế giới số. Bằng cách xây dựng các máy chủ MCP của riêng mình, bạn có thể cung cấp cho AI những công cụ tùy chỉnh, từ việc truy cập cơ sở dữ liệu nội bộ đến việc tương tác với các API chuyên dụng, qua đó biến Claude trở thành một trợ lý AI mạnh mẽ và phù hợp hơn với nhu cầu công việc của bạn.

Hãy bắt đầu thử nghiệm và khám phá những khả năng vô hạn khi kết hợp sức mạnh của LLM với các công cụ của riêng bạn!