API & AI Integration›MCP Integration
🤖

MCP Integration

Let AI assistants use Datronis via Model Context Protocol

MCP چیست؟

پروتکل متن مدل (MCP) یک استاندارد باز از Anthropic است که به دستیارهای هوش مصنوعی (Claude، Cursor، Windsurf و غیره) اجازه می‌دهد به سرویس‌های خارجی متصل شوند و ابزارهای واقعی را فراخوانی کنند. Datronis یکی از توانمندترین سرورهای عمومی MCP در حوزه جست‌وجوی شغل را ارائه می‌دهد: هر هوش مصنوعی سازگار با MCP می‌تواند به‌صورت رایگان شغل‌های واقعی را جست‌وجو کند، اخبار را مرور کند، شرکت‌ها را بررسی کند و آمار زنده پلتفرم را پرسش‌گری کند — و با یک توکن دسترسی شخصی، می‌تواند فقط از طریق یک گفتگو یک رزومه کامل بسازد یا به‌روزرسانی کند، درخواست شغل ارسال کند و وضعیت درخواست‌ها را بررسی کند، همه از طرف شما و بدون نوشتن حتی یک خط کد یکپارچه‌سازی.

💡

سریع‌ترین راه برای آزمایش

آدرس سرور را در Claude Desktop (یا هر کلاینت MCP دیگری) قرار دهید و بلافاصله بپرسید: «شغل‌های ارشد ریکت ریموت را پیدا کن» یا «آخرین اخبار تکنولوژی را به من نشان بده.»

ℹ️

تازه با MCP آشنا شدید؟

ابتدا صفحه معرفی Datronis برای عامل‌های هوش مصنوعی را ببینید تا با زبانی ساده، فهرست کامل ابزارها و نمونه درخواست‌های بیشتری آشنا شوید — وقتی آماده اتصال یک کلاینت بودید، به این صفحه برگردید.

HTTP قابل پخش جاری (Streamable)مشخصات MCP ۲۰۲۵-۰۳-۲۶۶ ابزار عمومی، ۵ مورد نیازمند کلید API۱۱ ابزار

آدرس سرور

سرور MCP یک نقطه پایانی HTTP واحد است. هر سه متد HTTP توسط این پروتکل استفاده می‌شوند:

FieldTypeRequiredDescription
POST /api/mcpHTTPYesشروع یک نشست جدید یا ارسال پیام به نشستی که از قبل وجود دارد
GET /api/mcpHTTPNoباز کردن یک جریان Server-Sent Events برای پیام‌هایی که سرور آغاز می‌کند (نیازمند هدر Mcp-Session-Id)
DELETE /api/mcpHTTPNoبستن و پاک‌سازی یک نشست (نیازمند هدر Mcp-Session-Id)
Server URL
https://api.datronis.com/api/mcp

راه‌اندازی Claude Desktop

موارد زیر را به فایل پیکربندی Claude Desktop خود اضافه کنید. در macOS این فایل در مسیر ~/Library/Application Support/Claude/claude_desktop_config.json قرار دارد.

claude_desktop_config.json
{
  "mcpServers": {
    "datronis": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://api.datronis.com/api/mcp"
      ]
    }
  }
}
ℹ️

mcp-remote

بسته mcp-remote بین Claude Desktop (که از stdio استفاده می‌کند) و هر سرور MCP مبتنی بر HTTP پل می‌زند. آن را یک بار با این دستور نصب کنید: npm install -g mcp-remote

راه‌اندازی Cursor / Windsurf / Cline

این ویرایشگرها به‌صورت بومی از سرورهای MCP مبتنی بر HTTP پشتیبانی می‌کنند. آدرس سرور را در پنل تنظیمات MCP ویرایشگر خود وارد کنید:

.cursor/mcp.json (or equivalent)
{
  "mcpServers": {
    "datronis": {
      "url": "https://api.datronis.com/api/mcp",
      "type": "http"
    }
  }
}

ابزارهای موجود

شش ابزار اول در زیر عمومی هستند (نیازی به کلید API نیست) — هوش مصنوعی می‌تواند بر اساس درخواست شما به‌طور خودکار آن‌ها را فراخوانی کند. پنج ابزار باقی‌مانده به یک توکن دسترسی شخصی نیاز دارند (بخش بعدی را ببینید) زیرا روی حساب شما عمل می‌کنند: ارسال درخواست‌ها، خواندن رزومه‌های شما، بررسی تاریخچه درخواست‌هایتان، و پیش‌نویس یا ویرایش مقالات خبری.

FieldTypeRequiredDescription
search_jobstool
"q""country""city""remote_type""job_type""job_level""skills""salary_min""page""limit""api_key (optional)"
Noجست‌وجوی فهرست شغل‌ها بر اساس کلیدواژه، موقعیت، سیاست دورکاری، نوع شغل، سطح تجربه و مهارت‌ها. برای شخصی‌سازی نتایج (مثلاً اینکه آیا شغلی را ذخیره کرده‌اید) api_key را ارسال کنید. نتایج صفحه‌بندی‌شده برمی‌گرداند.
get_jobtool
"slug (required)""api_key (optional)"
Noدریافت جزئیات کامل یک شغل با اسلاگ یا شناسه آن — شامل توضیحات، الزامات، حقوق و آدرس درخواست. برای شخصی‌سازی نتایج api_key را ارسال کنید.
get_newstool
"title""category_id""locale""limit""offset"
Noدریافت آخرین مقالات خبری. بر اساس کلیدواژه عنوان، شناسه دسته‌بندی یا لوکال (زبان) فیلتر کنید. عنوان، خلاصه، تاریخ و آدرس را برمی‌گرداند.
get_categoriestool
"locale"
Noفهرست تمام دسته‌بندی‌های محتوا در پلتفرم. برای یافتن شناسه‌های دسته‌بندی جهت فیلتر کردن اخبار استفاده می‌شود.
search_companiestool
"query""country""industry""is_hiring""limit""page"
Noجست‌وجوی شرکت‌ها بر اساس نام، صنعت یا کشور. به‌صورت اختیاری می‌توان فقط شرکت‌های فعال در استخدام را فیلتر کرد.
get_platform_statstool
Noدریافت آمار کلی پلتفرم: تعداد کل شغل‌ها، شرکت‌ها، مقالات خبری و کاربران.
apply_to_jobtool
"api_key (required)""job_id (required)""resume_id (optional)""cover_letter (optional)"
Yesارسال یک درخواست شغل از طرف شما. اگر resume_id ارسال نشود، رزومه پیش‌فرض (یا آخرین رزومه به‌روزرسانی‌شده) شما به‌طور خودکار استفاده می‌شود.
list_my_resumestool
"api_key (required)""query""status""locale""page""limit"
Yesفهرست رزومه‌های ذخیره‌شده شما (همراه با محتوای کامل آن‌ها)، تا یک عامل هوش مصنوعی بتواند نشان دهد کدام رزومه برای درخواست استفاده خواهد شد، به شما اجازه دهد رزومه دیگری را انتخاب کنید، یا پیش از به‌روزرسانی، محتوای فعلی را بخواند.
create_resumetool
"api_key (required)""title""locale""is_default""name""headline""summary""location""contact""experiences""education""skills""projects""certificates""customSections"
Yesایجاد یک رزومه با دادن محتوای آن مستقیماً به عامل هوش مصنوعی — نام، عنوان شغلی، خلاصه، اطلاعات تماس، تجربه کاری، تحصیلات، مهارت‌ها، پروژه‌ها، گواهینامه‌ها. بدون پر کردن فرم به‌صورت دستی: پیش‌زمینه خود را در گفتگو توصیف کنید و عامل رزومه را برای شما می‌سازد. به‌طور کامل از طرح‌بندی و استایل صرف‌نظر می‌شود؛ Datronis مقادیر پیش‌فرض مناسبی اعمال می‌کند که بعداً می‌توانید آن‌ها را در سازنده انسانی در /app/resume-builder/ تنظیم کنید.
update_resumetool
"api_key (required)""resume_id (required)""title""locale""status""is_default""full_replace""name""headline""summary""location""contact""experiences""education""skills""projects""certificates""customSections"
Yesیک مقاله خبری پیش‌نویس و منتشر کنید. برای هر حسابی باز است — توکن برای محدودسازی نرخ و ثبت حسابرسی است، نه دروازه مجوز. همیشه ابتدا به انگلیسی پیش‌نویس می‌شود؛ یک طبقه‌بند ایمنی خودکار باید قبل از انتشار مقاله «green» را برگرداند (به «ایمنی محتوا و سیاست انتشار» در زیر مراجعه کنید). مگر اینکه target_locales مشخص شود، فقط به انگلیسی منتشر می‌شود.
get_my_applicationstool
"api_key (required)""page""limit"
Yesمقاله‌ای را که draft_news به‌عنوان «flagged» رد کرده بازبینی و بازطبقه‌بندی کنید. هر تلاش جداگانه ثبت می‌شود — هرگز یک تغییر وضعیت خاموش نیست. فقط حسابی که ابتدا مقاله را ارسال کرده می‌تواند دوباره آن را ارسال کند.
draft_newstool
"api_key (required)""title (required)""body (required)""content_format (html | markdown; default html)""category_id (optional)""target_locales (optional)"
Yesپیش‌نویس و انتشار یک مقاله خبری. بدنه می‌تواند HTML غنی با کلاس‌ها و CSS درون‌خطی، یا Markdown باشد که در سمت سرور رندر می‌شود. برای هر حسابی باز است — توکن برای محدودسازی نرخ و ثبت حسابرسی است، نه دروازه مجوز. همیشه ابتدا به انگلیسی پیش‌نویس می‌شود؛ یک طبقه‌بند ایمنی خودکار باید قبل از انتشار مقاله «green» را برگرداند (به «ایمنی محتوا و سیاست انتشار» در زیر مراجعه کنید). مگر اینکه target_locales مشخص شود، فقط به انگلیسی منتشر می‌شود.
resubmit_newstool
"api_key (required)""news_id (required)""title (required)""body (required)""content_format (html | markdown; default html)""target_locales (optional)"
Yesمقاله‌ای را که draft_news به‌عنوان «flagged» رد کرده بازبینی و بازطبقه‌بندی کنید. هر تلاش جداگانه ثبت می‌شود — هرگز یک تغییر وضعیت خاموش نیست. فقط حسابی که ابتدا مقاله را ارسال کرده می‌تواند دوباره آن را ارسال کند.
get_missing_news_translationstool
"locale (optional)""page (optional)""limit (optional)"
Noفهرست مقالات منتشرشده به انگلیسی و اینکه هر کدام هنوز کدام کدهای لوکال را ندارند. برای تمرکز روی یک زبان، locale را ارسال کنید. فقط خواندنی است — هرگز چیزی را خودش ترجمه نمی‌کند.
submit_news_translationtool
"api_key (required)""news_id (required)""locale (required)""title (required)""body (required)""content_format (html | markdown; default html)"
Yesانتشار ترجمه خودتان از یک مقاله که قبلاً منتشر شده، به یک لوکال جدید. برخلاف target_locales در draft_news (که از سرور Datronis می‌خواهد ترجمه کند)، عنوان/بدنه‌ای که اینجا ارسال می‌کنید همان‌طور که هست منتشر می‌شود — ترجمه را خودتان انجام می‌دهید. اگر آن لوکال قبلاً پوشش داده شده باشد، رد می‌شود.
admin_create_newstool
"api_key (required, admin)""title (required)""body (required)""content_format (html | markdown; default html)""locale (required)""category_id (optional)""published (optional)""target_locales (optional)""translate_to_all (optional)"
Yesفقط مدیر: انتشار مستقیم یک مقاله خبری در هر لوکالی و اختیاری قرار دادن ترجمه‌های انتخاب‌شده یا تمام ترجمه‌های موجود در صف. وظایف ترجمه پایدار هستند و پس از بازگشت فراخوانی MCP نیز ادامه می‌یابند.
admin_edit_newstool
"api_key (required, admin)""news_id (required)""title (optional)""body (optional)""content_format (html | markdown; used when body is supplied)""category_id (optional)""published (optional)"
Yesفقط مدیر: ویرایش عنوان، بدنه، دسته‌بندی یا وضعیت انتشار هر مقاله موجود، بدون در نظر گرفتن اینکه چه کسی آن را ایجاد کرده است. بدون محدودیت مالکیت و بدون طبقه‌بند. برای اینکه فیلدی بدون تغییر بماند، آن را ارسال نکنید.
admin_translate_newstool
"api_key (required, admin)""news_id (required)""target_locales (optional; omit for all missing)"
Yesفقط مدیر: قرار دادن ترجمه‌های تولیدشده توسط سرور برای لوکال‌های منتخب در صف، یا حذف target_locales برای پر کردن تمام زبان‌های موجود نشده. ترجمه‌های موجود نادیده گرفته می‌شوند و تلاش‌های مجدد ایمن (idempotent) هستند.
admin_get_news_translation_statustool
"api_key (required, admin)""news_id (required)"
Yesفقط مدیر: بررسی لوکال‌های موجود و موجود نشده به‌همراه وضعیت QUEUED، PROCESSING، COMPLETED یا FAILED برای هر وظیفه ترجمه. complete=true به این معناست که هر ۲۴ زبان موجود است.

ابزارهای فلش‌کارت Memo — ساخت دسته‌کارت و مطالعه از طریق گفتگو

یازده ابزار به هر کلاینت MCP (Claude، ChatGPT، Gemini، Cursor و…) اجازه می‌دهند دقیقاً مانند اپلیکیشن وب با فلش‌کارت‌های Memo شما کار کنند — همان بررسی‌های مالکیت، تشخیص تکراری، برنامه تکرار زمان‌بندی‌شده و تقویم فعالیت. این ابزارها به یک توکن دسترسی شخصی با دامنه memo نیاز دارند (که در پیکربندی استاندارد گنجانده شده است). برای ابزارهای خواندنی timezone را ارسال کنید (مثلاً Europe/Berlin) تا «امروز سررسید» دقیقاً *امروز* شما باشد.

FieldTypeRequiredDescription
list_memo_deckstool
"api_key""timezone"
Yesدسته‌کارت‌های شما با تعداد کارت‌ها، کارت‌های سررسید امروز و زبان جلو/پشت هر دسته.
create_memo_decktool
"api_key""title (required)""description""icon""color""front_lang""back_lang""cards"
Yesیک دسته‌کارت بسازید، به‌صورت اختیاری با تا ۲۰۰ کارت اول. front_lang/back_lang (بر اساس BCP-47، مثلاً es-ES / en-US) را تنظیم کنید تا کارت‌ها با صدای رایگان مرورگر و لهجه درست خوانده شوند.
update_memo_decktool
"api_key""deck_id (required)""title""description""icon""color""front_lang""back_lang"
Yesنام یا ظاهر یک دسته‌کارت را تغییر دهید، یا زبان‌های آن را عوض کنید. فقط فیلدهایی که ارسال می‌کنید تغییر می‌کنند.
list_memo_cardstool
"api_key""deck_id""query""offset""limit""timezone"
Yesفهرست کارت‌های یک دسته‌کارت (جدیدترین اول)، یا فقط query را ارسال کنید تا در همه دسته‌کارت‌ها جست‌وجو شود. هر کارت شامل schedule است: مرحله (new / learning / review / mature)، گام، بازه روزها، تاریخ سررسید، روزهای تا سررسید.
get_memo_cardtool
"api_key""card_id (required)""timezone"
Yesجایی که یک کارت در چرخه خود قرار دارد: مرحله، گام، بازه، آسانی، تعداد فراموشی، تاریخ سررسید بعدی، موقعیت آن در صف مطالعه دسته‌کارت (queue_position از queue_size) و آخرین ۱۰ مرور آن.
add_memo_cardstool
"api_key""deck_id (required)""cards (required)""mode (add | update)"
Yesدر یک فراخوانی، ۱ تا ۵۰۰ کارت اضافه یا به‌روزرسانی کنید. حالت «add» (پیش‌فرض) فقط کارت‌هایی را اضافه می‌کند که هنوز در دسته‌کارت نیستند — یک کارت تکراری یعنی جلو و پشت یکسان، بدون توجه به حروف بزرگ/کوچک و فاصله‌ها — پس ارسال دوباره یک فهرست ایمن است. حالت «update» پاسخ (و نشانه/برچسب در صورت ارسال) کارت‌هایی که جلوی آن‌ها از قبل وجود دارد را بازنویسی می‌کند، در حالی که پیشرفت مطالعه آن‌ها حفظ می‌شود، و جلوهای جدید را اضافه می‌کند. تعداد ایجادشده/به‌روزرسانی‌شده/بدون تغییر/نادیده‌گرفته‌شده را برمی‌گرداند. جایگزین کردن کامل یک دسته‌کارت عمداً فقط در اپلیکیشن وب ممکن است.
update_memo_cardtool
"api_key""card_id (required)""front""back""hint""tags"
Yesجلو، پشت، نشانه یا برچسب را ویرایش کنید. کارت پیشرفت مرور خود را حفظ می‌کند.
get_memo_study_queuetool
"api_key""deck_id""limit""timezone"
Yesکارت‌های سررسید امروز (ابتدا مرورها، سپس کارت‌های جدید) برای آزمون در گفتگو.
review_memo_cardtool
"api_key""card_id (required)""rating (required)""timezone"
Yesمیزان به‌خاطرسپاری یک کارت را ثبت کنید — again / hard / good / easy — و زمان‌بندی مجدد آن را انجام دهید. مانند یک مرور وب در توالی روزانه شما شمرده می‌شود. بگویید «من این یکی را بلدم» و دستیار می‌تواند آن را easy علامت بزند.
get_memo_activitytool
"api_key""days""timezone"
Yesمرورها و کارت‌های افزوده‌شده در هر روز، توالی روزانه فعلی و طولانی‌ترین آن، و نرخ به‌خاطرسپاری.
export_memo_decktool
"api_key""deck_id (required)"
Yesهر کارت یک دسته‌کارت (جلو، پشت، نشانه، برچسب) به‌همراه تنظیمات دسته‌کارت به‌صورت JSON — همان قالبی که دانلود خروجی JSON اپلیکیشن وب دارد و می‌توان آن را دوباره با add_memo_cards یا وارد‌کننده وب بازگرداند.
ℹ️

نمونه درخواست‌ها

«یک دسته‌کارت اسپانیایی با ۵۰ فعل پرکاربرد برایم بساز، اسپانیایی در جلو.» · «از آنچه امروز سررسید است از من بپرس.» · «کارت *gato* کجای چرخه مرور من است؟» · «غلط املایی کارت *mitochondria* من را درست کن.» · «این فهرست کلمات اصلاح‌شده من است — پاسخ‌ها را در دسته‌کارت اسپانیایی من به‌روزرسانی کن.» · «دسته‌کارت ژاپنی من را به‌صورت JSON خروجی بگیر.» · «توالی مطالعه من چقدر طول کشیده؟»

💡

Example prompts

"Make me a Spanish deck with the 50 most common verbs, Spanish on the front." · "Quiz me on what's due today." · "Where is the card for *gato* in my review cycle?" · "Fix the typo on my *mitochondria* card." · "Here's my corrected word list — update the answers in my Spanish deck." · "Export my Japanese deck as JSON." · "How long is my study streak?"

ایمنی محتوا و سیاست انتشار برای draft_news

انتشار اخبار از طریق MCP از یک روند ثابت و غیرقابل دور زدن پیروی می‌کند: پیش‌نویس به انگلیسی، طبقه‌بندی، و تنها پس از آن تصمیم‌گیری درباره انتشار یا زبان‌های دیگری که باید در آن‌ها منتشر شود.

  • مرحله ۱ — پیش‌نویس انگلیسی — draft_news همیشه ابتدا نسخه انگلیسی مقاله را ایجاد می‌کند، صرف‌نظر از اینکه در نهایت می‌خواهید در چه زبان‌هایی منتشر شود. طبقه‌بندی و هرگونه بازبینی هر دو بر اساس این نسخه انگلیسی به‌عنوان منبع اصلی انجام می‌شوند.
  • مرحله ۲ — طبقه‌بندی خودکار — یک طبقه‌بند ایمنی هوش مصنوعی مقاله را می‌خواند و یا «green» (بدون‌جنجال — علم، فناوری، تجارت، ورزش، سرگرمی، فرهنگ، سلامت، سبک زندگی) یا «flagged» (سیاست حزبی، انتخابات، جنگ یا درگیری، خشونت گرافیکی، سخن نفرت‌پراکنانه، اطلاعات نادرست، یا هر موضوعی که احتمالاً برای مخاطب عام جنجالی یا اختلاف‌برانگیز به نظر برسد) را برمی‌گرداند.
  • اگر green باشد — مقاله فوراً به انگلیسی منتشر می‌شود و همچنین به هر زبانی که در target_locales فهرست کرده‌اید ترجمه و منتشر می‌شود.
  • اگر flagged باشد — مقاله ایجاد می‌شود اما منتشرنشده باقی می‌ماند. فراخوانی ابزار دلیل طبقه‌بند را برمی‌گرداند. هیچ چیزی که بتوانید به draft_news ارسال کنید آن را از اینجا مجبور به انتشار نمی‌کند — هیچ پرچم نادیده‌گیری‌ای وجود ندارد.
  • مرحله ۳ — بازبینی و ارسال مجدد (اختیاری) — resubmit_news را با همان news_id و عنوان/متن بازبینی‌شده فراخوانی کنید. این کار یک طبقه‌بندی کاملاً جدید روی بازبینی انجام می‌دهد و به‌عنوان تلاشی مستقل از نسخه اصلی ثبت می‌شود. اگر بازبینی اکنون green باشد، منتشر می‌شود؛ اگر همچنان flagged باشد، منتشرنشده باقی می‌ماند و می‌تواند دوباره ارسال شود.
  • مالکیت — فقط حسابی که api_key آن ابتدا draft_news را برای یک مقاله خاص فراخوانی کرده می‌تواند resubmit_news را روی آن فراخوانی کند. یک api_key متفاوت (حتی معتبر) رد می‌شود.
  • زبان‌ها اختیاری هستند — حذف target_locales فقط به انگلیسی منتشر می‌شود. کدهای زبان دو حرفی مورد نظر خود را ارسال کنید (مثلاً ["de", "ru"]) تا در همان فراخوانی به آن زبان‌ها نیز ترجمه و منتشر شود.
  • نویسندگی منعطف — content_format را روی markdown بگذارید برای سرتیتر، جدول، فهرست، لینک، تصویر و بلوک‌های کد، یا روی html برای HTML غنی، کلاس‌ها و CSS درون‌خطی. Markdown پیش از ذخیره‌سازی، ترجمه و نمایه‌سازی در سمت بک‌اند به HTML پایدار تبدیل می‌شود.
ℹ️

چرا نمی‌توان از این مرحله صرف‌نظر کرد

دروازه طبقه‌بندی وجود دارد تا هر کسی بتواند بدون نیاز به تأیید انسانی پیشین برای هر مقاله از draft_news استفاده کند — این همان چیزی است که یک ابزار انتشار محتوای باز و بدون احراز هویت را برای عمومی نگه‌داشتن ایمن می‌کند.

💡

target_locales در برابر submit_news_translation

target_locales در draft_news/resubmit_news از سرور Datronis می‌خواهد که مقاله را برای شما ترجمه کند. submit_news_translation برعکس است: شما (هوش مصنوعی فراخوان) خودتان عنوان/بدنه ترجمه‌شده را می‌نویسید و مستقیماً منتشر می‌کنید — هیچ فراخوانی ترجمه سمت سرور انجام نمی‌شود. ابتدا از get_missing_news_translations استفاده کنید تا مقالاتی را بیابید که واقعاً به یک لوکال خاص نیاز دارند.

ابزارهای احراز هویت‌شده — توکن‌های دسترسی شخصی

apply_to_job، list_my_resumes، create_resume، update_resume، get_my_applications، draft_news، resubmit_news، submit_news_translation، یازده ابزار فلش‌کارت *_memo_* و تمام ابزارهای admin_* روی حساب Datronis شما عمل می‌کنند، بنابراین باید بدانند شما چه کسی هستید. یک توکن دسترسی شخصی از تنظیمات حساب خود ایجاد کنید، سپس آن را یا به‌صورت هدر HTTP Authorization: Bearer (ترجیحی) یا به‌عنوان آرگومان api_key در فراخوانی ابزار ارسال کنید.

⚠️

هدر Authorization را به آرگومان api_key ترجیح دهید

اگر کلاینت MCP شما اجازه پیکربندی هدر را می‌دهد، در هر درخواست از Authorization: Bearer <token> استفاده کنید نه ارسال api_key به‌عنوان آرگومان ابزار. یک آرگومان باید دقیقاً درون JSON که هوش مصنوعی فراخوان برای فراخوانی ابزار تولید می‌کند بازتولید شود — یعنی از میان زمینه (context) خود مدل عبور می‌کند و در تاریخچه گفتگو، گزارش فراخوانی ابزار و ردیابی ظاهر می‌شود. یک هدر هرگز این‌طور نیست. این فرضی نیست: یک کلید واقعی دقیقاً به همین شکل خراب شد — مدل هنگام بازسازی آرگومان، یک مسیر فایل محلی نامرتبط را وسط آن چسباند. اگر هدر در کلاینت شما گزینه‌ای نیست، آرگومان همچنان کار می‌کند (به‌عنوان جایگزین، در مرحله دوم بررسی می‌شود)، اما هر کلیدی که از این مسیر عبور کرده را آسیب‌پذیرتر در نظر بگیرید و آن را زودتر چرخش دهید.

  • گام ۱ — در حالی که وارد شده‌اید به /app/api-keys/ بروید و روی «کلید جدید» کلیک کنید.
  • گام ۲ — کلید تولیدشده (که با dtk_ شروع می‌شود) را کپی کنید — فقط یک‌بار نشان داده می‌شود.
  • گام ۳ (ترجیحی) — کلاینت MCP خود را طوری پیکربندی کنید که در هر درخواست Authorization: Bearer dtk_... را به‌عنوان هدر HTTP ارسال کند.
  • گام ۳ (جایگزین) — اگر کلاینت شما نمی‌تواند هدرهای دلخواه تنظیم کند، آن را به‌جای آن به‌عنوان api_key در درخواست یا فراخوانی ابزار ارسال کنید، مثلاً «با استفاده از api_key dtk_... برای شغل X درخواست بده».
  • لغو — هر زمان می‌توانید از همان صفحه یک کلید را لغو کنید؛ بدون توجه به اینکه با چه روشی ارسال شده، بلافاصله از کار می‌افتد.
ℹ️

یک کلید، تمام قابلیت‌ها

همان توکن دسترسی شخصی با API مبدل Datronis (/api/v1/convert) نیز کار می‌کند — برای فراخوانی‌های ابزار MCP به کلید جداگانه‌ای نیاز ندارید.

⚠️

تمام ابزارهای admin_* به یک حساب مدیر نیاز دارند

چهار ابزار مدیریتی نقش حساب صاحب توکن را بررسی می‌کنند، نه فقط اینکه آیا توکن معتبر است. توکن یک حساب عادی با پیام «دسترسی مدیر لازم است» رد می‌شود، حتی اگر برای ابزارهای غیرمدیریتی کار کند. نوع توکن جداگانه‌ای مخصوص مدیر وجود ندارد — همان توکن دسترسی شخصی است که در برابر نقش حساب بررسی می‌شود.

ℹ️

احراز هویت نسخه نهایی ChatGPT

آرگومان api_key برای آزمایش مستقیم/حالت توسعه‌دهنده مفید است، اما یک افزونه ChatGPT احراز هویت‌شده و منتشرشده باید از فرآیند مجوزدهی MCP OAuth 2.1 استفاده کند. توکن Datronis نباید در درخواست‌های معمولی چسبانده شود؛ هر زمان کلاینت از آن پشتیبانی می‌کند، احراز هویت را در سطح اتصال پیکربندی کنید.

منابع

سرور MCP همچنین یک منبع قابل‌خواندن ارائه می‌دهد — مستندات نمای کلی پلتفرم — که دستیارهای هوش مصنوعی می‌توانند پیش از فراخوانی ابزارها آن را بخوانند تا پلتفرم را درک کنند:

Resource URI
platform://docs/overview

نشست‌ها چگونه کار می‌کنند

سرور از ترابرد HTTP قابل پخش جاری استفاده می‌کند (مشخصات MCP ۲۰۲۵-۰۳-۲۶):

  • گام ۱ — کلاینت POST /api/mcp را همراه با یک پیام initialize ارسال می‌کند (بدون هدر شناسه نشست). هر درخواست، از جمله همین اولین درخواست، باید Accept: application/json, text/event-stream را ارسال کند — سرور هر چیز دیگری را با 406 Not Acceptable رد می‌کند.
  • گام ۲ — سرور یک نشست می‌سازد و هدر Mcp-Session-Id را برمی‌گرداند.
  • گام ۳ — کلاینت یک پیام notifications/initialized (همراه با هدر Mcp-Session-Id) ارسال می‌کند تا تبادل دست را تأیید کند — گام بعدی صحیح طبق مشخصات، که کلاینت‌های خوش‌رفتار MCP آن را انتظار دارند، حتی اگر این سرور در حال حاضر آن را الزامی نکند.
  • گام ۴ — تمام فراخوانی‌های ابزار بعدی هدر Mcp-Session-Id را شامل می‌شوند.
  • گام ۵ — کلاینت می‌تواند یک جریان SSE با GET /api/mcp برای اعلان‌هایی که سرور آغاز می‌کند باز کند.
  • گام ۶ — کلاینت پس از پایان کار، DELETE /api/mcp را ارسال می‌کند تا نشست را ببندد.
  • انقضای خودکار — نشست‌ها پس از ۳۰ دقیقه بی‌فعالیتی به‌طور خودکار منقضی می‌شوند.
⚠️

هدر Accept الزامی است

سرور هر درخواستی را که از پشتیبانی از هر دو قالب پاسخ خبر ندهد با 406 Not Acceptable: Client must accept both application/json and text/event-stream رد می‌کند. هر درخواست زیر — نه فقط اولی — نیاز به Accept: application/json, text/event-stream همراه با Content-Type: application/json دارد.

Manual test with curl
# Step 1: Initialize a session
curl -X POST https://api.datronis.com/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -D - \
  -d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'

# Note the Mcp-Session-Id in the response headers, then:

# Step 2: Confirm initialization (expected: 202 Accepted, empty body)
curl -X POST https://api.datronis.com/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: <your-session-id>" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

# Step 3: List available tools
curl -X POST https://api.datronis.com/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: <your-session-id>" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":2}'

# Step 4: Call search_jobs
curl -X POST https://api.datronis.com/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: <your-session-id>" \
  -d '{"jsonrpc":"2.0","method":"tools/call","id":3,"params":{"name":"search_jobs","arguments":{"q":"React","remote_type":"REMOTE","limit":5}}}'

مرجع لوکال‌ها

پارامتر locale در get_news و get_categories عددی از ۱ تا ۲۴ را می‌پذیرد. draft_news/resubmit_news در عوض از کدهای دو حرفی (مانند «de»، «ru») در target_locales استفاده می‌کنند — همان کدهایی که در این جدول نشان داده شده‌اند.

FieldTypeRequiredDescription
1English (en)Noپیش‌فرض
2Persian / Farsi (fa)Noراست‌به‌چپ (RTL)
3Spanish (es)No
4German (de)No
5Chinese (zh)No
6Russian (ru)No
7French (fr)No
8Arabic (ar)Noراست‌به‌چپ (RTL)
9Hebrew (he)Noراست‌به‌چپ (RTL)
10Japanese (ja)No
11Turkish (tr)No
12Italian (it)No
13Korean (ko)No
14Portuguese (pt)No
15Georgian (ka)No
16Armenian (hy)No
17Indonesian (id)No
18Kazakh (kk)No
19Finnish (fi)No
20Norwegian Bokmål (nb)No
21Dutch (nl)No
22Polish (pl)No
23Swedish (sv)No
24Danish (da)No

نمونه درخواست‌های هوش مصنوعی

پس از اتصال، این درخواست‌های زبان طبیعی را در هر هوش مصنوعی آگاه از MCP آزمایش کنید:

  • «شغل‌های توسعه‌دهنده ارشد ریکت دورکار را در اروپا پیدا کن»
  • «آخرین مقالات خبری تکنولوژی به انگلیسی چه هستند؟»
  • «شرکت‌های فین‌تک فعال در استخدام در لندن را جست‌وجو کن»
  • «چند شغل و شرکت در پلتفرم وجود دارد؟»
  • «جزئیات شغل با اسلاگ 'senior-frontend-engineer-acme-corp' را بگیر»
  • «تمام دسته‌بندی‌های خبری موجود را فهرست کن»
  • «با استفاده از حساب Datronis من (api_key dtk_...) برای شغل senior-frontend-engineer-acme-corp درخواست بده»
  • «رزومه‌های من در Datronis را فهرست کن و بگو کدام‌یک پیش‌فرض من است»
  • «از پیش‌زمینه من یک رزومه Datronis بساز: ۴ سال مهندس بک‌اند در Acme (۲۰۲۱ تا کنون)، کارشناسی علوم کامپیوتر از TU Berlin، مهارت قوی در Go و PostgreSQL (api_key dtk_...)»
  • «نقش شغلی جدیدم در Globex را از ژانویه امسال به رزومه Datronis من اضافه کن، بدون اینکه به چیز دیگری در آن دست بزنی»
  • «وضعیت درخواست‌های شغلی من در Datronis را بررسی کن»
  • «یک مقاله خبری در Datronis درباره [موضوع] پیش‌نویس کن و آن را به انگلیسی و آلمانی منتشر کن (api_key dtk_...)»
  • «آخرین فراخوانی draft_news من flagged شد — این یک نسخه بازبینی‌شده و بی‌طرف است، آن را تحت news_id ۱۲۳ دوباره ارسال کن»
  • «کدام مقالات منتشرشده در Datronis هنوز ترجمه فینیش ندارند؟»
  • «news_id ۱۰۱ را به فینیش ترجمه کن و با api_key من منتشرش کن»

Schema v1 · Updated November 2026