اتصال دستیارهای هوش مصنوعی به سرویسهای مکانی ژئوتاژک با MCP

اگر یک دستیار یا ایجنت هوش مصنوعی میسازید، لازم نیست برای هر سرویس مکانی کد فراخوانی API بنویسید. ژئوتاژک کلود همه سرویسهایش را با پروتکل MCP (Model Context Protocol) هم ارائه میدهد: آدرس سرور MCP و توکن خودتان را به مدل میدهید و مدل خودش تشخیص میدهد برای هر سوال کدام ابزار را صدا بزند.
مثلا از دستیارتان میپرسید «در شعاع یک کیلومتری این ملک چند نفر زندگی میکنند و نزدیکترین بیمارستان کجاست؟» و مدل به ترتیب ابزارهای آدرسیابی، جمعیت و نزدیکترین مراکز را صدا میزند و جواب را مینویسد.
| API | MCP | |
|---|---|---|
| مناسب برای | برنامهها و سرویسهایی که خودتان کد فراخوانی را مینویسید | دستیارها و ایجنتهای هوش مصنوعی که مدل تصمیم میگیرد چه چیزی را صدا بزند |
| آدرس | https://cloud.geotajak.ir/api/geo/... | https://cloud.geotajak.ir/mcp |
| احراز هویت | توکن API | همان توکن API |
| هزینه | به ازای هر درخواست | هر فراخوانی ابزار برابر یک درخواست همان سرویس |
داده و قیمت در هر دو روش یکی است؛ فقط شیوه اتصال فرق میکند.
چه چیزی لازم دارید
- یک حساب در cloud.geotajak.ir با کیف پول شارژشده.
- یک توکن از بخش توکنهای API. همان توکنی که برای API میسازید برای MCP هم کار میکند.
پیشنهاد میکنیم برای هر ایجنت یک توکن جدا بسازید و به آن اعتبار محدود و سقف مصرف دورهای بدهید (مثلا «هفتهای ۱۰۰ هزار ژئوکوین»). ایجنتها ممکن است در یک گفتگو دهها ابزار صدا بزنند و این سقف جلوی مصرف پیشبینینشده را میگیرد.
مشخصات اتصال
| آدرس سرور | https://cloud.geotajak.ir/mcp |
| نوع اتصال (transport) | Streamable HTTP |
| هدر احراز هویت | Authorization: Bearer YOUR_TOKEN |
دیدن فهرست ابزارها رایگان است و توکن نمیخواهد؛ صدا زدن هر ابزار توکن معتبر لازم دارد.
اتصال به برنامهها
Claude Code
claude mcp add --transport http geotajak https://cloud.geotajak.ir/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Cursor، VS Code و برنامههایی که سرور MCP راه دور را در فایل تنظیمات میپذیرند
{
"mcpServers": {
"geotajak": {
"url": "https://cloud.geotajak.ir/mcp",
"headers": {"Authorization": "Bearer YOUR_TOKEN"}
}
}
}
برنامههایی که فقط سرور محلی (stdio) را میپذیرند
با ابزار mcp-remote یک پل محلی به سرور ژئوتاژک بسازید:
{
"mcpServers": {
"geotajak": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://cloud.geotajak.ir/mcp",
"--header", "Authorization: Bearer YOUR_TOKEN"]
}
}
}
ایجنت خودتان (Python)
import asyncio, os
from fastmcp import Client
from fastmcp.client.auth import BearerAuth
async def main():
token = os.environ["GEOTAJAK_API_KEY"]
async with Client("https://cloud.geotajak.ir/mcp", auth=BearerAuth(token)) as geotajak:
tools = await geotajak.list_tools() # این فهرست را به مدل خود بدهید
result = await geotajak.call_tool("air_current", {"place": "تهران"})
print(result.data["summary"])
print(result.data["billing"]) # هزینه این فراخوانی و اعتبار باقیمانده
asyncio.run(main())
هر کتابخانه یا چارچوبی که MCP را پشتیبانی میکند به همین شکل وصل میشود: آدرس /mcp و هدر توکن.
ورودی ابزارها
| ورودی | شکل |
|---|---|
| یک نقطه | place (نام مکان به فارسی یا انگلیسی) یا lat و lon |
| چندضلعی یا خط | [[lat, lon], ...] |
| کادر جغرافیایی | bbox به شکل "west,south,east,north" |
مدل اینها را خودش از توضیح هر ابزار میخواند؛ لازم نیست شما چیزی تعریف کنید. پارامترها و خروجی هر ابزار همان پارامترها و خروجی سرویس API متناظر است که در مستند همان سرویس آمده.
خروجی و هزینه
خروجی هر ابزار همان JSON سرویس است، بهعلاوه یک بخش billing:
{
"summary": "این نقطه: حدود 63,911 نفر در شعاع 1,000 متری (تراکم 20,343 نفر در کیلومتر مربع، حدود 20,616 خانوار)؛ بافت محل: شهری متراکم.",
"population": 63910.84,
"density_per_km2": 20343.5,
"billing": {"request_cost": 50.0, "credit_remaining": 19950.0}
}
summaryیک جمله فارسی آماده است که مدل میتواند مستقیم در جواب بیاورد.billing.request_costهزینه همین فراخوانی وbilling.credit_remainingاعتبار باقیمانده توکن است (ژئوکوین). ایجنت میتواند با آن مصرف خودش را کنترل کند.- فراخوانی ناموفق (ورودی اشتباه یا خطای سرور) هزینه ندارد.
خطاها
خطا بهصورت خطای ابزار با پیام فارسی به مدل برمیگردد و مدل معمولا خودش آن را اصلاح میکند (مثلا شعاع خارج از محدوده) یا به کاربر میگوید:
| پیام | علت |
|---|---|
| توکن ارسال نشده است… | هدر Authorization در تنظیمات اتصال نیست |
| توکن نامعتبر یا غیرفعال است… | توکن اشتباه یا غیرفعال |
| اعتبار این توکن تمام شده است… | از کیف پول به توکن اعتبار اضافه کنید |
| این توکن به این سرویس دسترسی ندارد | سرویس در فهرست سرویسهای مجاز توکن نیست |
| درخواست از آیپی … مجاز نیست | توکن محدودیت آیپی دارد و ایجنت از آیپی دیگری وصل شده |
| سقف مصرف … در دوره جاری پر شده است | سقف مصرف دورهای توکن پر شده؛ پیام زمان فعال شدن دوباره را میگوید |
HTTP 400: … | ورودی اشتباه؛ متن پیام مقدار درست را میگوید |
محدودیتهای توکن در MCP
همه تنظیمات توکن برای MCP هم اعمال میشود:
- سرویسهای مجاز: اگر توکن فقط به چند سرویس دسترسی دارد، ابزارهای دیگر خطای ۴۰۳ میدهند. با این روش میتوانید به هر ایجنت فقط ابزارهای لازم را بدهید.
- محدودیت آیپی: آیپی سرور یا دستگاهی که ایجنت روی آن اجرا میشود را وارد کنید.
- محدودیت دامنه: برای MCP مناسب نیست، چون ایجنتها هدر
Originنمیفرستند. برای توکن MCP محدودیت دامنه نگذارید. - سقف ساعتی و سقف مصرف دورهای: مثل API شمرده میشود.
فهرست ابزارها
هزینه هر ابزار همان هزینه سرویس متناظر است؛ قیمت بهروز در صفحه سرویسها آمده.
| ابزار (tool) | سرویس | دسته |
|---|---|---|
geocode | جستجوی آدرس (Geocoding) | مکانیابی |
reverse_geocode | آدرسیابی معکوس (Reverse Geocoding) | مکانیابی |
route | مسیریابی و فاصله | مسیریابی |
elevation | ارتفاع از سطح دریا | تحلیل مکانی |
location_info | اطلاعات جامع مکان | تحلیل مکانی |
describe | توصیف هوشمند مکان (AI) | هوش مصنوعی |
area | مساحت و محیط | تحلیل مکانی |
land_use | کاربری غالب اراضی | تحلیل مکانی |
nearest_city | نزدیکترین شهر | مسیریابی |
service_access | شاخص دسترسی به خدمات | تحلیل مکانی |
parse_address | تجزیه هوشمند آدرس فارسی (AI) | هوش مصنوعی |
weather_current | آب و هوای کنونی و پیشبینی | آب و هوا |
weather_history | تاریخچه آب و هوا | آب و هوا |
weather_climate | اقلیم و میانگین آب و هوا | آب و هوا |
soil | خاکشناسی نقطه | کشاورزی |
agro_climate | اقلیم کشاورزی | کشاورزی |
agro_drought | پایش خشکسالی | کشاورزی |
crop_suitability | الگوی کشت پیشنهادی (AI) | کشاورزی |
hazard_alerts | هشدارهای جوی | مدیریت بحران |
hazard_earthquakes | زمینلرزهها | مدیریت بحران |
hazard_flood | ریسک سیلاب | مدیریت بحران |
hazard_fires | آتشسوزیهای فعال | مدیریت بحران |
infrastructure | زیرساختهای حیاتی | مدیریت بحران |
telecom | دکلها و سلولهای مخابراتی | پوشش شبکه |
agro_frost | تقویم یخبندان | کشاورزی |
agro_water_balance | بیلان آب و نیاز آبی | کشاورزی |
agro_soil_moisture | رطوبت خاک | کشاورزی |
rain_extremes | بارشهای حدی و دوره بازگشت | آب و هوا |
waterways | آبراههها و سدهای اطراف | تحلیل مکانی |
terrain_relief | پستیبلندی زمین | تحلیل مکانی |
nearest_facility | نزدیکترین مراکز | مدیریت بحران |
coverage_point | پوشش شبکه موبایل در یک نقطه | پوشش شبکه |
coverage_area | درصد پوشش شبکه یک محدوده | پوشش شبکه |
coverage_route | پوشش شبکه در طول مسیر | پوشش شبکه |
coverage_map | نقشه پوشش شبکه | پوشش شبکه |
population_point | جمعیت اطراف یک نقطه | جمعیت |
population_rings | جمعیت در حلقههای فاصله | جمعیت |
population_demographics | ساختار سنی و جنسی جمعیت | جمعیت |
population_area | جمعیت شهر، شهرستان یا محدوده | جمعیت |
population_polygon | جمعیت داخل چندضلعی | جمعیت |
population_grid | نقشه تراکم جمعیت | جمعیت |
air_current | کیفیت هوای کنونی | کیفیت هوا |
air_forecast | پیشبینی کیفیت هوا | کیفیت هوا |
air_area | آلودگی هوای یک منطقه | کیفیت هوا |
air_map | نقشه آلودگی هوا | کیفیت هوا |
air_cities | رتبهبندی آلودگی شهرها | کیفیت هوا |
ابزارهای نقشه (coverage_map، population_grid، air_map) خروجی GeoJSON میدهند که میتواند بزرگ باشد. آنها برای ایجنتی مناسباند که خروجی را به یک نقشه میدهد؛ برای آنها کادر (bbox) کوچک بدهید.
چند نمونه سوال
| سوال کاربر | ابزارهایی که مدل صدا میزند |
|---|---|
| «در شعاع ۵۰۰ متری این ملک چند نفر زندگی میکنند و نزدیکترین بیمارستان کجاست؟» | geocode، population_point، nearest_facility |
| «برای این زمین در یزد چه محصولی مناسب است؟» | crop_suitability، agro_water_balance |
| «مسیر تیم امداد از تهران تا این روستا آنتن دارد؟» | coverage_route، route |
| «امروز هوای کدام شهرها ناسالم است و چند نفر درگیرند؟» | air_cities، air_area |
نکتههای مهم
- دادههای آب و هوا، کیفیت هوا و جمعیت مدلشده هستند، نه اندازهگیری ایستگاه یا سرشماری رسمی. خروجی هر ابزار فیلدهای
sourceوnoteدارد که محدودیت داده را میگوید؛ از مدل بخواهید این محدودیتها را در جواب نگه دارد. - همه ابزارها فقطخواندنیاند و چیزی را تغییر نمیدهند.
- توکن را در کد یا مخزن عمومی نگذارید؛ از متغیر محیطی استفاده کنید. اگر توکن لو رفت، آن را از پنل غیرفعال کنید.
