১. ভূমিকা
সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি একটি মডেল কনটেক্সট প্রোটোকল (MCP) সার্ভার তৈরি এবং ডেপ্লয় করবেন। LLM-দেরকে বাহ্যিক টুল ও পরিষেবাগুলিতে অ্যাক্সেস দেওয়ার জন্য MCP সার্ভারগুলি উপযোগী। আপনি এটিকে ক্লাউড রান-এ একটি সুরক্ষিত, প্রোডাকশন-রেডি পরিষেবা হিসাবে কনফিগার করবেন, যা একাধিক ক্লায়েন্ট থেকে অ্যাক্সেস করা যাবে। তারপর আপনি অ্যান্টিগ্র্যাভিটি CLI থেকে রিমোট MCP সার্ভারটিতে সংযোগ করবেন।
আপনি যা করবেন
আমরা FastMCP ব্যবহার করে একটি চিড়িয়াখানা MCP সার্ভার তৈরি করব, যেটিতে get_animals_by_species এবং get_animal_details এই দুটি টুল থাকবে। FastMCP দ্রুত এবং পাইথনিক উপায়ে MCP সার্ভার ও ক্লায়েন্ট তৈরি করার সুযোগ দেয়।

আপনি যা শিখবেন
- ক্লাউড রান-এ এমসিপি সার্ভারটি স্থাপন করুন।
- সমস্ত অনুরোধের জন্য প্রমাণীকরণ বাধ্যতামূলক করে আপনার সার্ভারের এন্ডপয়েন্ট সুরক্ষিত করুন, যাতে শুধুমাত্র অনুমোদিত ক্লায়েন্ট এবং এজেন্টরাই এর সাথে যোগাযোগ করতে পারে।
- Antigravity CLI থেকে আপনার সুরক্ষিত MCP সার্ভার এন্ডপয়েন্টে সংযোগ করুন
২. প্রকল্প স্থাপন
- যদি আপনার আগে থেকে কোনো গুগল অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি গুগল অ্যাকাউন্ট তৈরি করতে হবে।
- কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন। কর্মক্ষেত্র এবং শিক্ষা প্রতিষ্ঠানে এমন কিছু সীমাবদ্ধতা থাকতে পারে, যার ফলে আপনি এই ল্যাবের জন্য প্রয়োজনীয় এপিআই (API) সক্রিয় করতে পারবেন না।
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন।
- একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন।
- প্রজেক্ট কোটা সংক্রান্ত কোনো ত্রুটি দেখলে, একটি নতুন প্রজেক্ট তৈরি করার জন্য বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন অথবা আগের প্রজেক্টটি মুছে ফেলুন।
৩. ক্লাউড শেল এডিটর খুলুন
- সরাসরি ক্লাউড শেল এডিটর- এ যেতে এই লিঙ্কে ক্লিক করুন।
- আজ যেকোনো সময়ে অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যাওয়ার জন্য 'অনুমোদন করুন' (Authorize) বোতামে ক্লিক করুন।

- যদি স্ক্রিনের নিচে টার্মিনালটি দেখা না যায়, তাহলে এটি খুলুন:
- ভিউ ক্লিক করুন
- টার্মিনালে ক্লিক করুন

- টার্মিনালে এই কমান্ডটি দিয়ে আপনার প্রজেক্ট সেট করুন:
- বিন্যাস:
gcloud config set project [PROJECT_ID] - উদাহরণ:
gcloud config set project lab-project-id-example - যদি আপনি আপনার প্রজেক্ট আইডি মনে করতে না পারেন:
- আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
- বিন্যাস:
- আপনি এই বার্তাটি দেখতে পাবেন:
যদি আপনি একটিUpdated property [core/project].
WARNINGদেখতে পান এবং আপনাকেDo you want to continue (Y/n)?জিজ্ঞাসা করা হয়, তাহলে সম্ভবত আপনি প্রজেক্ট আইডি ভুলভাবে প্রবেশ করিয়েছেন।nচাপুন,Enterচাপুন এবংgcloud config set projectকমান্ডটি আবার চালানোর চেষ্টা করুন।
৪. এপিআই সক্রিয় করুন
টার্মিনালে, এপিআইগুলো সক্রিয় করুন:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। 
এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
৫. আপনার পাইথন প্রজেক্ট প্রস্তুত করুন।
- ডিপ্লয়মেন্টের জন্য সোর্স কোড সংরক্ষণ করতে
mcp-on-cloudrunনামে একটি ফোল্ডার তৈরি করুন:mkdir mcp-on-cloudrun && cd mcp-on-cloudrun pyproject.tomlফাইল তৈরি করতেuvটুল ব্যবহার করে একটি পাইথন প্রজেক্ট তৈরি করুন:uv init --description "Example of deploying an MCP server on Cloud Run" --bare --python 3.13uv initকমান্ডটি আপনার প্রোজেক্টের জন্য একটিpyproject.tomlফাইল তৈরি করে। ফাইলটির বিষয়বস্তু দেখতে নিম্নলিখিত কমান্ডটি চালান: আউটপুটটি নিম্নলিখিতের মতো হওয়া উচিত:cat pyproject.toml[project] name = "mcp-on-cloudrun" version = "0.1.0" description = "Example of deploying an MCP server on Cloud Run" requires-python = ">=3.13" dependencies = []
৬. চিড়িয়াখানার এমসিপি সার্ভার তৈরি করুন
MCP-এর সাথে LLM-এর ব্যবহার উন্নত করার জন্য মূল্যবান প্রেক্ষাপট প্রদানের উদ্দেশ্যে, মডেল কনটেক্সট প্রোটোকল (Model Context Protocol) নিয়ে কাজ করার একটি স্ট্যান্ডার্ড ফ্রেমওয়ার্ক FastMCP ব্যবহার করে একটি চিড়িয়াখানার MCP সার্ভার সেট আপ করুন। FastMCP পাইথন ব্যবহার করে দ্রুত MCP সার্ভার এবং ক্লায়েন্ট তৈরি করার একটি উপায় প্রদান করে। এই MCP সার্ভারটি একটি কাল্পনিক চিড়িয়াখানার প্রাণীদের সম্পর্কে ডেটা সরবরাহ করে। সরলতার জন্য, আমরা ডেটা মেমরিতে সংরক্ষণ করি। একটি প্রোডাকশন MCP সার্ভারের জন্য, আপনি সম্ভবত ডেটাবেস বা API-এর মতো উৎস থেকে ডেটা সরবরাহ করতে চাইবেন।
-
pyproject.tomlফাইলে FastMCP-কে ডিপেন্ডেন্সি হিসেবে যুক্ত করতে নিম্নলিখিত কমান্ডটি চালান: এটি আপনার প্রজেক্টে একটিuv add fastmcp==2.12.4 --no-syncuv.lockফাইল যুক্ত করবে। - MCP সার্ভার সোর্স কোডের জন্য একটি নতুন
server.pyফাইল তৈরি করে খুলুন:cloudshell edit ~/mcp-on-cloudrun/server.pycloudshell editকমান্ডটি টার্মিনালের উপরের এডিটরেserver.pyফাইলটি খুলবে। -
server.pyফাইলে নিম্নলিখিত zoo MCP সার্ভার সোর্স কোডটি যোগ করুন:import asyncio import logging import os from typing import List, Dict, Any from fastmcp import FastMCP logger = logging.getLogger(__name__) logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO) mcp = FastMCP("Zoo Animal MCP Server 🦁🐧🐻") # Dictionary of animals at the zoo ZOO_ANIMALS = [ { "species": "lion", "name": "Leo", "age": 7, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Nala", "age": 6, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Simba", "age": 3, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "King", "age": 8, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "penguin", "name": "Waddles", "age": 2, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pip", "age": 4, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Skipper", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Chilly", "age": 3, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pingu", "age": 6, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Noot", "age": 1, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "elephant", "name": "Ellie", "age": 15, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Peanut", "age": 12, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Dumbo", "age": 5, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Trunkers", "age": 10, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "bear", "name": "Smokey", "age": 10, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Grizzly", "age": 8, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Barnaby", "age": 6, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Bruin", "age": 12, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "giraffe", "name": "Gerald", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Longneck", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Patches", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Stretch", "age": 6, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Speedy", "age": 2, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Dash", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Gazelle", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Swift", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "polar bear", "name": "Snowflake", "age": 7, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Blizzard", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Iceberg", "age": 9, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "walrus", "name": "Wally", "age": 10, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Tusker", "age": 12, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Moby", "age": 8, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Flippers", "age": 9, "enclosure": "The Walrus Cove", "trail": "Polar Path" } ] @mcp.tool() def get_animals_by_species(species: str) -> List[Dict[str, Any]]: """ Retrieves all animals of a specific species from the zoo. Can also be used to collect the base data for aggregate queries of animals of a specific species - like counting the number of penguins or finding the oldest lion. Args: species: The species of the animal (e.g., 'lion', 'penguin'). Returns: A list of dictionaries, where each dictionary represents an animal and contains details like name, age, enclosure, and trail. """ logger.info(f">>> 🛠️ Tool: 'get_animals_by_species' called for '{species}'") return [animal for animal in ZOO_ANIMALS if animal["species"].lower() == species.lower()] @mcp.tool() def get_animal_details(name: str) -> Dict[str, Any]: """ Retrieves the details of a specific animal by its name. Args: name: The name of the animal. Returns: A dictionary with the animal's details (species, name, age, enclosure, trail) or an empty dictionary if the animal is not found. """ logger.info(f">>> 🛠️ Tool: 'get_animal_details' called for '{name}'") for animal in ZOO_ANIMALS: if animal["name"].lower() == name.lower(): return animal return {} if __name__ == "__main__": port = int(os.getenv("PORT", 8080)) logger.info(f"🚀 MCP server started on port {port}") asyncio.run( mcp.run_async( transport="http", host="0.0.0.0", port=port, ) )
আপনার কোড সম্পূর্ণ হয়েছে! এখন ক্লাউড রান-এ এমসিপি সার্ভারটি ডেপ্লয় করার সময় হয়েছে।
৭. ক্লাউড রান-এ ডেপ্লয় করা
এখন সরাসরি সোর্স কোড থেকে ক্লাউড রান-এ একটি এমসিপি সার্ভার ডেপ্লয় করুন।
- ক্লাউড রানে ডিপ্লয় করার জন্য একটি নতুন
Dockerfileতৈরি করে খুলুন:cloudshell edit ~/mcp-on-cloudrun/Dockerfile -
server.pyফাইলটি চালানোর জন্যuvটুল ব্যবহার করতে Dockerfile-এ নিম্নলিখিত কোডটি অন্তর্ভুক্ত করুন:# Use the official Python image FROM python:3.13-slim # Install uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ # Install the project into /app COPY . /app WORKDIR /app # Allow statements and log messages to immediately appear in the logs ENV PYTHONUNBUFFERED=1 # Install dependencies RUN uv sync EXPOSE $PORT # Run the FastMCP server CMD ["uv", "run", "server.py"] -
mcp-server-saনামে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:gcloud iam service-accounts create mcp-server-sa --display-name="MCP Server Service Account" - অ্যাপ্লিকেশনটি ক্লাউড রানে ডেপ্লয় করতে
gcloudকমান্ডটি চালান। প্রমাণীকরণ বাধ্যতামূলক করতেcd ~/mcp-on-cloudrun gcloud run deploy zoo-mcp-server \ --service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --no-allow-unauthenticated \ --region=us-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp--no-allow-unauthenticatedফ্ল্যাগটি ব্যবহার করুন। নিরাপত্তার কারণে এটি গুরুত্বপূর্ণ। যদি আপনি প্রমাণীকরণ বাধ্যতামূলক না করেন, তবে যে কেউ আপনার MCP সার্ভারে কল করতে পারবে এবং সম্ভাব্যভাবে আপনার সিস্টেমের ক্ষতি করতে পারবে। - একটি নতুন আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরির বিষয়টি নিশ্চিত করুন। যেহেতু আপনি প্রথমবারের মতো সোর্স কোড থেকে ক্লাউড রান-এ ডিপ্লয় করছেন, আপনি দেখতে পাবেন:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-west1] will be created. Do you want to continue (Y/n)?
Yটাইপ করেEnterচাপুন, এটি আপনার ডেপ্লয়মেন্টের জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করবে। ক্লাউড রান সার্ভিসের জন্য এমসিপি সার্ভার ডকার কন্টেইনার সংরক্ষণের জন্য এটি প্রয়োজন। - কয়েক মিনিট পর আপনি এইরকম একটি বার্তা দেখতে পাবেন:
Service [zoo-mcp-server] revision [zoo-mcp-server-12345-abc] has been deployed and is serving 100 percent of traffic.
আপনি আপনার এমসিপি সার্ভারটি স্থাপন করেছেন। এখন আপনি এটি ব্যবহার করতে পারেন।
৮. Antigravity CLI-তে রিমোট MCP সার্ভারটি যুক্ত করুন
এখন যেহেতু আপনি সফলভাবে একটি রিমোট এমসিপি সার্ভার স্থাপন করেছেন, আপনি গুগল কোড অ্যাসিস্ট বা অ্যান্টিগ্র্যাভিটি সিএলআই-এর মতো বিভিন্ন অ্যাপ্লিকেশন ব্যবহার করে এটির সাথে সংযোগ করতে পারেন। এই অংশে, আমরা অ্যান্টিগ্র্যাভিটি সিএলআই ব্যবহার করে আপনার নতুন রিমোট এমসিপি সার্ভারের সাথে একটি সংযোগ স্থাপন করব।
- আপনার ব্যবহারকারী অ্যাকাউন্টকে রিমোট এমসিপি সার্ভার কল করার অনুমতি দিন।
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=user:$(gcloud config get-value account) \ --role='roles/run.invoker' - অ্যান্টিগ্র্যাভিটি সেটিংস ফাইলে ব্যবহারের জন্য আপনার গুগল ক্লাউড ক্রেডেনশিয়াল এবং প্রজেক্ট নম্বর এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষণ করুন:
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token) - যদি আগে থেকে তৈরি না হয়ে থাকে, তাহলে একটি
.gemini/antigravity-cliফোল্ডার তৈরি করুন।mkdir -p ~/.gemini/antigravity-cli - আপনার Antigravity CLI MCP কনফিগারেশন ফাইলে রিমোট MCP সার্ভারটি লিখুন:
cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF { "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF - অ্যান্টিগ্র্যাভিটি সিএলআই শুরু করুন:
agy
- Antigravity CLI দিয়ে প্রমাণীকরণ করুন: প্রথমবার চালু করার সময় প্রমাণীকরণ প্রয়োজন। OAuth নির্বাচন করুন (
Enterচেপে)।
- লিঙ্কটিতে ক্লিক করুন (যদি ক্লিকযোগ্য না হয়, তাহলে ক্লাউড শেলে URL-টি হাইলাইট করে কপি করুন, তারপর আপনার ব্রাউজারে পেস্ট করুন)।
- আপনার গুগল অ্যাকাউন্টে সাইন ইন করুন
- কোডটি কপি করুন
- কোডটি ক্লাউড শেল এডিটর টার্মিনালে পেস্ট করুন।
-
Enterচাপুন।
- কিছু ডিফল্ট সেটিংস গ্রহণ করতে
Enterচাপুন। - অ্যান্টিগ্র্যাভিটি সিএলআই-কে তার প্রেক্ষাপটের মধ্যে উপলব্ধ এমসিপি টুলগুলির তালিকা করতে বলুন।
প্রম্পট বক্সে ফিরে যেতে/mcpESCচাপুন। - চিড়িয়াখানায় কিছু খুঁজে বের করতে অ্যান্টিগ্র্যাভিটি সিএলআই-কে বলুন।
Antigravity CLI-কেWhere can I find penguins?zoo-remoteMCP সার্ভারটি ব্যবহার করতে হবে এবং এটি আপনাকে জিজ্ঞাসা করবে যে আপনি MCP চালানোর অনুমতি দিতে চান কিনা। - নির্বাচন করতে ডাউন অ্যারো ব্যবহার করুন, তারপর
Enterচাপুন।Yes, always allow all tools from server "zoo-remote"

আউটপুটে সঠিক উত্তর এবং একটি ডিসপ্লে বক্স দেখানো উচিত, যা থেকে বোঝা যাবে যে এমসিপি সার্ভারটি ব্যবহার করা হয়েছে।

আপনি পেরেছেন! আপনি সফলভাবে ক্লাউড রান-এ একটি রিমোট এমসিপি সার্ভার স্থাপন করেছেন এবং অ্যান্টিগ্র্যাভিটি সিএলআই ব্যবহার করে এটি পরীক্ষা করেছেন।
আপনার সেশন শেষ করার জন্য প্রস্তুত হলে, /exit টাইপ করুন এবং তারপরে Antigravity CLI থেকে বের হতে Enter চাপুন।
ডিবাগিং
আপনি যদি এই ধরনের কোনো ত্রুটি দেখতে পান:
🔍 Attempting OAuth discovery for 'zoo-remote'... ❌ 'zoo-remote' requires authentication but no OAuth configuration found Error connecting to MCP server 'zoo-remote': MCP server 'zoo-remote' requires authentication. Please configure OAuth or check server settings.
সম্ভবত আইডি টোকেনটির মেয়াদ শেষ হয়ে গেছে এবং ID_TOKEN পুনরায় সেট করার প্রয়োজন।
- Antigravity CLI থেকে বের হতে
/exitটাইপ করুন এবং তারপরেEnterচাপুন। - আপনার টার্মিনালে আপনার প্রজেক্টটি সেট করুন।
gcloud config set project [PROJECT_ID] - যেহেতু আপনার ID_TOKEN-টির মেয়াদ শেষ হয়ে গিয়ে থাকতে পারে, তাই একটি নতুন
ID_TOKENপেতে Google Cloud credentials কমান্ডটি পুনরায় চালান এবং আপনার কনফিগারেশন ফাইলটি নতুন করে লিখুন:export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token) cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{ "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF ```
৯. (ঐচ্ছিক) সার্ভার লগ-এ টুল কলগুলো যাচাই করুন
আপনার ক্লাউড রান এমসিপি সার্ভারটি কল করা হয়েছিল কিনা তা যাচাই করতে, পরিষেবা লগগুলি পরীক্ষা করুন।
gcloud run services logs read zoo-mcp-server --region us-west1 --limit=5
আপনি একটি আউটপুট লগ দেখতে পাবেন যা নিশ্চিত করবে যে একটি টুল কল করা হয়েছে। 🛠️
2025-08-05 19:50:31 INFO: 169.254.169.126:39444 - "POST /mcp HTTP/1.1" 200 OK 2025-08-05 19:50:31 [INFO]: Processing request of type CallToolRequest 2025-08-05 19:50:31 [INFO]: >>> 🛠️ Tool: 'get_animals_by_species' called for 'penguin'
১০. (ঐচ্ছিক) সার্ভারে এমসিপি প্রম্পট যোগ করুন
একটি এমসিপি প্রম্পট দীর্ঘ প্রম্পটের সংক্ষিপ্ত রূপ তৈরি করার মাধ্যমে, আপনার প্রায়শই চালানো প্রম্পটগুলোর কর্মপ্রবাহকে দ্রুততর করতে পারে।
Antigravity CLI স্বয়ংক্রিয়ভাবে MCP প্রম্পটগুলিকে কাস্টম স্ল্যাশ কমান্ডে রূপান্তর করে, যাতে আপনি /prompt_name টাইপ করে একটি MCP প্রম্পট চালু করতে পারেন, যেখানে prompt_name হলো আপনার MCP প্রম্পটের নাম।
একটি MCP প্রম্পট তৈরি করুন, যাতে Antigravity CLI-তে /find animal টাইপ করে আপনি চিড়িয়াখানার কোনো প্রাণী দ্রুত খুঁজে নিতে পারেন।
- আপনার
server.pyফাইলে main-এর উপরে এই কোডটি যোগ করুন: guard (if __name__ == "__main__":)@mcp.prompt() def find(animal: str) -> str: """ Find which exhibit and trail a specific animal might be located. """ return ( f"Please find the exhibit and trail information for {animal} in the zoo. " f"Respond with '[animal] can be found in the [exhibit] on the [trail].'" f"Example: Penguins can be found in The Arctic Exhibit on the Polar Path." ) - আপনার অ্যাপ্লিকেশনটি ক্লাউড রানে পুনরায় স্থাপন করুন
gcloud run deploy zoo-mcp-server \ --region=us-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp - আপনার ID_TOKEN রিফ্রেশ করুন এবং কনফিগারেশন ফাইলটি পুনরায় তৈরি করুন:
export ID_TOKEN=$(gcloud auth print-identity-token) export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{ "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF ```
- আপনার অ্যাপ্লিকেশনের নতুন সংস্করণটি ডেপ্লয় করার পর, Antigravity CLI চালু করুন।
agy - প্রম্পটে আপনার তৈরি করা নতুন কাস্টম কমান্ডটি ব্যবহার করুন:
/find lions
আপনি দেখবেন যে Antigravity CLI, get_animals_by_species টুলটিকে কল করে এবং MCP প্রম্পটের নির্দেশ অনুযায়ী প্রতিক্রিয়াটি ফরম্যাট করে!
╭───────────────────────────╮
│ > /find lions │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
১১. (ঐচ্ছিক) দ্রুত প্রতিক্রিয়ার জন্য জেমিনি ফ্ল্যাশ লাইট ব্যবহার করুন।
Antigravity CLI আপনাকে আপনার ব্যবহৃত মডেল এবং এফোর্ট বেছে নিতে দেয়।
যেহেতু চিড়িয়াখানার প্রাণী খোঁজার অনুরোধগুলোর জন্য চিন্তা বা যুক্তির প্রয়োজন হয় না, তাই একটি দ্রুততর মডেল ব্যবহার করে কাজটি দ্রুত করার চেষ্টা করুন।
পূর্ববর্তী অংশে, আপনি একটি MCP প্রম্পট তৈরি করেছেন যাতে Antigravity CLI-তে /find animal টাইপ করে চিড়িয়াখানার কোনো প্রাণী দ্রুত খুঁজে পেতে পারেন।
- আপনার অ্যাপ্লিকেশনের নতুন সংস্করণটি ডেপ্লয় করার পর, Antigravity CLI চালু করুন।
agy --model=gemini-3.6-flash --effort=low - প্রম্পটে আপনার তৈরি করা নতুন কাস্টম কমান্ডটি ব্যবহার করুন:
/find lions
আপনি তখনও দেখবেন যে Antigravity CLI, get_animals_by_species টুলটিকে কল করে এবং MCP প্রম্পটের নির্দেশ অনুযায়ী প্রতিক্রিয়াটি ফরম্যাট করে, কিন্তু উত্তরটি আরও দ্রুত প্রদর্শিত হবে!
╭───────────────────────────╮
│ > /find lions │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
ডিবাগিং
আপনি যদি এই ধরনের কোনো ত্রুটি দেখতে পান:
✕ Unknown command: /find lions
/mcp চালানোর চেষ্টা করুন এবং যদি এর আউটপুট zoo-remote - Disconnected , তাহলে আপনাকে পুনরায় ডিপ্লয় করতে হতে পারে, অথবা নিম্নলিখিত কমান্ডগুলো আবার চালাতে হতে পারে:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=user:$(gcloud config get-value account) \
--role='roles/run.invoker'
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)")
export ID_TOKEN=$(gcloud auth print-identity-token)
cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{
"mcpServers": {
"zoo-remote": {
"serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp",
"headers": {
"Authorization": "Bearer ${ID_TOKEN}"
}
}
}
}
EOF
১২. উপসংহার
অভিনন্দন! আপনি সফলভাবে একটি সুরক্ষিত রিমোট এমসিপি সার্ভার স্থাপন এবং এর সাথে সংযুক্ত হয়েছেন।
পরবর্তী ল্যাবে যান
এই ল্যাবটি তিন পর্বের একটি সিরিজের প্রথম ল্যাব। দ্বিতীয় ল্যাবে, আপনি একটি ADK এজেন্টের সাথে আপনার তৈরি করা MCP সার্ভারটি ব্যবহার করবেন।
ক্লাউড রানে একটি ADK এজেন্টের সাথে একটি MCP সার্ভার ব্যবহার করুন
(ঐচ্ছিক) পরিষ্কার করা
আপনি যদি পরবর্তী ল্যাবে অগ্রসর না হন এবং আপনার তৈরি করা কাজগুলো গুছিয়ে নিতে চান, তাহলে অতিরিক্ত চার্জ এড়ানোর জন্য আপনার ক্লাউড প্রজেক্টটি ডিলিট করে দিতে পারেন।
পরিষেবাটি ব্যবহার না করা হলে ক্লাউড রান কোনো চার্জ না করলেও, আর্টিফ্যাক্ট রেজিস্ট্রি-তে কন্টেইনার ইমেজ সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে। আপনার ক্লাউড প্রজেক্টটি ডিলিট করে দিলে সেই প্রজেক্টের মধ্যে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যায়।
আপনি চাইলে প্রজেক্টটি মুছে ফেলতে পারেন:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
আপনি আপনার ক্লাউডশেল ডিস্ক থেকে অপ্রয়োজনীয় রিসোর্সগুলো মুছে ফেলতে চাইতে পারেন। আপনি তা করতে পারেন:
- কোডল্যাব প্রজেক্ট ডিরেক্টরিটি মুছে ফেলুন:
rm -rf ~/mcp-on-cloudrun - সতর্কীকরণ! এই পরবর্তী কাজটি পূর্বাবস্থায় ফেরানো যাবে না! জায়গা খালি করার জন্য আপনি যদি আপনার ক্লাউড শেলের সবকিছু মুছে ফেলতে চান, তাহলে আপনি আপনার সম্পূর্ণ হোম ডিরেক্টরিটি ডিলিট করে দিতে পারেন। খেয়াল রাখবেন, আপনি যা কিছু রাখতে চান তা যেন অন্য কোথাও সেভ করা থাকে।
sudo rm -rf $HOME