דוגמה — חיבור לקוח MCP
שרת ה‑MCP חושף את המערכת כאוסף כלים לסוכני AI. החיבור עצמו הוא קובץ קונפיגורציה קטן עם כתובת אחת ושתי כותרות — מה שמשתנה בין לקוח ללקוח הוא רק המעטפת שבה הקובץ יושב, ואיפה המפתח נשמר.
העמוד הזה נותן את שלוש המעטפות מוכנות להעתקה, ואת הבדיקה שמוכיחה שהחיבור עובד — בדיקה שקוראת לכלי נתונים אמיתי, ולא מסתפקת ברשימת כלים.
שני הערכים שצריך
Section titled “שני הערכים שצריך”| הערך | מה זה | מאיפה |
|---|---|---|
| Application Id | מזהה המערכת. מזהה ציבורי, לא סוד | תפריט המשתמש ← סביבת פיתוח (siteadmin.mbapps.co.il) ← Databases ← המערכת שלכם ← לשונית Settings ← כפתור Copy |
| API Key | מפתח גישה מלא לבסיס הנתונים | אותו מסך ← טבלת API Keys ← + Add Key ← העתקה. Save נדרש רק כדי לשמור את ה‑Name |
שלוש המעטפות
Section titled “שלוש המעטפות”התוסף הרשמי כבר נושא בתוכו את הגדרת השרת. ארבע פקודות:
/plugin marketplace add AviMYB/mybusiness-plugins/plugin install mybusiness-implementor@mybusiness/plugin configure mybusiness-implementor@mybusiness/reload-pluginsהפקודה השלישית פותחת טופס עם שני שדות. הם מוגדרים במניפסט של התוסף, ב‑.claude-plugin/plugin.json:
{ "name": "mybusiness-implementor", "version": "1.1.0", "userConfig": { "application_id": { "type": "string", "title": "Application Id", "required": true }, "api_key": { "type": "string", "title": "API key", "sensitive": true, "required": true } }}| השדה | type |
required |
sensitive |
איפה הערך נשמר |
|---|---|---|---|---|
application_id |
String | ✔ | — | קובץ ההגדרות של הלקוח |
api_key |
String | ✔ | ✔ | הכספת של מערכת ההפעלה |
הדגל sensitive הוא ההבדל שקובע: הערך נשלח לכספת ולא נכתב לקובץ הגדרות. קובץ ה‑MCP שבתוך התוסף מפנה אליו בהצבעה, ולא מכיל את הערך עצמו:
{ "mcpServers": { "MyBusiness": { "type": "http", "url": "https://mcp.mbapps.co.il/", "headers": { "X-Parse-Application-Id": "${user_config.application_id}", "X-Parse-API-Key": "${user_config.api_key}" } } }}התקנה בשורה אחת — אותם ערכים כבר בהתקנה (הדגל --config <key=value> נתמך ב‑Claude Code 2.1.241 ומעלה):
claude plugin install mybusiness-implementor@mybusiness \ --config application_id=YOUR_APPLICATION_ID \ --config api_key=YOUR_API_KEYאו בלי התוסף בכלל — חיבור ידני לאותו שרת (--transport http ו‑--header, כמתועד ב‑claude mcp add --help):
claude mcp add --transport http MyBusiness https://mcp.mbapps.co.il/ \ --header "X-Parse-Application-Id: YOUR_APPLICATION_ID" \ --header "X-Parse-API-Key: YOUR_API_KEY"לכל סוכן שתומך בתקן הפתוח — Codex, Cursor, GitHub Copilot, VS Code, Kiro. מתקינים את תיקיית התוסף כפי שהלקוח שלכם מתקין תוספים (clone של המאגר, או העתקה של תיקיית התוסף למיקום שהוא קורא ממנו), ואז עורכים קובץ אחד.
mcp.json שבתוך תיקיית התוסף — שני ה‑placeholders הם מה שאתם מחליפים:
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json", "mcpServers": { "MyBusiness": { "type": "streamable-http", "url": "https://mcp.mbapps.co.il/", "headers": { "X-Parse-Application-Id": "REPLACE_WITH_YOUR_APPLICATION_ID", "X-Parse-API-Key": "REPLACE_WITH_YOUR_API_KEY" } } }}לצדו יושב plugin.json — המניפסט של התקן הפתוח, שגם מפנה את Claude Code לקבצים שלו:
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "mybusiness-implementor", "version": "1.1.0", "homepage": "https://www.mybusiness.co.il", "repository": "https://github.com/AviMYB/mybusiness-plugins", "keywords": ["crm", "mybusiness", "hebrew", "israel", "no-code", "implementation", "mcp"], "extensions": { "com.anthropic.claude-code": { "manifest": "./.claude-plugin/plugin.json", "mcp": "./.mcp.json" } }}כלומר: שני קובצי MCP באותה תיקייה, בכוונה. mcp.json הוא של התקן הפתוח, .mcp.json הוא של Claude Code — וזה שהאחרון קורא ממנו את הערכים מה‑userConfig במקום מהקובץ.
אחרי העריכה — הפעילו מחדש את הלקוח. גם כאן ההגדרה אינה נטענת חם.
כל לקוח שמדבר MCP יכול להתחבר גם בלי מנגנון תוספים — ChatGPT Work, Claude Cowork, או כל לקוח אחר שאפשר להוסיף בו connector מותאם. מה שמזינים:
| הכותרת | הערך |
|---|---|
X-Parse-Application-Id |
ה‑Application Id שלכם |
X-Parse-API-Key |
המפתח שיצרתם |
המפתח נשמר לפי מנגנון האחסון של אותו לקוח — שאותו כדאי לבדוק לפני שמדביקים.
או — התחברות משתמש, בלי מפתח בכלל
Section titled “או — התחברות משתמש, בלי מפתח בכלל”לקוחות שרצים בדפדפן יכולים להתחבר ב‑OAuth 2.1 במקום עם מפתח: מוסיפים connector לאותה כתובת בלי כותרות, והשרת מפנה למסך ההתחברות של ה‑CRM. החיבור אז פועל בזהות המשתמש שהתחבר — התפקיד שלו, בתוספת ההרשאות האישיות בלשונית MCP Permissions.
זו השכבה היחידה שבה גבול הרשאות באמת נאכף בשרת. חיבור עם API Key עוקף אותה לגמרי.
שלושת המסלולים זה מול זה
Section titled “שלושת המסלולים זה מול זה”| Claude Code | Agent Plugins 1.0 | connector ישיר | |
|---|---|---|---|
ערך type | http | streamable-http |
לפי הלקוח |
| איפה המפתח | כספת מערכת ההפעלה | קובץ טקסט על הדיסק | לפי הלקוח |
| הסקילים של התוסף | נטענים אוטומטית | נטענים לפי הלקוח; אחרת קובצי Markdown לקריאה | לא נטענים |
| טעינה מחדש נדרשת | /reload-plugins |
הפעלה מחדש של הלקוח | לפי הלקוח |
| OAuth במקום מפתח | לא (מגבלת callback מקומי) | לא (אותה מגבלה) | ✔ בלקוחות דפדפן |
בדיקת השפיות — למה “סטטוס ירוק” אינו הוכחה
Section titled “בדיקת השפיות — למה “סטטוס ירוק” אינו הוכחה”שלוש קריאות, בסדר הזה:
| # | הקריאה | תשובה תקינה | מה זה מוכיח |
|---|---|---|---|
| 1 | Usage-Guide |
טקסט ההוראות של השרת | התעבורה עובדת ואתם מדברים עם שרת MyBusiness |
| 2 | Get-Current-User |
משתמש אמיתי · או Master (עם API Key: {"objectId":"Master","username":"Master","name":"User name not found",…}) |
האימות עובד — ובאיזה מצב אתם |
| 3 | Count-Data על טבלה אמיתית שה‑CLP שלה סגור |
{"count":661} |
הגעתם לבסיס נתונים אמיתי, וההרשאות מאפשרות קריאה. על טבלה עם CLP ציבורי גם מפתח שגוי מחזיר מספר — ראו האזהרה למטה |
Get-Current-User הוא כל המבחן: אובייקט משתמש אמיתי ⇒ מצב התחברות, מודע‑הרשאות. Master (או User name not found) ⇒ מצב Application Id + API Key, ברמת master — כלומר שום דבר לא מגן על הנתונים חוץ מכם.
הסכמות של כלי הבדיקה
Section titled “הסכמות של כלי הבדיקה”הפרמטרים כאן מגיעים מסכימת הכלים החיה של השרת (tools/list). הסכימה גוברת על כל מקור אחר — כולל על העמוד הזה, אם השרת ישתנה. דוגמה: בגרסאות שרת ישנות הסכימה של where ו‑data דרשה מפתח מילולי בשם fieldName; בעדכון שרת עדכני המפתחות ב‑tools/list הם שמות השדות עצמם, ו‑{"IsAccount":true} עובר. לקוח שנפתח לפני העדכון עדיין מחזיק את הסכימה הישנה. הפעילו מחדש.
Usage-Guide
Section titled “Usage-Guide”Instructions for using MyBusiness MCP tools. LLM should start with this prompt!!
בלי פרמטרים. זו הקריאה הראשונה שסוכן אמור לבצע בכל סשן — היא מחזירה את מפת טבלאות המערכת, את כללי מודל הדפים, את מבני התנאים ואת תחביר ה‑placeholders.
Get-Current-User
Section titled “Get-Current-User”Get information about the current authenticated user
בלי פרמטרים.
Count-Data
Section titled “Count-Data”Count records in a table matching the specified conditions
| פרמטר | טיפוס | חובה | הערות |
|---|---|---|---|
table |
String | ✔ | שם המחלקה שסופרים בה שורות |
where |
Object | – | תנאי סינון. כל מאפיין הוא שם שדה, וכולם מתחברים ב‑AND. תאריך: {"__type":"Date","iso":"YYYY-MM-DD"} · Pointer: {"__type":"Pointer","className":…,"objectId":…} |
Get-Data
Section titled “Get-Data”Retrieve records from a table
| פרמטר | טיפוס | חובה | הערות |
|---|---|---|---|
table |
String | ✔ | שם המחלקה |
where |
Object | – | כמו ב‑Count-Data |
keys |
Array of String | – | אילו שדות להחזיר. ברירת מחדל: כל השדות |
order |
String | – | שם שדה; - בהתחלה = סדר יורד |
limit |
Number | – | ברירת מחדל 5 (בלי limit חוזרות 5 שורות) · מינימום 1 · מקסימום 2000 (2001 → Input validation error … limit: Too big) |
skip |
Number | – | ברירת מחדל 0 |
objectId |
String | – | שליפת רשומה בודדת. בדיוק 10 תווים (9 תווים → Too small: expected string to have >=10 characters) |
Get-Schema
Section titled “Get-Schema”Get the schema of the database. If a class name is provided, returns the schema of the class. If no class name is provided, returns the schema of all classes.
| פרמטר | טיפוס | חובה | הערות |
|---|---|---|---|
className |
String | – | שם המחלקה. בלעדיו — כל הסכימה, וזו תשובה גדולה מאוד |
tablesNameOnly |
Boolean | – | true מחזיר רק את שמות הטבלאות — הדרך הזולה לראות מה יש במערכת |
הבדיקה מהמסוף
Section titled “הבדיקה מהמסוף”לקוח MCP הוא בבסיסו JSON‑RPC 2.0 מעל HTTP. אפשר להריץ את הקריאה בעצמכם — וזו הדרך המהירה ביותר להפריד בין “הלקוח לא מוגדר נכון” ל‑“האישורים לא תקפים”:
curl -sS -X POST https://mcp.mbapps.co.il/ \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "X-Parse-Application-Id: $MB_APP_ID" \ -H "X-Parse-API-Key: $MB_API_KEY" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "Count-Data", "arguments": { "table": "Accounts", "where": { "IsAccount": true } } } }'התשובה של קריאת כלי ב‑MCP היא תמיד תוכן טקסטואלי בתוך result:
{ "jsonrpc": "2.0", "id": 1, "result": { "content": [ { "type": "text", "text": "{\"count\":24}" } ] }}שימו לב שהטקסט הוא JSON קטן, {"count":N}, ולא מספר חשוף. חזר מספר — התעבורה עובדת והגעתם לבסיס נתונים אמיתי.
איך נראה כשל
Section titled “איך נראה כשל”| מה אתם רואים | מה זה אומר | התיקון |
|---|---|---|
Authorization header is required |
הקריאה הגיעה בלי אישורים בכלל — שדות ריקים, או שהתוסף לא נטען מחדש | מלאו ואז /reload-plugins (או הפעלה מחדש) |
HTTP 200 ובתוכו Error: Permission denied for action find on class … |
האישור שגוי: שגיאת הקלדה, מפתח שבוטל, מפתח מבסיס נתונים אחר — או המפתח הנכון תחת שם כותרת שגוי (בטבלאות שה‑CLP שלהן סגור: מפתח תחת X-Parse-Master-Key → בדיוק השגיאה הזו, גם ב‑MCP וגם ב‑REST. על טבלה עם CLP ציבורי הקריאה תחזיר 200 עם נתונים והטעות לא תתגלה) |
ודאו שהכותרת היא X-Parse-API-Key ולא X-Parse-Master-Key |
Error: Failed to get admin session with master key |
אותה סיבה בדיוק — נוסח אחר, מ‑12 כלים אחרים (בהם Get-Current-User, Get-Sites, Create-Form-Page) |
כנ“ל |
Error: Application not found · Error: no user · Error: master key is required · … invalid x-parse-application-id or x-parse-master-key or x-parse-api-key |
גם אלה אישור שגוי — נוסחים נוספים, לפי הכלי | כנ“ל |
HTTP 403 … "message":"invalid_token" |
קיים token של התחברות (Authorization: Bearer או X-Parse-Session-Token) אבל הוא נדחה — פג, בוטל, או הונפק למערכת אחרת |
אימות מחדש |
לשונית ההתחברות מסתיימת ב‑403 |
callback מקומי של לקוח שולחן עבודה | עברו ל‑Application Id + API Key |
Error: Table is restricted |
שרת ישן: טבלת Config הייתה חסומה מ‑MCP. בשרת עדכני היא נפתחה, והשגיאה לא אמורה להופיע עליה |
מול שרת ישן: דגלי Config דרך REST; מול שרת עדכני: כלי הנתונים עובדים |
מלכודות שחוזרות
Section titled “מלכודות שחוזרות”| המלכודת | מה קורה |
|---|---|
| הגדרה שלא נטענה מחדש | הלקוח ממשיך עם הערכים הישנים — לרוב ריקים. תמיד /reload-plugins או הפעלה מחדש |
| מפתח בתוך גיט | מחיקת השורה מהקובץ אינה מבטלת את המפתח. Revoke במסך ה‑Settings, ואז מפתח חדש |
| שני חיבורים פעילים | שני סטים זהים של כלים, ולפעמים תשובות מהמערכת הלא נכונה. השאירו שרת MyBusiness אחד פעיל |
| שם כותרת שגוי | אותו מפתח ב‑X-Parse-Master-Key נחשב אישור שגוי. השם קובע |
limit ברירת מחדל 5 |
תוצאה קטומה נראית כמו טבלה קטנה |
| חיבור אחד = מערכת אחת | אין כלי חוצה‑מערכות; ניתוב האישורים נעשה בהגדרת החיבור, לא בקריאה |
| הנחה שיש כלי מחיקה | אין. לא לרשומה, לא לטבלה, לא לדף ולא לטריגר (מ‑67 הכלים היחיד עם Delete/Remove בשם הוא Remove-Users-from-Role; מחיקה היא DELETE /parse/classes/… ב‑REST) |
צ’קליסט
Section titled “צ’קליסט”- ה‑API Key מופיע עם
Created Dateאחרי רענון, וה‑Nameשלו נשמר (אחריSave) כדי שתדעו למי הוא שייך - המפתח הודבק תחת
X-Parse-API-Key(ולא תחתX-Parse-Master-Key) - הלקוח נטען מחדש אחרי שינוי ההגדרה
-
Usage-Guideמחזיר טקסט -
Get-Current-Userמחזיר משתמש — ואתם יודעים אם אתם ב‑Masterאו בזהות אישית -
Count-Dataעל טבלה אמיתית שה‑CLP שלה סגור מחזיר מספר - המשתמש אישר שזהו בסיס הנתונים הנכון — לפני הכתיבה הראשונה
- קובץ שמכיל את המפתח אינו בתוך repository
- יש בדיוק חיבור MyBusiness אחד פעיל
- שרת ה‑MCP — הפרוטוקול, שתי דרכי החיבור, ומפת הכלים
- אינדקס הכלים המלא · כלי הנתונים · מתכונים
- התקנה בכל סוכן — המסלול המלא, כולל מסך ה‑Settings
- הפלאגין לסוכני AI — מה עוד יש בחבילה מלבד החיבור
- אימות והרשאות · שגיאות ופתרון תקלות
- דוגמאות קוד — הקטלוג המלא