# MCP và Agent Skills: một việc, dựng theo hai cách

[AI Build Along](https://homus.dev/speakers/ai-build-along) · [AI Build Along](https://homus.dev/orgs/ai-build-along)

> Cùng một agent đặt vé xem phim cho cả lớp, chạy với MCP tool rồi thêm một skill: ai làm việc ở mỗi turn, skill nạp ra sao, vì sao nên dùng cả hai.

Topics: Skills, Agents, Context Engineering

Canonical: https://homus.dev/talks/mcp-vs-agent-skills-one-job-built-both-ways-is-mcp-dead

## 1. Is MCP dead? Câu trả lời trước

Video mở đầu bằng câu hỏi trong tiêu đề: MCP đã chết chưa? Theo AI Build Along (video đăng ngày 29/10/2026), MCP là cách một AI agent có được các tool của nó, còn Agent Skills là một cách mới để trao cho agent know-how. Mục tiêu của video: xem xong, bạn biết lúc nào AI agent của mình cần một tool và lúc nào nó cần một skill. Mọi thứ được kể qua một câu chuyện duy nhất.

Sara là một giáo viên. Cô nhờ một AI agent đặt chỗ cho một chuyến đi xem phim của lớp. Nhóm làm video chạy cùng một agent hai lần (demo trong video đăng ngày 29/10/2026). Ở Run 1, agent giữ được 31 ghế nhưng rải trên 6 hàng, và tính giá đầy đủ, 248 euro. Ở Run 2, vẫn agent đó, vẫn yêu cầu đó, nhóm chỉ thêm đúng một skill. Video định nghĩa skill là một trang know-how ngắn. Lần này cả lớp ngồi chung một khối ghế và trả giá dành cho trường học, 126 euro. Khác biệt duy nhất là skill.

![Slide Is MCP dead? so sánh Run 1 và Run 2](https://homus.dev/photos/qJs0YwcNH2M-0103.jpg)

Slide mở đầu: Run 1 chỉ có tool của rạp, 31 ghế giữ được nhưng rải trên 6 hàng, giá đầy đủ 248 euro; Run 2 cùng tool cộng một skill, 31 ghế một khối, giá trường học 126 euro (demo trong video đăng ngày 29/10/2026).

Vậy MCP đã chết chưa? Câu trả lời của video (đăng ngày 29/10/2026) là không. MCP cho agent các tool của nó, những việc nó làm được, như tra lịch chiếu và đặt ghế. Skill thì chỉ cho agent cách dùng chúng cho tốt. Phần còn lại của video đi vào chính xác vì sao. Video cũng nói rõ: Sara, ngôi trường, các bộ phim và giá vé đều là chi tiết bịa ra cho video này.

Kế hoạch của video (video đăng ngày 29/10/2026) gồm các phần: trước hết là việc cần làm và đáp án đúng được tính tay. Sau đó là Run 1 chỉ với tool của rạp, theo dõi từng turn: ai hỏi và ai làm việc. Tiếp theo là Run 2 có thêm một skill. Rồi tới một phép so sánh công bằng, cách kết hợp cả hai, và một bài kiểm tra ngắn.

## 2. Việc cần làm: một buổi xem phim của lớp học, bốn quy tắc

Phần 1 là việc cần làm. Sara dạy ở trường tiểu học Maple Hill. Cô hỏi: tôi có thể đưa 28 học sinh 8 và 9 tuổi cùng 3 giáo viên đến xem không? Phim là Space Turtles, suất 10 giờ sáng thứ Năm. Phim được xếp hạng U, nghĩa là mọi lứa tuổi.

Rạp phim trong câu chuyện có bốn quy tắc cho các buổi đi xem của trường học:

- Quy tắc 1, giá trường học: 4,50 euro mỗi học sinh, và cứ mười học sinh (làm tròn lên) thì có một người lớn được vào miễn phí (giá bịa cho câu chuyện, video đăng ngày 29/10/2026).

- Quy tắc 2: ít nhất một người lớn cho mỗi mười học sinh.

- Quy tắc 3: hạng tuổi của phim phải hợp với học sinh nhỏ tuổi nhất.

- Quy tắc 4: cả lớp ngồi chung một khối ghế.

Model không biết quy tắc nào trong số này. Chúng là know-how riêng của rạp này.

Video (video đăng ngày 29/10/2026) tính tay đáp án đúng trước. 28 học sinh chia 10 là 2,8; làm tròn lên thì cần ba người lớn. Sara đưa ba người đi: ổn. Space Turtles dành cho mọi lứa tuổi, nên hạng tuổi phù hợp. 28 học sinh cộng ba giáo viên là 31 ghế ngồi chung. Giá theo mức trường học: 28 nhân 4,50 euro là 126 euro. Ba người lớn được miễn phí, một người cho mỗi mười học sinh làm tròn lên. Nếu tính giá đầy đủ, 31 ghế tốn 248 euro, thừa 122 euro. Video dặn người xem nhớ các con số này.

Đáp án đúng được tính tay trong video đăng ngày 29/10/2026: ba người lớn, 31 ghế chung một khối, 126 euro theo giá trường học thay vì 248 euro giá đầy đủ.

## 3. Nhân viên mới: tay chân và know-how, ba từ mới

Trước khi dựng bất cứ thứ gì, video (video đăng ngày 29/10/2026) đưa ra một hình ảnh. Một nhân viên mới của rạp biết dùng máy tính đặt vé. Thứ đó giống một tool: nó cho agent đôi tay, để làm được việc. Người quản lý đưa cho nhân viên đó một trang hướng dẫn cho các buổi xem của trường học. Thứ đó giống một skill: đó là know-how, cách làm tốt công việc này. Nhóm làm video dựng cả hai thứ thật. Run 1 chỉ cho agent đôi tay. Run 2 thêm know-how.

Run 1 cần ba từ mới, và video (video đăng ngày 29/10/2026) lại dùng hình ảnh người nhân viên. Máy tính đặt vé của rạp đưa ra một danh sách các việc nó làm được. Trong phần mềm, thứ đó là một server: một chương trình cung cấp tool cho các chương trình khác. MCP là một bộ quy tắc đã thống nhất cho danh sách đó; tên đầy đủ là Model Context Protocol. Protocol là một bộ quy tắc đã thống nhất cho các message. Với MCP, bất kỳ app AI nào cũng dùng được bất kỳ server nào. Một việc trong danh sách là một tool, ví dụ tool lấy lịch chiếu.

Ba từ mới mà video giải thích trước Run 1, gắn với hình ảnh máy tính đặt vé của rạp (video đăng ngày 29/10/2026).

## 4. Run 1: MCP server của rạp, hai tool, viết bằng Python

Phần 2 là Run 1 (demo trong video đăng ngày 29/10/2026). Rạp chạy một MCP server, và video gọi danh sách tool của nó là thực đơn. Tool 1 lấy lịch chiếu (get_showtimes): nó trả về các suất chiếu của một phim, gồm giờ bắt đầu, hạng tuổi, giá và số ghế trống. Tool 2 đặt ghế (book_seats): nó giữ ghế, tức giữ chỗ cho bạn. Tool này có một công tắc tên là together; đặt thành true, nghĩa là có, thì nó giữ các ghế thành một khối. Video lưu ý thứ bị thiếu: không có gì về trường học, giá trường học hay người lớn đi kèm.

Tiếp theo là server viết bằng Python (demo trong video đăng ngày 29/10/2026). Dòng 1 nạp code server từ package MCP chính thức; package là code làm sẵn mà bạn cài vào. Dòng 3 tạo một server tên là Example Cinemas. Dòng có dấu @ đánh dấu một tool. Bên dưới nó là một function, một khối code có tên. Tên của nó là get_showtimes. Đoạn văn bản trong ba dấu nháy trở thành phần mô tả của tool. book_seats là tool thứ hai. Nó nhận vào một suất chiếu, một số ghế, và together. together là false trừ khi model yêu cầu true. Mấy dòng cuối khởi động server, rồi server chờ message từ app.

![Code Python rút gọn của cinema_server.py với hai tool](https://homus.dev/photos/qJs0YwcNH2M-0456.jpg)

File cinema_server.py rút gọn, ghi MCP 2.3.0: dòng 1 nạp code server, dòng 3 tạo server Example Cinemas, rồi hai tool get_showtimes và book_seats, trong đó together mặc định là False (code trong video đăng ngày 29/10/2026).

Nội dung file trên màn hình:

```
from mcp.server.mcpserver import MCPServer

mcp = MCPServer("Example Cinemas")

@mcp.tool()
def get_showtimes(film: str) -> list[dict]:
"""Showtimes for one film: start, rating, price, free seats."""
…

@mcp.tool()
def book_seats(showtime_id: str, seats: int,
together: bool = False) -> str:
"""Hold seats. together=true keeps them in one block."""
…

if __name__ == "__main__":
mcp.run()  # stdio by default
```

Video cảnh báo một cái bẫy nếu bạn chép code từ các tutorial cũ: chúng dùng một dòng đầu khác. Theo video đăng ngày 29/10/2026, với package MCP lúc quay, phiên bản 2, dòng cũ đó báo lỗi, và thông báo lỗi nói rằng tên đã đổi. Video bảo dùng dòng như trên màn hình.

## 5. Ba làn: model, app, MCP server, và thứ app gửi đầu tiên

Trước khi xem Run 1, video (video đăng ngày 29/10/2026) giới thiệu ba nhân vật, bằng một hình ảnh ba làn. Ở giữa là app: chương trình agent trên máy tính của bạn. Sara gõ message của cô vào đó. App chuyển mọi message. Model và rạp không bao giờ nói chuyện trực tiếp với nhau.

Bên trái là model, tên khác là LLM (Large Language Model). Trong video này, model là Claude. Theo video (đăng ngày 29/10/2026), nó chạy trên máy tính của Anthropic trên Internet; nó chỉ đọc văn bản và viết văn bản, không mở được file và không gọi được rạp. Bên phải là MCP server của rạp, giữ các tool của rạp: lịch chiếu và đặt chỗ. App và model gộp lại là agent, nhưng model không bao giờ gọi rạp. Nó chỉ hỏi app. App chuyển việc đi và mang câu trả lời về.

Hình ảnh ba làn của video đăng ngày 29/10/2026: model chỉ hỏi app; app chuyển việc sang server của rạp (hoặc làm trên máy bạn) rồi mang câu trả lời về.

Video (video đăng ngày 29/10/2026) theo dõi mỗi lần chạy theo từng turn. Trong mỗi turn, model yêu cầu một việc. App làm cho xong việc đó: nó hỏi server của rạp, hoặc làm ngay trên máy tính của bạn. Rồi app mang câu trả lời về cho model.

Trước turn đầu tiên, app chuẩn bị (demo trong video đăng ngày 29/10/2026). Đầu tiên, nó hỏi server của rạp: bạn có những tool nào? Server trả lời: get_showtimes và book_seats. Video dùng một số màu hồng để đánh dấu đây là câu hỏi đầu tiên của app gửi rạp: vé số 1. Sau đó app gửi request đầu tiên cho model. Request là một message gửi tới một chương trình khác; câu trả lời quay về gọi là response.

Trong request đó (demo trong video đăng ngày 29/10/2026), trước hết là system prompt: đoạn văn bản cố định mà app đưa cho model trong mọi request. Ở đây chỉ có một dòng: bạn là trợ lý đặt vé của Example Cinemas. Không có gì về các buổi xem của trường học. Thứ hai là message của Sara. Thứ ba là hai tool của rạp, kèm tên và việc chúng làm. Model không tự chạy được các tool này; nó chỉ có thể nhờ app chạy.

## 6. Run 1: hai turn bằng lời thường, và chỗ ngồi trong phòng chiếu

Turn 1 trên 2 (demo trong video đăng ngày 29/10/2026). Model đọc message của Sara. Nó nhờ app: vui lòng lấy lịch chiếu của Space Turtles. Ai làm việc? Server của rạp. App chuyển việc sang server bằng tool get_showtimes. Server gửi lại câu trả lời, và app đưa câu trả lời cho model: thứ Năm lúc 10 giờ sáng, hạng U cho mọi lứa tuổi, 8 euro một ghế và còn 64 ghế trống. Giờ model biết suất chiếu và giá đầy đủ, 8 euro một ghế.

Turn 2 trên 2 (demo trong video đăng ngày 29/10/2026). Model nhờ app: vui lòng đặt 31 ghế cho suất chiếu này. Nó không yêu cầu các ghế ngồi cạnh nhau. Ai làm việc? Lại là server của rạp. App chuyển việc sang server bằng tool book_seats, rồi đưa câu trả lời cho model: đã giữ 31 ghế thành 7 nhóm trên 6 hàng. Giờ model biết ghế đã được giữ, nhưng không ai yêu cầu cả lớp ngồi chung.

Sau turn 2, model không yêu cầu thêm tool nào. Nó viết câu trả lời: xong, 31 ghế, mỗi ghế 8 euro, tổng 248 euro. Câu trả lời của model còn ghi stop reason là end_turn, nghĩa là "tôi đã xong". App hiển thị câu trả lời cho Sara. Phép tính tay ra 126 euro trong một khối ghế; kết quả này thừa 122 euro (demo trong video đăng ngày 29/10/2026).

Video (video đăng ngày 29/10/2026) lưu ý một điều: các câu trả lời của model ở đây do nhóm làm video viết, đúng định dạng Claude dùng, rồi phát lại, để người xem thấy cùng một lần chạy mỗi lần xem.

Tiếp theo là sơ đồ phòng chiếu, màn hình ở phía trên (demo trong video đăng ngày 29/10/2026). Ghế xám là ghế khách khác đã ngồi. Ghế cam là ghế của Run 1. Server lấy những ghế trống đầu tiên nó tìm thấy: 31 ghế thành 7 nhóm. Slide ghi: ba giáo viên không thể trông 28 đứa trẻ như vậy.

![Sơ đồ phòng chiếu với ghế cam của Run 1 rải từ hàng A tới F](https://homus.dev/photos/qJs0YwcNH2M-1023.jpg)

Ghế xám đã có khách, ghế cam là 31 ghế được giữ, lấy những ghế trống đầu tiên từ hàng A tới F, thành 7 nhóm (demo trong video đăng ngày 29/10/2026).

## 7. Run 1 thành message thật: khớp nhau bằng số vé

Giờ là hai turn đó dưới dạng message thật (demo trong video đăng ngày 29/10/2026). Turn 1: bên trái là message của model gửi app. Type của nó là tool_use, nghĩa là "vui lòng chạy tool này giúp tôi". Name là get_showtimes và input là bộ phim. Nó còn có một ID, toolu_01. Video bảo hãy coi đó như một số vé: số màu tím là vé của model cho việc này.

Ở giữa, app hỏi server của rạp (demo trong video đăng ngày 29/10/2026). Đây là một message MCP. Method là tools/call, nghĩa là chạy một tool. ID của nó là 2; số màu hồng là vé của app ở rạp. Vì sao là 2? Vé số 1 là câu hỏi của app về danh sách tool. Câu trả lời của rạp mang cùng vé hồng số 2, nhờ vậy app biết nó trả lời câu hỏi nào.

Đọc ba ô từ trái sang phải: model hỏi, app hỏi rạp, app trả lời model. Ô bên phải có type là tool_result, và tool_use_id là toolu_01, cùng vé tím với câu hỏi. Content là văn bản của rạp: hạng U, 8 euro, 64 ghế trống (demo trong video đăng ngày 29/10/2026). Video bảo bỏ qua các dấu gạch chéo ngược: chúng chỉ cho thấy dấu nháy nằm bên trong văn bản.

![Turn 1 của Run 1 dưới dạng ba message JSON](https://homus.dev/photos/qJs0YwcNH2M-1203.jpg)

Turn 1 thành message thật: tool_use của model với id toolu_01, lời gọi MCP tools/call với id 2 kèm câu trả lời cùng id, và tool_result mang lại toolu_01 với hạng U, giá 8.0, 64 ghế trống. Chú thích dưới slide: tím là vé của model, hồng là vé của app ở rạp (demo trong video đăng ngày 29/10/2026).

Video nhắc lại: số tím là vé của model cho việc này, số hồng là vé của app ở rạp, và mỗi câu trả lời mang cùng số vé với câu hỏi của nó. Nói cho chính xác, theo video đăng ngày 29/10/2026, các message của app là thật, được ghi lại vào ngày 26 tháng 10; các câu trả lời của model do nhóm làm video viết theo định dạng của Claude; các số toolu chỉ là ví dụ.

Turn 2 dưới dạng message thật (demo trong video đăng ngày 29/10/2026). tool_use của model là book_seats, với vé tím mới toolu_02. Input là showtime S41, mã của rạp cho suất 10 giờ thứ Năm, và 31 ghế. Không có together. App hỏi rạp bằng vé hồng số 3, và câu trả lời quay về với vé số 3. Rồi app trả lời model bằng toolu_02, cùng vé tím. Content là: đã giữ 31 ghế trên 6 hàng.

## 8. Vì sao cả cuộc hội thoại bị gửi lại, và Run 1 sai ở đâu

Còn một chuyện nữa xảy ra ở mọi turn. Video vẽ request đầu tiên như một chồng giấy: trên cùng là system prompt và các tool, bên dưới là message của Sara, khoảng 900 ký tự. Sau turn 1, app gọi model lần nữa. Nó gửi lại cả chồng, cộng thêm hai phần mới là câu hỏi của model và câu trả lời, khoảng 1.300 ký tự. Sau turn 2, chồng giấy lại cao hơn, khoảng 1.700 ký tự (số đo trong video đăng ngày 29/10/2026; slide ghi 876, 1.337 và 1.697 ký tự).

Mỗi request gửi lại toàn bộ cuộc hội thoại, nên chồng giấy cao dần theo từng turn của Run 1 (số trên slide của video đăng ngày 29/10/2026).

Vì sao phải gửi lại mọi thứ? Model không nhớ gì giữa các request; video gọi điều này là stateless. Vì thế app gửi cả cuộc hội thoại mỗi lần. Model đọc chồng giấy theo token; token là một mẩu nhỏ của một từ. Theo video đăng ngày 29/10/2026, bạn trả tiền cho mọi token model đọc, nên mỗi turn tốn thêm một chút.

Giờ đối chiếu Run 1 với đáp án đúng (demo trong video đăng ngày 29/10/2026). Quy tắc 1, giá: 248 euro thay vì 126. Quy tắc 2, người lớn: không hề được kiểm; ba người lớn cho 28 học sinh là do may. Quy tắc 3, hạng tuổi: cũng không được kiểm; Space Turtles dành cho mọi lứa tuổi, lại là may. Quy tắc 4, ngồi chung: bảy nhóm trên sáu hàng. Các tool đã làm đúng y những gì được yêu cầu, nhưng không ai nói cho agent biết các quy tắc. Theo video (đăng ngày 29/10/2026), một model thông minh có thể đoán ra nên để cả lớp ngồi chung, nhưng nó không thể biết giá trường học hay quy tắc người lớn của rạp này. Đó là know-how của rạp.

Rồi nhóm làm video hỏi rạp thêm một lần, với một suất chiếu khác: S42. Đó là Night Train, hạng 15. App yêu cầu rạp đặt 31 ghế cho suất này. Câu trả lời: đã giữ 31 ghế cho Night Train, lại trên sáu hàng. Vé hồng là số 4, vì đây là câu hỏi thứ tư của app gửi rạp. Night Train dành cho người từ 15 tuổi trở lên, còn học sinh mới 8 tuổi. Tool vẫn giữ ghế như thường (demo trong video đăng ngày 29/10/2026).

Tạm kết phần này, theo video (đăng ngày 29/10/2026): một MCP tool là đôi tay của agent. Nó làm đúng y những gì được yêu cầu, nhưng agent cần know-how để yêu cầu đúng thứ.

## 9. Run 2: skill như một bìa hồ sơ, và thư mục skill

Phần 3 là Run 2. Video bảo hãy hình dung trang hướng dẫn của người quản lý cho các buổi xem của trường học như một bìa hồ sơ (binder). Trên trang bìa có tiêu đề "school class visit" và một dòng: dùng khi một giáo viên muốn đưa học sinh đi xem phim. Người nhân viên đọc trang bìa và biết khi nào cần mở hồ sơ. Bên trong là các trang: sáu bước đánh số, hỏi bao nhiêu học sinh, kiểm hạng tuổi của phim, kiểm người lớn đi kèm, và cứ thế. Trong túi hồ sơ có một máy tính bỏ túi: gõ 28 và 3, đọc một dòng là tổng tiền.

Theo video (video đăng ngày 29/10/2026), trong một skill, trang bìa được gọi là nhãn (label). Các trang là các bước, và máy tính bỏ túi là một script, một chương trình nhỏ. Vậy một skill chính là bìa hồ sơ này, được giữ dưới dạng một thư mục trên máy tính.

Video (video đăng ngày 29/10/2026) đi chậm qua thư mục đó, với ba từ đi từ bìa hồ sơ sang máy tính. Bản thân bìa hồ sơ là một thư mục (folder): một chỗ trên máy tính chứa các file. Khi viết tên thư mục, ta kết thúc bằng một dấu gạch chéo. Một trang là một file. File chính tên là SKILL.md, viết hoa. Đuôi .md nghĩa là markdown: văn bản thường kèm vài ký hiệu đơn giản. Máy tính bỏ túi là một script, một chương trình nhỏ; máy tính chạy nó và nó in ra một dòng văn bản.

Hình ảnh bìa hồ sơ của video đăng ngày 29/10/2026, ghép với ba phần của thư mục skill: nhãn, các bước và script.

Đây là thư mục skill thật (trong video đăng ngày 29/10/2026). Tên của nó là school-class-visit; dấu gạch chéo ở cuối cho biết đó là thư mục. App giữ mọi thư mục skill trong một thư mục tên skills. Bên trong có một file, SKILL.md viết hoa. Phần trên cùng của file là nhãn: nó nói skill là gì và khi nào dùng. App đọc nhãn khi bắt đầu mỗi cuộc chat và đặt nó trước mặt model.

Phần còn lại của cùng file chứa sáu bước (demo trong video đăng ngày 29/10/2026). Model chỉ đọc chúng khi một request khớp với nhãn. Một thư mục tên scripts chứa máy tính bỏ túi, group_price.py; đuôi .py nghĩa là một chương trình Python. App chạy nó trên máy tính của bạn khi cần tính giá. Model chỉ đọc dòng mà script in ra. Vậy một thư mục, ba người đọc.

Theo video (đăng ngày 29/10/2026), một skill còn có thể có thư mục references cho các tài liệu dài hơn, và thư mục assets cho template hay hình ảnh. Skill của video không cần chúng.

## 10. SKILL.md: nhãn, các bước, và script tính giá

Giờ đến chính file đó, đi chậm (file trong video đăng ngày 29/10/2026). Phần 1 là nhãn ở ngay đầu file. Hãy nhìn ba dấu gạch ngang: một dòng gồm ba dấu gạch ngang là một hàng rào (fence). Hàng rào đầu tiên mở nhãn, hàng rào thứ hai đóng lại. Nhãn này có tên là frontmatter. Mỗi dòng trong đó là một tên, một dấu hai chấm và một giá trị; cách viết đơn giản này gọi là YAML.

Dòng đầu là name: school-class-visit. Chỉ gồm chữ thường, chữ số và dấu gạch nối, và trùng với tên thư mục. Dòng thứ hai là description: nó nói skill làm gì, lên kế hoạch cho một buổi xem phim của lớp học, và khi nào dùng nó, khi một giáo viên muốn đưa học sinh đi xem phim. Tối đa 1.024 ký tự. Lúc bắt đầu, model chỉ thấy nhãn này, khoảng một trăm token cho mỗi skill (theo video đăng ngày 29/10/2026). Vì vậy video khuyên viết phần "khi nào" cho rõ: nó quyết định skill có được dùng hay không.

Nội dung nhãn trên màn hình:

```
---
name: school-class-visit
description: Plans a school class visit at Example Cinemas. Use when a teacher asks to bring pupils to a film.
---
```

Phần 2 là body: mọi thứ bên dưới hàng rào thứ hai, viết bằng markdown. Dấu # tạo một tiêu đề: School class visit. Sau đó là sáu bước đánh số.

- Bước 1: hỏi số học sinh, tuổi của các em, số người lớn, bộ phim và ngày.

- Bước 2: gọi get_showtimes, rồi kiểm hạng tuổi của phim so với học sinh nhỏ tuổi nhất. U là mọi lứa tuổi, PG là từ 8 tuổi trở lên. Đó là quy tắc 3 của rạp.

- Bước 3: ít nhất một người lớn cho mỗi mười học sinh; nếu không đủ, hỏi thêm người lớn. Đó là quy tắc 2.

- Bước 4: chạy script tính giá và báo đúng giá đó. Đó là quy tắc 1, giá trường học.

- Bước 5: gọi book_seats với together đặt thành true. Đó là quy tắc 4, một khối ghế.

- Bước 6: gửi giáo viên một bản tóm tắt: phim, giờ, ghế và giá.

![Body của SKILL.md với sáu bước, ghép với bốn quy tắc của rạp](https://homus.dev/photos/qJs0YwcNH2M-1912.jpg)

Body của SKILL.md, dòng 6 đến 14 đúng như trong file, đặt cạnh bốn quy tắc của rạp mà mỗi bước ứng với (file trong video đăng ngày 29/10/2026).

Nội dung body trên màn hình:

```
# School class visit

1. Ask for the number of pupils, their ages, the number of adults, the film and the date.
2. Call get_showtimes. Check the film's rating fits the youngest pupil:
U = all ages, PG = 8 and up, 12 = 12 and up, 15 = 15 and up.
3. Check there is at least 1 adult for every 10 pupils. If not, ask for more adults.
4. Run scripts/group_price.py with the pupils and the adults. Quote that price.
5. Call book_seats with together: true, so the class sits in one block.
6. Send the teacher a summary: film, time, seats and price.
```

Giờ cả bốn quy tắc đã nằm trong các bước. Theo video (đăng ngày 29/10/2026), các bước tự chúng không làm việc gì; chúng cho model biết dùng tool nào và khi nào.

Phần 3 của skill là máy tính bỏ túi (demo trong video đăng ngày 29/10/2026). Dòng 1 là một comment, một ghi chú cho người đọc, nêu quy tắc bằng lời; máy tính bỏ qua nó. Dòng 2 là các import: một import nạp một hộp đồ nghề làm sẵn, math để làm tròn lên và sys để đọc những gì bạn gõ sau tên script. Script đọc hai số: số học sinh, rồi số người lớn. Người lớn miễn phí: một cho mỗi mười học sinh làm tròn lên, nhưng không bao giờ nhiều hơn số người lớn thực sự đi. 28 học sinh cho ra ba. Rồi tới tổng tiền: người lớn đi thêm trả đủ tám euro. Và một dòng in ra.

![Script group_price.py và lệnh chạy với 28 và 3](https://homus.dev/photos/qJs0YwcNH2M-2123.jpg)

Toàn bộ scripts/group_price.py, và một lần chạy thật trên máy (gõ tay ở đây; trong Run 2 app chạy nó): 28 và 3 vào, một dòng "total 126.00" ra, và chỉ dòng đó tới được model (demo trong video đăng ngày 29/10/2026).

Nội dung script và lệnh chạy trên màn hình:

```
# School rate: 4.50 per pupil, 1 adult free per 10 pupils
import math
import sys

pupils = int(sys.argv[1])
adults = int(sys.argv[2])
free = min(adults, math.ceil(pupils / 10))
total = pupils * 4.50 + (adults - free) * 8.00
print(f"{pupils} pupils x 4.50, {free} adults free: total {total:.2f}")
```

```
$ python skills/school-class-visit/scripts/group_price.py 28 3
28 pupils x 4.50, 3 adults free: total 126.00
```

Chạy với 28 và ba. Dấu đô la nghĩa là "gõ lệnh này". Nó in ra: ba người lớn miễn phí, tổng 126, giống phép tính tay (demo trong video đăng ngày 29/10/2026). Vậy hai con số đi vào, một dòng đi ra, và chỉ dòng đó tới được model. Model không bao giờ đọc code.

## 11. Skill được nạp thế nào: ba cấp, và thứ app gửi đầu tiên

Một từ mới: context window. Video (video đăng ngày 29/10/2026) ví nó như bàn làm việc của agent. Model chỉ đọc được những gì nằm trên bàn, và chỗ trên bàn được đếm bằng token.

Một skill lên bàn của agent bằng cách nào? Video (video đăng ngày 29/10/2026) lại đưa một hình ảnh trước. Người nhân viên để trang bìa của mọi bìa hồ sơ trên bàn; các bìa hồ sơ nằm trên kệ. Đó là cấp một. Khi một giáo viên gọi tới, họ mở bìa hồ sơ buổi xem của trường học, chỉ đúng bìa đó. Đó là cấp hai. Để tính giá, họ dùng máy tính bỏ túi và chỉ ghi lại đáp số. Đó là cấp ba. Tên gọi cho cách này là progressive disclosure: cho thấy một ít trước, chỉ cho thấy thêm khi cần.

Ba cấp của progressive disclosure theo hình ảnh "bàn làm việc nhỏ" trong video đăng ngày 29/10/2026.

Run 2 là một lần chạy mới, nên vé hồng đếm lại từ 1. Vé số 1: trước turn đầu tiên, app hỏi server của rạp về các tool của nó, và nhận về cùng hai tool. Rồi app gửi request đầu tiên cho model (demo trong video đăng ngày 29/10/2026). System prompt có thêm một phần: nhãn của skill, gồm tên và mô tả, khoảng một trăm token theo Anthropic. Đây là cấp một: lúc bắt đầu, chỉ nhãn được gửi tới model. Sau đó là message của Sara, giống hệt Run 1.

Lần này có bốn tool (demo trong video đăng ngày 29/10/2026). Hai tool từ rạp là get_showtimes và book_seats, và hai tool app tự thêm vào để model có thể mở file skill và chạy script của skill trên máy bạn: read_file và run_script.

Đây là system prompt thật, đã rút gọn (demo trong video đăng ngày 29/10/2026). Mỗi phần được bọc trong một cái tên đặt trong dấu ngoặc nhọn; thứ đó gọi là tag. Nhãn nằm bên trong tag available_skills. Nó còn ghi file skill nằm ở đâu. Và một chỉ dẫn: khi một request khớp với một skill, hãy đọc SKILL.md của nó trước và làm theo.

![Request đầu tiên của Run 2: nhãn skill, message của Sara, bốn tool và đoạn system thật](https://homus.dev/photos/qJs0YwcNH2M-2323.jpg)

Trước turn đầu tiên của Run 2: request đầu tiên gồm system prompt có thêm nhãn của skill (khoảng 100 token, cấp 1), message của Sara và bốn tool; bên phải là đoạn system thật đã rút gọn với tag available_skills, đường dẫn SKILL.md và chỉ dẫn đọc file bằng read_file (demo trong video đăng ngày 29/10/2026).

Đoạn system trên màn hình:

```

school-class-visit
Plans a school class visit at
Example Cinemas. Use when a teacher asks
to bring pupils to a film.
skills/school-class-visit/SKILL.md

When a request matches a skill, read its SKILL.md
with read_file first and follow it.
```

## 12. Run 2: bốn turn bằng lời thường

Turn 1 trên 4 (demo trong video đăng ngày 29/10/2026). Model so message của Sara với nhãn: "teacher", "bring pupils". Khớp. Vì vậy model nhờ app: vui lòng mở file skill school-class-visit. Ai làm việc? Máy tính của bạn. App mở file trên máy bạn; server của rạp không được dùng. App đưa file cho model: nhãn và sáu bước. Giờ model biết sáu bước. Đây là cấp hai: các bước chỉ tới khi cần.

Turn 2 trên 4 (demo trong video đăng ngày 29/10/2026). Bước 2 của skill ghi: gọi get_showtimes. Vì vậy model nhờ app: vui lòng lấy lịch chiếu của Space Turtles. Ai làm việc? Server của rạp. App chuyển việc sang server bằng tool get_showtimes, rồi đưa câu trả lời cho model, giống hệt Run 1: hạng U, 8 euro, 64 ghế trống. Giờ model biết suất chiếu. Model kiểm hai quy tắc chỉ bằng cách đọc câu trả lời, không cần tool nào: hạng U hợp với học sinh nhỏ tuổi nhất, 8 tuổi; và 28 học sinh cần 3 người lớn, Sara đưa 3 người đi.

Turn 3 trên 4 (demo trong video đăng ngày 29/10/2026). Bước 4 của skill ghi: chạy script tính giá. Vì vậy model nhờ app: vui lòng chạy script tính giá với 28 và 3. Ai làm việc? Lại là máy tính của bạn. App chạy script trên máy bạn; server của rạp không được dùng. App đưa câu trả lời của script cho model: 28 học sinh, mỗi em 4,50 euro, 3 người lớn miễn phí, tổng 126. Giờ model biết giá. Đây là cấp ba: code của script không bao giờ tới model, chỉ dòng in ra của nó.

Turn 4 trên 4 (demo trong video đăng ngày 29/10/2026). Bước 5 của skill ghi: đặt các ghế ngồi chung. Vì vậy model nhờ app: vui lòng đặt 31 ghế ngồi chung. Ai làm việc? Server của rạp. App chuyển việc sang server bằng tool book_seats với together đặt thành true, rồi đưa câu trả lời cho model: đã giữ 31 ghế thành một khối, hàng F, G và H ở cuối phòng. Giờ model biết cả lớp ngồi chung một khối.

Sau turn 4, model viết câu trả lời cuối cùng với stop reason là end_turn. App hiển thị cho Sara: 31 ghế ngồi chung theo giá trường học, 126 euro, 3 người lớn miễn phí. Kết quả khớp chính xác với phép tính tay (demo trong video đăng ngày 29/10/2026). Cùng agent, cùng tool của rạp, cùng yêu cầu. Chỉ know-how thay đổi.

Bốn turn của Run 2 và ai làm việc ở mỗi turn (demo trong video đăng ngày 29/10/2026).

## 13. Run 2 thành message thật, và Claude Code làm điều tương tự

Giờ là bốn turn đó dưới dạng message thật, cùng màu như Run 1: tím là vé của model, hồng là vé của app ở rạp (demo trong video đăng ngày 29/10/2026).

Turn 1 (demo trong video đăng ngày 29/10/2026): tool_use của model là read_file. Input của nó là một đường dẫn tới chỗ file nằm: các thư mục trước, rồi tới tên file. Vé tím là toolu_01. App mở file trên máy bạn. Ở đây không có message MCP nào, nên không có vé hồng. tool_result mang toolu_01, cùng vé tím. Content là toàn bộ file skill dưới dạng văn bản thường: nhãn, rồi sáu bước.

Turn 2 (demo trong video đăng ngày 29/10/2026): model yêu cầu get_showtimes với vé tím toolu_02. App hỏi server của rạp bằng vé hồng số 2, và câu trả lời quay về với vé số 2. tool_result mang toolu_02; bên trong là hạng U, 8 euro, 64 ghế trống.

Turn 3 (demo trong video đăng ngày 29/10/2026): model yêu cầu run_script với toolu_03. Đường dẫn là script tính giá bên trong thư mục skill. args, viết tắt của arguments, là 28 và 3, các giá trị script nhận vào. App chạy lệnh này trên máy bạn. Lại không có message MCP nào, nên không có vé hồng. Code của script ở lại trên máy bạn. tool_result mang toolu_03; content là dòng duy nhất script in ra: tổng 126.

Turn 4 (demo trong video đăng ngày 29/10/2026): model yêu cầu book_seats với toolu_04. Lần này input có together đặt thành true. App hỏi server của rạp bằng vé hồng số 3, cũng với together là true, và câu trả lời quay về với vé số 3. tool_result mang toolu_04: đã giữ 31 ghế trên 3 hàng liền nhau.

Tóm lại Run 2 gồm 4 turn. Turn 1, file skill trên máy bạn. Turn 2, lịch chiếu từ server của rạp. Turn 3, script tính giá trên máy bạn. Turn 4, đặt chỗ trên server của rạp. Model không bao giờ chạm vào máy bạn hay vào rạp; nó chỉ hỏi. App chuyển mọi câu hỏi và mọi câu trả lời. Và như ở Run 1, app gửi lại mọi thứ, mỗi lần. Năm request gửi tới model, từ khoảng 1.600 ký tự lên khoảng 3.700 (số đo trong video đăng ngày 29/10/2026; slide ghi 1.656 và 3.716).

Claude Code, coding agent của Anthropic, làm điều tương tự thế nào? Ở đây Claude Code là app ở giữa. Nó chuyển mọi message, đọc file skill và chạy script trên máy bạn. Nhóm làm video đã ghi lại các request thật của nó (Claude Code 2.1.310, video đăng ngày 29/10/2026). Danh sách skill nằm trong một system message, với tên và mô tả của từng skill, cũng là nhãn như trước. Khi request của Sara khớp, model yêu cầu một tool tên là Skill, kèm tên của skill. Claude Code trả lời bằng một tool_result "Launching skill", rồi vị trí thư mục và các bước từ file SKILL.md. Nhãn bị bỏ ra, vì model đã thấy nó rồi. Với script, model yêu cầu tool Bash; Bash chạy một lệnh trên máy bạn, và chỉ dòng in ra quay về. Bạn cũng có thể bắt đầu một skill bằng tay: gõ dấu gạch chéo, rồi tên của nó.

![Bốn ô cho thấy Claude Code dùng tool Skill và tool Bash](https://homus.dev/photos/qJs0YwcNH2M-3023.jpg)

Cùng skill đó trong Claude Code 2.1.310: danh sách skill trong một system message, model gọi tool Skill, Claude Code trả lời "Launching skill" kèm thư mục và các bước, và script chạy qua tool Bash; dòng cuối ghi gõ tay /school-class-visit (demo trong video đăng ngày 29/10/2026).

## 14. Đổi một chi tiết, kiểm bằng validator, đặt thư mục ở đâu

Giờ đổi một chi tiết: Sara chỉ đưa hai giáo viên đi. 28 học sinh cần ba người lớn. Bước 3 ghi: nếu không đủ, hỏi thêm người lớn. Vì vậy agent hỏi Sara: có thể thêm một người lớn nữa đi cùng không? (demo trong video đăng ngày 29/10/2026). Nhưng theo video, một skill là văn bản mà model làm theo, và một model có thể bỏ qua một bước. Video nói sẽ quay lại chuyện này sau.

Video ví validator như một trình kiểm tra chính tả: nó kiểm một thư mục skill xem có lỗi không. Cài validator miễn phí skills-ref bằng pip (pip là trình cài đặt của Python; skills-ref 0.1.1, video đăng ngày 29/10/2026), rồi chạy agentskills validate trên thư mục. Skill của video hợp lệ. Video cho xem một lỗi mà người mới hay gặp: tên thư mục có chữ hoa và dấu gạch dưới; nó phải trùng với tên skill. Một lỗi khác: file không có nhãn ở đầu; nó phải bắt đầu bằng ba dấu gạch ngang.

![Terminal chạy pip install skills-ref và agentskills validate trên ba thư mục](https://homus.dev/photos/qJs0YwcNH2M-3049.jpg)

Một lần chạy thật của validator skills-ref 0.1.1: thư mục school-class-visit hợp lệ, Bad_Name lỗi vì tên thư mục không khớp tên skill, no-frontmatter lỗi vì SKILL.md phải bắt đầu bằng frontmatter YAML (demo trong video đăng ngày 29/10/2026).

Các lệnh trên màn hình:

```
$ pip install skills-ref
$ agentskills validate skills/school-class-visit
Valid skill: skills\school-class-visit
$ agentskills validate skills/Bad_Name
Validation failed for skills\Bad_Name:
- Directory name 'Bad_Name' must match skill name 'bad-name'
$ agentskills validate skills/no-frontmatter
Validation failed for skills\no-frontmatter:
- SKILL.md must start with YAML frontmatter (---)
```

Thư mục đặt ở đâu? Theo video đăng ngày 29/10/2026: trong Claude Code, đặt bên trong .claude/skills/ trong project của bạn, hoặc trong ~/.claude/skills/ ở thư mục home, chỉ dành cho riêng bạn. Nhiều công cụ AI khác đọc .agents/skills/. Trên website Claude, nén thư mục thành file zip và tải lên ở Customize, rồi Skills; theo video, mọi gói đều làm được việc này, kể cả gói Free. Trên Claude API, bạn tải lên qua Skills API. Skill không đồng bộ giữa các nơi này; hãy thêm thư mục ở từng nơi. Trang tổng quan Agent Skills của Anthropic cũng ghi custom Skills không đồng bộ giữa các surface (đọc ngày 31/10/2026).

## 15. So sánh công bằng: MCP tool có làm đầy context window không?

Phần 4 là một phép so sánh công bằng. Trước hết là một nhận định bạn có thể nghe: thẻ của mọi MCP tool lúc nào cũng nằm trên bàn. Theo video (đăng ngày 29/10/2026), năm 2026 điều đó không phải lúc nào cũng đúng, dù đó từng là một vấn đề thật.

Video dẫn một ví dụ trong tài liệu của Anthropic: năm MCP server có thể dùng khoảng 55.000 token cho thẻ tool. Cách khắc phục gọi là tool search: agent chỉ thấy tên tool trước, và nạp đầy đủ một thẻ khi cần. Theo video (đăng ngày 29/10/2026), Claude Code làm vậy theo mặc định. Vẫn còn một giới hạn: quá khoảng 30 đến 50 tool, model chọn kém đi. Video nói các con số này lấy từ trang của Anthropic về tool search. Trang đó ghi một thiết lập nhiều server điển hình có thể tốn khoảng 55k token cho phần định nghĩa, tool search thường giảm con số này hơn 85 phần trăm, và khả năng chọn đúng tool của Claude giảm khi vượt quá 30 đến 50 tool (đọc ngày 31/10/2026).

Nhận định "MCP tool làm đầy bàn" được video đăng ngày 29/10/2026 kiểm lại: với tool search, agent chỉ thấy tên tool trước.

Vậy, theo video (đăng ngày 29/10/2026), tool từng tốn chỗ trên bàn suốt thời gian; ngày nay agent cũng có thể nạp chúng khi cần. Skill thì hoạt động theo cách đó ngay từ đầu.

Vậy skill thắng? Không, video bảo hãy công bằng với cả hai. Theo AI Build Along (video đăng ngày 29/10/2026), một MCP tool chạy code. Nó kiểm một quy tắc cứng theo cùng một cách mỗi lần, nhưng chỉ khi agent gọi nó, và nó không dạy được các bước xung quanh. Một skill dạy cả quy trình bằng lời thường, nhưng nó là văn bản mà model làm theo. Một bước có thể bị bỏ qua, và một skill không tự hành động được; nó cần tool.

Sao không đưa quy tắc vào system prompt? Theo video (đăng ngày 29/10/2026), với một rạp phim thì cách đó chạy được, nhưng một skill chỉ được nạp khi cần, và nó là một thư mục bạn có thể chia sẻ với các app khác. Vì vậy thiết kế tốt nhất theo video là dùng cả hai: skill nói khi nào gọi tool nào, tool kiểm các quy tắc cứng bằng code. Video nói Anthropic cũng nói vậy: MCP kết nối Claude với dữ liệu; Skills dạy Claude làm gì với dữ liệu đó; dùng cả hai cùng nhau.

![Slide So, does the skill win? No với ba cột MCP tool, Skill và Both](https://homus.dev/photos/qJs0YwcNH2M-3343.jpg)

Slide "So, does the skill win? No.": MCP tool kiểm quy tắc cứng bằng code nhưng chỉ khi agent gọi; skill dạy cả quy trình nhưng là văn bản model làm theo; cả hai: skill nói khi nào gọi tool nào, tool kiểm quy tắc cứng bằng code. Dưới cùng là câu trích từ bài "Skills explained" của Anthropic (video đăng ngày 29/10/2026).

## 16. Kết hợp cả hai: tool plan_class_visit

Kết hợp cả hai, phần 1 (demo trong video đăng ngày 29/10/2026). Rạp thêm một tool thứ ba vào cùng server: plan_class_visit. Nó nhận bộ phim, số học sinh, số giáo viên và tuổi của học sinh nhỏ tuổi nhất. Phần mô tả của nó nằm trên thẻ tool, như các tool khác. Bên trong, các quy tắc là code. Nhỏ tuổi hơn hạng tuổi của phim: tool từ chối. raise ToolError nghĩa là dừng ở đây và gửi lý do này về dưới dạng lỗi. Ít hơn một người lớn cho mỗi mười học sinh: tool từ chối, mỗi lần, trong mọi app.

Đoạn code trên màn hình (bản rút gọn; theo slide, ToolError đến từ package MCP; video đăng ngày 29/10/2026):

```
@mcp.tool()
def plan_class_visit(film: str, pupils: int,
teachers: int, youngest_age: int) -> str:
"""Plan a school class visit: checks the rating and 1 adult per 10 pupils,
holds one block of seats, and applies the school rate."""
…
if youngest_age

Đây là cả ba lời gọi thật (demo trong video đăng ngày 29/10/2026). Vé hồng 1, hai giáo viên: tool từ chối và isError là true. Vé hồng 2, Night Train hạng 15, không dành cho học sinh 8 tuổi: tool lại từ chối, isError là true. Vé hồng 3, đúng như Sara yêu cầu: 31 ghế một khối, giá trường học 126 euro; lần này isError là false. Theo video, bất cứ khi nào tool này được gọi, các quy tắc đều giữ vững, trong mọi app dùng server này.

![Ba lời gọi plan_class_visit và ba câu trả lời](https://homus.dev/photos/qJs0YwcNH2M-3543.jpg)

Ba lời gọi, ba câu trả lời: vé 1 với 2 giáo viên bị từ chối vì cần ít nhất 3 người lớn; vé 2 với Night Train bị từ chối vì phim hạng 15; vé 3 như Sara yêu cầu được chấp nhận, một khối F1 đến H7, giá trường học 126.00 (demo trong video đăng ngày 29/10/2026).

Phần 2: skill ngắn lại (file trong video đăng ngày 29/10/2026). Bước 2 giờ ghi: gọi plan_class_visit; nó kiểm các quy tắc và tính giá ghế bằng code. Vì vậy không cần script tính giá nữa. Bước 3: nếu tool từ chối, nói cho giáo viên biết vì sao, và điều gì sẽ làm nó được chấp nhận. Bước 4: không bao giờ dùng book_seats cho một nhóm học sinh. Trên màn hình, file phiên bản 2 này ghi là qua được validator.

```
---
name: school-class-visit
description: Plans a school class visit at Example Cinemas. Use when a teacher asks to bring pupils to a film.
---

# School class visit

1. Ask for the number of pupils, the youngest pupil's age, the number of adults and the film.
2. Call plan_class_visit. It checks the rating and the adults, holds one block of seats
and prices it, in code.
3. If it says no, tell the teacher why, and what would make it work.
4. Never use book_seats for a school group.
5. Send the teacher a summary: film, time, seats and price.
```

Video theo một message đi qua thiết kế kết hợp này (demo trong video đăng ngày 29/10/2026). Sara yêu cầu cho 28 học sinh với hai giáo viên. Model đọc skill, phần know-how: khi nào hành động, hỏi gì, và giải thích thế nào. Theo skill, model yêu cầu plan_class_visit. App gọi nó trên server của rạp. Tool từ chối: cần ba người lớn. Chỉ một câu "đồng ý" mới tới được chỗ ghế. Theo video, mỗi phần làm việc nó giỏi, và Sara nhận lại một câu hỏi rõ ràng: có thể thêm một người lớn nữa đi cùng không?

Chỉ riêng tool thì có đủ không? Video trả lời: thường là có. Nhưng skill hỏi tuổi nhỏ nhất trước, giải thích một lời từ chối một cách tử tế, và ngăn agent dùng book_seats cho một nhóm học sinh (theo video đăng ngày 29/10/2026).

## 17. Đặt cạnh nhau, miễn phí và trả phí, an toàn, Skills over MCP

Giờ đặt hai thứ cạnh nhau, từng hàng một, theo bảng của video đăng ngày 29/10/2026.

- Cho cái gì: tool cho đôi tay, dữ liệu trực tiếp và hành động; skill cho know-how, các bước, các bước kiểm và cách diễn đạt (theo video đăng ngày 29/10/2026).

- Ai chọn: model chọn một tool từ thẻ tool; model chọn một skill bằng cách so request với phần mô tả, hoặc bạn gõ tên của nó (theo video đăng ngày 29/10/2026).

- Nạp khi nào: thẻ tool nạp lúc bắt đầu, hoặc khi cần nếu có tool search; skill nạp nhãn trước, rồi các bước, rồi các file (theo video đăng ngày 29/10/2026).

- Quy tắc: với tool là code, mỗi lần tool được gọi; với skill là văn bản model làm theo, và một script giúp thêm (theo video đăng ngày 29/10/2026).

- Điều nên tránh: không dùng tool cho các bước và cách diễn đạt hay thay đổi; không dùng skill cho dữ liệu trực tiếp hay hành động: nó không tự lấy dữ liệu hay đặt chỗ được (theo video đăng ngày 29/10/2026).

Trước khi bạn thử, video tóm tắt chuyện miễn phí và trả phí, với tiêu đề slide ghi tháng 10/2026. Theo video đăng ngày 29/10/2026: miễn phí là package MCP cho Python và validator, cùng MCP Inspector, một công cụ miễn phí để test server ngay trong trình duyệt. Claude Code cần gói trả phí, Pro trở lên, hoặc API credits. Custom skills trên website Claude dùng được ở mọi gói, kể cả gói Free, khi bật code execution. Claude API cần credits trả phí, và skill ở đó không có Internet.

![Slide Free, paid, and safe với ba ô](https://homus.dev/photos/qJs0YwcNH2M-3823.jpg)

Slide "Free, paid, and safe" ghi tháng 10/2026: thứ miễn phí (package MCP cho Python, validator, MCP Inspector), Claude Code cần gói Pro trở lên hoặc API credits, custom skills trên claude.ai cho mọi gói khi bật code execution, Claude API cần credits trả phí (theo video đăng ngày 29/10/2026).

Về an toàn, theo video (đăng ngày 29/10/2026): một skill có thể chạy script, nên hãy đối xử với nó như cài phần mềm, chỉ lấy từ nguồn bạn tin. Trang tổng quan Agent Skills của Anthropic cũng khuyên chỉ dùng skill từ nguồn đáng tin (đọc ngày 31/10/2026). Video nói các sản phẩm nhắc tới chỉ là ví dụ, không có tài trợ.

Sắp tới, theo video đăng ngày 29/10/2026, sẽ có MCP server chia sẻ cả skill, bên cạnh tool; slide ghi lúc quay tính năng này chỉ có trong các bản test. Lúc này, video khuyên dùng thư mục. Trên trang SEP của MCP, đề xuất SEP-2640: Skills Extension mang trạng thái Final (đọc ngày 31/10/2026).

## 18. Năm câu hỏi kiểm tra và tóm tắt

Video kết bằng một bài kiểm tra nhanh năm câu; với mỗi câu, người xem được bảo dừng lại và chọn.

- Không bao giờ ít hơn 1 người lớn cho mỗi 10 học sinh, kể cả khi agent bỏ qua một bước: một dòng trong skill hay một bước kiểm bên trong MCP tool? Đáp án: bước kiểm bên trong tool, vì code kiểm nó mỗi lần tool được gọi (video đăng ngày 29/10/2026).

- Hỏi giáo viên những gì, theo thứ tự nào, và giải thích một lời từ chối ra sao: skill hay MCP tool? Đáp án: skill. Đó là know-how: các bước và cách diễn đạt, không phải dữ liệu hay hành động (video đăng ngày 29/10/2026).

- Thứ Năm còn bao nhiêu ghế trống: skill hay MCP tool? Đáp án: MCP tool. Đó là dữ liệu trực tiếp, và skill không tự lấy được nó (video đăng ngày 29/10/2026).

- Bạn đã thêm một skill trong Claude Code. Nó có trên website Claude không? Đáp án: không, theo video đăng ngày 29/10/2026 skill không đồng bộ, nên hãy thêm nó ở đó nữa.

- Ai gửi tools/call tới MCP server của rạp: model hay app? Đáp án: app. Model chỉ hỏi bằng một message tool_use; app thực hiện lời gọi và gửi kết quả về (video đăng ngày 29/10/2026).

Năm trên năm, video khen người xem làm tốt.

Phần tóm tắt, theo video đăng ngày 29/10/2026. Một MCP tool là đôi tay của agent: nó cho dữ liệu trực tiếp, hành động, và các quy tắc cứng bằng code. Một agent skill là know-how: một thư mục có file SKILL.md. Về vòng lặp: model chỉ hỏi; app chuyển mọi câu hỏi và câu trả lời, và gửi lại toàn bộ cuộc hội thoại mỗi lần. Việc của skill diễn ra trên máy tính của bạn, việc của tool diễn ra ở server của rạp. Một skill nạp theo ba cấp: nhãn lúc bắt đầu, các bước khi được dùng, và chỉ đáp số của script.

Phần tóm tắt của video đăng ngày 29/10/2026: MCP tool là đôi tay, skill là know-how, và skill nói khi nào gọi tool.

Theo video (đăng ngày 29/10/2026), agent tốt nhất dùng cả hai: một skill nói khi nào gọi tool. Vậy MCP chưa chết. Nó là đôi tay. Video kết thúc bằng lời cảm ơn người xem.

## Nguồn và liên kết

- Tên gốc: MCP vs Agent Skills: One Job, Built Both Ways (Is MCP Dead?)
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=qJs0YwcNH2M](https://www.youtube.com/watch?v=qJs0YwcNH2M)

- Kênh YouTube AI Build Along (AI Build Along): [youtube.com/channel/UCzZuBCN94ckySydSkdRM-Ww](https://www.youtube.com/channel/UCzZuBCN94ckySydSkdRM-Ww)

- Agent Skills specification: các trường name (chữ thường, số, gạch nối) và description (tối đa 1024 ký tự) của frontmatter SKILL.md (đọc ngày 31/10/2026): [agentskills.io/specification](https://agentskills.io/specification)

- Anthropic, Agent Skills overview: ba cấp nạp (khoảng 100 token mỗi skill ở cấp 1), custom Skills không đồng bộ giữa các surface, chỉ dùng skill từ nguồn đáng tin (đọc ngày 31/10/2026): [platform.claude.com/docs/en/agents-and-tools/agent-skills/overview](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)

- Anthropic, "Skills explained": "MCP connects Claude to data; Skills teach Claude what to do with that data" (đọc ngày 31/10/2026): [claude.com/blog/skills-explained](https://claude.com/blog/skills-explained)

- Anthropic, Tool search tool: khoảng 55k token cho định nghĩa tool, giảm hơn 85 phần trăm với tool search, chọn tool kém đi khi vượt 30 đến 50 tool (đọc ngày 31/10/2026): [platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool)

- MCP specification, phiên bản 2026-07-28 (đọc ngày 31/10/2026): [modelcontextprotocol.io/specification/2026-07-28](https://modelcontextprotocol.io/specification/2026-07-28)

- SEP-2640: Skills Extension, trạng thái Final (đọc ngày 31/10/2026): [modelcontextprotocol.io/seps/2640](https://modelcontextprotocol.io/seps/2640)

Nguồn: https://homus.dev/talks/mcp-vs-agent-skills-one-job-built-both-ways-is-mcp-dead · cập nhật 2026-10-31
