کوڈنگ ایجنٹس کے لیے MCP
text mcp: کوڈنگ ایجنٹس کو Model Context Protocol پر نیویگیٹ کرنے، کلیدیں دبانے اور فریمز پڑھنے دیں۔
text mcp آپ کی app/ ڈائریکٹری کو ہیڈلیس انداز میں، اسی پروسیس کے اندر چلاتا ہے اور اسے ماڈل کانٹیکسٹ پروٹوکول پر فراہم کرتا ہے تاکہ کوڈنگ ایجنٹ اسے DevTools کے بغیر استعمال کر سکیں۔ ایجنٹ نیویگیٹ کرتا ہے، کیز دباتا ہے، فریم سادہ متن کے طور پر پڑھتا ہے اور روٹ ہینڈلرز کو کال کرتا ہے۔
bunx --bun text mcp # serve ./app over stdiobunx --bun text mcp apps/console # another projecttext mcp کو Bun کی ضرورت ہے۔ Node سے شروع کرنے پر، اگر آپ کے PATH میں bun موجود ہو تو یہ خود کو Bun کے ساتھ دوبارہ چلاتا ہے، ورنہ TX019 کے ساتھ ناکام ہو جاتا ہے۔ MCP کلائنٹس اسے آپ کے لیے شروع کرتے ہیں، اس لیے آپ کو شاذ ہی اسے خود چلانا پڑتا ہے۔
سیٹ اپ
ہر کلائنٹ آپ کی پروجیکٹ ڈائریکٹری سے text mcp شروع کرتا ہے۔ bunx --bun استعمال کریں تاکہ روٹ فائلیں TypeScript کے طور پر چلیں۔
OpenCode
{ "$schema": "https://opencode.ai/config.json", "mcp": { "textjs": { "type": "local", "command": ["bunx", "--bun", "text", "mcp"], "enabled": true } }}Claude Code
claude mcp add textjs -- bunx --bun text mcpیا ٹیم کے لیے اسے کمیٹ کریں:
{ "mcpServers": { "textjs": { "command": "bunx", "args": ["--bun", "text", "mcp"] } }}Cursor
{ "mcpServers": { "textjs": { "command": "bunx", "args": ["--bun", "text", "mcp"] } }}VS Code
{ "servers": { "textjs": { "type": "stdio", "command": "bunx", "args": ["--bun", "text", "mcp"] } }}سب ڈائریکٹری میں موجود پروجیکٹ کے لیے آخر میں پاتھ جوڑیں: ["--bun", "text", "mcp", "apps/console"]۔
ٹولز
| ٹول | تفصیل |
|---|---|
list_routes | app/ میں صفحات اور روٹ ہینڈلرز، اور موجودہ مقام |
navigate | پاتھ پش یا تبدیل کریں، یا back / forward جائیں |
read_frame | روٹ، سائز، فوکس اور کرسر کے ساتھ متن کی صورت میں فریم۔ styles: true ہر span کے رنگ اور ایٹریبیوٹس شامل کرتا ہے |
press | کیز کے امتزاج: "down"، "ctrl+k"، "shift+tab"، "tab tab enter"، "down*3" |
type | ہر حرف کے لیے ایک کی کے ساتھ متن ٹائپ کریں (2,000 تک؛ مزید کے لیے paste استعمال کریں)۔ submit: true اس کے بعد Enter دباتا ہے |
paste | پیسٹ کا ایک ایونٹ، جیسے ⌘V |
scroll | ماؤس وہیل سے rows (اور cols) کے مطابق اسکرول۔ <ScrollBox> کی بورڈ فوکس کے بغیر وہیل سے اسکرول ہوتا ہے |
resize | گرڈ کا سائز کالموں اور قطاروں میں مقرر کریں |
inspect_tree | اسکرین کی حدود کے ساتھ کمپوننٹ ٹری، اور ہر فوکس کے قابل id |
find | ہر مماثلت کی حدود، اور اس کے نیچے موجود کمپوننٹ |
wait_for | متن کے ظاہر یا غائب ہونے، یا ایپ کے آئیڈل ہونے کا انتظار کریں |
logs | محفوظ کردہ console.* آؤٹ پٹ اور React ایررز |
fetch | اسی پروسیس میں route.ts ہینڈلر کال کریں۔ باڈیز maxBytes تک پڑھی جاتی ہیں؛ ایونٹ اسٹریمز streamMs تک، پھر منسوخ ہو جاتی ہیں |
reload | فائلیں ایڈٹ کرنے کے بعد ایپ دوبارہ امپورٹ کریں |
ان پٹ ٹولز نیا فریم واپس کرتے ہیں، اس لیے ایجنٹ کو ہر کی کے بعد الگ read_frame کی ضرورت نہیں ہوتی۔ موجودہ فریم اور روٹ لسٹ، text://frame اور text://routes ریسورسز کے طور پر بھی دستیاب ہیں۔
ایک عام تبادلہ:
→ navigate { "path": "/deployments" }→ press { "keys": "down down enter" }← route: /deployments/dpl_6m3ty8 (route /deployments/[id]) title: "Deployment dpl_6m3ty8 · Edge Console" size: 100×32 frame: 6 idle focus: _txr_c_ ScrollBox [4,12 92×18] ▼ Edge Console Overview Deployments Logs Settings ← Deployments / dpl_6m3ty8 Ready Production …فریم اور آئیڈل حالت
کوئی بھی ٹول فریم پڑھنے سے پہلے ایپ کے آئیڈل ہونے کا انتظار کرتا ہے: کوئی فریم شیڈول نہ ہو، کوئی fetch جاری نہ ہو، اور 50 ms سے کوئی کمیٹ یا فریم نہ آیا ہو۔ اس لیے ایجنٹ اپنے ان پٹ کا نتیجہ دیکھتا ہے، اپ ڈیٹ کے بیچ کا فریم نہیں۔
<Spinner> یا ہر سیکنڈ ٹک کرنے والا چارٹ بھی ٹکس کے درمیان آئیڈل شمار ہوتا ہے، اس لیے اینیمیشن والے صفحات پڑھنے کے قابل رہتے ہیں۔ جو ایپ ہر 50 ms سے زیادہ کثرت سے رینڈر ہو، وہ کبھی آئیڈل نہیں ہوتی۔ ریڈز 1.5 سیکنڈ بعد انتظار چھوڑ دیتی ہیں (settleMs اسے بدلتا ہے)، تازہ ترین فریم فلش کرتی ہیں اور اسے busy نشان زد کرتی ہیں۔ متن کے بغیر wait_for اپنے quietMs کے ساتھ آئیڈل ہونے کا انتظار کرتا ہے، اور ایپ کبھی آئیڈل نہ ہو تو ایرر واپس کرتا ہے۔
کوآرڈینیٹس صفر سے شروع ہونے والے سیلز ہیں: x کالم ہے، y قطار ہے۔ CJK اور ایموجی جیسے چوڑے حروف دو کالم لیتے ہیں۔
ایررز اور لاگز
stdout پروٹوکول منتقل کرتا ہے۔ آپ کی ایپ کا console.* آؤٹ پٹ، اضافی process.stdout.write کالز اور React ایررز اس کے بجائے logs میں جاتے ہیں، جن پر نمبر ہوتے ہیں تاکہ ایجنٹ since سے صرف نئی انٹریز مانگ سکے۔ اگر پچھلی ریڈ کے بعد ایررز لاگ ہوئے ہوں تو اگلے فریم کا ہیڈر یہ بتاتا ہے۔
ناکامیاں ٹول ایررز کے طور پر واپس آتی ہیں، کبھی کریش کی صورت میں نہیں۔ ٹائم آؤٹ ہونے والا ٹول اگلی کال چلنے سے پہلے منسوخ ہو جاتا ہے، اس لیے سست کال کبھی اگلی کال کے فریم میں ٹائپ نہیں کرتی۔ Text.js کوڈ والے ایررز اپنا کوڈ برقرار رکھتے ہیں، مثلاً نامعلوم کی کے لیے TX007۔ اگر ایپ لوڈ نہ ہو سکے تو ہر ٹول وجہ بتاتا ہے۔ فائل درست کریں اور reload کال کریں۔
اختیارات
| اختیار | تفصیل |
|---|---|
--path <pathname> | پہلا روٹ (ڈیفالٹ /) |
--cols / --rows | گرڈ کا سائز (ڈیفالٹ: text.config.ts میں viewport، ورنہ 100×32) |
--theme <name> | تھیم پری سیٹ |
--no-config | text.config.ts کو نظر انداز کریں |
--verbose | محفوظ کردہ لاگز stderr پر بھی لکھیں |
کام کرنے کا طریقہ
text mcp آپ کی ایپ کو text run کی طرح چلاتا ہے: ہر روٹ ماڈیول پہلے ہی امپورٹ ہو جاتا ہے، App Router میموری ہسٹری استعمال کرتا ہے، اور اسی اوریجن کی fetch("/api/…") کالز آپ کے ہینڈلرز کو اسی پروسیس میں چلاتی ہیں۔ فریم ٹرمینل کے بجائے آف اسکرین سیل گرڈ میں جاتے ہیں۔ سرور پر رینڈر شدہ صفحات (export const runtime = "server") اور ان کے async function کمپوننٹس، text dev کی طرح، اسی پروسیس میں رینڈر ہوتے ہیں، اور ان کے ریزولو ہونے کے بعد فریم پڑھا جاتا ہے۔
reload ایپ کو اَن ماؤنٹ کرتا ہے، Bun کے ماڈیول کیش سے پروجیکٹ کا ہر ماڈیول صاف کرتا ہے (بشمول app/ سے باہر کی فائلیں)، app/ کو دوبارہ اسکین کرتا ہے اور موجودہ مقام پر دوبارہ ماؤنٹ کرتا ہے۔
سرور کو اپنے پروسیس میں ایمبیڈ کرنے، یا دوسرا ٹرانسپورٹ استعمال کرنے کے لیے:
import { createTextMcpServer } from "@textjs/app/mcp";import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";const { server, controller } = createTextMcpServer({ root: process.cwd() });await server.connect(new StdioServerTransport());void controller.start();حدود
- ایپ Bun میں چلتی ہے، براؤزر میں نہیں۔
windowاورdocumentغیر متعین ہیں، جیسےtext runمیں۔ - ہر سرور ایک گرڈ کے ساتھ ایک ایپ چلاتا ہے۔ ہر MCP کلائنٹ اپنا سرور شروع کرتا ہے۔
text mcpایپ کی اپنی ہیڈلیس کاپی چلاتا ہے۔ یہtext devکے تحت کھلے براؤزر ٹیب سے منسلک نہیں ہو سکتا۔