1. מבוא
ב-codelab הזה תלמדו איך ליצור ולפרוס שרת Model Context Protocol (MCP) כדי להרחיב את היכולות של Gemini CLI. תבנו את godoctor, שרת מבוסס-Go שמספק כלים מותאמים אישית לפיתוח ב-Go, ותהפכו את Gemini CLI מעוזר תכנות למטרות כלליות למומחה לפיתוח ב-Go.
ב-codelab הזה אנחנו משתמשים בגישה של 'הנחיות'. אתה תפעל כראש צוות טכני ותספק הנחיות לעוזר ה-AI שלך (Gemini CLI). המטרה שלכם היא ללמוד איך לתרגם דרישות של פרויקט להנחיות יעילות, ולאפשר ל-AI לטפל בפרטי ההטמעה.
בבסיס הפרויקט הזה נמצא Model Context Protocol (MCP). MCP הוא פרוטוקול קוד פתוח שמבצע סטנדרטיזציה של האופן שבו מודלים גדולים של שפה (LLM) כמו Gemini מתקשרים עם כלים ושירותים חיצוניים. הוא משמש כגשר ומאפשר ל-AI לגשת למידע מהעולם האמיתי ולבצע פעולות מעבר לידע המובנה שלו. כשבונים שרת MCP, יוצרים תוסף בהתאמה אישית ש-Gemini CLI יכול לגלות ולהשתמש בו, וכך ללמד אותו מיומנויות חדשות.
מה תלמדו
- איך מתקינים ומגדירים את Gemini CLI
- איך לנסח הנחיות יעילות כדי להנחות עוזר AI בפיתוח תוכנה
- איך מספקים הקשר והנחיות לעוזר דיגיטלי מבוסס-AI
- איך ליצור ולהגדיר שרת MCP כדי לשפר את היכולות של Gemini CLI
- איך יוצרים קונטיינר לאפליקציית Go ופורסים אותה ב-Google Cloud Run
הדרישות
אפשר להשתתף בסדנה הזו באופן מלא ב-Google Cloud Shell, שכולל את כל התלויות הנדרשות (gcloud CLI, Go, Docker, Gemini CLI) שמותקנות מראש.
לחלופין, אם אתם מעדיפים לעבוד על המחשב שלכם, תצטרכו את הדברים הבאים:
- Node.js 20 ואילך
- ה-SDK של Google Cloud (gcloud CLI) מותקן ומופעל
- גרסה 1.24 ואילך של Go מותקנת במערכת
- Docker מותקן במערכת
טכנולוגיות מרכזיות
ריכזנו כאן מידע נוסף על הטכנולוגיות שבהן נשתמש:
- Gemini CLI: ממשק שורת הפקודה מבוסס-AI שאנחנו נרחיב
- Model Context Protocol (MCP): פרוטוקול קוד פתוח שמאפשר ל-Gemini CLI לתקשר עם הכלי המותאם אישית שלנו
- Go SDK for MCP: ספריית Go שבה נשתמש כדי להטמיע את שרת ה-MCP שלנו
טיפים ליצירת Codelab מוצלח
עבודה עם עוזר מבוסס-AI היא דרך חדשה לפתח תוכנה. הנה כמה טיפים שיעזרו לכם ליהנות מחוויה חלקה ומוצלחת:
- אל תחששו להקיש על ESC. לפעמים ה-AI יציע פעולות או קוד שלא תסכימו איתם. אפשר להשתמש במקש ESC כדי לבטל את הפעולה המוצעת ולתת הנחיה חדשה שתכוון אותו לכיוון הנכון. אתם משתתפים בתוכנית הפיילוט.
- מעודדים את השימוש בכלים. אם נראה שה-AI לא מבין את ההקשר או שהוא ממציא מידע, כדאי לעודד אותו להשתמש בכלים הזמינים שלו. הנחיות כמו "תשתמש בחיפוש Google כדי לאמת את זה" או "תשתמש בכלי read_file כדי להבין את הקוד הנוכחי לפני שתבצע שינויים" יכולות להיות יעילות מאוד.
- לא לבצע שינויים ידניים. כדאי לנסות שה-AI יבצע את כל העבודה. זו המיומנות העיקרית שאתם מתרגלים. עם זאת, אם אתם חייבים לבצע שינוי ידני, חשוב לספר על כך ל-AI אחר כך. הנחיה כמו "עדכנתי ידנית את הקובץ README.md. כדי לוודא שה-AI יישאר מסונכרן עם הפרויקט, אפשר להוסיף את ההנחיה הבאה: "כדאי לקרוא שוב כדי לרענן את הידע".
- ניסית לכבות את המכשיר ולהדליק אותו מחדש? במקרים נדירים, יכול להיות שה-AI ינסה לכפות נתיב מסוים בניגוד לפקודה שלכם. זה יכול לקרות בגלל ירידה באיכות ההקשר (לפעמים נקראת גם 'התדרדרות ההקשר'). במקרה כזה, אפשר להשתמש בפקודה /compress ב-Gemini CLI כדי לצמצם את הרעשים בהקשר, או במקרים קיצוניים, להשתמש בפקודה /clear כדי לנקות את כל היסטוריית השיחות.
2. הגדרת הסביבה
בוחרים אחת מהאפשרויות הבאות: הגדרת סביבה בקצב אישי אם רוצים להפעיל את
במחשב שלכם, או להפעיל את Cloud Shell אם אתם רוצים להריץ את ה-codelab הזה כולו בענן.
הגדרת סביבה בקצב אישי
- נכנסים ל-Google Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט הזה. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא נשארת לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולוודא שלא תחויבו על שימוש בהם אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
ב-Google Cloud Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו טעונה בכל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Codelab הזה בדפדפן. לא צריך להתקין שום דבר.
3. איך מתחילים להשתמש ב-Gemini CLI
בקטע הזה מוסבר על Gemini CLI, כולל איך להתקין אותו ולהגדיר אותו לסביבה שלכם.
מה זה Gemini CLI?
Gemini CLI הוא ממשק שורת פקודה מבוסס-AI שיכול לעזור לכם במגוון רחב של משימות פיתוח. הוא יכול להבין את ההקשר של הפרויקט, לענות על שאלות, ליצור קוד ולהשתמש בכלים חיצוניים כדי להרחיב את היכולות שלו.
התקנה
מתקינים את Gemini CLI באופן גלובלי באמצעות npm.
npm install -g @google/gemini-cli
כדי לוודא שה-CLI מותקן, מריצים את הפקודה:
gemini --version
הגדרות אישיות
התנהגות Gemini CLI נשלטת על ידי קובצי תצורה ומשתני סביבה. יש שני קבצים מרכזיים:
-
GEMINI.md: הקובץ הזה מספק הנחיות והקשר ל-AI. ממשק ה-CLI קורא את הקובץ הזה כדי להבין את התקנים והמוסכמות של הקידוד בפרויקט. -
.gemini/settings.json: הקובץ הזה שולט בתצורה של ה-CLI, כולל איך להתחבר לכלים חיצוניים. נשתמש בקובץ הזה בהמשך כדי להגדיר את ה-CLI כך שישתמש בשרת ה-MCP שאנחנו בונים במעבדה הזו.
קודם נגדיר את הסביבה ואז ניצור את הקובץ GEMINI.md. הגדרת הקובץ settings.json תתבצע בשלב מאוחר יותר.
- יוצרים ומפעילים ספריית פרויקט:
mkdir godoctor && cd godoctor go mod init godoctor
- אימות באמצעות Application Default Credentials של Google Cloud:
צריך להתחבר לחשבון שיש לו גישה לפרויקט Google Cloud Platform שבו תשתמשו בסדנת התכנות הזו:
- מוודאים שהתקנתם ואתחלתם את ה-SDK של Google Cloud.
- מריצים את הפקודה הבאה כדי להגדיר Application Default Credentials:
gcloud auth application-default login
4. קובץ הקשר (GEMINI.md)
קבצים של הקשר, שמשתמשים בשם ברירת המחדל GEMINI.md, משמשים כדי לספק הקשר הדרכתי למודל Gemini. אתם יכולים להשתמש בקבצים האלה כדי לתת הוראות ספציפיות לפרויקט, להגדיר פרסונה או לספק הנחיות לגבי סגנון כתיבת קוד, כדי שהתשובות של ה-AI יהיו מדויקות יותר ומותאמות לצרכים שלכם.
כדי לוודא שעוזר ה-AI יוצר קוד Go איכותי ואידיומטי, אנחנו הולכים לכתוב קובץ GEMINI.md עם כמה שיטות מומלצות נפוצות למפתחי Go.
יעד: ליצור קובץ GEMINI.md שישמש כקבוצת הכללים של העוזר הדיגיטלי מבוסס-AI במהלך הפרויקט הזה.
פותחים את סביבת הפיתוח המשולבת כדי ליצור את הקובץ GEMINI.md עם התוכן שבהמשך. אם אתם משתמשים ב-Cloud Shell, אתם יכולים לפתוח עורך באמצעות הפקודה הבאה:
cloudshell edit .
משימה: יוצרים קובץ בשם GEMINI.md בתיקיית השורש של godoctor ומדביקים בו את התוכן הבא.
# Go Development Guidelines
All code contributed to this project must adhere to the following principles.
## 1. Formatting
All Go code **must** be formatted with `gofmt` before being submitted.
## 2. Naming Conventions
- **Packages:** Use short, concise, all-lowercase names.
- **Variables, Functions, and Methods:** Use `camelCase` for unexported identifiers and `PascalCase` for exported identifiers.
- **Interfaces:** Name interfaces for what they do (e.g., `io.Reader`), not with a prefix like `I`.
## 3. Error Handling
- Errors are values. Do not discard them.
- Handle errors explicitly using the `if err != nil` pattern.
- Provide context to errors using `fmt.Errorf("context: %w", err)`.
## 4. Simplicity and Clarity
- "Clear is better than clever." Write code that is easy to understand.
- Avoid unnecessary complexity and abstractions.
- Prefer returning concrete types, not interfaces.
## 5. Documentation
- All exported identifiers (`PascalCase`) **must** have a doc comment.
- Comments should explain the *why*, not the *what*.
## 6. Project structure
- cmd/ contains source code for target binaries (e.g. server, client)
- internal/ contains source code for packages not meant to be exported (e.g. internal/tools/hello)
- bin/ contains the compiled binaries
- At the root place README.md, go.mod and go.sum
סביבת הפיתוח שלכם מוגדרת עכשיו באופן מלא.
5. הגרסה הראשונית: שרת תיעוד
היעד הראשון הוא ליצור את הגרסה הראשונית של השרת godoctor. הגרסה הזו צריכה להיות אפליקציה מינימלית שמספקת כלי יחיד בשם read_docs, שמאפשר לחפש תיעוד של Go.
המטרה: ליצור שרת MCP מוכן לייצור שחושף את הפקודה go doc, כדי לאפשר ל-LLM לשלוח שאילתות לתיעוד של Go.
מריצים את הפקודה Gemini CLI ב-Shell:
gemini
כשמריצים את ה-CLI בפעם הראשונה, תתבקשו לבחור מצב אימות ועיצוב.
אם אתם מריצים את ה-codelab הזה ב-Cloud Shell, בוחרים באפשרות Use Cloud Shell user credentials (שימוש בפרטי הכניסה של המשתמש ב-Cloud Shell). אם לא, אפשר להשתמש בכניסה באמצעות חשבון Google כדי להיכנס עם חשבון Google אישי וליהנות מהתוכנית הנדיבה לשימוש חינמי ב-Gemini CLI. מסך הבחירה של האימות ייראה בערך כך:

אם רוצים לשנות את הבחירה, אפשר להקליד /auth ולהקיש על Enter כדי לפתוח שוב את התפריט הזה.
בשלב הבא תתבקשו לבחור עיצוב:

בדומה ל-/auth, אפשר גם לשנות את העיצוב בהמשך באמצעות הפקודה /theme.
אחרי שבוחרים את שיטת האימות ואת העיצוב המועדף, מועברים לשורת הפקודה. כאן אפשר להקליד את הפקודות, למשל:
Write a hello world application in Go
ממשק ה-CLI משתמש בשילוב של יכולות ניתוח משלו (באמצעות מודל Gemini כמו Gemini Flash או Gemini Pro) וכלים כדי לבצע את המשימות. הוא משתמש בכלים כשהוא צריך ליצור אינטראקציה עם מערכת הקבצים או עם שירותים חיצוניים, כמו ממשקי API, מסדי נתונים וכו'. דוגמאות לכלים שזמינים מראש, או 'כלים פנימיים', הם read_file, write_file, web_fetch ו-google_search. שרת ה-MCP שאנחנו בונים יהפוך גם לכלי שיהיה זמין ל-CLI.
בפעם הראשונה שמריצים כלי, תתבקשו לתת הרשאה. אתם יכולים לתת לה הרשאה חד-פעמית (אישור חד-פעמי), אישור גורף לשאר הסשן (אישור תמיד) או לדחות את הבקשה שלה. אם מדובר בפעולת עריכה של קובץ, תופיע גם האפשרות לערוך את הקובץ באמצעות עורך חיצוני, למקרה שתרצו לבצע שינויים. לדוגמה, זה הפלט של הפרומפט שלמעלה, ליצירת תוכנית Hello World:

בנוסף להנחיות, אפשר גם להשתמש בפקודות עם לוכסן. אם מקלידים '/', ה-CLI יציג אוטומטית את אפשרויות ההשלמה האוטומטית. אפשר להמשיך להקליד את הפקודה המלאה או לבחור אחת מהאפשרויות. הפקודות /auth ו-/theme שצוינו למעלה הן דוגמאות לפקודות כאלה.

אחרי שתכירו את הממשק, תוכלו להתחיל במשימה העיקרית של הקטע הזה, שהיא לבקש מ-CLI לכתוב את שרת ה-MCP בשבילכם.
יצירת שרת MCP של Hello World
אחת הדרכים הטובות ביותר לוודא שהמודל יבנה דברים בצורה עקבית יותר היא לחלק משימות מורכבות לשלבים מצטברים. יכול להיות שהמודל יוכל להבין משימה מורכבת בעצמו, אבל בלי ההגדרה הנכונה ייקח לו הרבה זמן לגלות את ההטמעה הנכונה.
כדי להשיג גישה עקבית יותר, נורה אותו קודם ליצור שרת MCP של Hello World לפני שנחיל את הפונקציונליות הרצויה (קריאת תיעוד של Go).
דוגמה להנחיה:
Create a Model Context Protocol (MCP) server that exposes a "hello_world" tool. This tool, when called, should return the message "Hello, MCP world!" For the MCP implementation, you should use the official Go SDK for MCP (github.com/modelcontextprotocol/go-sdk/mcp) and use the stdio transport. TODO: - Download the dependency: `go get github.com/modelcontextprotocol/go-sdk/mcp` - Inspect the documentation of the SDK: `go doc github.com/modelcontextprotocol/go-sdk/mcp` - Build a `server` command that supports stdio transport only - Build a `client` command that connects to the server over command transport to test the server Acceptance Criteria: - `./bin/client --list-tools` returns the list of server tools including "hello_world" - `./bin/client --call-tool` "hello_world" returns the output "Hello, MCP world!"
שימו לב שההנחיה שלמעלה מורכבת משלושה פלחים עיקריים:
- פירוט הבעיה, כולל מה רוצים לבנות והאילוצים (למשל, שימוש ב-SDK הרשמי במקום בכל SDK אחר, העברת נתונים ב-stdio במקום ב-http)
- פירוט של המשימות לביצוע (TODOs)
- קריטריונים לקבלת המשימה, שמשמשים כהליך בדיקה כדי שהסוכן יידע מתי המשימה הושלמה
שלושת הרכיבים האלה עוזרים למודל להשיג את התוצאות הרצויות בצורה עקבית יותר.
הטמעה של הכלי read_docs
אחרי שתהיה לכם הטמעה תקינה, נוכל להמשיך להטמעה של הכלי האמיתי read_docs:
Add a new tool to our MCP server called "read_docs" that invokes the "go doc" shell command. The tool will take a mandatory "package" argument and an optional "symbol" argument. TODO: - create a package `./internal/tools/docs` - register the tool with the MCP server - update the client to support the "read_docs" tool by providing arguments to the tool call Acceptance Criteria: - `./bin/client --tools-list` show both hello_world and read_docs - `./bin/client --tool-call read_docs fmt` returns the documentation for the `fmt` package - `./bin/client --tool-call read_docs fmt.Println` returns the documentation for the `fmt.Println` function - `./bin/client --tool-call read_docs github.com/modelcontextprotocol/go-sdk/mcp` returns documentation for the `mcp` package
הערה: אתם יכולים להתנסות בהנחיה הזו או לנסות ליצור הנחיה משלכם.
טיפים שימושיים
בהתחשב בכך ש-MCP הוא עדיין מושג חדש ושה-Go SDK ל-MCP הוא ספרייה חדשה, בשלב הזה יכול להיות שיעבור זמן רב עד ש-Gemini יגלה בעצמו את ההטמעה הנכונה. כדי לעזור למודל להגיע לפתרון הנכון, אפשר לנסות את הפעולות הבאות:
- אם המודל דילג על קריאת התיעוד בשלב כלשהו, מקישים על מקש ESC ומזכירים לו לעשות זאת. אם אתם לא מכירים את go, הפעלת הפקודה go doc בתוספת שם החבילה go doc github.com/modelcontextprotocol/go-sdk/mcp תחזיר את התיעוד הנכון.
- למודול ברמה העליונה github.com/modelcontextprotocol/go-sdk אין תיעוד (כי הוא לא כולל קוד Go). צריך להנחות את המודל לחפש את הנתיב המלא.
- לעומת זאת, אם המודל ימציא חבילה שלא קיימת, למשל: "go doc github.com/modelcontextprotocol/go-sdk/mcp/server", פשוט מכוונים אותו לחבילה ברמה העליונה.
6. הגדרת godoctor כשרת MCP ל-Gemini CLI
אחרי שעוזר ה-AI יצור את הקוד גם ללקוח וגם לשרת, תוכלו להנחות אותו להריץ כמה בדיקות ידניות. לדוגמה:
retrieve the documentation for the package net/http
חשוב לבדוק את זה גם עם תלות חיצונית (לא בספרייה הרגילה):
retrieve the documentation for the github.com/modelcontextprotocol/go-sdk/mcp package
אם מרוצים מהתוצאות, מבקשים ממנו לכתוב קובץ README.md עם הוראות לשימוש בפרויקט הזה ולפיתוח שלו.
Now write a detailed README.md file explaining both from a user and a developer perspective how to use and to build this project.
עכשיו נגדיר את השרת כך ש-Gemini CLI יוכל להשתמש בו במהלך השלב הבא של הפיתוח.
- מבקשים מ-CLI לעדכן את GEMINI.md כדי להשתמש ב-
read_docsכשיטה המועדפת לקריאת תיעוד:
update the GEMINI.md file to include instructions to always use the read_docs tool to retrieve documentation about Go packages or symbols. This should be done whenever seeing an import for the first time in a session or after a new dependency is installed to the project (e.g. via `go get`)
- עכשיו צריך להפעיל מחדש את Gemini CLI כדי להגדיר את שרת ה-MCP. קודם כל, נשמור את סשן הצ'אט כדי שתוכלו להמשיך מהמקום שבו הפסקתם אחרי שהוא יופעל מחדש.
/chat save godoctor-workshop
- כדי לצאת מ-CLI, לוחצים פעמיים על Ctrl+D או מקלידים את הפקודה
/quit. - בשלבים הקודמים, הסוכן אמור היה לקמפל עבורכם קובץ בינארי של השרת, אבל אנחנו מקמפלים את השרת שוב עם שם אחר כדי שהוא לא יושפע כשנשנה את קוד המקור שלו:
mkdir -p bin && go build -o ./bin/godoctor ./cmd/server
- מגדירים את Gemini CLI עבור הכלי המקומי: יוצרים קובץ
.gemini/settings.jsonבשורש הפרויקט ומוסיפים קטעmcpServersכדי להגדיר ל-Gemini CLI איך להריץ את השרת המהודר.
mkdir -p .gemini && touch .gemini/settings.json
- עכשיו, מוסיפים את התוכן הבא לקובץ החדש באמצעות כלי העריכה של Cloud Shell או סביבת הפיתוח המשולבת (IDE) המועדפת.
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor"
}
}
}
- הפעלת Gemini CLI באמצעות הפקודה
gemini - כדי לראות שהכלי נטען, מקלידים את הפקודה
/mcp. אפשר גם להציג את התיאור המלא של הכלים באמצעות/mcp desc:

- בודקים את השילוב על ידי בקשה מ-Gemini CLI להשתמש בכלי עם הנחיה כמו 'הצגת התיעוד של החבילה net/http'
אתם אמורים לראות משהו כזה:

אם הכלי פועל בצורה תקינה, אמורה להופיע תיעוד שאוחזר באמצעות קריאה לכלי:

יצרת כלי MCP אבל זה לא הסוף, עדיין אפשר לשפר את השרת הזה.
7. הוספת כלי מבוסס-AI לבדיקת קוד
בואו נוסיף תכונה מתוחכמת יותר שמבוססת על AI: בודק קוד שמשתמש ב-Gemini API.
עכשיו אפשר לשחזר את סשן הצ'אט הקודם באמצעות הפקודה /chat resume godoctor-workshop.. כך יטען ההקשר של הסשן עד לנקודה שבה סיימנו לפתח את read_docs, ולכן למודל יהיה הידע הנדרש לבניית הכלי החדש.
הכלי הזה יצטרך גישה ל-Vertex AI, לכן צריך להפעיל קודם את ה-API. אתם יכולים להריץ פקודות של מעטפת בלי לצאת מ-Gemini CLI. לשם כך, מקלידים סימן קריאה (!) בהנחיה ריקה. ממשק Gemini CLI יעבור למצב מעטפת.
מריצים את הפקודה הבאה במצב מעטפת כדי להפעיל את Vertex AI API:
gcloud services enable aiplatform.googleapis.com
אחרי שהפקודה מסתיימת, אפשר להקיש על מקש Esc כדי לחזור למצב הנחיה.
יעד: הוספת כלי חדש בשם code_review לפרויקט הקיים. הכלי הזה ישתמש ב-Gemini API כדי לנתח קוד Go ולספק משוב.
הנחיה לדוגמה:
Add a new tool to my project called code_review. This tool should use the Gemini API on Vertex AI (with model id gemini-2.5-pro) to analyze Go code and provide a list of improvements according to the best practices accepted by the Go community. The tool should take the Go code content and an optional hint as input. The hint will be used to provide additional guidance for the AI reviewer, like "focus on security" or "help me simplify this code". The tool output should be text in Markdown format. TODO: - add the genai SDK dependency with `go get import google.golang.org/genai` - create the tool code in ./internal/tools/code/review.go - create a code review prompt to be used by the tool - use go-genai with Vertex AI authentication to call gemini-2.5-pro - register the tool with the server - add a flag to the server to set the Google Cloud Project ID: --project - add a flag to the server to set the Google Cloud Location: --location - add support to the review tool in the client CLI NOT TO DO: - DO NOT use the package github.com/google/generative-ai-go/genai as it is DEPRECATED - DO NOT use the package cloud.google.com/go/vertexai/genai as it has been superseded by google.golang.org/genai Acceptance Criteria: - `./bin/client --tools-list` show all tools including `code_review` - `./bin/client --tool-call code_review internal/tools/code/review.go` returns the code review for the "review.go" file
טיפים שימושיים
- אחרי שהמודל יתחיל לעבוד על זה, יכול להיות שתראו באופן אוטומטי בקשה להפעיל את הכלי
read_docsכדי לעיין במסמכי התיעוד של חבילתgenai. אם לא, תמיד אפשר להפסיק את התהליך באמצעות מקש Escape ולהזכיר לו שעכשיו יש לו את הכליread_docs. - אם אתם רואים שהיא מנסה להשתמש ב-SDK הלא נכון של AI גנרטיבי (גם אם יש רשימה ברורה של SDK שאסור להשתמש בהם בהנחיה), כדאי להפנות אותה בחזרה ל-SDK הנכון.
בדיקת כלי בודק הקוד
- שומרים את שיחת הצ'אט באמצעות
/chat save godoctor-workshopואז יוצאים מ-CLI על ידי הקשה על Ctrl+D פעמיים. - קומפילציה מחדש של השרת עם הגדרת הכלי החדשה:.
go build -o ./bin/godoctor ./cmd/server
- בסביבת הפיתוח המשולבת (IDE), מעדכנים את הקובץ
.gemini/settings.jsonכך שיכלול את הגדרות הסביבה של Vertex AI:
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor",
"env": {
"GOOGLE_CLOUD_USE_VERTEXAI": "true",
"GOOGLE_CLOUD_PROJECT": "<your-project-id>",
"GOOGLE_CLOUD_LOCATION": "<your-preferred-region>"
}
}
}
}
- מפעילים שוב את Gemini CLI. שחזור סשן הצ'אט עם
/chat resume godoctor-workshop - כדי לוודא שהכלי מופעל, מקלידים את הפקודה
/mcp. אתם אמורים לראות משהו כזה:

- עכשיו נבדוק את הכלי
code_reviewעל ידי עיון באחד מקובצי המקור של הכלי:
Use the code_review tool to review cmd/server/main.go
You should see something like this:

אחרי שהכלי לבדיקת קוד פועל, אפשר להציע למודל ליישם חלק מהשיפורים שהוא מצא, כדי ליצור תהליך עבודה מלא של "שיפור עצמי".
עכשיו אפשר לאשר שהכלי code-review פועל. בקטע הבא תעבדו על פריסת האפליקציה בענן. שמירת הסשן הנוכחי באמצעות /chat save godoctor-workshop ויציאה מ-CLI.
8. הכנת השרת לענן
שרת ה-MCP שפיתחנו עד עכשיו פועל רק במחשב המקומי, וזה בסדר אם אתם מפתחים כלים לשימוש עצמי. אבל לעיתים קרובות בסביבות ארגוניות אנחנו צריכים לפרוס כלים לשימוש נרחב של מאות או אפילו אלפי מפתחים.
כדי להרחיב את שרת ה-MCP שלנו, אנחנו צריכים להמיר אותו משרת שמדבר רק I/O רגיל לשרת שיכול לדבר HTTP, ולפרוס אותו במקום שבו מפתחים שונים יוכלו לגשת אליו. לצורך המטרה הזו, נשתמש במצב העברה שמוגדר במפרט של MCP כ-HTTP שניתן להזרמה, ונשתמש ב-Cloud Run כיעד הפריסה שלנו.
המטרה: לבצע רפקטורינג בשרת godoctor כדי להשתמש ב-HTTP transport שניתן להזרמה.
הנחיה לדוגמה:
The godoctor server is currently using the stdio transport. I want to prepare it to be deployed to Cloud Run, so we need to add support to use the Streamable HTTP transport. TODO: - Update server to enable Streamable HTTP via the -http flag. - An optional -listen flag can be specified to set the port to listen - If no -http flag is specified, the server defaults to stdio transport and -listen is ignored - Update client to use Streamable HTTP via the -addr flag - If no flag is specified, the client defaults to command transport - Create a shell script test_server.sh to support testing NOT TO DO: - DO NOT use the HTTP+SSE protocol as it has been deprecated by the MCP specification Acceptance Criteria - Create a shell script that: - Runs the server in the background; - Runs the client connecting over HTTP and call list tools - Kills the background process - The shell script should run without failures
טיפים שימושיים
- יכול להיות שהמודל ינסה להשתמש ב-HTTP+SSE במקום זאת, אבל הפרוטוקול הזה הוצא משימוש. אם אתם רואים שהבקשה עוברת בנתיב הזה, נסו להפנות אותה חזרה ל-HTTP שאפשר להזרים.
- הגרסה הנוכחית של Gemini CLI (0.26.0) לא תומכת בהרצת תהליכים ברקע (כל תהליך שמופעל באמצעות
run_shell_commandנסגר ברגע שהקריאה לכלי מסתיימת), ולכן אנחנו מבקשים מ-Gemini להפוך את תהליך הבדיקה לאוטומטי באמצעות סקריפט. התכונה הזו מתוכננת ותתווסף בעתיד הקרוב, כדי לפשט את תהליך הבדיקה.
אופציונלי: בדיקת שרת ה-MCP באמצעות HTTP
אם רוצים להגדיר את Gemini CLI כך שישתמש בשרת באמצעות HTTP:
- שמירת הסשן ויציאה מה-CLI
- עורכים את קובץ
.gemini/settings.jsonומשנים את ההגדרה כך שתצביע על השרת המקומי הפעיל.
"mcpServers": {
"godoctor": {
"httpUrl": "http://localhost:8080"
}
}
- בטרמינל השני, מריצים את השרת עם HTTP באופן מקומי:
go build -o ./bin/godoctor ./cmd/server && ./bin/godoctor -listen=:8080
- מפעילים מחדש את Gemini CLI ונותנים לו הנחיה לבדיקת החיבור, למשל: "Use the godoctor tool to get the documentation for fmt.Println."
- בסיום הבדיקה, עוצרים את השרת באמצעות Ctrl+C.
9. יצירת קונטיינר לאפליקציה באמצעות Docker
עכשיו שהשרת שלנו משתמש בפרוטוקול התעבורה הנכון, אנחנו יכולים להכניס אותו למאגר לצורך פריסה.
המטרה: ליצור קובץ Docker כדי לארוז את שרת godoctor בקובץ אימג' נייד של קונטיינר שמוכן לייצור.
הנחיה לדוגמה:
Please create a multi-stage Dockerfile that compiles the Go binary and copies it into a minimal golang image like golang:1.25.6-alpine. The image should support the following environment variables:
- GOOGLE_CLOUD_USE_VERTEXAI
- GOOGLE_CLOUD_PROJECT
- GOOGLE_CLOUD_LOCATION
Acceptance Criteria:
- The image builds successfully
- Create a script test_docker.sh to launch the docker image in background and test the connectivity with the client:
- Call list_tools on the client pointing to the server running on Docker
- Call read_docs for fmt.Println
- Stop the server
- The script should run without failures
אופציונלי: בדיקה ידנית של תמונת Docker
אחרי שיוצרים את Dockerfile, בונים את התמונה ומריצים אותה כדי לוודא שהיא פועלת בצורה תקינה.
- בונים את המאגר:
docker build -t godoctor:latest .
- מריצים את הקונטיינר באופן מקומי:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
- בדיקת קונטיינר פועל: במסוף אחר, מפעילים את Gemini CLI ומבקשים ממנו לאחזר תיעוד.
- בסיום הבדיקה, עוצרים את השרת באמצעות Ctrl+C.
10. פריסה ב-Cloud Run
עכשיו הגיע הזמן לפרוס את הקונטיינר שלנו בענן.
המטרה: פריסת שרת godoctor בקונטיינר ב-Google Cloud Run.
הנחיה לדוגמה:
Now please deploy this image to Cloud Run and return me an URL I can use to call the MCP tool. Configure Cloud Run to use the following environment variables: - GOOGLE_CLOUD_USE_VERTEXAI: true, - GOOGLE_CLOUD_PROJECT: <your-project-id> - GOOGLE_CLOUD_LOCATION: <your-preferred-region> TODO: - Run `docker build -t gcr.io/daniela-genai-sandbox/godoctor .` - Run `gcloud run deploy godoctor --image` with the image created above Acceptance Criteria: - Call list-tools with the client pointing to the CloudRun endpoint
אחרי שהפריסה תסתיים, נגדיר את Gemini CLI כך שישתמש בכלי שפרסתם.
מעדכנים את קובץ .gemini/settings.json כדי לשנות את ההגדרה של כלי ה-MCP כך שיצביע על השירות שנפרס, או מבקשים מ-Gemini CLI לעשות זאת בשבילכם:
now update the .gemini/settings.json file to use this URL for the godoctor server
הקטע הסופי mcpServers צריך להיראות כך (חשוב לזכור להחליף את ה-placeholder בכתובת ה-URL בפועל של אפליקציית Cloud Run):
"mcpServers": {
"godoctor": {
"httpUrl": "https://<your-cloud-run-id>.us-central1.run.app"
}
}
בדיקת הפריסה של Cloud Run
עכשיו אפשר לבצע את הבדיקה הסופית מקצה לקצה.
מפעילים מחדש את Gemini CLI בפעם האחרונה (באמצעות /chat save ו-/chat resume אם רוצים לשמור את ההקשר). עכשיו ה-CLI אמור להיות מסוגל להתקשר לשרת ה-MCP המרוחק. אפשר לנסות לבקש תיעוד של חבילות.
אפשר גם לבדוק את כלי בקרת הקוד:
Use the godoctor tool to review the cmd/godoctor/main.go file
ניקוי
אחרי שמסיימים את הבדיקה, חשוב לנקות את הסביבה. אתם יכולים להנחות את Gemini למחוק את הפרויקט או רק להסיר את הפריסה של CloudRun. הנחיה לדוגמה:
I'm done with my tests on the CloudRun server, please delete this deployment for me and revert my .gemini/settings.json to use the local version.
11. מעולה!
הצלחתם להנחות עוזר מבוסס-AI ליצור כלי מתוחכם שמבוסס על AI, להוסיף אותו לקונטיינר ולפרוס אותו. חשוב מכך, תרגלתם את המיומנות החיונית של פיתוח תוכנה מודרני: תרגום דרישות להנחיות יעילות. הרחבתם בהצלחה את Gemini CLI באמצעות כלי MCP בהתאמה אישית, והפכתם אותו לעוזר פיתוח Go יעיל וייעודי יותר.