כלי קבצים
שני כלים ומשאב אחד. הכלים מעלים וקוראים; המשאב הוא הדרך המועדפת לקרוא קובץ שכלי אחר הפנה אליו.
Upload-Public-File
Section titled “Upload-Public-File”מעלה קובץ ומחזיר URL ציבורי. כל הפרמטרים ארוזים באובייקט file יחיד.
| הפרמטר | טיפוס | חובה | המשמעות |
|---|---|---|---|
file.name |
String | ✔ | שם הקובץ, כולל סיומת — logo.png, contract.pdf, app.js |
file.mimeType |
String | ✔ | סוג התוכן — image/png, application/pdf, text/javascript, text/css. חייב להתאים לתוכן (ראו “סוגי קבצים”) |
file.data |
String | ✔ | התוכן ב‑base64 חשוף, בלי קידומת |
file._id |
String | מזהה קובץ קיים (file._id מתשובת העלאה קודמת באותה מערכת) ⇒ עדכון במקום, אותו URL בדיוק (עם אותו name). _id שאינו קיים ⇒ הקריאה נתלית — ראו למטה |
|
file.keepName |
Boolean | ברירת מחדל true — השם נשמר כפי שהוא. false — השרת מייחד אותו |
|
file.cacheControl |
String | ברירת מחדל max-age=86400; נשלח כ‑cache-control של ה‑URL הציבורי |
|
file.codeFile |
Boolean | true מסמן קובץ קוד שניתן לעריכה בעורך הקוד של הפלטפורמה |
{ "file": { "name": "logo.png", "mimeType": "image/png", "data": "iVBORw0KGgoAAAANSUhEUgAAA…", "keepName": true } }התשובה:
{ "success": true, "filePath": "https://static.mbapps.co.il/2026/08/<account>/<site>/logo.png", "massage": "", "file": { "_id": "6a8adf473cd0a41edaecb05e", "name": "logo.png", "type": "image/png", "size": 70, "path": "https://static.mbapps.co.il/…/logo.png", "cacheControl": "max-age=86400", "createdAt": "…" } }ה‑URL הציבורי הוא filePath, על הדומיין static.mbapps.co.il (CDN) — לא על api.mbapps.co.il. המזהה לעדכונים עתידיים הוא file._id. כשל עסקי חוזר כ‑{"success":false,"message":"…"} עם HTTP 200, בלי Error:.
סוגי קבצים
Section titled “סוגי קבצים”הכלי בודק גם את התוכן, לא רק את הסיומת: PNG, PDF אמיתי (מתחיל ב‑%PDF), SVG, .txt, .js ו‑.css עולים; .exe, .bin, .json, PDF שתוכנו טקסט, ו‑PNG שהוכרז כ‑text/plain נדחים עם {"success":false,"message":"File type not supported"}. .html נדחה במערכת ללא חבילה עם "Free sites cannot upload this file" — מגבלת מנוי, לא סוג. base64 לא תקין אינו נדחה: הקובץ נשמר עם תוכן זבל.
עדכון במקום — _id וה‑URL היציב
Section titled “עדכון במקום — _id וה‑URL היציב”זה הפרמטר שהופך את הכלי מ“העלאת קובץ” למנגנון פריסה. שולחים _id של קובץ קיים, והתוכן מוחלף בלי שה‑URL משתנה:
{ "file": { "_id": "file0123456789", "name": "app.js", "mimeType": "text/javascript", "data": "Ly8gdjIKY29uc29sZS5sb2coJ2hlbGxvJyk7", "codeFile": true } }הדפוס המלא לפריסת JS/CSS לדף:
1. Upload-Public-File { codeFile: true, cacheControl: "max-age=60" } → URL + _id (פעם אחת)2. Set-Page-Settings { jsFile / cssFile: URL } → הדף מצביע לקובץ (פעם אחת)3. כל שינוי עתידי: Upload-Public-File עם אותו _id (ואותו name) → אין נגיעה בדף, אין שינוי URL — אבל ה-CDN מתרענן רק לפי cacheControlעדכון ב‑_id שומר על אותו _id ואותו URL, והמקור מתעדכן. _id עם name אחר יוצר URL חדש (הישן ממשיך להגיש את הגרסה הקודמת). keepName: false מייחד את השם — הסיומת נגזרת מה‑MIME, כך ש‑text/javascript מקבל .javascript (הקובץ מוגש עם content-type נכון).
Get-File-Content
Section titled “Get-File-Content”מחזיר תמונה ששמורה כ‑Parse File, כבלוק image (base64 + mimeType) שהמודל יכול לראות.
| הפרמטר | טיפוס | חובה | המשמעות |
|---|---|---|---|
fileUrl |
String | ✔ | כתובת הקובץ. חייבת להיות על api.mbapps.co.il או siteadmin.mbapps.co.il, ב‑https |
{ "fileUrl": "https://api.mbapps.co.il/parse/files/<APP_ID>/a23e…_photo.png" }התשובה המוצלחת (על PNG): { "content": [ { "type": "image", "mimeType": "image/png", "data": "iVBORw0…" } ] } — בלי text, ולכן קוד שקורא רק content[0].text יראה תשובה ריקה.
תיאור הכלי עצמו ממליץ להעדיף עליו את המשאב get-file.
המשאב get-file
Section titled “המשאב get-file”כשכלי מחזיר תוצאה שמפנה לקובץ שמור, ההפניה מגיעה כפריט MCP מסוג resource_link עם סכמת URI ייעודית:
file-storage:///api.mbapps.co.il/parse/files/APP_ID/FILE_NAME/TABLE_NAME/OBJECT_ID/PROPERTY_NAMEה‑URI מקודד את כל השושלת: אפליקציה ← קובץ ← הטבלה, הרשומה והשדה שאליהם הוא מחובר. זה גם המנגנון שדרכו מתווכת הגישה לקבצי PrivateFile — הקובץ מוחזק בהקשר של הרשומה, לא כנכס עצמאי.
כך זה נראה בפועל (Get-Data על PriceQuotes אחרי חתימה):
"SignedPdf": { "type": "resource_link", "name": "price-quote.pdf", "uri": "file-storage:///api.mbapps.co.il/parse/files/<APP_ID>/f56f…_price-quote.pdf/PriceQuotes/dWMWAFD9tj/SignedPdf" }את ה‑URI קוראים דרך תבנית המשאב get-file של השרת (מתגלה ב‑resources/templates/list; התבנית: file-storage:///api.mbapps.co.il/parse/files/{APP_ID}/{FILE_NAME}/{TABLE_NAME}/{OBJECT_ID}/{PROPERTY_NAME}). קריאת resources/read עם ה‑URI מחזירה contents[0] עם mimeType (application/pdf) ו‑blob — base64 של הקובץ המלא. לקוח MCP שתומך במשאבים אמור לפתור אותם ישירות, בלי לעבור דרך Get-File-Content — ול‑PDF זו הדרך היחידה.
| המצב | מה עושים |
|---|---|
כלי החזיר resource_link |
פותרים את ה‑URI דרך get-file — הדרך המועדפת, והיחידה ל‑PDF |
יש בידכם URL של תמונה ב‑api.mbapps.co.il/parse/files |
Get-File-Content |
קובץ ציבורי על static.mbapps.co.il, או מחוץ ל‑mbapps |
לקוח HTTP משלכם |
אסימטריית ה-base64
Section titled “אסימטריית ה-base64”זו התקלה שמפילה אנשים בשני הכיוונים, ותמיד באותו אופן: העברת פורמט מכלי אחד לכלי אחר.
| הכלי | מה הוא מצפה לקבל | דוגמה |
|---|---|---|
Upload-Public-File.data |
base64 חשוף | iVBORw0KGgoAAA… |
Send-WhatsApp-Message.fileBase64 |
base64 עם קידומת Data‑URI | data:image/png;base64,iVBORw0KGgoAAA… |
העלאה → שליחה: חייבים להוסיף "data:<mime>;base64,"שליחה → העלאה: חייבים להסיר את אותה קידומתמגבלות שכדאי לדעת עליהן
Section titled “מגבלות שכדאי לדעת עליהן”| המגבלה | הפירוט |
|---|---|
| אין כלי מחיקה ב‑MCP | אין Delete-File ואין Delete-Data. ב‑REST, DELETE /parse/files/<name> עם Master Key כן מוחק Parse File — אבל לא נמצא מסלול API למחיקת קובץ ציבורי של Upload-Public-File מ‑static.mbapps.co.il. ניקוי אחסון ציבורי הוא משימת אופרציה |
| גודל קובץ דרך MCP | גוף הבקשה מוגבל לכ‑10MB — אחרי base64 זה כ‑7.5MB קובץ גולמי (7.4MB עובר, 7.6MB ו‑11MB מחזירים HTTP 413 “Payload Too Large” כדף HTML, לא JSON‑RPC). ב‑REST /parse/files קובץ של 15MB מתקבל — מדיה כבדה עולה שם, לא מ‑MCP |
| קליטת טפסים לא מקבלת קבצים | getlead ו‑web2table אינם תומכים בהעלאת קובץ — שדה File בטופס מחזיר 400 ומשאיר רשומות חלקיות. מעלים בנפרד ומקשרים — ראו טפסים מהאתר |
| העלאה + שיוך הן שתי פעולות | קריסה ביניהן משאירה קובץ יתום שממשיך לתפוס מכסה, ואין שאילתה שמוצאת אותו (Get-Data על Files אינו מחזיר קבצים ציבוריים — הטבלה מיועדת לקבצים שמשויכים לרשומות) |
איפה קבצים מופיעים במוצר
Section titled “איפה קבצים מופיעים במוצר”| המקום | המנגנון |
|---|---|
| כרטיס רשומה | שדות File / PrivateFile מרונדרים כפקדי העלאה |
| הצעות מחיר | לוגו מוטמע בתבנית; ה‑PDF שנוצר — כלי הצעות מחיר |
fileBase64 להעלאה מיידית, fileDBName לקובץ ששמור כבר — כלי הודעות |
|
| קוד של דפים | Upload-Public-File עם codeFile: true + Set-Page-Settings |
| מיתוג ומסמכי הנהח“ש | לוגו שמור על הגדרות המערכת, נקרא בעת הפקת מסמך |
- כלי הודעות — שליחת קובץ ללקוח
- כלי הצעות מחיר — הלוגו וה‑PDF
- קבצים ב‑REST —
FileמולPrivateFile, ושיוך לרשומה - אינדקס הכלים המלא