·

AWS MCP với OpenCode

Cài đặt AWS MCP trong OpenCode để AI agent có thể quản lý tài nguyên cloud và điều tra hạ tầng ngay trong trình soạn thảo.

OpenCode là một agentic coding CLI mã nguồn mở (open-source), viết bằng TypeScript, cho phép bạn cắm nhiều model provider khác nhau (Anthropic, OpenAI, các model chạy qua OpenRouter, hoặc model tự host) vào cùng một trải nghiệm terminal-first giống Claude Code. Vì là mã nguồn mở và không ràng buộc vào một vendor model duy nhất, nhiều team dùng OpenCode làm lớp agent chung, rồi tự quyết định model nào chạy tốt nhất cho từng loại việc. Khi gắn thêm AWS MCP, OpenCode có thể đọc trực tiếp state thật của tài khoản AWS — log, metric, config resource — thay vì chỉ dựa vào code tĩnh trong repo. Bài này đi từ cài đặt, qua các prompt thực tế, tới một ca debug Lambda cụ thể, và những hạn chế bạn cần biết trước khi đưa OpenCode + AWS MCP vào workflow hàng ngày.

Cài Đặt và Kết Nối AWS MCP vào OpenCode

OpenCode đọc cấu hình MCP server từ file opencode.json ở root project (áp dụng cho riêng project đó) hoặc từ ~/.config/opencode/opencode.json (áp dụng toàn cục cho mọi project bạn mở). Khác với Claude Code dùng key mcpServers, OpenCode dùng key mcp, và mỗi server cần khai báo rõ typelocal (chạy process ngay trên máy qua stdio) hay remote (gọi qua HTTP/SSE).

Bước 1 — chuẩn bị AWS credentials như mọi công cụ AWS MCP khác, ưu tiên SSO profile thay vì access key tĩnh:

aws configure sso --profile ai-agent-sso
aws sso login --profile ai-agent-sso
aws sts get-caller-identity --profile ai-agent-sso

Bước 2 — cài OpenCode (qua npm hoặc script cài sẵn của project), rồi tạo/sửa file opencode.json ở root repo:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aws-mcp": {
      "type": "local",
      "command": ["uvx", "awslabs.core-mcp-server@latest"],
      "environment": {
        "AWS_PROFILE": "ai-agent-sso",
        "AWS_REGION": "ap-southeast-1"
      },
      "enabled": true
    }
  }
}

Bước 3 — khởi động lại session OpenCode (opencode trong terminal ở root project), rồi gõ lệnh nội bộ để kiểm tra server đã connect và danh sách tool AWS MCP đã expose ra cho agent. Nếu server không lên, gần như luôn là do uvx/npx chưa có trong PATH của shell mà OpenCode spawn process, hoặc profile SSO đã hết hạn token.

Một điểm khác biệt đáng chú ý so với Claude Code: vì OpenCode cho phép đổi model ngay trong session (ví dụ chuyển từ Claude sang một model khác để so sánh), khả năng gọi tool AWS MCP đúng cách phụ thuộc rất nhiều vào việc model đang chọn có hỗ trợ tool calling tốt hay không — không phải model nào cũng "hiểu" schema tool MCP tốt như nhau.

Mẹo: Sau khi thêm server, luôn hỏi thẳng agent "Bạn đang có tool nào từ aws-mcp?" trước khi giao việc thật — đây là cách nhanh nhất phát hiện việc server bị disable ngầm hoặc model đang dùng không nhận diện được tool đó, tránh mất thời gian debug prompt trong khi vấn đề thực ra là kết nối.

Liệt Kê và Kiểm Tra AWS Resource Từ OpenCode

Sau khi kết nối, cách dùng cơ bản nhất là để agent tự tổng hợp thông tin resource thay bạn quét console. Vài prompt thực tế hay dùng khi mới vào một codebase/hệ thống lạ:

Prompt: "Liệt kê toàn bộ Lambda function trong region ap-southeast-1, kèm
runtime, memory size, timeout, và thời gian last modified. Sắp xếp theo
last modified giảm dần để tôi biết function nào vừa được deploy gần đây."
Prompt: "Lấy danh sách RDS instance đang chạy, kèm engine, instance class,
multi-AZ hay không, và storage đang dùng bao nhiêu phần trăm so với
allocated storage."

Với repo đang mở trong OpenCode, bạn có thể yêu cầu agent đối chiếu ngay giữa infra-as-code (Terraform/CDK) và tài nguyên thực tế:

Prompt: "So sánh danh sách Lambda function trong thư mục terraform/lambda
với danh sách function thực tế đang tồn tại trên AWS account này. Function
nào có trên AWS nhưng không thấy trong code, đánh dấu riêng — đó có thể là
resource được tạo tay ngoài IaC."

Đây là một use case rất thực tế cho các team đang dọn "config drift" — tài nguyên được người khác tạo tay qua console rồi quên đưa vào Terraform, gây khó khăn khi audit hoặc migrate.

Mẹo: Khi yêu cầu liệt kê resource số lượng lớn, luôn thêm điều kiện lọc hoặc giới hạn số dòng trong prompt (ví dụ "chỉ lấy 30 function mới nhất") — AWS MCP có thể trả về hàng trăm item trong một lần gọi, dễ khiến câu trả lời bị cắt hoặc chiếm quá nhiều context window (cửa sổ ngữ cảnh) một cách không cần thiết.

Ví Dụ Thực Tế: Truy Vết Một Lần Gọi Lambda Bị Lỗi Trong OpenCode

Giả sử bạn nhận báo lỗi: một request thanh toán bị fail nhưng không rõ nguyên nhân, chỉ có request_id từ log ứng dụng. Đây là quy trình truy vết dùng OpenCode + AWS MCP từ đầu đến cuối.

Bước 1 — đưa request_id cho agent và yêu cầu tìm log liên quan:

Prompt: "Tìm trong CloudWatch Logs của function payment-processor-prod
tất cả log entry có chứa request_id 'req_8f3a21c9', trong 6 giờ qua.
In ra toàn bộ log line theo thứ tự thời gian."

Bước 2 — sau khi có log, thường sẽ thấy một exception hoặc timeout. Yêu cầu agent tra tiếp trace nếu hệ thống có bật AWS X-Ray:

Prompt: "Với request_id đó, tìm trace tương ứng trong X-Ray, cho tôi xem
breakdown thời gian ở từng segment (gọi DB, gọi service khác, thời gian
xử lý nội bộ) để biết bước nào chậm nhất."

Bước 3 — với repo đang mở, yêu cầu agent đọc code path liên quan tới đoạn log lỗi và đề xuất giả thuyết:

Prompt: "Log báo lỗi 'Connection terminated unexpectedly' khi gọi tới RDS.
Đọc file src/payment/db-client.ts, xem cấu hình connection pool và timeout
hiện tại, so với thời gian xử lý trung bình trong metric Duration của
Lambda này, rồi cho tôi giả thuyết root cause."

Trong nhiều trường hợp thực tế, kết quả sẽ lộ ra pattern quen thuộc: connection pool timeout thấp hơn so với thời gian cold start hoặc thời gian chờ RDS scale, khiến request bị drop giữa chừng dưới tải cao. Sức mạnh ở đây là agent tự nối được ba nguồn dữ liệu — log, trace, code — trong một luồng hội thoại liên tục, thay vì bạn phải tự mở ba tab và tự ghép thủ công.

Mẹo: Luôn cung cấp request_id hoặc correlation_id cụ thể trong prompt truy vết lỗi thay vì mô tả chung ("Lambda bị lỗi hôm nay") — có ID cụ thể giúp agent query đúng, hẹp, nhanh, và tránh việc AI phải "đoán" bằng cách quét log rộng rồi suy diễn sai bản chất lỗi.

Hạn Chế Hiện Tại Của AWS MCP Trong OpenCode

So với Claude Code — nơi có sẵn cơ chế review diff/permission trước khi thực thi hành động có tác dụng phụ — OpenCode ở một số phiên bản chưa có UI xác nhận tool call chi tiết bằng nhau cho mọi provider model; mức độ "hỏi lại trước khi làm" phụ thuộc vào cách bạn cấu hình quyền và vào chính model bạn chọn, không đồng nhất tuyệt đối giữa các provider.

Một hạn chế khác: vì OpenCode cho phép chuyển đổi model linh hoạt, chất lượng gọi tool AWS MCP (đúng tham số, đúng thứ tự gọi nhiều tool để trả lời một câu hỏi phức tạp) sẽ khác nhau rõ rệt giữa một model mạnh về tool calling và một model yếu hơn — cùng một prompt có thể cho kết quả rất khác nhau tuỳ model đang active.

Ngoài ra, việc quản lý session dài với nhiều lần gọi AWS MCP liên tiếp (nhiều log, nhiều metric) có thể khiến context window đầy nhanh hơn dự kiến nếu bạn không chủ động giới hạn phạm vi truy vấn — OpenCode chưa có cơ chế tự động tóm tắt/nén output tool call thông minh như một số IDE tích hợp sâu khác.

Cuối cùng, vì AWS MCP server thường được cấu hình quyền IAM khá rộng để phục vụ nhiều loại truy vấn (đọc log, đọc metric, đọc resource), bạn cần tự kỷ luật trong việc review policy gán cho profile SSO dùng cho AWS MCP — không nên tái sử dụng một profile có quyền write/delete cho việc chỉ cần đọc.

Mẹo: Tạo riêng một IAM policy read-only (chỉ các action Describe*, Get*, List*) gắn cho profile SSO dùng riêng cho AWS MCP trong OpenCode — tách bạch hoàn toàn với profile bạn dùng để deploy hoặc sửa infra, để lỗi prompt hay hallucination của AI không thể vô tình gây hậu quả ngoài mong đợi.

Tổng Kết và Mẹo Sử Dụng

  • Cấu hình AWS MCP trong opencode.json với key mcp, khai báo rõ type: local và biến môi trường profile/region cần dùng.
  • Luôn xác nhận danh sách tool khả dụng trước khi giao việc thật, đặc biệt sau khi đổi model đang dùng trong session.
  • Giới hạn phạm vi câu hỏi (thời gian, số lượng resource) để tránh tốn context window không cần thiết.
  • Dùng ID cụ thể (request_id, correlation_id) khi truy vết lỗi để agent query chính xác và nhanh hơn.
  • Tách riêng IAM profile read-only cho AWS MCP, không dùng chung với profile có quyền ghi/xoá.

Mẹo: Nếu team dùng nhiều model provider khác nhau trong OpenCode, hãy thử lại đúng một prompt truy vết lỗi trên hai model khác nhau ít nhất một lần — bạn sẽ nhanh chóng biết model nào đáng tin để giao các task cần gọi nhiều tool AWS MCP liên tiếp, và model nào chỉ nên dùng cho việc đọc/tóm tắt đơn giản.