Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

Cách Tôi Xây Dựng Máy Chủ MCP Kết Nối Với Claude Desktop Bằng Typescript

中村 拓也

中村 拓也

Updated on tháng 4 9, 2025

Giao thức Ngữ cảnh Mô hình (MCP) đại diện cho một sự tiến bộ đáng kể trong cách các trợ lý AI tương tác với các công cụ và nguồn dữ liệu bên ngoài. Được phát triển bởi Anthropic, MCP cho phép Claude giao tiếp liền mạch với các máy chủ tùy chỉnh, cho phép nó truy cập thông tin theo thời gian thực, thực hiện các quy trình phức tạp và tương tác với các API mà không rời khỏi ngữ cảnh cuộc trò chuyện. Khả năng này biến Claude từ một LLM độc lập thành một trợ lý đa năng có thể tận dụng chức năng bên ngoài trong khi vẫn duy trì sự nhất quán của cuộc trò chuyện.

Trong hướng dẫn toàn diện này, chúng ta sẽ đi qua quá trình xây dựng một máy chủ MCP TypeScript từ đầu và kết nối nó với Claude Desktop. Bằng cách triển khai tích hợp này, bạn sẽ cho phép Claude thực hiện các tác vụ như truy xuất dữ liệu theo thời gian thực, thực hiện tính toán, hoặc tương tác trực tiếp với logic doanh nghiệp tùy chỉnh của bạn trong các cuộc trò chuyện.

Trước khi tìm hiểu về việc triển khai máy chủ MCP của chúng tôi, cần lưu ý rằng lựa chọn công cụ phát triển API của bạn có thể ảnh hưởng đáng kể đến hiệu quả công việc của bạn.

  • Mặc dù Postman đã từ lâu trở thành tiêu chuẩn của ngành công nghiệp, Apidog đã nổi lên như một lựa chọn vượt trội, hoàn toàn phù hợp với các quy trình phát triển hiện đại như cái mà chúng ta đang xây dựng.
  • Khác với những hạn chế của Postman với các API đang phát triển, Apidog cung cấp khả năng đồng bộ theo thời gian thực giữa các thông số API và các yêu cầu của bạn, đảm bảo rằng tài liệu và kiểm tra của bạn luôn được cập nhật tự động khi các API của bạn tiến triển.
  • Với khả năng tạo thông số API trực quan, không giới hạn số lần chạy bộ sưu tập (so với giới hạn 25/tháng của Postman), và những tính năng mạnh mẽ như yêu cầu sinh tự động và phản hồi giả lập, Apidog đơn giản hóa toàn bộ vòng đời của API. Khả năng kiểm tra toàn diện của nó, bao gồm việc tạo kiểm tra trực quan và các trình chạy tự lưu trữ, khiến nó trở thành lựa chọn lý tưởng cho các nhóm thực hiện các tích hợp phức tạp như máy chủ MCP của chúng ta.

Trong khi chúng ta xây dựng máy chủ MCP TypeScript của mình, hãy xem xét cách các tính năng hợp tác và cách tiếp cận tập trung vào phát triển của Apidog có thể nâng cao năng suất của đội ngũ của bạn và đảm bảo rằng các API của bạn luôn nhất quán, được kiểm tra kỹ lưỡng và được tài liệu đầy đủ trong suốt quá trình.

button

Hiểu về Giao thức Ngữ cảnh Mô hình

Giao thức Ngữ cảnh Mô hình xác định một cách tiêu chuẩn để Claude giao tiếp với các dịch vụ bên ngoài. Khi Claude nhận thấy rằng nó cần thông tin từ một nguồn bên ngoài, nó có thể gọi một máy chủ MCP thông qua một yêu cầu JSON có định dạng đặc biệt. Máy chủ xử lý yêu cầu này và trả về dữ liệu đã yêu cầu, mà Claude có thể tích hợp vào phản hồi của nó.

MCP cung cấp một số lợi thế so với các phương pháp tích hợp AI truyền thống:

  • Nhận thức ngữ cảnh: Claude duy trì toàn bộ lịch sử cuộc trò chuyện khi thực hiện các yêu cầu
  • Giao tiếp hai chiều: Giao thức hỗ trợ các tương tác phức tạp giữa Claude và máy chủ của bạn
  • Bảo mật và kiểm soát: Bạn xác định chức năng nào để công khai và cách các yêu cầu được xử lý
  • Trải nghiệm liền mạch: Người dùng tương tác với Claude một cách tự nhiên mà không cần biết về các tích hợp cơ sở phía sau

Điều kiện tiên quyết

Trước khi chúng tôi bắt đầu xây dựng máy chủ MCP của mình, hãy đảm bảo rằng bạn đã có những điều sau:

  • Cài đặt Node.js (v18 trở lên)
  • Một trình biên soạn mã như Visual Studio Code
  • Kiến thức cơ bản về TypeScript
  • Cài đặt ứng dụng Claude Desktop
  • Quen thuộc với Express.js (để xây dựng các điểm cuối của máy chủ)

Thiết lập dự án TypeScript của bạn

Hãy bắt đầu bằng cách tạo một dự án TypeScript mới cho máy chủ MCP của chúng tôi:

mkdir claude-mcp-server
cd claude-mcp-server
npm init -y
npm install typescript @types/node ts-node express @types/express cors @types/cors
npx tsc --init

Kế tiếp, hãy cập nhật tsconfig.json của bạn để bao gồm các thiết lập này:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Triển khai máy chủ MCP

Tạo một tệp mới có tên server.ts trong thư mục gốc của dự án của bạn. Đây sẽ là điểm khởi đầu cho máy chủ MCP của chúng ta:

import express from 'express';
import cors from 'cors';
import { Request, Response } from 'express';

// Định nghĩa kiểu cho giao thức MCP
interface MCPRequest {
  query: string;
  conversation_id: string;
  request_id: string;
  parameters?: Record<string, any>;
}

interface MCPResponse {
  response: string;
  status: 'success' | 'error';
  error?: string;
}

const app = express();
app.use(cors());
app.use(express.json());

// Điểm cuối kiểm tra sức khỏe
app.get('/health', (req: Request, res: Response) => {
  res.status(200).json({ status: 'healthy' });
});

// Điểm cuối MCP
app.post('/mcp', (req: Request, res: Response) => {
  try {
    const mcpRequest = req.body as MCPRequest;
    console.log('Nhận yêu cầu MCP:', JSON.stringify(mcpRequest, null, 2));

    // Xử lý yêu cầu dựa trên truy vấn
    const response = processQuery(mcpRequest);
    
    res.status(200).json({
      status: 'success',
      response
    } as MCPResponse);
  } catch (error) {
    console.error('Lỗi khi xử lý yêu cầu MCP:', error);
    res.status(500).json({
      status: 'error',
      error: error instanceof Error ? error.message : 'Lỗi không xác định',
      response: 'Xin lỗi, đã xảy ra lỗi khi xử lý yêu cầu của bạn.'
    } as MCPResponse);
  }
});

// Hàm để xử lý các loại truy vấn khác nhau
function processQuery(request: MCPRequest): string {
  const { query, parameters } = request;

  // Ví dụ xử lý truy vấn - tùy chỉnh điều này cho trường hợp sử dụng của bạn
  switch (query) {
    case 'getCurrentTime':
      return `Thời gian hiện tại là ${new Date().toLocaleTimeString()}`;
    
    case 'getWeather':
      const location = parameters?.location || 'Không xác định';
      // Trong một ứng dụng thực, bạn sẽ gọi một API thời tiết ở đây
      return `Thời tiết ở ${location} hiện tại là nắng và 72°F`;
    
    case 'calculateSum':
      if (parameters?.numbers && Array.isArray(parameters.numbers)) {
        const sum = parameters.numbers.reduce((a: number, b: number) => a + b, 0);
        return `Tổng của các số là ${sum}`;
      }
      return 'Thông số không hợp lệ cho tính toán tổng';

    default:
      return `Truy vấn không nhận diện: ${query}`;
  }
}

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Máy chủ MCP đang chạy trên cổng ${PORT}`);
});

Chạy máy chủ MCP của bạn

Để chạy máy chủ của bạn, hãy thực hiện:

npx ts-node server.ts

Máy chủ MCP của bạn giờ nên đang chạy trên cổng 3000 (hoặc cổng bạn đã chỉ định).

Kết nối với Claude Desktop

Bây giờ máy chủ MCP của bạn đang chạy, bạn cần cấu hình Claude Desktop để kết nối với nó. Dưới đây là cách thực hiện:

  1. Mở ứng dụng Claude Desktop
  2. Đi tới Cài đặt (thường nằm ở góc trên bên phải)
  3. Đi tới phần "Tính năng thử nghiệm"
  4. Bật công tắc "Giao thức Ngữ cảnh Mô hình"
  5. Thêm một điểm cuối MCP mới với URL http://localhost:3000/mcp
  6. Lưu cài đặt của bạn

Claude Desktop giờ sẽ có khả năng giao tiếp với máy chủ MCP tùy chỉnh của bạn.

Kiểm tra tích hợp

Để kiểm tra máy chủ MCP của bạn với Claude, hãy thử hỏi Claude những câu hỏi sẽ kích hoạt các truy vấn cụ thể mà bạn đã triển khai. Ví dụ:

  • "Bây giờ là mấy giờ?" (nên kích hoạt truy vấn getCurrentTime)
  • "Thời tiết ở San Francisco như thế nào?" (nên kích hoạt truy vấn getWeather với "San Francisco" là tham số vị trí)
  • "Bạn có thể tính tổng của 5, 10, 15 và 20 không?" (nên kích hoạt truy vấn calculateSum)

Khi Claude nhận ra rằng nó cần thông tin bên ngoài để trả lời những câu hỏi này, nó sẽ tự động gửi một yêu cầu MCP đến máy chủ của bạn và tích hợp phản hồi vào câu trả lời của nó.

Mở rộng máy chủ MCP của bạn

Máy chủ cơ bản mà chúng tôi đã xây dựng chỉ là một điểm khởi đầu. Dưới đây là một số ý tưởng để mở rộng chức năng của nó:

Thêm xác thực

Để bảo mật máy chủ MCP của bạn, hãy thêm xác thực:

// Middleware để xác thực cơ bản
const authenticateMCP = (req: Request, res: Response, next: Function) => {
  const apiKey = req.headers['x-api-key'];
  if (!apiKey || apiKey !== process.env.MCP_API_KEY) {
    return res.status(401).json({
      status: 'error',
      error: 'Không được phép',
      response: 'Xác thực không thành công'
    });
  }
  next();
};

// Áp dụng middleware cho điểm cuối MCP
app.post('/mcp', authenticateMCP, (req: Request, res: Response) => {
  // Mã xử lý hiện tại
});

Triển khai tích hợp cơ sở dữ liệu

Kết nối máy chủ MCP của bạn với một cơ sở dữ liệu để truy xuất hoặc lưu trữ thông tin:

import { MongoClient } from 'mongodb';

// Khởi tạo kết nối cơ sở dữ liệu
const dbClient = new MongoClient('mongodb://localhost:27017');
let db: any;

async function connectToDb() {
  await dbClient.connect();
  db = dbClient.db('mcpDatabase');
  console.log('Kết nối với cơ sở dữ liệu');
}

connectToDb().catch(console.error);

// Thêm một bộ xử lý truy vấn cho các tương tác cơ sở dữ liệu
case 'getUserData':
  if (parameters?.userId) {
    const user = await db.collection('users').findOne({ id: parameters.userId });
    return user ? JSON.stringify(user) : 'Không tìm thấy người dùng';
  }
  return 'ID người dùng không hợp lệ';

Thêm hỗ trợ Webhook

Triển khai chức năng webhook để thông báo cho các dịch vụ bên ngoài:

case 'sendNotification':
  if (parameters?.message && parameters?.destination) {
    // Gọi dịch vụ thông báo bên ngoài
    await fetch('https://your-webhook-url.com', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ message: parameters.message })
    });
    return `Thông báo đã được gửi đến ${parameters.destination}`;
  }
  return 'Thông số thông báo không hợp lệ';

Các phương pháp tốt nhất cho phát triển máy chủ MCP

  1. Xử lý lỗi một cách nhẹ nhàng: Luôn bắt ngoại lệ và trả về thông báo lỗi thông tin
  2. Triển khai ghi nhật ký: Ghi lại tất cả các yêu cầu và phản hồi để gỡ lỗi và kiểm toán
  3. Sử dụng các giao diện TypeScript: Định nghĩa các giao diện rõ ràng cho tất cả các cấu trúc dữ liệu
  4. Đặt thời gian chờ: Triển khai thời gian chờ yêu cầu để tránh các hoạt động bị treo
  5. Kiểm tra đầu vào: Cẩn thận xác thực tất cả các tham số đầu vào trước khi xử lý
  6. Thêm kiểm tra đơn vị: Kiểm tra kỹ lưỡng các bộ xử lý truy vấn của bạn để đảm bảo độ tin cậy

Kết luận

Xây dựng một máy chủ MCP TypeScript mở ra những khả năng thú vị để mở rộng các khả năng của Claude. Bằng cách làm theo hướng dẫn này, bạn đã tạo ra một nền tảng cho việc tích hợp Claude với các dịch vụ và dữ liệu của riêng bạn. Giao thức Ngữ cảnh Mô hình cho phép trải nghiệm người dùng liền mạch, nơi Claude có thể truy cập thông tin bên ngoài mà không làm gián đoạn dòng chảy cuộc trò chuyện.

Khi MCP tiếp tục phát triển, chúng ta có thể mong đợi nhiều tích hợp tinh vi hơn giữa các mô hình ngôn ngữ lớn và các hệ thống bên ngoài. Cho dù bạn đang xây dựng các công cụ năng suất, hệ thống quản lý tri thức, hay các ứng dụng doanh nghiệp tùy chỉnh, MCP cung cấp một cách mạnh mẽ để kết hợp trí thông minh của Claude với chức năng chuyên biệt của bạn.

Bắt đầu khám phá các khả năng bằng cách mở rộng máy chủ của bạn với các bộ xử lý truy vấn bổ sung phù hợp với các trường hợp sử dụng của bạn và chia sẻ những trải nghiệm của bạn với cộng đồng ngày càng phát triển của các nhà phát triển MCP.