Unleash
chính thứcMáy chủ MCP để quản lý các cờ tính năng Unleash và tự động hóa các phương pháp tốt nhất.
Tài liệu
Unleash MCP Server
Một máy chủ Model Context Protocol (MCP) có mục đích rõ ràng để quản lý cờ tính năng Unleash. Máy chủ này cho phép các trợ lý lập trình được hỗ trợ bởi LLM tạo và quản lý cờ tính năng tuân theo các phương pháp tốt nhất của Unleash.
Để chia sẻ phản hồi, hãy tham gia Slack cộng đồng của chúng tôi hoặc mở một issue trên GitHub.
Tổng quan
Máy chủ MCP này cung cấp các công cụ tích hợp với Unleash Admin API, cho phép các trợ lý lập trình AI:
- Tạo cờ tính năng với xác thực và định kiểu phù hợp.
- Phát hiện cờ hiện có để ngăn trùng lặp hoặc khuyến khích tái sử dụng.
- Đánh giá thay đổi để quyết định khi nào cần cờ tính năng.
- Truyền phát tiến trình để hiển thị trong quá trình vận hành.
- Xử lý lỗi một cách nhẹ nhàng với các gợi ý hữu ích.
- Tuân theo các phương pháp tốt nhất từ tài liệu Unleash.
Các công cụ có sẵn
Máy chủ MCP cung cấp các công cụ sau:
create_flag: Tạo một cờ tính năng trong Unleash.evaluate_change: Chấm điểm rủi ro và đề xuất sử dụng cờ tính năng.detect_flag: Khám phá các cờ tính năng hiện có để tránh trùng lặp.wrap_change: Cung cấp hướng dẫn về cách bọc một thay đổi trong cờ tính năng.set_flag_rollout: Cấu hình chiến lược triển khai cho cờ tính năng (không bật cờ).get_flag_state: Hiển thị siêu dữ liệu của cờ tính năng và các chiến lược kích hoạt của nó.list_flags: Liệt kê tất cả cờ tính năng trong một dự án, với phân trang và thứ tự sắp xếp tùy chọn.list_projects: Liệt kê các dự án Unleash có sẵn cho token được cấu hình, với phân trang tùy chọn.toggle_flag_environment: Bật hoặc tắt cờ tính năng trong một môi trường.remove_flag_strategy: Xóa chiến lược của cờ tính năng khỏi một môi trường.cleanup_flag: Tạo hướng dẫn để loại bỏ an toàn các đường dẫn mã được gắn cờ.
Quy trình làm việc cốt lõi
Quy trình làm việc cốt lõi cho trợ lý AI được thiết kế như sau:
evaluate_change: Đầu tiên, đánh giá thay đổi mã để xem có cần cờ hay không.detect_flag: Công cụ này thường được gọi tự động bởievaluate_changeđể ngăn tạo cờ trùng lặp.create_flag: Nếu cần cờ mới, công cụ này tạo nó trong Unleash.wrap_change: Cuối cùng, công cụ này cung cấp mã cụ thể theo ngôn ngữ để triển khai cờ mới.
Xem thêm thông tin về các công cụ quy trình làm việc cốt lõi trong phần Tham khảo công cụ.
Điều kiện tiên quyết
Trước khi bạn có thể chạy máy chủ, bạn cần những thứ sau:
- Node.js 22 trở lên
- Trình quản lý gói pnpm hoặc npm
- Một phiên bản Unleash (được lưu trữ hoặc tự lưu trữ)
- Một mã thông báo truy cập cá nhân có quyền tạo cờ tính năng
Bắt đầu
Phần này bao gồm các cách khác nhau để cài đặt và chạy máy chủ Unleash MCP. Bạn có thể làm theo thiết lập cho tác nhân (chẳng hạn như Claude Code và Codex), chạy MCP như một tiến trình độc lập bằng npx, hoặc sử dụng thiết lập phát triển cục bộ.
Thiết lập tác nhân
Bạn có thể thêm máy chủ MCP trực tiếp vào Claude Code hoặc Codex. Cấu hình tác nhân là cụ thể theo đường dẫn. Bạn phải chạy lệnh sau từ thư mục gốc của dự án nơi bạn muốn sử dụng MCP.
Đối với Claude Code:
claude mcp add unleash \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
-- npx -y @unleash/mcp@latest --log-level error
Đối với Codex:
codex mcp add unleash \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
-- npx -y @unleash/mcp@latest --log-level error
Thiết lập tác nhân từ xa (thử nghiệm)
Thay vì chạy máy chủ MCP cục bộ, bạn có thể kết nối trực tiếp với máy chủ MCP từ xa tích hợp sẵn của phiên bản Unleash qua HTTP. Điều này sử dụng Streamable HTTP transport — không cần tiến trình cục bộ.
Lưu ý: MCP từ xa là một tính năng thử nghiệm phải được bật trên phiên bản Unleash của bạn. Liên hệ với nhóm Unleash để được kích hoạt.
OAuth
Luồng OAuth mở trình duyệt của bạn, cho phép bạn đăng nhập vào Unleash và tự động cấp một PAT có thời hạn ngắn. Không cần quản lý token thủ công.
Đối với Claude Code:
claude mcp add unleash https://{{your-instance-url}}/api/admin/mcp --transport http
Đối với Codex:
codex mcp add unleash https://{{your-instance-url}}/api/admin/mcp --transport http
Trong lần sử dụng đầu tiên, máy khách sẽ tự động mở trình duyệt của bạn để đăng nhập. Sau khi xác thực với Unleash, một PAT được tạo và sử dụng cho tất cả các yêu cầu tiếp theo.
PAT hết hạn sau 24 giờ theo mặc định.
Mã thông báo truy cập cá nhân (PAT)
Sử dụng phương pháp này khi bạn đã có PAT hoặc cần truy cập không giao diện/không tương tác (đường ống CI, môi trường nhà phát triển dùng chung, máy khách không hỗ trợ OAuth).
Để tạo PAT: đăng nhập vào phiên bản Unleash của bạn, đi tới Hồ sơ > Mã thông báo truy cập cá nhân và tạo một token mới.
Đối với Claude Code:
claude mcp add unleash https://{{your-instance-url}}/api/admin/mcp \
--transport http \
--header "Authorization: Bearer {{your-personal-access-token}}"
Đối với Codex:
codex mcp add unleash https://{{your-instance-url}}/api/admin/mcp \
--transport http \
--header "Authorization: Bearer {{your-personal-access-token}}"
Cờ --header gửi trực tiếp PAT, bỏ qua hoàn toàn luồng OAuth.
Bắt đầu nhanh với npx
Bạn có thể chạy máy chủ MCP như một tiến trình độc lập mà không cần sao chép kho lưu trữ bằng cách sử dụng npx. Cung cấp cấu hình thông qua biến môi trường hoặc tệp .env cục bộ trong thư mục bạn chạy lệnh:
UNLEASH_BASE_URL={{your-instance-url}} \
UNLEASH_PAT={{your-personal-access-token}} \
UNLEASH_DEFAULT_PROJECT={{default_project_id}} \
npx unleash-mcp --log-level debug
CLI hỗ trợ các cờ giống như bản dựng cục bộ (ví dụ: --dry-run, --log-level).
Thiết lập phát triển cục bộ
Làm theo các bước sau để thiết lập dự án cho phát triển cục bộ.
- Cài đặt các phụ thuộc
Sao chép kho lưu trữ và cài đặt các phụ thuộc bằng pnpm. Corepack giữ cho mọi người cùng một phiên bản pnpm:
git clone https://github.com/Unleash/unleash-mcp.git
cd unleash-mcp
# Enable Corepack once per machine, then prepare the pnpm this repo expects
corepack enable
corepack prepare [email protected] --activate
pnpm install
- Chạy ở chế độ phát triển trực tiếp từ Claude hoặc Codex
Tránh đầu ra npm run và biểu ngữ tsx watch vì bất kỳ stdout thừa nào cũng làm hỏng quá trình bắt tay MCP. Hai tùy chọn yên tĩnh:
A) Sử dụng JS đã biên dịch (đáng tin cậy nhất)
npm run build
# or keep it hot in another terminal: npm run build:watch
claude mcp add unleash-dev \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
--env LOG_LEVEL=debug \
--env APP_LOG_FILE="$(pwd)/app.log" \
--env MCP_STDIO_LOG_FILE="$(pwd)/mcp-stdio.log" \
-- node "$(pwd)/dist/index.js"
codex mcp add unleash-dev \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
--env LOG_LEVEL=debug \
--env APP_LOG_FILE="$(pwd)/app.log" \
--env MCP_STDIO_LOG_FILE="$(pwd)/mcp-stdio.log" \
-- node "$(pwd)/dist/index.js"
B) Sử dụng TypeScript trực tiếp (không cần build)
claude mcp add unleash-dev \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
--env LOG_LEVEL=debug \
--env APP_LOG_FILE="$(pwd)/app.log" \
--env MCP_STDIO_LOG_FILE="$(pwd)/mcp-stdio.log" \
-- node --no-warnings --import tsx "$(pwd)/src/index.ts"
codex mcp add unleash-dev \
--env UNLEASH_BASE_URL={{your-instance-url}} \
--env UNLEASH_PAT={{your-personal-access-token}} \
--env LOG_LEVEL=debug \
--env APP_LOG_FILE="$(pwd)/app.log" \
--env MCP_STDIO_LOG_FILE="$(pwd)/mcp-stdio.log" \
-- node --no-warnings --import tsx "$(pwd)/src/index.ts"
Ghi chú:
node --import tsxyên tĩnh (không có đầu ra vòng đời npm) và chạy TS trực tiếp; sử dụng tùy chọn này khi bạn muốn tránh build.node dist/index.jslà lựa chọn an toàn nhất; kết hợp nó vớinpm run build:watchđể build lại khi có thay đổi trong khi lệnh tác nhân vẫn ổn định.- Nhật ký được lưu trong thư mục gốc của kho lưu trữ (
app.log,mcp-stdio.log), cả hai đều được gitignore.
Kiểm soát ghi nhật ký
LOG_LEVEL(được ưu tiên): kiểm soát mức độ chi tiết ghi nhật ký ứng dụng (debug,info,warn,error). Mặc định làerrorkhi không được đặt.- Cờ CLI
--log-level: ghi đè tùy chọn choLOG_LEVELkhi bạn muốn thay đổi một lần. APP_LOG_FILE(tùy chọn): nếu được đặt, nhật ký ứng dụng được ghi vào tệp này (không phải stdout). Nếu không được đặt, nhật ký đi đến stderr.MCP_STDIO_LOG_FILE(tùy chọn): nếu được đặt, stdin/stdout/stderr của MCP được ghi vào tệp duy nhất này với các tiền tố kênh. Các thông điệp giao thức vẫn chảy qua stdout bình thường.
Ghi nhận máy khách
Khi một máy khách MCP gửi clientInfo trong quá trình khởi tạo (Claude Code, Cursor, Copilot, Windsurf, Codex, Kiro và các máy khách tuân thủ khác), máy chủ làm giàu tiêu đề User-Agent trên các cuộc gọi Unleash Admin API đi ra:
User-Agent: unleash-mcp/<version> (MCP Server; client=claude-code/1.2.3)
Điều này làm cho nhật ký sự kiện Unleash trả lời "công cụ AI nào đã tạo hoặc chuyển đổi cờ này" mà không cần bất kỳ thay đổi phía máy chủ nào. Các giá trị ghi nhận được làm sạch để chúng không thể phá vỡ tiêu đề User-Agent.
Đặt UNLEASH_MCP_CLIENT_ATTRIBUTION=off để tắt làm giàu và hoàn nguyên về unleash-mcp/<version> (MCP Server). Mặc định: được bật.
Tham khảo công cụ
Phần này mô tả chi tiết từng công cụ cốt lõi, bao gồm mục đích, tham số và đầu ra của nó.
Tạo cờ
Công cụ create_flag tạo một cờ tính năng mới trong Unleash với xác thực toàn diện và theo dõi tiến trình.
Khi nào sử dụng
Sử dụng công cụ này khi bạn đã xác định rằng cần một cờ tính năng (ví dụ: sau khi chạy evaluate_change) và bạn sẵn sàng tạo nó với loại và siêu dữ liệu chính xác.
Tham số
Công cụ chấp nhận các tham số sau:
name(bắt buộc): Tên cờ tính năng duy nhất trong dự án.type(bắt buộc): Loại cờ tính năng chỉ ra vòng đời và mục đích.release: Triển khai tính năng dần dần cho người dùng.experiment: Thử nghiệm A/B và thí nghiệm.operational: Hành vi hệ thống và chuyển đổi vận hành.kill-switch: Tắt khẩn cấp hoặc ngắt mạch.permission: Kiểm soát quyền truy cập tính năng dựa trên vai trò hoặc quyền lợi của người dùng.
description(bắt buộc): Giải thích rõ ràng về những gì cờ kiểm soát và lý do nó tồn tại.projectId(tùy chọn): Dự án mục tiêu (mặc định làUNLEASH_DEFAULT_PROJECT).impressionData(tùy chọn): Bật theo dõi phân tích (mặc định là false).
Ví dụ sử dụng
Lời nhắc tác nhân
Use create_flag with:
- name: "new-checkout-flow"
- type: "release"
- description: "Gradual rollout of the redesigned checkout experience"
- projectId: "ecommerce"
Tải trọng công cụ
{
"name": "new-checkout-flow",
"type": "release",
"description": "Gradual rollout of the redesigned checkout experience with improved conversion tracking",
"projectId": "ecommerce",
"impressionData": true
}
Đầu ra công cụ
Khi thành công, công cụ trả về một đối tượng JSON chứa URL của cờ tính năng mới trong Giao diện quản trị Unleash, một liên kết tài nguyên MCP để truy cập theo chương trình, dấu thời gian tạo và chi tiết cấu hình.
Đánh giá thay đổi
Công cụ evaluate_change đánh giá xem một thay đổi mã có nên được đặt sau cờ tính năng hay không. Nó kiểm tra cấu trúc, ngữ cảnh và rủi ro tiềm ẩn của thay đổi và trả về một đề xuất với giải thích và các bước tiếp theo.
Khi nào sử dụng
Sử dụng evaluate_change khi bắt đầu một tính năng hoặc sửa đổi khi bạn muốn hiểu liệu công việc có yêu cầu cờ tính năng hay không. Công cụ này cũng hữu ích khi bạn không chắc nên sử dụng loại cờ nào hoặc muốn hướng dẫn về kế hoạch triển khai.
Cách thức hoạt động
Công cụ trả về hướng dẫn chi tiết, được định dạng markdown cho trợ lý LLM dựa trên các phương pháp tốt nhất của Unleash.
Hướng dẫn bao gồm:
- Phát hiện cờ cha: Kiểm tra xem mã đã được bảo vệ bởi các cờ hiện có chưa.
- Đánh giá rủi ro: Phân tích các mẫu mã để xác định các hoạt động rủi ro.
- Đánh giá loại mã: Phân loại thay đổi (ví dụ: kiểm thử, cấu hình, tính năng hoặc sửa lỗi).
- Đề xuất: Đề xuất nên tạo cờ, sử dụng cờ hiện có hay bỏ qua cờ.
- Hành động tiếp theo: Cung cấp hướng dẫn cụ thể về việc cần làm tiếp theo.
Khi evaluate_change xác định cần một cờ, nó cung cấp hướng dẫn rõ ràng để:
- Gọi công cụ
create_flagđể tạo cờ tính năng. - Gọi công cụ
wrap_changeđể nhận hướng dẫn bọc mã cụ thể theo ngôn ngữ. - Triển khai mã được bọc theo các mẫu đã phát hiện.
Quy trình đánh giá
Công cụ tuân theo một quy trình đánh giá rõ ràng:
Step 1: Gather code changes (git diff, read files)
↓
Step 2: Check for parent flags (avoiding nesting)
↓
Step 3: Assess code type (test? config? feature?)
↓
Step 4: Evaluate risk (auth? payments? API changes?)
↓
Step 5: Calculate risk score
↓
Step 6: Make recommendation
↓
Step 7: Take action (create flag or proceed without)
Đánh giá rủi ro
Công cụ sử dụng các mẫu không phụ thuộc ngôn ngữ để chấm điểm rủi ro:
- Rủi ro nghiêm trọng (Điểm +5): Ví dụ: xác thực, thanh toán, bảo mật và hoạt động cơ sở dữ liệu.
- Rủi ro cao (Điểm +3): Ví dụ: thay đổi API, dịch vụ bên ngoài hoặc lớp mới.
- Rủi ro trung bình (Điểm +2): Ví dụ: hoạt động bất đồng bộ hoặc quản lý trạng thái.
- Rủi ro thấp (Điểm +1): Ví dụ: sửa lỗi, tái cấu trúc hoặc thay đổi nhỏ.
Điểm tích lũy trên các danh mục phù hợp. Tổng điểm ánh xạ đến mức rủi ro:
- Nghiêm trọng: Điểm ≥ 5
- Cao: Điểm ≥ 3
- Trung bình: Điểm ≥ 2
- Thấp: Điểm < 2
Đầu ra bao gồm điểm confidence (0-1) đại diện cho mức độ chắc chắn tự đánh giá của LLM, tăng lên khi có nhiều ngữ cảnh hơn.
Danh mục bị loại trừ bao gồm các tệp không cần cờ tính năng bất kể nội dung: tệp kiểm thử (*.test.ts, *_test.go, v.v.), tệp cấu hình (*.config.js, .env, *.yaml) và tệp tài liệu (*.md, docs/**). Các thay đổi giới hạn ở các tệp bị loại trừ sẽ không kích hoạt đề xuất cờ.
Các định nghĩa mẫu đầy đủ, bao gồm từ khóa theo danh mục, glob tệp, mẫu mã và lý do, nằm trong src/evaluation/riskPatterns.ts.
Phát hiện cờ cha
Công cụ tìm kiếm các mẫu phổ biến trên các ngôn ngữ, chẳng hạn như:
- Điều kiện:
if (isEnabled('flag')),if client.is_enabled('flag'): - Gán:
const enabled = useFlag('flag') - Hook:
const enabled = useFlag('flag')→{enabled && <Component />} - Bảo vệ:
if (!isEnabled('flag')) return; - Trình bao bọc:
withFeatureFlag('flag', () => {...})
Tham số
Tất cả các tham số đều là tùy chọn, nhưng càng nhiều ngữ cảnh thì đề xuất càng tốt:
repository(chuỗi): Tên hoặc đường dẫn kho lưu trữ.branch(chuỗi): Tên nhánh hiện tại.files(mảng): Danh sách các tệp đang được thay đổi.description(chuỗi): Mô tả về thay đổi.riskLevel(enum):low,medium,highhoặccritical, theo đánh giá của người dùng.codeContext(chuỗi): Mã xung quanh để phát hiện cờ cha.
Ví dụ sử dụng
Lời nhắc tác nhân
Cách sử dụng đơn giản khi bạn để tác nhân thu thập ngữ cảnh:
Use evaluate_change to help me determine if I need a feature flag
Hướng dẫn rõ ràng:
Use evaluate_change with:
- description: "Add Stripe payment processing"
- riskLevel: "high"
Tải trọng công cụ
{
"repository": "my-app",
"branch": "feature/stripe-integration",
"files": ["src/payments/stripe.ts"],
"description": "Add Stripe payment processing",
"riskLevel": "high",
"codeContext": "surrounding code for parent flag detection"
}
Đầu ra công cụ
Trả về một đối tượng JSON với kết quả đánh giá, bao gồm boolean needsFlag, recommendation (ví dụ: "create_new"), tên cờ được đề xuất, mức rủi ro và explanation chi tiết.
{
"needsFlag": true,
"reason": "new_feature",
"recommendation": "create_new",
"suggestedFlag": "stripe-payment-integration",
"riskLevel": "critical",
"riskScore": 5,
"explanation": "This change integrates Stripe payments, which is critical risk...",
"confidence": 0.9
}
Phát hiện cờ
Công cụ detect_flag tìm các cờ tính năng hiện có trong cơ sở mã để bạn có thể tái sử dụng chúng thay vì tạo trùng lặp. Công cụ này được tự động tích hợp vào quy trình làm việc evaluate_change nhưng cũng có thể được sử dụng thủ công.
Khi nào sử dụng
Sử dụng công cụ này trước khi tạo cờ tính năng mới hoặc trong quá trình đánh giá mã để kiểm tra các cờ hiện có có thể đã bao phủ trường hợp sử dụng của bạn. Điều này giúp ngăn chặn trùng lặp cờ.
Cách thức hoạt động
Công cụ trả về hướng dẫn tìm kiếm toàn diện và sử dụng nhiều chiến lược phát hiện:
- Phát hiện dựa trên tệp: Tìm kiếm trong các tệp bạn đang sửa đổi để tìm cờ hiện có.
- Phân tích lịch sử Git: Tìm kiếm các cờ được thêm gần đây trong lịch sử commit.
- Khớp tên ngữ nghĩa: Khớp mô tả với tên cờ hiện có.
- Phân tích ngữ cảnh mã: Kiểm tra mã xung quanh thay đổi.
Sau đó, công cụ tuân theo quy trình chấm điểm:
Step 1: Execute file-based search (grep for flag patterns in target files)
↓
Step 2: Search git history for recent flag additions
↓
Step 3: Perform semantic matching (description → flag names)
↓
Step 4: Analyze code context (if provided)
↓
Step 5: Combine scores from all methods
↓
Step 6: Return best candidate with confidence score
Mức độ tin cậy
Công cụ trả về các ứng viên với điểm tin cậy:
- Cao
≥0.7: Khớp mạnh; khuyến nghị tái sử dụng. - Trung bình
0.4-0.7: Có thể khớp; xem xét thủ công. - Thấp
<0.4: Khớp yếu; có khả năng tạo cờ mới.
Tham số
description(bắt buộc): Mô tả về thay đổi hoặc tính năng. Ví dụ:"payment processing with Stripe","new checkout flow".files(tùy chọn): Các tệp đang được sửa đổi. Ví dụ:["src/payments/stripe.ts", "src/checkout/flow.ts"].codeContext(tùy chọn): Mã lân cận để quét tìm cờ.
Ví dụ sử dụng
Lời nhắc tác nhân
Kiểm tra cờ hiện có trước khi tạo cờ:
Use detect_flag with description "payment processing with Stripe"
Tự động tích hợp trong đánh giá:
Use evaluate_change - automatically searches for existing flags
Tải trọng công cụ
{
"description": "payment processing with Stripe",
"files": ["src/payments/stripe.ts"]
}
Đầu ra công cụ
Trả về một đối tượng JSON cho biết có tìm thấy cờ hay không. Nếu flagFound là true, nó bao gồm một đối tượng candidate với tên, vị trí, điểm tin cậy của cờ và lý do khớp.
Tìm thấy khớp:
{
"flagFound": true,
"candidate": {
"name": "stripe-payment-integration",
"location": "src/payments/stripe.ts:42",
"context": "if (client.isEnabled('stripe-payment-integration')) {",
"confidence": 0.85,
"reasoning": "Found in same file you're modifying, added 2 days ago",
"detectionMethod": "file-based"
}
}
Không tìm thấy khớp:
{
"flagFound": false,
"candidate": null
}
Bọc thay đổi
Công cụ wrap_change tạo các đoạn mã cụ thể theo ngôn ngữ và hướng dẫn để bọc mã bằng cờ tính năng. Nó giúp LLM và nhà phát triển tuân theo các mẫu hiện có trong cơ sở mã và sử dụng cờ đúng cách.
Khi nào sử dụng
Sử dụng công cụ này sau khi bạn đã tạo cờ tính năng (với create_flag) và cần triển khai nó trong mã của bạn. Nó đặc biệt hữu ích khi bạn muốn đảm bảo mình đang tuân theo các mẫu cơ sở mã hiện có hoặc cần các ví dụ cụ thể theo framework (ví dụ: React, Django).
Cách thức hoạt động
Công cụ này là bước cuối cùng trong quy trình làm việc evaluate_change → create_flag → wrap_change.
Công cụ cung cấp hướng dẫn sau trong phản hồi của nó:
- Hướng dẫn tìm kiếm: Hướng dẫn từng bước để tìm các mẫu cờ hiện có trong cơ sở mã của bạn bằng grep.
- Phát hiện mẫu: Xác định các mẫu phổ biến (ví dụ: import, tên biến máy khách, tên phương thức hoặc kiểu bọc).
- Mẫu mặc định: Các đoạn mã dự phòng nếu không tìm thấy mẫu nào.
- Ví dụ cụ thể theo framework: Các mẫu chuyên biệt cho React, Express, Django và các framework khác.
- Nhiều mẫu: Khối if, mệnh đề bảo vệ, hook, decorator, middleware, v.v.
Ngôn ngữ và framework được hỗ trợ:
- TypeScript/JavaScript: Node.js, React Hooks, Express middleware.
- Python: FastAPI, Django, Flask decorators.
- Go: Khối if tiêu chuẩn, HTTP middleware.
- Ruby: Rails controllers.
- PHP: Laravel controllers.
- C#: .NET/ASP.NET controllers.
- Java: Spring Boot.
- Rust: Actix/Rocket handlers.
Tham số
flagName(bắt buộc): Tên cờ tính năng để bọc mã. Ví dụ:"new-checkout-flow"hoặc"stripe-integration".language(tùy chọn): Ngôn ngữ lập trình (tự động phát hiện từfileNamenếu không được cung cấp). Được hỗ trợ:typescript,javascript,python,go,ruby,php,csharp,java,rustfileName(tùy chọn): Tên tệp đang được sửa đổi (giúp phát hiện ngôn ngữ). Ví dụ:"checkout.ts","payment.py"hoặc"handler.go".codeContext(tùy chọn): Mã xung quanh để giúp phát hiện các mẫu hiện có.frameworkHint(tùy chọn): Framework cho các mẫu chuyên biệt. Ví dụ:"React","Express","Django","Rails"hoặc"Spring Boot".
Ví dụ sử dụng
Lời nhắc tác nhân
Use wrap_change with:
- flagName: "new-checkout-flow"
- fileName: "src/components/checkout.ts"
- frameworkHint: "React"
Tải trọng công cụ
{
"flagName": "new-checkout-flow",
"fileName": "checkout.ts",
"frameworkHint": "React"
}
Đầu ra công cụ
Trả về một chuỗi toàn diện, được định dạng markdown hướng dẫn người dùng cách bọc mã của họ. Điều này bao gồm bắt đầu nhanh, hướng dẫn tìm kiếm, hướng dẫn bọc với trình giữ chỗ, tất cả các mẫu có sẵn cho ngôn ngữ và liên kết đến tài liệu SDK.
# Feature Flag Wrapping Guide: "new-checkout-flow"
**Language:** TypeScript
**Framework:** React
## Quick Start
[Recommended pattern with import and usage]
## How to Search for Existing Flag Patterns
[Step-by-step Grep instructions]
## How to Wrap Code with Feature Flag
[Wrapping instructions with examples]
## All Available Templates
[If-block, guard clause, hooks, ternary, etc.]
Đặt triển khai cờ
Công cụ set_flag_rollout cấu hình chiến lược flexibleRollout trên một môi trường cờ tính năng. Nó đặt tỷ lệ phần trăm triển khai, độ dính và các biến thể cấp chiến lược tùy chọn. Điều này không bật cờ; sử dụng toggle_flag_environment để bật nó.
Khi nào sử dụng
Sử dụng công cụ này sau khi tạo cờ với create_flag để cấu hình cách phân phối lưu lượng trước khi bật nó. Cũng sử dụng nó để cập nhật tỷ lệ phần trăm triển khai hiện có hoặc thêm biến thể.
Tham số
featureName(bắt buộc): Tên cờ tính năng.environment(bắt buộc): Môi trường mục tiêu (ví dụ:"production","development").rolloutPercentage(bắt buộc): Tỷ lệ phần trăm lưu lượng nhận tính năng (0-100).projectId(tùy chọn): ID dự án (mặc định làUNLEASH_DEFAULT_PROJECT).groupId(tùy chọn): Khóa bucketing độ dính (mặc định là tên tính năng).stickiness(tùy chọn): Trường độ dính (mặc định là"default").title(tùy chọn): Tiêu đề mô tả cho chiến lược.disabled(tùy chọn): Tạo chiến lược ở trạng thái bị tắt (mặc định là false).variants(tùy chọn): Danh sách các biến thể cấp chiến lược, mỗi biến thể cóname,weight(0-1000),weightTypetùy chọn ("variable"hoặc"fix"),stickinessvàpayload({type, value}).
Ví dụ sử dụng
Lời nhắc tác nhân
Use set_flag_rollout with:
- featureName: "new-checkout-flow"
- environment: "production"
- rolloutPercentage: 25
Tải trọng công cụ
{
"featureName": "new-checkout-flow",
"environment": "production",
"rolloutPercentage": 25,
"projectId": "ecommerce",
"stickiness": "userId"
}
Đầu ra công cụ
Trả về xác nhận với tỷ lệ phần trăm đã cấu hình, liên kết đến cờ trong Giao diện quản trị Unleash, URL chiến lược Admin API và liên kết tài nguyên MCP cho cờ.
Lấy trạng thái cờ
Công cụ get_flag_state lấy siêu dữ liệu hiện tại và chiến lược môi trường của cờ tính năng từ Unleash Admin API. Nó trả về loại cờ, trạng thái bật/lưu trữ, cài đặt dữ liệu ấn tượng và tóm tắt theo môi trường về các chiến lược và biến thể đang hoạt động.
Khi nào sử dụng
Sử dụng công cụ này để kiểm tra cờ trước khi sửa đổi nó, để kiểm tra có bao nhiêu chiến lược đang hoạt động trên các môi trường hoặc để tìm ID chiến lược trước khi gọi remove_flag_strategy.
Tham số
featureName(bắt buộc): Tên cờ tính năng.projectId(tùy chọn): ID dự án (mặc định làUNLEASH_DEFAULT_PROJECT).environment(tùy chọn): Lọc kết quả theo một môi trường duy nhất (không phân biệt chữ hoa chữ thường).
Ví dụ sử dụng
Lời nhắc tác nhân
Use get_flag_state with:
- featureName: "new-checkout-flow"
- environment: "production"
Tải trọng công cụ
{
"featureName": "new-checkout-flow",
"projectId": "ecommerce",
"environment": "production"
}
Đầu ra công cụ
Trả về tóm tắt văn bản của cờ (loại, bật/lưu trữ/dữ liệu ấn tượng, dự án, tóm tắt môi trường với số lượng chiến lược) cùng với các liên kết UI và API. Đầu ra có cấu trúc bao gồm đối tượng tính năng đầy đủ với tất cả các môi trường và chi tiết chiến lược.
Liệt kê cờ
Công cụ list_flags liệt kê các cờ tính năng trong một dự án và trả về một kho lưu trữ có cấu trúc với phân trang và thứ tự sắp xếp. Cờ đang hoạt động và đã lưu trữ được trả về riêng biệt: gọi nó một lần với archived: false (mặc định) và một lần với archived: true để tập hợp kho lưu trữ đầy đủ cho quy trình kiểm toán.
Khi nào sử dụng
Sử dụng công cụ này khi tác nhân cần khám phá những cờ nào đã tồn tại, ví dụ để kiểm toán dự án, tìm ứng viên để dọn dẹp hoặc xây dựng ngữ cảnh trước khi tạo hoặc bọc cờ. Nó là tương đương có thể gọi bởi tác nhân của tài nguyên unleash://projects/{projectId}/feature-flags (xem Tài nguyên MCP).
Tham số
projectId(tùy chọn): Dự án để liệt kê cờ (mặc định làUNLEASH_DEFAULT_PROJECT; tự động giải quyết khi tồn tại một dự án duy nhất).archived(tùy chọn):trueđể liệt kê cờ đã lưu trữ thay vì cờ đang hoạt động. Mặc định làfalse. Cờ đang hoạt động và đã lưu trữ không thể được trả về trong cùng một phản hồi.limit(tùy chọn): Số cờ tối đa mỗi trang (mặc định: kích thước trang máy chủ, thường là 50).order(tùy chọn): Thứ tự sắp xếp theo tên cờ,aschoặcdesc(mặc định:asc).offset(tùy chọn): Số cờ cần bỏ qua để phân trang (mặc định: 0).
Ví dụ sử dụng
Lời nhắc tác nhân
Use list_flags with:
- projectId: "ecommerce"
- archived: false
Tải trọng công cụ
{
"projectId": "ecommerce",
"archived": false,
"limit": 50,
"order": "asc"
}
Đầu ra công cụ
Trả về tóm tắt văn bản cùng với nội dung có cấu trúc với projectId, archived, order, limit, offset, nextOffset, totalFlags và mảng flags (mỗi phần tử có tên, loại, dự án, trạng thái lưu trữ và liên kết). Sử dụng nextOffset để phân trang qua các dự án lớn.
Liệt kê dự án
Công cụ list_projects liệt kê các dự án Unleash có sẵn cho token được cấu hình, với phân trang và thứ tự sắp xếp.
Khi nào sử dụng
Sử dụng công cụ này khi không biết dự án mục tiêu hoặc khi tác nhân cần chọn một dự án trước khi liệt kê hoặc tạo cờ. Nó là tương đương có thể gọi bởi tác nhân của tài nguyên unleash://projects (xem Tài nguyên MCP).
Tham số
limit(tùy chọn): Số dự án tối đa mỗi trang (mặc định: kích thước trang máy chủ, thường là 20).order(tùy chọn): Thứ tự sắp xếp theo thời gian tạo dự án,aschoặcdesc(mặc định:desc, mới nhất trước).offset(tùy chọn): Số dự án cần bỏ qua để phân trang (mặc định: 0).
Ví dụ sử dụng
Lời nhắc tác nhân
Use list_projects to see which projects are available.
Tải trọng công cụ
{
"limit": 20,
"order": "desc"
}
Đầu ra công cụ
Trả về tóm tắt văn bản cùng với nội dung có cấu trúc với order, limit, offset, nextOffset, totalProjects và mảng projects (mỗi phần tử có id, tên, mô tả, chế độ, thời gian tạo và URL).
Chuyển đổi môi trường cờ
Công cụ toggle_flag_environment bật hoặc tắt cờ tính năng trong một môi trường cụ thể. Đối với triển khai dần dần, hãy cấu hình chiến lược với set_flag_rollout trước khi bật.
Khi nào sử dụng
Sử dụng công cụ này để bật cờ sau khi cấu hình chiến lược triển khai hoặc để tắt cờ trong sự cố hoặc sau khi hoàn tất triển khai.
Tham số
featureName(bắt buộc): Tên cờ tính năng.environment(bắt buộc): Môi trường để chuyển đổi (ví dụ:"production").enabled(bắt buộc):trueđể bật,falseđể tắt.projectId(tùy chọn): ID dự án (mặc định làUNLEASH_DEFAULT_PROJECT).
Ví dụ sử dụng
Lời nhắc tác nhân
Use toggle_flag_environment with:
- featureName: "new-checkout-flow"
- environment: "production"
- enabled: true
Tải trọng công cụ
{
"featureName": "new-checkout-flow",
"environment": "production",
"enabled": true,
"projectId": "ecommerce"
}
Đầu ra công cụ
Trả về xác nhận trạng thái mới, tóm tắt môi trường (đã bật/tắt, số lượng chiến lược) và liên kết đến cờ trong Giao diện quản trị Unleash và Admin API.
Xóa chiến lược cờ
Công cụ remove_flag_strategy xóa cấu hình chiến lược khỏi môi trường cờ tính năng. Sử dụng get_flag_state trước để khám phá ID chiến lược.
Khi nào sử dụng
Sử dụng công cụ này để dọn dẹp các chiến lược cũ hoặc để thay thế chiến lược hiện có bằng cách xóa chiến lược cũ và cấu hình chiến lược mới với set_flag_rollout.
Tham số
featureName(bắt buộc): Tên cờ tính năng.environment(bắt buộc): Môi trường để xóa chiến lược.strategyId(bắt buộc): ID của chiến lược cần xóa (tìm thông quaget_flag_state).projectId(tùy chọn): ID dự án (mặc định làUNLEASH_DEFAULT_PROJECT).
Ví dụ sử dụng
Lời nhắc tác nhân
Use get_flag_state to find strategy IDs for "new-checkout-flow" in production,
then use remove_flag_strategy to delete the old strategy.
Tải trọng công cụ
{
"featureName": "new-checkout-flow",
"environment": "production",
"strategyId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"projectId": "ecommerce"
}
Đầu ra công cụ
Trả về xác nhận xóa, số lượng chiến lược còn lại trong môi trường và liên kết đến cờ trong Giao diện quản trị Unleash và Admin API.
Dọn dẹp cờ
Công cụ cleanup_flag tạo hướng dẫn từng bước để loại bỏ an toàn mã cờ tính năng khỏi cơ sở mã trong khi vẫn giữ đường dẫn mã mong muốn.
Khi nào sử dụng
Sử dụng công cụ này khi cờ tính năng đã hoàn thành vòng đời của nó:
- Sau khi triển khai đạt 100% và cờ không còn cần thiết.
- Khi ngừng một tính năng thử nghiệm (giữ đường dẫn bị tắt).
- Khi loại bỏ một công tắc tắt khẩn cấp không còn cần thiết.
- Trong quá trình dọn dẹp nợ kỹ thuật của các cờ cũ.
Cách thức hoạt động
Công cụ trả về hướng dẫn dọn dẹp toàn diện hướng dẫn LLM qua:
- Tìm tất cả các lần xuất hiện của cờ bằng các mẫu grep.
- Xác định các mẫu sử dụng (khối if-else, biểu thức ba ngôi, mệnh đề bảo vệ, hook, decorator, middleware).
- Loại bỏ kiểm tra cờ trong khi vẫn giữ đường dẫn mã chính xác.
- Dọn dẹp các import không sử dụng với hướng dẫn cụ thể theo ngôn ngữ.
- Xác minh thay đổi với các bước tìm kiếm và kiểm thử sau dọn dẹp.
Nếu preservePath không được cung cấp, công cụ trả về hướng dẫn để hỏi người dùng nên giữ đường dẫn nào trước khi tiếp tục.
Tham số
flagName(bắt buộc): Tên của cờ tính năng cần loại bỏ (ví dụ:"new-checkout-flow").preservePath(tùy chọn):"enabled"để giữ đường dẫn mã khi cờ bật (điển hình cho triển khai đã hoàn tất) hoặc"disabled"để giữ đường dẫn khi cờ tắt (cho các thử nghiệm đã loại bỏ). Nếu bỏ qua, công cụ nhắc bạn hỏi người dùng.files(tùy chọn): Các tệp cụ thể để dọn dẹp. Nếu bỏ qua, tìm kiếm toàn bộ cơ sở mã.language(tùy chọn): Ngôn ngữ lập trình để hướng dẫn dọn dẹp import chuyên biệt (ví dụ:"typescript","python"). Tự động phát hiện từfilesnếu không được cung cấp.
Ví dụ sử dụng
Lời nhắc tác nhân
Use cleanup_flag with:
- flagName: "new-checkout-flow"
- preservePath: "enabled"
Tải trọng công cụ
{
"flagName": "new-checkout-flow",
"preservePath": "enabled",
"files": ["src/components/checkout.tsx", "src/api/checkout.ts"],
"language": "typescript"
}
Đầu ra công cụ
Trả về hướng dẫn markdown bao gồm phạm vi dọn dẹp và đường dẫn được giữ, lệnh grep để tìm tất cả các lần xuất hiện, hướng dẫn loại bỏ theo từng mẫu, dọn dẹp import cụ thể theo ngôn ngữ và các bước xác minh sau dọn dẹp (tìm kiếm lại, chạy kiểm thử, xem xét thủ công).
Tài nguyên MCP
Máy chủ đăng ký tài nguyên MCP để đọc dữ liệu dự án và cờ tính năng. Tất cả tài nguyên trả về JSON và được lưu trong bộ nhớ đệm trong 60 giây.
| Mẫu URI | Mô tả |
|---|---|
unleash://projects{?limit,order,offset} | Liệt kê dự án. Kích thước trang mặc định: 20, sắp xếp theo thời gian tạo (mới nhất trước). |
unleash://projects/{projectId}/feature-flags{?limit,order,offset} | Liệt kê cờ trong một dự án. Kích thước trang mặc định: 50, sắp xếp theo thứ tự bảng chữ cái. |
unleash://projects/{projectId}/feature-flags/{flagName} | Siêu dữ liệu cờ tính năng đơn lẻ. |
Hai mẫu đầu tiên chấp nhận tham số truy vấn tùy chọn: limit (kích thước trang), order (asc hoặc desc) và offset (bắt đầu phân trang). Phản hồi bao gồm các trường fetchedAt, cached, totalProjects hoặc totalFlags và nextOffset.
Tài nguyên so với công cụ: Tài nguyên MCP được kiểm soát bởi ứng dụng, vì vậy nhiều máy khách chỉ hiển thị chúng thông qua UI do người dùng điều khiển (ví dụ: đề cập
#) và không cho phép tác nhân tự gọiresources/read. Khi tác nhân cần liệt kê dự án hoặc cờ theo chương trình, hãy sử dụng các công cụlist_projectsvàlist_flags, chúng trả về cùng dữ liệu thông qua giao diện công cụ. Phân tích kho lưu trữdetect_flagđi qua cùng một đường dẫn.
Ví dụ đọc tài nguyên
Read unleash://projects/ecommerce/feature-flags?limit=10&order=asc
Trả về 10 cờ tính năng đầu tiên trong dự án ecommerce, được sắp xếp theo thứ tự bảng chữ cái, với siêu dữ liệu phân trang.
Kiến trúc
Máy chủ tuân theo thiết kế tập trung, có mục đích rõ ràng.
Cấu trúc
src/
├── index.ts # Stdio CLI entry point
├── server.ts # Transport-agnostic server factory
├── remote.ts # HTTP request handler for embedded mode
├── config.ts # Configuration loading and validation
├── context.ts # Shared runtime context
├── version.ts # Version constant
├── unleash/
│ └── client.ts # Unleash Admin API client
├── tools/
│ ├── types.ts # Shared ToolDefinition type
│ ├── createFlag.ts # create_flag tool
│ ├── evaluateChange.ts # evaluate_change tool
│ ├── detectFlag.ts # detect_flag tool
│ ├── wrapChange.ts # wrap_change tool
│ ├── cleanupFlag.ts # cleanup_flag tool
│ ├── setFlagRollout.ts # set_flag_rollout tool
│ ├── getFlagState.ts # get_flag_state tool
│ ├── toggleFlagEnvironment.ts # toggle_flag_environment tool
│ └── removeFlagStrategy.ts # remove_flag_strategy tool
├── resources/
│ └── unleashResources.ts # MCP resource handlers (projects, flags)
├── prompts/
│ └── promptBuilder.ts # Markdown formatting utilities
├── evaluation/
│ ├── riskPatterns.ts # Risk assessment patterns
│ └── flagDetectionPatterns.ts # Parent flag detection patterns
├── detection/
│ ├── flagDiscovery.ts # Flag discovery strategies
│ └── flagScoring.ts # Scoring and ranking logic
├── knowledge/
│ └── unleashBestPractices.ts # Best practices knowledge base
├── templates/
│ ├── languages.ts # Language detection and metadata
│ ├── wrapperTemplates.ts # Code wrapping templates
│ ├── searchGuidance.ts # Pattern search instructions
│ └── cleanupGuidance.ts # Flag cleanup instructions
└── utils/
├── errors.ts # Error normalization
├── streaming.ts # Progress notifications
└── stdioLogging.ts # Stdio protocol traffic logging
Nguyên tắc thiết kế
- Bề mặt mỏng: Chỉ các điểm cuối cần thiết cho các khả năng cốt lõi.
- Hướng mục đích: Mỗi mô-đun phục vụ một mục đích cụ thể, được xác định rõ.
- Xác thực rõ ràng: Lược đồ Zod xác thực tất cả đầu vào trước khi gọi API.
- Chuẩn hóa lỗi: Tất cả lỗi được chuyển đổi sang định dạng
{code, message, hint}. - Truyền phát tiến trình: Các hoạt động dài cung cấp khả năng hiển thị.
- Tích hợp phương pháp tốt nhất: Hướng dẫn từ tài liệu Unleash được nhúng trong mô tả công cụ.
Cấu hình
Phần này cung cấp tham khảo nhanh cho tất cả các tùy chọn cấu hình.
Biến môi trường:
UNLEASH_BASE_URL: URL phiên bản Unleash của bạn (bắt buộc). Cảhttps://your-instance.getunleash.iovàhttps://your-instance.getunleash.io/apiđều được chấp nhận — máy chủ chuẩn hóa dấu/apiở cuối nếu có, vì vậy bạn có thể dán cùng một giá trị mà hầu hết các SDK Unleash mong đợi.UNLEASH_PAT: Mã thông báo truy cập cá nhân (bắt buộc).UNLEASH_DEFAULT_PROJECT: ID dự án mặc định mà MCP nên sử dụng (tùy chọn).
Cờ CLI:
--dry-run: Mô phỏng hoạt động mà không thực hiện cuộc gọi API thực tế.--log-level: Đặt mức độ chi tiết ghi nhật ký (debug, info, warn, error).
Phương pháp tốt nhất
Máy chủ này khuyến khích các phương pháp tốt nhất của Unleash từ tài liệu chính thức:
Vòng đời cờ
- Tạo với mục đích: Chọn đúng loại cờ để báo hiệu mục đích.
- Ghi chép rõ ràng: Viết mô tả giải thích "lý do".
- Lập kế hoạch dọn dẹp: Cờ tính năng là tạm thời; lập kế hoạch loại bỏ chúng.
- Giám sát sử dụng: Bật dữ liệu ấn tượng cho các cờ quan trọng.
Loại cờ
- Cờ phát hành: Để triển khai tính năng dần dần (loại bỏ sau khi triển khai đầy đủ).
- Cờ thử nghiệm: Để thử nghiệm A/B (loại bỏ sau khi phân tích).
- Cờ vận hành: Để hành vi hệ thống (tồn tại lâu hơn, xem xét định kỳ).
- Công tắc tắt khẩn cấp: Để kiểm soát khẩn cấp (duy trì cho đến khi tính năng ổn định).
- Cờ quyền: Để kiểm soát truy cập (tồn tại lâu hơn, xem xét quyền).
Quy ước đặt tên
- Sử dụng kebab-case:
new-checkout-flow - Mô tả rõ ràng:
enable-ai-recommendationskhông phảiflag1. - Bao gồm phạm vi khi cần:
mobile-push-notifications.
Tham khảo API
Máy chủ này sử dụng Unleash Admin API. Để có tài liệu API đầy đủ, xem:
Các điểm cuối được sử dụng
GET /api/admin/projects- Liệt kê dự ánGET /api/admin/projects/{projectId}/features- Liệt kê cờ tính năngPOST /api/admin/projects/{projectId}/features- Tạo cờ tính năngGET /api/admin/projects/{projectId}/features/{featureName}- Lấy chi tiết cờPOST /api/admin/projects/{projectId}/features/{featureName}/environments/{environment}/strategies- Thêm chiến lược triển khaiDELETE /api/admin/projects/{projectId}/features/{featureName}/environments/{environment}/strategies/{strategyId}- Xóa chiến lượcPOST /api/admin/projects/{projectId}/features/{featureName}/environments/{environment}/on- Bật cờPOST /api/admin/projects/{projectId}/features/{featureName}/environments/{environment}/off- Tắt cờ
Khắc phục sự cố
Vấn đề cấu hình
Lỗi: "UNLEASH_BASE_URL phải là một URL hợp lệ": Đảm bảo URL cơ sở của bạn đầy đủ, bao gồm giao thức. Ví dụ: https://app.unleash-hosted.com/instance. Loại bỏ bất kỳ dấu gạch chéo ở cuối nào.
Lỗi: "UNLEASH_PAT là bắt buộc": Kiểm tra xem tệp .env của bạn có tồn tại và chứa UNLEASH_PAT={{your-personal-access-token}} không. Xác minh rằng token hợp lệ trong Unleash.
Vấn đề API
Lỗi: "HTTP_401": Mã thông báo truy cập cá nhân của bạn có thể không hợp lệ hoặc đã hết hạn. Tạo token mới trong Hồ sơ > Xem cài đặt Hồ sơ > Token API cá nhân > Token mới.
Lỗi: "HTTP_403": Token của bạn không có quyền tạo cờ trong dự án này. Xem lại vai trò và quyền của bạn trong Unleash.
Lỗi: "HTTP_404": ID dự án không tồn tại. Xác nhận ID dự án trong Giao diện quản trị Unleash.
Lỗi: "HTTP_409": Một cờ có tên này đã tồn tại trong dự án. Sử dụng tên khác hoặc tái sử dụng cờ hiện có.
Giấy phép
MIT
Đóng góp
Đây là một dự án có mục đích rõ ràng với phạm vi tập trung. Các đóng góp nên:
- Phù hợp với bề mặt công cụ hiện có và mô hình tài nguyên MCP.
- Duy trì kiến trúc mỏng, hướng mục đích.
- Tuân theo các phương pháp tốt nhất của Unleash.
- Bao gồm tài liệu rõ ràng.