TTC Việt Nam
Page Header Background

Hướng dẫn chi tiết cách xây dựng một MCP server đơn giản

Trang chủ»Hướng dẫn chi tiết cách xây dựng một MCP server đơn giản
Hướng dẫn chi tiết cách xây dựng một MCP server đơn giản

Model Context Protocol (MCP) hiện đang nổi lên như một tiêu chuẩn công nghệ đầy hứa hẹn trong lĩnh vực trí tuệ nhân tạo và các mô hình ngôn ngữ lớn (LLM). Giao thức này hoạt động giống như một cổng kết nối đa năng, tạo điều kiện thuận lợi để các hệ thống AI giao tiếp mượt mà với những nguồn dữ liệu, giao diện lập trình ứng dụng (API) cùng nhiều dịch vụ ngoại vi khác nhau. Bạn có thể hình dung MCP mang lại khả năng tương thích linh hoạt tương tự cách cổng USB kết nối các thiết bị phần cứng.

Bài viết này sẽ hướng dẫn bạn quy trình từng bước để tự lập trình một máy chủ MCP sử dụng thư viện Yahoo Finance Python API. Ứng dụng này có nhiệm vụ thu thập thông tin giá chứng khoán cập nhật từng phút, thực hiện đối chiếu và cung cấp số liệu lịch sử phục vụ công tác phân tích. Đây là một dự án mẫu lý tưởng cho những ai mới bắt đầu tiếp cận công nghệ này và chỉ đòi hỏi nền tảng lập trình Python cơ bản.

Mục lục nội dung hướng dẫn

  • 1. Thiết lập môi trường vận hành MCP server
  • 2. Quy trình viết mã nguồn MCP server
  • 3. Các bước kiểm tra hoạt động MCP server
  • 4. Cấu hình tích hợp MCP server vào Claude Desktop
  • 5. Kiểm thử thực tế MCP server với Claude Desktop

1. Thiết lập môi trường vận hành MCP server

Trước tiên, người dùng cần truy cập vào trang web chính thức để tải và cài đặt ứng dụng Claude Desktop. Tiếp theo, hãy sử dụng trình quản lý gói của Python để cài đặt các thư viện cần thiết thông qua câu lệnh sau trên dòng lệnh.

$ pip install "mcp[cli]" yfinance

2. Quy trình viết mã nguồn MCP server

Hãy khởi tạo một thư mục mới dành riêng cho dự án, sau đó tạo một tập tin mã nguồn Python mang tên stock_price_server.py và điền nội dung chương trình với các thành phần chính sau đây:

  • Khởi tạo hệ thống MCP: Xây dựng một máy chủ MCP mang định danh "Stock Price Server" dựa vào lớp FastMCP.
  • Truy xuất giá cổ phiếu: Xây dựng hàm get_stock_price nhằm lấy mức giá đóng cửa mới nhất của một mã chứng khoán cụ thể, kèm theo phương án dự phòng khi thị trường ngừng giao dịch.
  • Công bố tài nguyên dữ liệu: Hàm stock_resource chịu trách nhiệm định dạng và trình bày thông tin giá chứng khoán dưới dạng tài nguyên trực quan.
  • Lấy dữ liệu biến động lịch sử: Hàm get_stock_history thu thập và trả về các chỉ số lịch sử dưới cấu trúc văn bản CSV trong một khoảng thời gian xác định.
  • So sánh biến động mã chứng khoán: Hàm compare_stocks tiến hành đối chiếu giá trị của hai mã chứng khoán khác nhau và xuất ra thông báo chi tiết.
  • Cơ chế xử lý ngoại lệ: Từng khối hàm đều tích hợp sẵn các biện pháp kiểm soát lỗi nhằm phản hồi kịp thời khi xảy ra sự cố kết nối dữ liệu.
from mcp.server.fastmcp import FastMCP
import yfinance as yf

# Create an MCP server with a custom name
mcp = FastMCP("Stock Price Server")

@mcp.tool()
def get_stock_price(symbol: str) -> float:
    """
    Retrieve the current stock price for the given ticker symbol.
    Returns the latest closing price as a float.
    """
    try:
        ticker = yf.Ticker(symbol)
        # Get today's historical data; may return empty if market is closed or symbol is invalid.
        data = ticker.history(period="1d")
        if not data.empty:
            # Use the last closing price from today's data
            price = data['Close'].iloc[-1]
            return float(price)
        else:
            # As a fallback, try using the regular market price from the ticker info
            info = ticker.info
            price = info.get("regularMarketPrice", None)
            if price is not None:
                return float(price)
            else:
                return -1.0  # Indicate failure
    except Exception:
        # Return -1.0 to indicate an error occurred when fetching the stock price
        return -1.0

@mcp.resource("stock://{symbol}")
def stock_resource(symbol: str) -> str:
    """
    Expose stock price data as a resource.
    Returns a formatted string with the current stock price for the given symbol.
    """
    price = get_stock_price(symbol)
    if price < 0:
        return f"Error: Could not retrieve price for symbol '{symbol}'."
    return f"The current price of '{symbol}' is ${price:.2f}."

@mcp.tool()
def get_stock_history(symbol: str, period: str = "1mo") -> str:
    """
    Retrieve historical data for a stock given a ticker symbol and a period.
    Returns the historical data as a CSV formatted string.
    
    Parameters:
        symbol: The stock ticker symbol.
        period: The period over which to retrieve historical data (e.g., '1mo', '3mo', '1y').
    """
    try:
        ticker = yf.Ticker(symbol)
        data = ticker.history(period=period)
        if data.empty:
            return f"No historical data found for symbol '{symbol}' with period '{period}'."
        # Convert the DataFrame to a CSV formatted string
        csv_data = data.to_csv()
        return csv_data
    except Exception as e:
        return f"Error fetching historical data: {str(e)}"

@mcp.tool()
def compare_stocks(symbol1: str, symbol2: str) -> str:
    """
    Compare the current stock prices of two ticker symbols.
    Returns a formatted message comparing the two stock prices.
    
    Parameters:
        symbol1: The first stock ticker symbol.
        symbol2: The second stock ticker symbol.
    """
    price1 = get_stock_price(symbol1)
    price2 = get_stock_price(symbol2)
    if price1 < 0 or price2 < 0:
        return f"Error: Could not retrieve data for comparison of '{symbol1}' and '{symbol2}'."
    if price1 > price2:
        result = f"{symbol1} (${price1:.2f}) is higher than {symbol2} (${price2:.2f})."
    elif price1 < price2:
        result = f"{symbol1} (${price1:.2f}) is lower than {symbol2} (${price2:.2f})."
    else:
        result = f"Both {symbol1} and {symbol2} have the same price (${price1:.2f})."
    return result

if __name__ == "__main__":
    mcp.run()

3. Các bước kiểm tra hoạt động MCP server

Sau khi hoàn tất mã nguồn, kỹ thuật viên có thể tiến hành kiểm thử máy chủ thông qua công cụ MCP Server Inspector bằng cách chạy dòng lệnh dưới đây:

$ mcp dev stock_price_server.py

Hệ thống sẽ tự động điều hướng trình duyệt đến một địa chỉ URL nơi giao diện quản trị MCP Inspector đang chạy. Tại đây, bạn hoàn toàn có thể tương tác trực tiếp với các công cụ vừa lập trình để xác nhận tính chính xác của dữ liệu.

Hệ thống máy chủ hiện đang cung cấp các tính năng cốt lõi bao gồm:

  • get_stock_price: Tiện ích tra cứu mức giá niêm yết mới nhất
  • stock_resource: Tài nguyên trả về thông báo giá dạng văn bản thân thiện
  • get_stock_history: Phương thức trích xuất dữ liệu lịch sử dưới định dạng bảng CSV
  • compare_stocks: Chức năng đối chiếu giá trị giữa hai mã cổ phiếu

cach-xay-dung-mot-mcp-server-don-gian

4. Cấu hình tích hợp MCP server vào Claude Desktop

Ngay sau khi đã kiểm tra và xác nhận máy chủ hoạt động ổn định, bước tiếp theo là cấu hình để tích hợp trực tiếp vào ứng dụng Claude Desktop bằng dòng lệnh sau:

$ mcp install stock_price_server.py --name "Stock Price Server"

Khi mở lại phần mềm Claude Desktop, các biểu tượng công cụ mới sẽ hiển thị rõ ngay bên dưới khung trò chuyện, chứng tỏ quá trình liên kết đã thành công. Người dùng có thể bấm vào các biểu tượng này để kiểm tra danh sách tiện ích đang được hỗ trợ.

cach-xay-dung-mot-mcp-server-don-gian

5. Kiểm thử thực tế MCP server với Claude Desktop

Quá trình thử nghiệm có thể bắt đầu bằng việc yêu cầu trợ lý ảo thực hiện so sánh giá trị giữa hai mã chứng khoán phổ biến.

Could you please compare the prices of Microsoft and Tesla stocks?
Bạn có thể so sánh giá cổ phiếu của Microsoft và Tesla không?

Khi câu lệnh được gửi đi, giao diện sẽ hiển thị bảng thông báo yêu cầu người dùng cấp quyền truy cập công cụ. Chỉ cần nhấn vào nút "Allow for This Chat" để tiếp tục phiên làm việc.

cach-xay-dung-mot-mcp-server-don-gian

Kết quả đối chiếu giá cổ phiếu giữa Microsoft và Tesla được hiển thị nhanh chóng và chính xác.

cach-xay-dung-mot-mcp-server-don-gian

Bước kiểm tra tiếp theo là yêu cầu hệ thống phân tích chuỗi dữ liệu lịch sử của hãng Tesla trong suốt tháng vừa qua.

Could you please provide the historical data for Tesla over the past month?
Bạn có thể cung cấp dữ liệu lịch sử của Tesla trong tháng qua không?

Phản hồi từ hệ thống mang lại trải nghiệm rất ấn tượng, vượt trội hoàn toàn so với phương pháp thủ công là tải lên các tập tin dữ liệu CSV thông thường.

cach-xay-dung-mot-mcp-server-don-gian

Nhận định từ chuyên gia kỹ thuật của TTC Việt Nam

Dưới lăng kính kỹ thuật mạng và hạ tầng viễn thông, sự ra đời của Model Context Protocol (MCP) đánh dấu một bước tiến chiến lược trong việc tối ưu hóa hiệu suất giao tiếp giữa các hệ thống AI phân tán và nguồn dữ liệu ngoại vi. Việc tiêu chuẩn hóa các giao thức kết nối giúp giảm thiểu tối đa độ trễ, nâng cao tính bảo mật khi truyền tải thông tin tài chính hay dữ liệu doanh nghiệp thời gian thực. Đối với các đơn vị đang phát triển giải pháp công nghệ, việc nắmbắt và triển khai MCP server sẽ mở ra tiền đề vững chắc để xây dựng các hệ sinh thái tự động hóa thông minh, đảm bảo tính liền mạch và độ tin cậy tuyệt đối cho hạ tầng CNTT.

Nhìn chung, giao thức MCP là một giải pháp phát triển dựa trên các nguyên lý quen thuộc của lập trình hàm và hệ thống AI tự động. Trong tương lai gần, các kỹ sư công nghệ sẽ tiếp tục hoàn thiện những tiêu chuẩn này để tạo ra sự liên kết hoàn hảo giữa các dịch vụ bên ngoài và hạ tầng AI nội bộ, cho phép xử lý tự động hàng loạt yêu cầu phức tạp như quản lý tài nguyên mạng, giám sát hệ thống hoặc vận hành dịch vụ từ xa một cách an toàn.

Để được tư vấn chi tiết về các giải pháp mạng, hạ tầng viễn thông và tích hợp hệ thống công nghệ thông tin tiên tiến nhất hiện nay, quý khách hàng vui lòng liên hệ ngay với đội ngũ chuyên gia của TTC Việt Nam tại ttcvn.net để nhận hỗ trợ nhanh chóng và chuyên nghiệp nhất.

NỘI DUNG

  • Đang tải Mục lục...

ĐĂNG KÝ TRẢI NGHIỆM
DỊCH VỤ

HƠN 5.000+ DOANH NGHIỆP ĐÃ VÀ ĐANG ĐỒNG HÀNH CÙNG TTC VIỆT NAM ĐỂ XÂY DỰNG HỆ THỐNG

NHẬN TƯ VẤN MIỄN PHÍ