کوڈنگ ایجنٹس کے لیے MCP

⁦text mcp⁩: کوڈنگ ایجنٹس کو ⁦Model Context Protocol⁩ پر نیویگیٹ کرنے، کلیدیں دبانے اور فریمز پڑھنے دیں۔

text mcp آپ کی app/ ڈائریکٹری کو ہیڈلیس انداز میں، اسی پروسیس کے اندر چلاتا ہے اور اسے ماڈل کانٹیکسٹ پروٹوکول پر فراہم کرتا ہے تاکہ کوڈنگ ایجنٹ اسے DevTools کے بغیر استعمال کر سکیں۔ ایجنٹ نیویگیٹ کرتا ہے، کیز دباتا ہے، فریم سادہ متن کے طور پر پڑھتا ہے اور روٹ ہینڈلرز کو کال کرتا ہے۔

bunx --bun text mcp              # serve ./app over stdiobunx --bun text mcp apps/console # another project

text mcp کو Bun کی ضرورت ہے۔ Node سے شروع کرنے پر، اگر آپ کے PATH میں bun موجود ہو تو یہ خود کو Bun کے ساتھ دوبارہ چلاتا ہے، ورنہ TX019 کے ساتھ ناکام ہو جاتا ہے۔ MCP کلائنٹس اسے آپ کے لیے شروع کرتے ہیں، اس لیے آپ کو شاذ ہی اسے خود چلانا پڑتا ہے۔

سیٹ اپ

ہر کلائنٹ آپ کی پروجیکٹ ڈائریکٹری سے text mcp شروع کرتا ہے۔ bunx --bun استعمال کریں تاکہ روٹ فائلیں TypeScript کے طور پر چلیں۔

OpenCode

opencode.jsonjson
{  "$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

یا ٹیم کے لیے اسے کمیٹ کریں:

.mcp.jsonjson
{  "mcpServers": {    "textjs": { "command": "bunx", "args": ["--bun", "text", "mcp"] }  }}

Cursor

.cursor/mcp.jsonjson
{  "mcpServers": {    "textjs": { "command": "bunx", "args": ["--bun", "text", "mcp"] }  }}

VS Code

.vscode/mcp.jsonjson
{  "servers": {    "textjs": { "type": "stdio", "command": "bunx", "args": ["--bun", "text", "mcp"] }  }}

سب ڈائریکٹری میں موجود پروجیکٹ کے لیے آخر میں پاتھ جوڑیں: ["--bun", "text", "mcp", "apps/console"]۔

ٹولز

ٹولتفصیل
list_routesapp/ میں صفحات اور روٹ ہینڈلرز، اور موجودہ مقام
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-configtext.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 کے تحت کھلے براؤزر ٹیب سے منسلک نہیں ہو سکتا۔
⁦GitHub⁩ پر اس صفحے میں ترمیم کریں