מרגע המצאת פרוטוקול MCP הוא התפשט כאש בשדה קוצים. כל מוצר, כל יצרן, כל API הרגיש שהוא חייב להפיץ MCP כדי שכלי AI יוכלו להתחבר לאותו המוצר. אז יש לנו MCP של ג'ירה בעזרתו המודל יכול לקרוא טיקטים, ו MCP של פיגמה בעזרתו המודל יכול לקרוא את העיצובים וגם MCP של פליירייט איתו אפשר לשלוט בדפדפן ועוד אינסוף אפשרויות. MCP הוא בסך הכל אוסף "כלים", כלומר אוסף של פקודות שהמודל יכול להפעיל. לכל פקודה יש תיאור משלה ודרך הפעלה משלה. דוגמאות לפקודות שמגיעות מ MCP יהיו "קרא קובץ מריפו בגיט", "שכפל את הריפו המרוחק", "הפעל דפדפן וגלוש לכתובת מסוימת", "החזר רשימה של האוביקטים בפריים מסוים".
חסרון אחד של MCP הוא שהרבה אנשים התקינו אותם אבל מעט אנשים כתבו אותם. זה היה יותר סיפור תרבותי מאשר מגבלה טכנולוגית כי באמת שלא מסובך לכתוב שרתי MCP אבל זה היה המצב. חסרון שני של MCP היה שכל MCP שאני מתקין "תופס מקום" בחלון הקונטקסט של המודל ולכן בתחילת כל שיחה היינו צריכים לבחור באיזה שרתי MCP אנחנו מסכימים להשתמש בשיחה זו.
מנגנון חלופי שצובר תאוצה ועוזר לפתור בעיה דומה נקרא Skills. בניגוד ל MCP, ה Skill הוא מודולרי. המודל מקבל תיאור כללי של ה Skill ומחליט לבד אם לטעון אותו או לא, כלומר טעינת ה Skill היא הפעלת כלי שהמודל יוזם. הבדל נוסף מ MCP הוא ש Skill הוא הרבה יותר חופשי - אני כותב את התיאור בקבצי Markdown ואת הקוד בקבצי סקריפט באיזה פורמט שאני בוחר. התוצאה היא שהרבה יותר קל לכתוב Skill וגם לקרוא את הקוד שלו.
דוגמה? בטח. בואו ניתן למודל שלנו אופציה לחפש ב npm חבילות הרחבה. ה Skill מורכב בסך הכל מקובץ הוראות ומסקריפט חיפוש אותם אני שם בתיקייה עם שם מיוחד בתיקיית הבית.
נפתח תיקיה חדשה ~/.claude/skills:
mkdir -p ~/.claude/skills/npm-search
בתוך התיקייה אני יוצר קובץ בשם SKILL.md עם התוכן הבא:
---
name: npm-search
description: Use this skill whenever implementing a feature or adding functionality to a JavaScript/TypeScript/Node.js project. Before writing custom code, always run npm search to find existing libraries that can solve the problem. This prevents reinventing the wheel and leverages the npm ecosystem.
---
# NPM Search Guide
## Overview
Before implementing any feature in a JavaScript/TypeScript/Node.js project, search npm for existing libraries that can solve the problem. This ensures you leverage the ecosystem rather than reinventing the wheel.
## When to Search npm
Use npm search before implementing:
- Data processing or transformation utilities
- HTTP clients or API helpers
- Date/time manipulation
- Validation libraries
- Authentication/authorization
- File handling (CSV, JSON, XML, PDF, etc.)
- Database connectors
- Testing utilities
- UI components (for frontend projects)
- Any common utility or pattern
## Running npm Search
Use the provided script to search for packages:
```bash
./scripts/npm-search.sh <search-term>
Or run directly:
bash
npm search
### Example Searches
# Looking for a date library
./scripts/npm-search.sh date format manipulate
# Looking for a validation library
./scripts/npm-search.sh schema validation zod joi
# Looking for an HTTP client
./scripts/npm-search.sh http client axios fetch
# Looking for a CSV parser
./scripts/npm-search.sh csv parse stream
## Evaluating Packages
When reviewing search results, consider:
- Downloads: Higher weekly downloads indicate community trust
- Version: Recent versions suggest active maintenance
- Description: Clear descriptions indicate well-documented packages
- Dependencies: Fewer dependencies mean smaller bundle size
## Installation
Once you've identified a suitable package:
npm install <package-name>
# or
pnpm add <package-name>
# or
yarn add <package-name>
## Implementation
After installation, read the package's README or documentation before using it. Look for:
- Basic usage examples
- Configuration options
- Common patterns and best practices
```
נשים לב שרק החלק העליון של המארקדאון נטען כברירת מחדל לקלוד קוד. רק אם המודל יחליט לטעון את הסקיל הוא יקרא את הקובץ המלא.
לסיום אני יוצר סקריפט בשם scripts/npm-search.sh בתוך אותה תיקייה עם התוכן הבא:
#!/bin/bash
# npm-search.sh - Search npm for packages
# Usage: ./scripts/npm-search.sh <search-terms>
if [ $# -eq 0 ]; then
echo "Usage: $0 <search-terms>"
echo "Example: $0 date format manipulate"
echo " $0 csv parse stream"
exit 1
fi
SEARCH_QUERY="$*"
echo "🔍 Searching npm for: $SEARCH_QUERY"
echo "----------------------------------------"
npm search "$SEARCH_QUERY"
וזה הכל. עכשיו כשאני אבקש מקלוד קוד לממש פיצ'ר בפרויקט ווב הוא יחפש קודם ב npm search אם קיימת חבילה ואם ימצא חבילה רלוונטית הוא ישתמש בה.
סך הכל הסקיל מורכב משני הקבצים:
ynonp@ynons-MacBook-Air ~/.claude/skills/npm-search (main?) $ tree
.
├── scripts
│ └── npm-search.sh
└── SKILL.md
2 directories, 2 files
שיפור לעומת MCP? בהחלט:
קל יותר לכתיבה - כל הטקסטים יושבים בקובץ markdown מסודר במקום בתיאור של tool-ים. סקריפטים יכולים להיכתב בכל שפה ואפילו אפשר לשלב מספר שפות.
חוסך מקום בחלון הקונטקסט - הטקסטים נטענים לפי דרישה ובצורה דינמית, וכמובן אתם יכולים לטעון אותם גם בצורה יזומה באמצעות פקודת / ושם הסקיל במקרה שלנו /npm-search.
אפשר למצוא עוד דוגמאות לסקילים בריפו של אנטרופיק כאן:
https://github.com/anthropics/skills
או במאגר הסקילים של קודקס:
https://github.com/openai/skills/tree/main/skills/.curated
אגב מבחינת ראנרים אחרים אז גם קופיילוט וגם opencode יקראו סקילז מאותה תיקיית ~/.claude/skills. קודקס יחפש אותם ב ~/.codex/skills.