·

GitLab MCP với Cursor

Cài đặt GitLab MCP trong Cursor để AI agent có thể quản lý repository, merge request và pipeline CI/CD ngay trong trình soạn thảo.

Cursor là IDE fork từ VS Code với Agent Mode tích hợp sẵn, được rất nhiều engineer dùng làm editor chính hàng ngày. Khác với Claude Code hay Gemini CLI (chạy chủ yếu ở terminal), Cursor đưa GitLab MCP (Model Context Protocol — giao thức kết nối AI agent với công cụ ngoài) vào ngay trong ngữ cảnh code đang mở — bạn có thể yêu cầu agent kiểm tra MR liên quan tới file đang sửa, hoặc theo dõi pipeline mà không cần rời khỏi editor. Bài này hướng dẫn kết nối GitLab MCP vào Cursor Agent Mode, các pattern review/comment MR thực tế, cách theo dõi pipeline, và những hạn chế cần biết khi đưa vào workflow chính thức.

Kết Nối GitLab MCP Với Cursor Agent Mode

Cursor quản lý MCP server qua file .cursor/mcp.json ở root project (khuyến khích commit vào repo để cả team dùng chung config), hoặc ~/.cursor/mcp.json cho cấu hình áp dụng mọi project trên máy bạn.

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "GITLAB_API_URL": "https://gitlab.your-company.com/api/v4"
      }
    }
  }
}

Khác với Claude Code hoặc Gemini CLI, Cursor hiện tại (thời điểm viết bài) chưa hỗ trợ inject biến môi trường bằng cú pháp placeholder trong mcp.json — giá trị env được lưu trực tiếp dạng plain text trong file. Đây là điểm cần lưu ý nghiêm túc về bảo mật:

  • Tuyệt đối không commit .cursor/mcp.json chứa token thật vào repo dùng chung. Thêm file này vào .gitignore, và thay vào đó commit một file mẫu .cursor/mcp.json.example không chứa giá trị thật, để mỗi dev tự copy và điền token cá nhân.
  • Nếu team cần chia sẻ cấu hình chung, cân nhắc dùng GitLab MCP server chạy dạng remote (HTTP) đặt sau một gateway có auth riêng, thay vì để mỗi máy lưu token dạng local trong file cấu hình.

Sau khi lưu file, mở Command Palette trong Cursor (Cmd+Shift+P trên macOS) và chạy "MCP: Reload Servers", hoặc restart Cursor. Xác nhận kết nối bằng cách mở Cursor Settings → Features → MCP — server gitlab sẽ hiện dấu chấm xanh kèm số tool đã discover.

Mẹo:mcp.json của Cursor lưu token dạng plain text, hãy đặt permission file này chỉ owner mới đọc được (chmod 600 .cursor/mcp.json) — giảm rủi ro nếu máy bạn có nhiều user hoặc bị truy cập trái phép.

Xem và Bình Luận Merge Request Qua Cursor

Điểm mạnh riêng của Cursor là agent có sẵn context của file đang mở trong editor — khi bạn hỏi về MR liên quan tới đoạn code đang xem, không cần lặp lại đường dẫn file hay project trong prompt.

Mở panel Agent Mode (Cmd+I hoặc icon Agent ở sidebar) và thử các prompt sau:

Tìm MR liên quan tới file đang mở:

I'm looking at src/services/refund_service.py right now. Find any open merge request in project company/backend/payment-service that touches this file, and show me a summary of what each one changes.

Đọc và trả lời comment review đang chờ xử lý:

Get all unresolved review comments on merge request !156 in project company/backend/payment-service. For each comment, look at the corresponding line in the diff, and draft a reply explaining whether you agree with the reviewer's concern or not, with reasoning.

Bình luận trực tiếp vào một dòng code cụ thể:

Review the diff of merge request !156. If you see the retry logic in the payment gateway call missing a max-retry limit, post an inline comment on that exact line pointing out the risk of infinite retry loop.

Cursor Agent Mode sẽ gọi get_merge_request_diffs để lấy diff, đối chiếu với nội dung file đang mở trong workspace (qua tool đọc file local), rồi gọi create_merge_request_note của GitLab MCP để post comment — toàn bộ luồng này diễn ra trong một lượt reasoning liên tục, không cần bạn chuyển qua chuyển lại giữa GitLab web UI và editor.

Mẹo: Khi yêu cầu agent "post comment", luôn thêm điều kiện rõ ràng kiểu "chỉ comment nếu tìm thấy vấn đề thật" thay vì để agent tự quyết — nếu không, agent có xu hướng cố tìm ra ít nhất một điểm để comment cho "có việc làm", dẫn tới comment gượng gạo không có giá trị thực.

Dùng Cursor Để Theo Dõi Trạng Thái Pipeline CI/CD Với GitLab MCP

Theo dõi pipeline ngay trong IDE giúp bạn không cần alt-tab qua browser mỗi lần push code. Vài prompt thực tế:

Kiểm tra pipeline của branch hiện tại:

Get the current git branch name, then fetch its latest pipeline status in project company/backend/payment-service. If any job failed, show me the failed job's log summary.

Theo dõi pipeline sau khi push và tự thông báo:

I just pushed a commit. Check the pipeline status for this branch every time I ask "status?" in this chat, and tell me clearly when it's done — success or failed with the failing job name.

So sánh thời gian chạy pipeline giữa 2 lần gần nhất:

Compare the duration of the last 2 pipelines on branch main in project company/backend/payment-service. If the latest one is significantly slower, break down which job caused the increase.

Vì Cursor Agent Mode không tự động "chạy nền" để poll liên tục (nó chỉ phản hồi khi bạn gửi message), prompt dạng "theo dõi liên tục" thực chất vẫn cần bạn chủ động gõ lại để trigger agent check — không phải cơ chế push notification thật. Với nhu cầu theo dõi passive thực sự (không cần bạn tương tác), nên kết hợp thêm GitLab's built-in notification hoặc Slack integration, dùng Cursor MCP cho phần phân tích sâu khi có sự cố thay vì polling liên tục.

Mẹo: Với pipeline chạy lâu (>10 phút), đừng để agent liên tục gọi get_pipeline theo chu kỳ ngắn trong một session — vừa tốn token context (mỗi lần gọi lại là một round-trip tool call mới), vừa dễ đụng rate limit. Hỏi lại sau một khoảng thời gian hợp lý thay vì spam liên tục.

Hạn Chế Đã Biết và Cách Khắc Phục Cho GitLab MCP Trong Cursor

Một số hạn chế thực tế đã gặp khi dùng GitLab MCP trong Cursor, kèm cách khắc phục:

  • Không có cơ chế polling/background thật: Như đã nói ở trên, agent chỉ phản hồi theo lượt chat, không tự chạy nền theo dõi pipeline. Khắc phục: dùng GitLab CI/CD webhook bắn thông báo qua Slack cho các sự kiện quan trọng (pipeline fail trên main), chỉ dùng Cursor MCP để phân tích sâu khi cần.
  • Token lưu plain text trong mcp.json: Rủi ro bảo mật nếu file bị lộ (commit nhầm, đồng bộ nhầm lên cloud storage cá nhân). Khắc phục: luôn .gitignore file này, dùng pre-commit hook quét secret (ví dụ gitleaks) để chặn commit nhầm.
  • Context từ file đang mở đôi khi gây nhiễu: Khi bạn đang mở nhiều file không liên quan tới câu hỏi, Cursor có thể tự động đưa thêm context không cần thiết vào prompt, khiến agent trả lời lạc hướng hoặc chọn nhầm project/file để phân tích. Khắc phục: đóng các tab không liên quan trước khi hỏi, hoặc nêu rõ project/file path cụ thể trong prompt thay vì dựa hoàn toàn vào context ngầm định.
  • Giới hạn số tool call trong một lượt Agent Mode: Cursor có thể tự dừng sớm ở các luồng nhiều bước phức tạp (ví dụ vừa review diff, vừa check pipeline, vừa tạo issue trong một prompt) để tránh chạy quá lâu. Khắc phục: chia nhỏ thành nhiều prompt tuần tự thay vì gộp một yêu cầu quá dài nhiều nhiệm vụ.

Mẹo: Khi agent dừng giữa luồng nhiều bước mà không hoàn thành hết, hỏi thẳng "what step did you stop at and why" trước khi ra lệnh tiếp — nhiều khi nó dừng vì thiếu quyền (permission chưa approve) chứ không phải vì lỗi logic, và bạn cần approve thủ công bước đó rồi mới tiếp tục được.

Mẹo Thực Chiến

Một số kinh nghiệm khi đưa GitLab MCP vào Cursor cho công việc hàng ngày của team:

  • Tạo sẵn vài custom prompt (Cursor gọi là "Cursor Rules" trong .cursor/rules/) định nghĩa convention team cho MR description, để agent tự áp dụng format chuẩn mỗi lần tạo MR mà không cần bạn nhắc lại trong từng prompt.
  • Với repo monorepo nhiều service, đặt rule rõ ràng về project path GitLab tương ứng với từng folder trong .cursor/rules/gitlab-mapping.md, giúp agent tự map đúng project khi bạn chỉ nói tên folder mà không cần gõ full path GitLab mỗi lần.
  • Định kỳ kiểm tra Cursor Settings → MCP → xem log lỗi tool call gần nhất, đặc biệt sau khi công ty đổi/renew access token — token hết hạn là nguyên nhân phổ biến nhất khiến GitLab MCP "im lặng không phản hồi" mà không báo lỗi rõ ràng trong chat.

Mẹo: Nếu nhiều dev trong team cùng dùng Cursor với GitLab MCP, thống nhất chung một access token dạng service account (không dùng token cá nhân của một người) cho các action tự động hóa quan trọng (ví dụ bot comment review) — tránh việc một dev nghỉ việc/đổi máy làm gãy toàn bộ automation vì token cá nhân của họ bị revoke.