feat(ops): שירות pm2 legal-mcp-http (#231.3) #428

Merged
chaim merged 1 commits from worktree-mcp-http-service into main 2026-08-05 08:27:08 +00:00
Owner

למה

סוכנים המונעים דרך Agent Client Protocol מקבלים את שרתי-ה-MCP שלהם מהלקוח בפתיחת הסשן, והערוץ הזה נושא שרתי HTTP בלבד. ל-stdio אין מסלול לשם — ומכאן ש-108 הכלים נעדרו מהסוכנים. זהו הקצה ה-HTTP שאפשר להפנות אותם אליו.

שלב 3 מתוך 5 ב-#231.

אינו מחליף את stdio

כל סשן אינטראקטיבי ממשיך להגיע לאותו שרת דרך הרשומה legal-ai ב-~/.claude.json. אותו קוד, אותו מרשם-כלים, שתי תחבורות (G2) — דלת שנייה, לא שרת שני. אומת שה-stdio ממשיך לעבוד.

אבטחה — שתי הגנות, שתיהן נדרשות

  1. bind ל-127.0.0.1 — צר יותר מ-10.0.1.1 של legal-chat-service בכוונה: שום קונטיינר לא צריך לקרוא ל-MCP.
  2. Bearer מ-MCP_HTTP_SHARED_SECRET. השרת מסרב לעלות בלי טוקן, ולכן תקלת-הגדרה לא יכולה לייצר בשקט מאזין לא-מאומת — pm2 יציג crash במקום להגיש תעבורה פתוחה.

max_restarts נמוך במתכוון: טוקן חסר מפיל את התהליך מיד, ועדיף ש-pm2 יפסיק לנסות ויותיר רשומת errored גלויה מאשר ילולאה על טעות-הגדרה.

הסוד

מקור-אמת ב-Infisical: All Infrastructure / main / /apps/legal-ai/MCP_HTTP_SHARED_SECRET, תג credentials. ‏~/.legal-mcp-http.env הוא עותק-ריצה chmod 600 — אותו סידור כמו legal-chat-service ו-legal-court-fetch-service.

אומת על השירות החי

בדיקה תוצאה
POST בלי Authorization 401
POST עם טוקן שגוי 401
POST עם הטוקן הנכון 200
אחרי pm2 restart 200
pm2 save

Invariants

  • G2 — מקיים: תחבורה שנייה לאותו שרת, לא מימוש מקביל.
  • G12 / INV-AG3 — לא נגועים.

נרשם ב-scripts/SCRIPTS.md כנדרש.

## למה סוכנים המונעים דרך Agent Client Protocol מקבלים את שרתי-ה-MCP שלהם **מהלקוח** בפתיחת הסשן, והערוץ הזה נושא **שרתי HTTP בלבד**. ל-stdio אין מסלול לשם — ומכאן ש-108 הכלים נעדרו מהסוכנים. זהו הקצה ה-HTTP שאפשר להפנות אותם אליו. שלב 3 מתוך 5 ב-#231. ## אינו מחליף את stdio כל סשן אינטראקטיבי ממשיך להגיע לאותו שרת דרך הרשומה `legal-ai` ב-`~/.claude.json`. **אותו קוד, אותו מרשם-כלים, שתי תחבורות** (G2) — דלת שנייה, לא שרת שני. אומת שה-stdio ממשיך לעבוד. ## אבטחה — שתי הגנות, שתיהן נדרשות 1. **bind ל-`127.0.0.1`** — צר יותר מ-`10.0.1.1` של `legal-chat-service` **בכוונה**: שום קונטיינר לא צריך לקרוא ל-MCP. 2. **Bearer** מ-`MCP_HTTP_SHARED_SECRET`. השרת **מסרב לעלות בלי טוקן**, ולכן תקלת-הגדרה לא יכולה לייצר בשקט מאזין לא-מאומת — pm2 יציג crash במקום להגיש תעבורה פתוחה. `max_restarts` נמוך במתכוון: טוקן חסר מפיל את התהליך מיד, ועדיף ש-pm2 יפסיק לנסות ויותיר רשומת `errored` גלויה מאשר ילולאה על טעות-הגדרה. ## הסוד מקור-אמת ב-Infisical: **All Infrastructure / `main` / `/apps/legal-ai/MCP_HTTP_SHARED_SECRET`**, תג `credentials`. ‏`~/.legal-mcp-http.env` הוא עותק-ריצה chmod 600 — אותו סידור כמו `legal-chat-service` ו-`legal-court-fetch-service`. ## אומת על השירות החי | בדיקה | תוצאה | |---|---| | POST בלי `Authorization` | **401** | | POST עם טוקן שגוי | **401** | | POST עם הטוקן הנכון | **200** | | אחרי `pm2 restart` | **200** | | `pm2 save` | ✓ | ## Invariants - **G2** — מקיים: תחבורה שנייה לאותו שרת, לא מימוש מקביל. - **G12** / **INV-AG3** — לא נגועים. נרשם ב-`scripts/SCRIPTS.md` כנדרש.
chaim added 1 commit 2026-08-05 08:21:05 +00:00
feat(ops): שירות pm2 legal-mcp-http — שרת ה-MCP חשוף ב-HTTP מאחורי שער Bearer (#231.3)
All checks were successful
Lint — undefined names / undefined-names (pull_request) Successful in 11s
INV-AG3 Agent Tool Grants / agent-tool-grants (pull_request) Successful in 4s
G12 Leak-Guard / leak-guard (pull_request) Successful in 5s
3f48dc0e11
סוכנים המונעים דרך Agent Client Protocol מקבלים את שרתי-ה-MCP שלהם מהלקוח
בפתיחת הסשן, והערוץ הזה נושא שרתי HTTP בלבד. ל-stdio אין מסלול לשם, ומכאן
שהסוכנים נותרו בלי 108 הכלים. זהו הקצה ה-HTTP שאפשר להפנות אותם אליו.

**אינו מחליף את stdio.** כל סשן אינטראקטיבי ממשיך להגיע לאותו שרת דרך
הרשומה legal-ai ב-~/.claude.json. אותו קוד, אותו מרשם-כלים, שתי תחבורות
(G2) — דלת שנייה, לא שרת שני.

אבטחה — שתי הגנות, שתיהן נדרשות:
1. bind ל-127.0.0.1. צר יותר מ-10.0.1.1 של legal-chat-service בכוונה: שום
   קונטיינר לא צריך לקרוא ל-MCP.
2. Bearer מ-MCP_HTTP_SHARED_SECRET. השרת מסרב לעלות בלי טוקן
   (services/http_auth.py), ולכן תקלת-הגדרה לא יכולה לייצר בשקט מאזין
   לא-מאומת — pm2 יציג crash במקום להגיש תעבורה פתוחה.

הסוד: מקור-אמת ב-Infisical (All Infrastructure / main / /apps/legal-ai,
תג credentials). ~/.legal-mcp-http.env הוא עותק-ריצה chmod 600, אותו סידור
כמו legal-chat-service.

max_restarts נמוך במתכוון: טוקן חסר מפיל את התהליך מיד, ועדיף ש-pm2 יפסיק
לנסות ויותיר רשומת errored גלויה מאשר ילולאה על טעות-הגדרה.

אומת על השירות החי:
  POST בלי Authorization → 401
  POST עם טוקן שגוי      → 401
  POST עם הטוקן הנכון    → 200
  אחרי pm2 restart       → 200
  pm2 save               → ✓

invariants: G2 — מקיים (תחבורה שנייה לאותו שרת, לא מימוש מקביל).
G12 — לא נגוע. INV-AG3 — לא נגוע.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chaim merged commit b394177207 into main 2026-08-05 08:27:08 +00:00
chaim deleted branch worktree-mcp-http-service 2026-08-05 08:27:08 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#428