{"product_id":"mcp-vs-custom-tool-use-khi-nao-dung-gi-hướng-dẫn-quyết-dịnh","title":"MCP vs Custom Tool Use — Khi nào dùng gì? Hướng dẫn quyết định","description":"\n\u003cp\u003eKhi xây dựng ứng dụng AI với Claude, bạn có hai lựa chọn chính để mở rộng khả năng của model: MCP (Model Context Protocol) và Custom Tool Use thông qua API. Cả hai đều cho phép Claude tương tác với hệ thống bên ngoài, nhưng kiến trúc, trải nghiệm phát triển và trường hợp sử dụng tối ưu khác nhau đáng kể. Bài viết này giúp bạn đưa ra quyết định đúng đắn cho từng tình huống cụ thể.\u003c\/p\u003e\n\n\u003ch2\u003eTổng quan hai cách tiếp cận\u003c\/h2\u003e\n\n\u003ch3\u003eMCP (Model Context Protocol)\u003c\/h3\u003e\n\u003cp\u003eMCP là giao thức chuẩn hóa cho phép Claude kết nối với các server bên ngoài thông qua một lớp abstraction. MCP server chạy như một process riêng biệt, cung cấp tools, resources và prompts cho Claude thông qua giao thức JSON-RPC.\u003c\/p\u003e\n\u003cp\u003eĐặc điểm chính:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eServer chạy độc lập, giao tiếp qua stdio hoặc HTTP\u003c\/li\u003e\n  \u003cli\u003eMột server có thể phục vụ nhiều client (Claude Code, Claude Desktop, IDE extensions)\u003c\/li\u003e\n  \u003cli\u003eHệ sinh thái mở với hàng trăm server có sẵn\u003c\/li\u003e\n  \u003cli\u003eHỗ trợ tools, resources (dữ liệu tĩnh) và prompts (template)\u003c\/li\u003e\n  \u003cli\u003eCần cài đặt và cấu hình server riêng\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCustom Tool Use (API)\u003c\/h3\u003e\n\u003cp\u003eCustom Tool Use là tính năng built-in của Claude API, cho phép bạn định nghĩa tools trực tiếp trong API request. Claude sẽ trả về tool call khi cần, và ứng dụng của bạn thực thi tool đó rồi gửi kết quả lại cho Claude.\u003c\/p\u003e\n\u003cp\u003eĐặc điểm chính:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eĐịnh nghĩa tool ngay trong API request dưới dạng JSON Schema\u003c\/li\u003e\n  \u003cli\u003eỨng dụng của bạn chịu trách nhiệm thực thi tool\u003c\/li\u003e\n  \u003cli\u003eKhông cần server riêng, logic nằm trong ứng dụng chính\u003c\/li\u003e\n  \u003cli\u003eKiểm soát hoàn toàn luồng xử lý\u003c\/li\u003e\n  \u003cli\u003eTích hợp trực tiếp với business logic hiện có\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eSo sánh chi tiết\u003c\/h2\u003e\n\n\u003ch3\u003eKiến trúc\u003c\/h3\u003e\n\u003cp\u003eSự khác biệt cốt lõi nằm ở kiến trúc. MCP thêm một lớp abstraction giữa Claude và logic xử lý, trong khi Custom Tools cho phép ứng dụng trực tiếp điều phối mọi thứ.\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ MCP Architecture\nClaude --[JSON-RPC]--\u0026gt; MCP Server --[Business Logic]--\u0026gt; External Service\n\n\/\/ Custom Tool Use Architecture\nClaude --[API Response]--\u0026gt; Your App --[Business Logic]--\u0026gt; External Service\u003c\/code\u003e\u003c\/pre\u003e\n\u003cp\u003eVới MCP, luồng xử lý: Claude gọi tool qua MCP protocol, MCP server nhận request, thực thi logic và trả kết quả. Ứng dụng của bạn không can thiệp vào quá trình này.\u003c\/p\u003e\n\u003cp\u003eVới Custom Tools, luồng xử lý: Claude trả về tool_use trong response, ứng dụng của bạn parse response, thực thi logic, rồi gửi tool_result trong request tiếp theo. Bạn kiểm soát hoàn toàn từng bước.\u003c\/p\u003e\n\n\u003ch3\u003eTrải nghiệm phát triển\u003c\/h3\u003e\n\u003cp\u003eHai cách tiếp cận mang lại trải nghiệm phát triển rất khác nhau:\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMCP - Ví dụ tạo tool đọc database:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ mcp-server\/src\/index.ts\nimport { McpServer } from \"@modelcontextprotocol\/sdk\/server\/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol\/sdk\/server\/stdio.js\";\nimport { z } from \"zod\";\nimport { Pool } from \"pg\";\n\nconst server = new McpServer({\n  name: \"database-reader\",\n  version: \"1.0.0\",\n});\n\nconst pool = new Pool({ connectionString: process.env.DATABASE_URL });\n\nserver.tool(\n  \"query_users\",\n  \"Truy van danh sach nguoi dung theo dieu kien\",\n  {\n    status: z.enum([\"active\", \"inactive\"]).optional(),\n    limit: z.number().default(10),\n  },\n  async ({ status, limit }) =\u0026gt; {\n    let query = \"SELECT id, name, email, status FROM users\";\n    const params: any[] = [];\n    if (status) {\n      query += \" WHERE status = $1\";\n      params.push(status);\n    }\n    query += \" LIMIT $\" + (params.length + 1);\n    params.push(limit);\n    const result = await pool.query(query, params);\n    return {\n      content: [{ type: \"text\", text: JSON.stringify(result.rows) }],\n    };\n  }\n);\n\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003e\u003cstrong\u003eCustom Tool Use - Cùng chức năng:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ app.ts - Custom Tool Use\nimport Anthropic from \"@anthropic-ai\/sdk\";\nimport { Pool } from \"pg\";\n\nconst client = new Anthropic();\nconst pool = new Pool({ connectionString: process.env.DATABASE_URL });\n\n\/\/ Dinh nghia tool\nconst tools = [{\n  name: \"query_users\",\n  description: \"Truy van danh sach nguoi dung theo dieu kien\",\n  input_schema: {\n    type: \"object\",\n    properties: {\n      status: {\n        type: \"string\",\n        enum: [\"active\", \"inactive\"],\n        description: \"Trang thai nguoi dung\"\n      },\n      limit: {\n        type: \"number\",\n        description: \"So luong toi da\",\n        default: 10\n      }\n    }\n  }\n}];\n\n\/\/ Xu ly tool call\nasync function handleToolCall(name: string, input: any) {\n  if (name === \"query_users\") {\n    let query = \"SELECT id, name, email, status FROM users\";\n    const params: any[] = [];\n    if (input.status) {\n      query += \" WHERE status = $1\";\n      params.push(input.status);\n    }\n    query += \" LIMIT $\" + (params.length + 1);\n    params.push(input.limit || 10);\n    const result = await pool.query(query, params);\n    return JSON.stringify(result.rows);\n  }\n  throw new Error(\"Unknown tool: \" + name);\n}\n\n\/\/ Agentic loop\nasync function chat(userMessage: string) {\n  const messages: any[] = [{ role: \"user\", content: userMessage }];\n\n  while (true) {\n    const response = await client.messages.create({\n      model: \"claude-sonnet-4-20250514\",\n      max_tokens: 4096,\n      tools: tools,\n      messages: messages,\n    });\n\n    if (response.stop_reason === \"end_turn\") {\n      return response.content;\n    }\n\n    \/\/ Xu ly tool calls\n    messages.push({ role: \"assistant\", content: response.content });\n    const toolResults = [];\n    for (const block of response.content) {\n      if (block.type === \"tool_use\") {\n        const result = await handleToolCall(block.name, block.input);\n        toolResults.push({\n          type: \"tool_result\",\n          tool_use_id: block.id,\n          content: result,\n        });\n      }\n    }\n    messages.push({ role: \"user\", content: toolResults });\n  }\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eMa trận quyết định\u003c\/h2\u003e\n\u003cp\u003eDựa trên các tiêu chí quan trọng, dưới đây là ma trận giúp bạn chọn đúng cách tiếp cận:\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eChọn MCP khi:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eCần tái sử dụng tool trên nhiều ứng dụng hoặc nhiều client (Claude Code, Claude Desktop, IDE)\u003c\/li\u003e\n  \u003cli\u003eMuốn chia sẻ tool với cộng đồng hoặc team khác\u003c\/li\u003e\n  \u003cli\u003eTool có logic phức tạp, cần chạy như service riêng\u003c\/li\u003e\n  \u003cli\u003eCần cả tools, resources và prompts trong cùng một package\u003c\/li\u003e\n  \u003cli\u003eĐang xây dựng developer platform hoặc integration marketplace\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eChọn Custom Tool Use khi:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eXây dựng ứng dụng sản phẩm cụ thể (chatbot, assistant)\u003c\/li\u003e\n  \u003cli\u003eCần kiểm soát hoàn toàn luồng xử lý tool\u003c\/li\u003e\n  \u003cli\u003eTool đơn giản, logic ít, không cần tái sử dụng\u003c\/li\u003e\n  \u003cli\u003eMuốn giảm thiểu infrastructure (không cần server riêng)\u003c\/li\u003e\n  \u003cli\u003eCần tích hợp chặt chẽ với business logic hiện có\u003c\/li\u003e\n  \u003cli\u003eQuan tâm đến latency tối thiểu\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eHybrid Approach — Kết hợp cả hai\u003c\/h2\u003e\n\u003cp\u003eTrong thực tế, nhiều dự án sử dụng kết hợp cả MCP và Custom Tools. Đây không phải quyết định either\/or mà thường là both\/and.\u003c\/p\u003e\n\n\u003ch3\u003eKhi nào dùng hybrid\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eMCP cho các integration chuẩn (database, file system, API phổ biến)\u003c\/li\u003e\n  \u003cli\u003eCustom Tools cho business logic riêng biệt của ứng dụng\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ Hybrid approach\n\/\/ 1. MCP servers cho cac integration chuan\n\/\/ .mcp.json\n{\n  \"mcpServers\": {\n    \"postgres\": {\n      \"command\": \"npx\",\n      \"args\": [\"@modelcontextprotocol\/server-postgres\",\n        \"postgresql:\/\/localhost\/mydb\"]\n    },\n    \"filesystem\": {\n      \"command\": \"npx\",\n      \"args\": [\"@modelcontextprotocol\/server-filesystem\", \"\/data\"]\n    }\n  }\n}\n\n\/\/ 2. Custom tools cho business logic rieng\nconst businessTools = [\n  {\n    name: \"calculate_shipping\",\n    description: \"Tinh phi van chuyen theo dia chi va trong luong\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        from_province: { type: \"string\" },\n        to_province: { type: \"string\" },\n        weight_kg: { type: \"number\" },\n        service_type: {\n          type: \"string\",\n          enum: [\"standard\", \"express\", \"same_day\"]\n        }\n      },\n      required: [\"from_province\", \"to_province\", \"weight_kg\"]\n    }\n  },\n  {\n    name: \"check_inventory\",\n    description: \"Kiem tra ton kho san pham\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        sku: { type: \"string\" },\n        warehouse_id: { type: \"string\" }\n      },\n      required: [\"sku\"]\n    }\n  }\n];\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eMigration: Từ Custom Tools sang MCP\u003c\/h2\u003e\n\u003cp\u003eNếu bạn đang sử dụng Custom Tools và muốn chuyển sang MCP để tái sử dụng hoặc chia sẻ, quy trình migration khá straightforward:\u003c\/p\u003e\n\n\u003ch3\u003eBước 1: Xác định tools cần migrate\u003c\/h3\u003e\n\u003cp\u003eKhông phải tất cả custom tools đều nên chuyển sang MCP. Ưu tiên migrate các tool có đặc điểm sau:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eĐược sử dụng ở nhiều nơi trong codebase\u003c\/li\u003e\n  \u003cli\u003eCó tiềm năng chia sẻ với team khác\u003c\/li\u003e\n  \u003cli\u003eLogic độc lập, không phụ thuộc vào business state cụ thể\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eBước 2: Chuyển đổi tool definition\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ TRUOC: Custom Tool definition\nconst tool = {\n  name: \"search_products\",\n  description: \"Tim kiem san pham theo tu khoa\",\n  input_schema: {\n    type: \"object\",\n    properties: {\n      query: { type: \"string\" },\n      category: { type: \"string\" },\n      max_price: { type: \"number\" }\n    },\n    required: [\"query\"]\n  }\n};\n\n\/\/ SAU: MCP Tool definition\nserver.tool(\n  \"search_products\",\n  \"Tim kiem san pham theo tu khoa\",\n  {\n    query: z.string().describe(\"Tu khoa tim kiem\"),\n    category: z.string().optional().describe(\"Danh muc san pham\"),\n    max_price: z.number().optional().describe(\"Gia toi da\"),\n  },\n  async ({ query, category, max_price }) =\u0026gt; {\n    \/\/ Logic giu nguyen, chi thay doi cach wrap result\n    const results = await searchProducts(query, category, max_price);\n    return {\n      content: [{ type: \"text\", text: JSON.stringify(results) }],\n    };\n  }\n);\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eBước 3: Kiểm tra tương thích\u003c\/h3\u003e\n\u003cp\u003eSau khi migrate, cần kiểm tra kỹ:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eSchema validation hoạt động đúng (MCP dùng Zod, Custom Tools dùng JSON Schema)\u003c\/li\u003e\n  \u003cli\u003eError handling phù hợp với MCP protocol\u003c\/li\u003e\n  \u003cli\u003eKết quả trả về format đúng (\u003ccode\u003econtent\u003c\/code\u003e array với \u003ccode\u003etype\u003c\/code\u003e và \u003ccode\u003etext\u003c\/code\u003e)\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eSo sánh hiệu suất\u003c\/h2\u003e\n\u003cp\u003eHiệu suất là yếu tố quan trọng khi chọn giữa hai cách tiếp cận. Dưới đây là phân tích chi tiết:\u003c\/p\u003e\n\n\u003ch3\u003eLatency\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCustom Tools:\u003c\/strong\u003e Thấp hơn vì không có overhead giao tiếp giữa các process. Tool execution xảy ra trong cùng process với ứng dụng\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP (stdio):\u003c\/strong\u003e Thêm overhead nhỏ do serialization\/deserialization JSON-RPC và IPC. Thường khoảng 5-20ms thêm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP (HTTP\/SSE):\u003c\/strong\u003e Thêm overhead network, phụ thuộc vào latency mạng. Khoảng 20-100ms thêm cho local, cao hơn cho remote\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eMemory\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCustom Tools:\u003c\/strong\u003e Mọi thứ trong cùng process, chia sẻ memory\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP:\u003c\/strong\u003e Mỗi server là process riêng, tiêu tốn thêm memory. Một MCP server nhỏ thường dùng 30-80MB RAM\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eScalability\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCustom Tools:\u003c\/strong\u003e Scale cùng ứng dụng, phù hợp cho monolithic architecture\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP:\u003c\/strong\u003e Mỗi server scale độc lập, phù hợp cho microservices architecture\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eSo sánh chi phí\u003c\/h2\u003e\n\u003cp\u003eNgoài hiệu suất, chi phí cũng là yếu tố quan trọng:\u003c\/p\u003e\n\n\u003ch3\u003eChi phí phát triển\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCustom Tools:\u003c\/strong\u003e Nhanh hơn cho prototype và MVP. Không cần setup server riêng, không cần học MCP protocol. Thời gian setup: 30 phút - 2 giờ\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP:\u003c\/strong\u003e Tốn thời gian ban đầu nhiều hơn nhưng tiết kiệm về lâu dài nhờ tái sử dụng. Thời gian setup: 2-4 giờ cho server đầu tiên, nhanh hơn cho các server tiếp theo\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eChi phí vận hành\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCustom Tools:\u003c\/strong\u003e Chi phí nằm trong ứng dụng chính, không có thêm infrastructure\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMCP:\u003c\/strong\u003e Cần quản lý thêm process, monitoring, logging cho mỗi server. Nếu dùng remote MCP, cần server hoặc container riêng\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eChi phí API\u003c\/h3\u003e\n\u003cp\u003eCả hai cách tiếp cận đều tiêu tốn tokens tương đương khi giao tiếp với Claude API. Tool definitions (dù MCP hay Custom) đều được gửi trong context và tính vào input tokens.\u003c\/p\u003e\n\n\u003ch2\u003e5 Kịch bản thực tế với đề xuất\u003c\/h2\u003e\n\n\u003ch3\u003eKịch bản 1: Chatbot hỗ trợ khách hàng cho e-commerce\u003c\/h3\u003e\n\u003cp\u003eYêu cầu: Tra cứu đơn hàng, kiểm tra tồn kho, tính phí vận chuyển, tạo yêu cầu đổi trả.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eĐề xuất: Custom Tool Use\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLý do: Logic gắn chặt với business domain cụ thể, không cần tái sử dụng cho ứng dụng khác, cần kiểm soát chặt luồng xử lý (ví dụ xác thực khách hàng trước khi cho phép tra cứu đơn hàng). Latency thấp quan trọng vì đây là ứng dụng real-time.\u003c\/p\u003e\n\n\u003ch3\u003eKịch bản 2: Developer tool tích hợp database cho team\u003c\/h3\u003e\n\u003cp\u003eYêu cầu: Query database, xem schema, chạy migrations, tạo seed data.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eĐề xuất: MCP\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLý do: Nhiều developer trong team sẽ dùng, mỗi người qua Claude Code hoặc IDE khác nhau. MCP server chạy một lần, phục vụ tất cả. Đã có sẵn MCP server cho PostgreSQL, MySQL, MongoDB trong ecosystem.\u003c\/p\u003e\n\n\u003ch3\u003eKịch bản 3: Ứng dụng phân tích dữ liệu nội bộ\u003c\/h3\u003e\n\u003cp\u003eYêu cầu: Đọc dữ liệu từ Google Sheets, query BigQuery, tạo biểu đồ, gửi báo cáo qua Slack.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eĐề xuất: Hybrid\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLý do: Sử dụng MCP server có sẵn cho Google Sheets, BigQuery, Slack. Custom tools cho logic phân tích và tạo báo cáo riêng biệt. Đây là trường hợp điển hình cho hybrid approach.\u003c\/p\u003e\n\n\u003ch3\u003eKịch bản 4: MVP chatbot cho startup\u003c\/h3\u003e\n\u003cp\u003eYêu cầu: Trả lời FAQ, đặt lịch hẹn, gửi email xác nhận. Team nhỏ, cần ship nhanh.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eĐề xuất: Custom Tool Use\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLý do: Đơn giản, nhanh triển khai, không cần infrastructure thêm. Khi sản phẩm trưởng thành và phức tạp hơn, có thể migrate dần sang MCP cho các tool được dùng lại.\u003c\/p\u003e\n\n\u003ch3\u003eKịch bản 5: Platform AI cho doanh nghiệp lớn\u003c\/h3\u003e\n\u003cp\u003eYêu cầu: Nhiều ứng dụng AI nội bộ, mỗi ứng dụng cần truy cập các hệ thống khác nhau (SAP, Salesforce, JIRA, nội bộ). 50+ developer sử dụng.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eĐề xuất: MCP\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLý do: Tái sử dụng tool trên nhiều ứng dụng, chuẩn hóa cách tích hợp, dễ quản lý quyền truy cập. MCP server cho mỗi hệ thống, maintained bởi team phụ trách hệ thống đó. Đầu tư ban đầu lớn nhưng ROI cao theo thời gian.\u003c\/p\u003e\n\n\u003ch2\u003eChecklist quyết định nhanh\u003c\/h2\u003e\n\u003cp\u003eKhi cần quyết định nhanh, hãy trả lời các câu hỏi sau:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e1. Tool co duoc su dung boi nhieu ung dung khac nhau khong?\n   Co -\u0026gt; MCP | Khong -\u0026gt; Custom Tools\n\n2. Ban can kiem soat chinh xac luong xu ly tool khong?\n   Co -\u0026gt; Custom Tools | Khong -\u0026gt; MCP cung duoc\n\n3. Co MCP server co san trong ecosystem khong?\n   Co -\u0026gt; Dung MCP server co san | Khong -\u0026gt; Tiep tuc cau hoi 4\n\n4. Team co nhieu hon 5 developer dung cung tool khong?\n   Co -\u0026gt; MCP | Khong -\u0026gt; Custom Tools\n\n5. Day la MVP hay san pham truong thanh?\n   MVP -\u0026gt; Custom Tools | Truong thanh -\u0026gt; Can nhac MCP\n\n6. Latency co quan trong khong (real-time app)?\n   Co -\u0026gt; Custom Tools | Khong -\u0026gt; MCP cung duoc\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eAnti-patterns cần tránh\u003c\/h2\u003e\n\u003cp\u003eDưới đây là những sai lầm phổ biến khi chọn giữa MCP và Custom Tools:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eOver-engineering:\u003c\/strong\u003e Tạo MCP server cho tool chỉ dùng trong 1 ứng dụng, logic 20 dòng code. Custom Tool đơn giản hơn nhiều trong trường hợp này\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReinventing the wheel:\u003c\/strong\u003e Tự viết Custom Tool cho database query trong khi đã có MCP server PostgreSQL chất lượng cao\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eMixing concerns:\u003c\/strong\u003e Đặt business logic phức tạp trong MCP server. MCP server nên focus vào integration, business logic nên ở ứng dụng chính\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eIgnoring latency:\u003c\/strong\u003e Dùng remote MCP server cho ứng dụng real-time mà không đo latency trước\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePremature migration:\u003c\/strong\u003e Chuyển tất cả custom tools sang MCP khi chưa có nhu cầu tái sử dụng thực sự\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eBước tiếp theo\u003c\/h2\u003e\n\u003cp\u003eQuyết định giữa MCP và Custom Tool Use không phải là quyết định một lần cho toàn bộ dự án. Mỗi tool trong hệ thống có thể dùng cách tiếp cận khác nhau dựa trên nhu cầu cụ thể. Bắt đầu với Custom Tools cho MVP, migrate sang MCP khi cần tái sử dụng, và sử dụng hybrid approach cho hệ thống phức tạp. Khám phá thêm chi tiết về MCP và Tool Use tại \u003ca href=\"\/collections\/nang-cao\"\u003eThư viện Nâng cao Claude\u003c\/a\u003e.\u003c\/p\u003e\n","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47730161320148,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/mcp-vs-custom-tool-use-khi-nao-dung-gi-h_ng-d_n-quy_t-d_nh.jpg?v=1774716159","url":"https:\/\/claude.vn\/products\/mcp-vs-custom-tool-use-khi-nao-dung-gi-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-quy%e1%ba%bft-d%e1%bb%8bnh","provider":"CLAUDE.VN","version":"1.0","type":"link"}