ai-mcp از TanStack: هر سرور MCP رو به ابزار ساده تبدیل کن
خلاصهٔ کاملتر
این مطلب از Alem Tuzlak توی بلاگ TanStack، کتابخونهی @tanstack/ai-mcp رو معرفی میکنه. نویسنده میگه بیشتر اعلانهای «ما حالا از MCP پشتیبانی میکنیم» فقط یه راه بهت میدن: به یه سرور وصل شو، چندتا ابزار بگیر و امیدوار باش چرخهی عمرش درست از آب دربیاد. این کتابخونه دقیقا موضع مخالف رو میگیره.
ایدهی اصلی که نویسنده روش تاکید میکنه اینه: یه کلاینت MCP در واقع یه «کارخونهی ابزار»ـه. ازش یه آرایهی ServerTool[] میگیری و همون رو با spread میریزی توی chat(). چون خروجی فقط ابزاره، هر لایهی بالاترش دستنخورده میمونه؛ یعنی هر آداپتری (OpenAI، Anthropic، Gemini، Ollama)، هر حلقهی ایجنت و هر فریمورکی بدون تغییر کار میکنه و TanStack AI اصلا خبردار نمیشه که MCP وسط بوده.
مدل ذهنی کل ماجرا توی همین چند خط جمع میشه؛ یه کلاینت میسازی، ابزارهاش رو میگیری و پاسش میدی به chat:
const mcp = await createMCPClient({
transport: { type: 'http', url: process.env.MCP_URL! },
})
const stream = chat({
adapter: openaiText('gpt-5.5'),
messages,
tools: await mcp.tools(),
})
await mcp.close()به گفتهی نویسنده، بقیهی مطلب فقط تنوعی روی همین یه خطه: اینکه کلاینت رو چطور بسازی، ابزارها رو چطور تایپ کنی، چندتا سرور رو با هم جمع کنی و اینکه مسئولیت close() با کیه.
یه کلاینت ساده با createMCPClient به یه سرور وصل میشه و آپشنهاش کم ولی همه پرکاربردن. تنها فیلد اجباری transportـه. فیلد اختیاری prefix اسم هر ابزار کشفشده رو بازنویسی میکنه (مثلا github رو میچسبونه جلوش و میشه github_search) که وقتی اسم ابزارهای دو سرور با هم تداخل دارن بهدرد میخوره. فیلدهای name و version هم هویت کلاینتیه که موقع دستدادن (handshake) به سرور گزارش میشه.
نویسنده روی edge-deployable بودن رانتایم تاکید داره. این کتابخونه روی SDK رسمی MCP ساخته شده و چهار ترنسپورت داره: HTTP (همون Streamable HTTP) که ترنسپورت ترجیحی برای سرورهای راهدوره و تنها گزینهای که کاملا edge-safe هست؛ SSE برای سرورهایی که هنوز Server-Sent Events قدیمی رو پیاده کردن؛ و stdio که یه پراسس MCP محلی رو اجرا میکنه. چون stdio ماژولهای نیتیو Node رو ایمپورت میکنه، پشت زیرمسیر @tanstack/ai-mcp/stdio ایزوله شده تا باندل edge تمیز بمونه.
یه نکتهی امنیتی مهم که نویسنده هشدار میده اینه که اجرای ابزار MCP فقط سمت سروره؛ یعنی createMCPClient باید توی یه route سروری یا تابع serverless زندگی کنه، نه توی کد مرورگر. کلاینت برگشتی هم کل سطح پروتکل رو در اختیارت میذاره: از tools و resources و readResource گرفته تا prompts و getPrompt و close، بهعلاوهی پشتیبانی از await using برای پاکسازی خودکار.
نکات کلیدی:
- هر سرور MCP رو به یه آرایهی ServerTool[] معمولی تبدیل میکنه که با spread میره توی chat()
- چون خروجی فقط ابزاره، هر آداپتر (OpenAI، Anthropic، Gemini، Ollama) و هر فریمورکی بدون تغییر کار میکنه
- چهار ترنسپورت داره: HTTP که کاملا edge-safe هست، SSE قدیمی، و stdio که پشت یه زیرمسیر جدا ایزوله شده
- اجرای ابزار فقط سمت سروره و createMCPClient نباید توی کد مرورگر اجرا شه




