Node.js، Express، اور MongoDB کا استعمال کرتے ہوئے اسکالرشپ ریسرچ MCP سرور کیسے بنایا جائے۔

اسکالرشپ تلاش کرنا ایک تحقیقی کام ہے، کسی ایک سرچ باکس کا نہیں۔ فیلڈ، GPA، شہریت، اور آخری تاریخ کے لحاظ سے ایوارڈز کو فلٹر کریں۔ آپ شارٹ لسٹ برقرار رکھیں۔ مضمون اور سفارش کرنے والوں کے بارے میں نوٹ لکھیں۔ پھر آپ ایک ہفتہ بعد واپس آتے ہیں اور یاد کرنے کی کوشش کرتے ہیں کہ آپ نے اس مخصوص پروگرام کو کیوں محفوظ کیا تھا۔

AI معاونین اس ورک فلو میں مدد کر سکتے ہیں، لیکن صرف اس صورت میں جب وہ اصل کیٹلاگ سے استفسار کر سکیں اور اپنے پہلے سے کیے گئے فیصلوں کو برقرار رکھ سکیں۔ چیٹ کی تاریخ کوئی ڈیٹا بیس نہیں ہے۔ ایک سائیکیڈیلک ڈیڈ لائن بالکل بھی کسی ڈیڈ لائن سے بدتر ہے۔

ماڈل سیاق و سباق پروٹوکول (MCP) AI ایپس تک اس قسم کی رسائی فراہم کرنے کا معیاری طریقہ ہے۔ اس ٹیوٹوریل میں، ہم Node.js، Express، اور MongoDB کا استعمال کرتے ہوئے اسکالرشپ ریسرچ MCP سرور بنائیں گے۔

ایک بار مکمل ہونے کے بعد، کرسر، کلاڈ ڈیسک ٹاپ، یا کوئی دوسرا MCP میزبان ایوارڈز تلاش کر سکتا ہے، انہیں طلباء کے پروفائلز سے ملا سکتا ہے، انہیں شارٹ لسٹ میں بک مارک کر سکتا ہے، اور تحقیقی نوٹ محفوظ کر سکتا ہے۔ جبکہ سرور ڈیٹا کا مالک ہے، ماڈل انفرنس پرت کو برقرار رکھتا ہے۔

تعمیر:

  • MongoDB اسکالرشپ کیٹلاگ، ذخیرہ شدہ فہرستیں، اور نوٹس کے مجموعے

  • 9 MCP ٹولز تلاش کرنے، میچ کرنے، مقررہ تاریخ، موازنہ اور تحقیق کو ٹریک کرنے کے لیے

  • ایک ایسا وسیلہ جو کلائنٹس کو کسی ٹول کو کال کیے بغیر کیٹلاگ پڑھنے کی اجازت دیتا ہے۔

  • طلباء کے پروفائلز کو مطالعاتی منصوبوں میں تبدیل کرنے کا اشارہ کرتا ہے۔

  • سٹریم ایبل HTTP پر MCP پیش کرنے والی ایکسپریس ایپ

اس پروجیکٹ کا نمونہ کیٹلاگ ایک تربیتی ڈیٹاسیٹ ہے۔ رقم، تاریخیں، اور اہلیت کے اصولوں کو آسان بنا دیا گیا ہے۔ درخواست دینے سے پہلے تفصیلات کے لیے سرکاری درخواست کا صفحہ ضرور دیکھیں۔

آپ کو کیا ضرورت ہے

آپ کو جاوا اسکرپٹ اور بنیادی ایکسپریس روٹنگ سے واقف ہونا چاہیے۔ کوئی سابقہ ​​MCP تجربہ درکار نہیں ہے۔

انسٹال کریں:

ڈوکر MongoDB کے لیے کافی ہے۔

docker run -d --name mongo -p 27017:27017 mongo:7

انڈیکس

ماڈل سیاق و سباق پروٹوکول کیا ہے؟

MCP ایک کھلا پروٹوکول ہے جو AI ایپلیکیشنز کو مشترکہ معاہدوں کے ذریعے بیرونی ٹولز اور ڈیٹا کے ذرائع سے بات چیت کرنے کی اجازت دیتا ہے۔ اینتھروپک نے اسے 2024 میں متعارف کرایا اور فی الحال یہ ایک کھلا معیار ہے۔

Anthropic MCP کو "AI ایپلیکیشنز کے لیے USB-C پورٹ” کے طور پر بیان کرتا ہے۔ یعنی ایک کنیکٹر، بہت سے میزبان۔ (ماخذ: ماڈل سیاق و سباق پروٹوکول کا تعارف) کرسر کے لیے انضمام، کلاڈ ڈیسک ٹاپ کے لیے انضمام، یا کسٹم ایجنٹ کے لیے انضمام لکھنے کے بجائے، آپ پروٹوکول کو ایک بار لاگو کرتے ہیں۔

رسمی فن تعمیر کا خاکہ MCP کو دو تہوں میں تقسیم کرتا ہے:

  • کہ ڈیٹا پرت یہ JSON-RPC 2.0 ہے۔ کلائنٹ اور سرور درج ذیل درخواستوں کا تبادلہ کرتے ہیں: tools/list اور tools/call.

  • کہ نقل و حمل کی پرت اس پیغام کو منتقل کریں۔ مقامی سرورز عام طور پر stdio استعمال کرتے ہیں۔ دور دراز یا طویل عرصے سے چلنے والے سرورز سٹریم ایبل HTTP استعمال کرتے ہیں۔

یہ ٹیوٹوریل Streamable HTTP استعمال کرتا ہے کیونکہ ایکسپریس پہلے سے ہی ایک HTTP سرور ہے اور ہم چاہتے ہیں کہ کیٹلاگ کمپیوٹر پر موجود تمام کلائنٹس کے لیے دستیاب ہو۔

میزبان، کلائنٹ اور سرور

ہر MCP سیٹ اپ میں تین کردار ظاہر ہوتے ہیں:

  • کہ ماسٹر یہ ایک AI ایپ ہے۔ کرسر اور کلاڈ ڈیسک ٹاپ میزبان ہیں۔

  • کہ گاہک میزبان کے اندر رہتا ہے۔ ایک میزبان فی منسلک سرور ایک کلائنٹ بناتا ہے۔

  • کہ سرور یہ آپ کا پروگرام ہے۔ ہم ٹولز، وسائل اور اشارے کی تشہیر کرتے ہیں اور پھر آپ کی کالوں کو سنبھالتے ہیں۔

آپ کی اسکالرشپ ایپ سرور ہے۔ یہ ماڈل SDK سے براہ راست بات نہیں کرتا ہے۔ میزبان ایسا کرتے ہیں۔

ٹولز، وسائل، اور اشارے

MCP سرور تین بنیادی عناصر کو ظاہر کرتا ہے: آپ تینوں کو استعمال کریں گے۔

سامان یہ ایکشن ہے۔ ماڈل باقاعدہ ٹول کال API سے ایک فنکشن کو کال کرکے اسے کال کرنے کا فیصلہ کرتا ہے۔ ان میں تلاش کرنا، محفوظ کرنا اور موازنہ کرنا شامل ہے۔

وسائل وہ ڈیٹا جسے میزبان پڑھ سکتا ہے اور سیاق و سباق سے منسلک کر سکتا ہے۔ ان میں کیٹلاگ URIs اور اسکالرشپ سے متعلق URIs شامل ہیں۔ ماڈل کو یہ دیکھنے کے لیے "کارروائی” کرنے کی ضرورت نہیں ہے۔

فوری اسے ٹیمپلیٹ کا نام دیا گیا ہے۔ لوگ اسے عام طور پر سلیش کمانڈ یا مینو سے کال کرتے ہیں۔ "ریسرچ پلان” پرامپٹ یہاں ہے کیونکہ یہ وہ ورک فلو ہے جسے آپ جان بوجھ کر شروع کرنا چاہتے ہیں۔

یہ تقسیم اہم ہے۔ جب آپ ہر چیز کو ٹول میں ڈالتے ہیں، تو ماڈل کو اندازہ لگانا پڑتا ہے کہ چیزوں کو کب تلاش کرنا ہے۔ وسائل اور اشارے میزبانوں کو بہتر معلومات فراہم کرتے ہیں۔

اسکالرشپ ریسرچ سرور کیوں؟

Weather MCP ڈیمو ایک واحد API کال ہے۔ اسکالرشپ کی تحقیق اصل مصنوعات کے قریب ہے۔

  • کیٹلاگ کو قابل استفسار ہونا چاہیے۔ مطلوبہ الفاظ کی تلاش، GPA فلٹرز، اور آخری تاریخیں سب ہمارے ڈیٹا بیس میں ہیں۔

  • ورک فلو مسلسل ہونا چاہیے۔ محفوظ کردہ شارٹ لسٹ اور تحقیقی نوٹ نئی چیٹس کے بعد باقی رہ جائیں۔

  • قابلیت منطق ہے، نثر نہیں۔ کم از کم GPA ایک نمبر ہے۔ پہلی نسل صرف بولین ہے۔ اپنے ماڈل کو میچ بنانے سے روکنے کے لیے ان چیکس کو اپنے کوڈ میں شامل کریں۔

  • آؤٹ پٹ قابل معائنہ ہونا چاہئے۔ طلباء کو آفیشل یو آر ایل کھولنے اور تمام دعووں کی تصدیق کرنے کے قابل ہونا چاہیے۔

MongoDB اس کے لیے بہترین ہے۔ ہر اسکالرشپ ایک دستاویز ہوتی ہے جس میں مطالعہ، شہریت اور ضروریات کے شعبوں کی ایک گھریلو صف شامل ہوتی ہے۔ محفوظ کردہ آئٹمز اور نوٹ الگ الگ مجموعے ہیں جن میں کیٹلاگ کے حوالے ہیں۔

دستاویزات کو ذخیرہ کرنے کے بجائے، آپ عوامی API کو لپیٹ سکتے ہیں۔ اچھا فالو اپ۔ آپ کے اپنے کیٹلاگ کے ساتھ شروع کرنا آپ کے سبق کو آزاد رکھتا ہے اور MCP معاہدے کو واضح کرتا ہے۔

فن تعمیر کس طرح ایک ساتھ فٹ بیٹھتا ہے۔

مکمل ہونے والا منصوبہ درج ذیل ہے:

MCP host (Cursor or Claude Desktop)
        |
        |  Streamable HTTP  POST /mcp
        v
Express app  (createMcpExpressApp)
        |
        |  createMcpHandler factory
        v
McpServer  tools / resources / prompts
        |
        v
Scholarship service
        |
        v
MongoDB  scholarships, savedScholarships, researchnotes

کسی بھی کوڈ کو لکھنے سے پہلے ڈیزائن کے چند انتخاب کو چیک کرنے کے قابل ہے۔

MCP ہینڈلر ہے۔ بے وطن. SDK فی HTTP درخواست پر ایک بار سرور فیکٹری چلاتا ہے۔ یہ Streamable HTTP کے لیے تجویز کردہ v2 پیٹرن ہے۔ آلے کو مستقل حالت میں نہ رکھیں۔ McpServer مثال اسے MongoDB میں اسٹور کریں۔

ڈیٹا بیس کنکشن ہے۔ پورے عمل. ہر درخواست کے لیے جڑنا سست اور بے معنی ہے۔ اسٹارٹ اپ پر ایک بار جڑیں اور ٹول میں پول بند کریں۔

HTTP سطح جان بوجھ کر چھوٹی ہے۔ /health یہ آپ کے لیے ہے۔ /mcp یہ پروٹوکول کے لیے ہے۔ آپ کو اسی ڈیٹا کے سامنے REST API کی ضرورت نہیں ہے جب تک کہ آپ اسے بعد میں نہ چاہیں۔

پروجیکٹ کیسے ترتیب دیا جائے۔

ایک فولڈر بنائیں اور Node.js پروجیکٹ کو شروع کریں۔ MCP SDK ESM-پہلا ہے، لہذا اسے ESM کی ضرورت ہے۔

mkdir scholarship-research-mcp-server
cd scholarship-research-mcp-server
npm init -y

کھلا package.json اور سیٹ "type": "module". پھر SDK، Express، Mongoose، Zod، اور dotenv انسٹال کریں۔

npm install @modelcontextprotocol/server @modelcontextprotocol/express @modelcontextprotocol/node express mongoose dotenv zod

SDK کو v2 میں پیکجوں میں تقسیم کیا گیا ہے۔

  • @modelcontextprotocol/server چاندی McpServer کلاس اور createMcpHandler

  • @modelcontextprotocol/express آپ کو دیتا ہے createMcpExpressAppDNS ری بائنڈنگ پروٹیکشن شامل ہے۔

  • @modelcontextprotocol/node ویب اسٹینڈرڈ ہینڈلر کو نوڈ کے ہینڈلر میں ڈھال لیں۔ req/res

بنانا .env فائل:

MONGODB_URI=mongodb://127.0.0.1:27017/scholarship_research
PORT=3000
HOST=127.0.0.1

اضافہ .gitignore خارج node_modules اور .env.

آپ سورس لے آؤٹ کو چھوٹا رکھ سکتے ہیں۔

src/
  index.js
  config.js
  db.js
  models/
  services/
  mcp/
  utils/
data/
  scholarships.json
scripts/
  seed.js
  smoke-test.js

src/config.js پہلے سے طے شدہ اقدار کے ساتھ ماحولیاتی متغیرات پڑھیں۔

export const config = {
  mongodbUri: process.env.MONGODB_URI ?? "mongodb://127.0.0.1:27017/scholarship_research",
  port: Number(process.env.PORT ?? 3000),
  host: process.env.HOST ?? "127.0.0.1",
};

اپنی ترتیب کو ایک فائل میں رکھیں۔ ٹولز کو نہیں پڑھنا چاہئے۔ process.env براہ راست

MongoDB کو کیسے جوڑیں۔

Mongoose 9 ESM کے ساتھ بالکل کام کرتا ہے۔ مختصر src/db.js کافی:

import mongoose from "mongoose";
import { config } from "./config.js";

export async function connectDatabase() {
  mongoose.set("strictQuery", true);
  await mongoose.connect(config.mongodbUri);
  return mongoose.connection;
}

یہ گانے کی کوشش کریں۔ src/index.js پہلے app.listen. اگر کنکشن ناکام ہو جاتا ہے، تو عمل کو ختم کر دینا چاہیے۔ ایک غیر کام کرنے والے ڈیٹا بیس کے ساتھ چلنے والے ایکسپریس سرور کو ناکام اسٹارٹ اپ سے ڈیبگ کرنا زیادہ مشکل ہے۔

اسکالرشپ ڈیٹا کو ماڈل بنانے کا طریقہ

آپ کو تین مجموعوں کی ضرورت ہوگی۔

اسکالرشپ

یہ ایک کیٹلاگ ہے۔ یہ ان فیلڈز کو اسٹور کرتا ہے جو مارک ڈاون کے ٹکڑوں کے بجائے مماثل انجن اصل میں استعمال کرتا ہے۔

import mongoose from "mongoose";

const scholarshipSchema = new mongoose.Schema(
  {
    title: { type: String, required: true, trim: true },
    provider: { type: String, required: true, trim: true },
    description: { type: String, required: true },
    amountMin: { type: Number, default: 0 },
    amountMax: { type: Number, default: 0 },
    currency: { type: String, default: "USD" },
    deadline: { type: Date, default: null },
    rolling: { type: Boolean, default: false },
    educationLevels: { type: [String], default: ["undergraduate"] },
    fieldsOfStudy: { type: [String], default: ["any"] },
    gpaMinimum: { type: Number, default: null },
    citizenship: { type: [String], default: ["any"] },
    countries: { type: [String], default: ["any"] },
    firstGenerationOnly: { type: Boolean, default: false },
    womenOnly: { type: Boolean, default: false },
    numberOfAwards: { type: Number, default: 1 },
    renewable: { type: Boolean, default: false },
    applicationUrl: { type: String, required: true },
    applicationRequirements: { type: [String], default: [] },
  },
  { timestamps: true },
);

scholarshipSchema.index({
  title: "text",
  provider: "text",
  description: "text",
  fieldsOfStudy: "text",
});
scholarshipSchema.index({ deadline: 1 });
scholarshipSchema.index({ amountMax: -1 });

export const Scholarship = mongoose.model("Scholarship", scholarshipSchema);

چند فیلڈ سلیکشن اصل کام کرتے ہیں۔

  • fieldsOfStudy: ["any"] اس کا مطلب یہ ہے کہ ایوارڈ کو سائٹ پر عوامی کر دیا گیا ہے۔ میچر اسے سنبھالتا ہے۔ any وائلڈ کارڈ کے طور پر۔

  • deadline: null پلس rolling: true ہم ایسے پروگراموں کا احاطہ کرتے ہیں جو سال بھر درخواستیں قبول کرتے ہیں۔

  • applicationUrl درکار ہے۔ تمام ٹول کے نتائج کو انسانی تصدیق کے قابل ذریعہ کی طرف اشارہ کرنا چاہیے۔

  • gpaMinimum: null اس کا مطلب ہے کہ فراہم کنندہ نے کٹ آف شائع نہیں کیا ہے۔ یہ اس سے مختلف ہے۔ 0.

محفوظ شدہ اسکالرشپ

واچ لسٹ افراد اور کیٹلاگ کی قطاروں کے درمیان ایک جوڑ ہے۔

const savedScholarshipSchema = new mongoose.Schema(
  {
    researcherId: { type: String, required: true, default: "default" },
    scholarship: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Scholarship",
      required: true,
    },
    status: {
      type: String,
      enum: ["saved", "applying", "submitted", "won", "rejected"],
      default: "saved",
    },
  },
  { timestamps: true },
);

savedScholarshipSchema.index({ researcherId: 1, scholarship: 1 }, { unique: true });

منفرد انڈیکس ہے۔ save_scholarship بے حسی اگر آپ ایک ہی ایوارڈ کو دو بار محفوظ کرتے ہیں تو ڈپلیکیٹ بنانے کے بجائے اسٹیٹس کو اپ ڈیٹ کیا جائے گا۔

researcherId یہ ایک باقاعدہ تار ہے۔ ایک سبق کے لئے، یہ کافی ہے. پیداوار میں یہ توثیق ٹوکن سے آتا ہے۔

مطالعہ کے نوٹس

نوٹ الگ الگ مجموعے ہیں، لہذا ایک اسکالرشپ میں متعدد ہو سکتے ہیں۔

const researchNoteSchema = new mongoose.Schema(
  {
    researcherId: { type: String, required: true, default: "default" },
    scholarship: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Scholarship",
      required: true,
    },
    body: { type: String, required: true, trim: true },
  },
  { timestamps: true },
);

اب آپ کے پاس ایک کیٹلاگ، ایک شارٹ لسٹ، اور ایک نوٹ بک ہے۔ یہ پوری پروڈکٹ کی سطح ہے جسے MCP ٹول لپیٹ دے گا۔

اسکالرشپ سروس کیسے لکھیں۔

MCP پرت میں MongoDB سوالات کو برقرار رکھیں۔ ٹول کو سروسز کو کال کرنا، عام اشیاء کو واپس لینا، اور ٹیکسٹ فارمیٹ کرنا چاہیے۔ یہ آپ کو سیڈ اسکرپٹس، اسموک ٹیسٹس، یا مستقبل کے REST راستوں میں اسی فعالیت کو دوبارہ استعمال کرنے کی اجازت دیتا ہے۔

تلاش ایک فلٹر بلڈر ہے۔ ہر اختیاری دلیل ایک شق کا اضافہ کرتی ہے۔ اوپن یا رولنگ ایوارڈز رزلٹ سیٹ میں برقرار ہیں۔ آخری تاریخ کو حذف کر دیا گیا ہے۔

const OPEN_DEADLINE_FILTER = {
  $or: [{ rolling: true }, { deadline: null }, { deadline: { $gte: new Date() } }],
};

export async function searchScholarships(filters) {
  const query = { ...OPEN_DEADLINE_FILTER };
  const and = [query];

  if (filters.keyword) {
    and.push({
      $or: [
        { title: { $regex: escapeRegex(filters.keyword), $options: "i" } },
        { provider: { $regex: escapeRegex(filters.keyword), $options: "i" } },
        { description: { $regex: escapeRegex(filters.keyword), $options: "i" } },
        { fieldsOfStudy: { $regex: escapeRegex(filters.keyword), $options: "i" } },
      ],
    });
  }

  if (filters.fieldOfStudy) {
    and.push({
      $or: [
        { fieldsOfStudy: { $regex: `^any$`, $options: "i" } },
        { fieldsOfStudy: { $regex: escapeRegex(filters.fieldOfStudy), $options: "i" } },
      ],
    });
  }

  // educationLevel, citizenship, country, minAmount, gpa, flags...

  const results = await Scholarship.find({ $and: and })
    .sort({ deadline: 1, amountMax: -1 })
    .limit(100)
    .lean();

  return rankByFieldMatch(results, filters.fieldOfStudy).slice(0, filters.limit ?? 10);
}

دو تفصیلات کو چھوڑنا آسان اور رکھنے کے قابل ہے۔

اسے چھوڑنے سے پہلے صارف کے ان پٹ سے بچیں۔ $regex. کلیدی لفظ ہے۔ ( یہ خراب ریگولر ایکسپریشن نہیں ہونا چاہیے۔

جب کوئی طالب علم تلاش کرتا ہے۔ computer scienceآن سائٹ پبلک ایوارڈ (any) اہل، لیکن مخصوص CS اسکالرشپ پہلے ظاہر ہونا ضروری ہے۔ استفسار کے بعد میموری کی درجہ بندی کی وضاحت کرتا ہے۔ MongoDB پہلے سے ہی اہلیت کا فلٹر کرتا ہے۔ ہم صرف ڈسپلے آرڈر کو ایڈجسٹ کر رہے ہیں۔

میچز

ملاپ تلاش سے مختلف ہے۔ تلاش ہے "دستاویزات تلاش کریں جو اس طرح نظر آئیں۔” مماثلت اس طرح ہے، "یہ رہا ایک طالب علم۔ تمام عوامی ایوارڈز حاصل کریں۔”

یہ سروس عوامی اسکالرشپ کو لوڈ کرتی ہے اور پھر سخت فلٹرز اور اسکورز کا اطلاق کرتی ہے۔

سگنل اثر
تعلیمی سطح میں مماثلت چھوڑیں
کم از کم GPA سے نیچے چھوڑیں
شہریت کی مماثلت چھوڑیں
یہ صرف پہلی نسل کے لیے ہے اور طلباء پر لاگو نہیں ہوتا ہے۔ چھوڑیں
صرف خواتین کے لیے اور طلبہ کے لیے نہیں۔ چھوڑیں
تعلیمی سطح کی مماثلت +20
GPA اہل +15
شہریت دستیاب ہے۔ +15
میچ میجر +30
اپنے پسندیدہ ملک سے ملائیں۔ +10
رقم طالب علم کی کم از کم رقم کو پورا کرتی ہے۔ +10
پہلی نسل یا صرف خواتین کے لیے مقابلہ +10

سخت فلٹرز جھوٹی امیدوں کو روکتے ہیں۔ نرم اسکور باقی کی درجہ بندی کرتے ہیں۔ ہر ایک نتیجہ بھی ہے reasons صفوں کا استعمال کرتے ہوئے، ماڈل ان کو پیدا کرنے کے بجائے میچوں کی وضاحت کر سکتا ہے۔

آخری نکتہ یہ ہے کہ ہم سرورز پر مماثلت کا اطلاق کیوں کرتے ہیں۔ اگر آپ صرف خام دستاویزات واپس کرتے ہیں، تو ماڈل میں بعض اوقات "مفید طور پر” ایسے ایوارڈز شامل ہو سکتے ہیں جن کے لیے طلباء درخواست نہیں دے سکتے۔ واپسی کے راستے میں score اور reasons کوڈ پر مبنی وضاحتیں برقرار رکھیں۔

محفوظ کریں، نوٹ کریں، مقررہ تاریخیں، موازنہ کریں۔

باقی خصوصیات پتلی ہیں۔

  • saveScholarship اوپرٹ (researcherId, scholarshipId)

  • addResearchNote چیک کرنے کے بعد کہ آیا کوئی اسکالرشپ ہے، ایک نوٹ ڈالیں۔

  • getUpcomingDeadlines استفسار deadline اب اور کے درمیان now + N days

  • compareScholarships دو یا تین دستاویزات لوڈ کریں اور ہر ایک کے لیے ایک ہی فیلڈ واپس کریں۔

استعمال کرتے ہوئے اپنی MongoDB شناخت کی توثیق کریں: mongoose.Types.ObjectId.isValid استفسار کرنے سے پہلے۔ LLM بعض اوقات ایسے عنوانات کو آگے بھیج دیتا ہے جن کے لیے آپ نے ID کی درخواست کی ہے۔ یقینی طور پر ناکام۔ MCP ٹرانسمیشن میں CastError نہ بڑھائیں۔

بنانا src/mcp/server.js فیکٹری کو۔ HTTP ہینڈلر ہر درخواست کے لیے اسے کال کرتا ہے۔

import { McpServer } from "@modelcontextprotocol/server";
import { registerPrompts } from "./prompts.js";
import { registerResources } from "./resources.js";
import { registerTools } from "./tools.js";

export function createScholarshipServer() {
  const server = new McpServer({
    name: "scholarship-research",
    version: "1.0.0",
  });

  registerTools(server);
  registerResources(server);
  registerPrompts(server);

  return server;
}

اس پودے کو سستی رکھیں۔ کوئی ڈیٹا بیس کنکشن نہیں ہے، کوئی فائلیں نہیں پڑھی جاتی ہیں، اور کوئی ماڈیول اسکوپڈ کیچز نہیں ہیں۔ HTTP سرونگ گائیڈ اس کی واضح وضاحت کرتا ہے۔ سٹارٹ اپ پر ایک بار کنکشن پول بنا اور بند ہو جاتا ہے۔

مکمل طور پر ایک ٹول میں

registerTool نام، کنفیگریشن آبجیکٹ، اور ہینڈلر استعمال کریں۔ کہ inputSchema زود آبجیکٹ۔ SDK اس اسکیما کو JSON اسکیما میں تبدیل کرتا ہے۔ tools/listہینڈلر پر عمل درآمد سے پہلے دلائل کی توثیق کرتا ہے اور اگر TypeScript استعمال کرتے ہیں تو قسم کا اندازہ لگاتا ہے۔

import * as z from "zod/v4";

server.registerTool(
  "search_scholarships",
  {
    title: "Search scholarships",
    description:
      "Search the scholarship catalog by keyword, field of study, education level, citizenship, country, GPA, and award amount.",
    inputSchema: z.object({
      keyword: z.string().min(1).optional().describe("Free-text search across title, provider, description, and fields"),
      fieldOfStudy: z.string().optional().describe("For example computer science, public health, or engineering"),
      educationLevel: z.enum(["undergraduate", "graduate", "doctoral"]).optional(),
      citizenship: z.string().optional(),
      country: z.string().optional(),
      minAmount: z.number().nonnegative().optional(),
      gpa: z.number().min(0).max(4).optional(),
      firstGeneration: z.boolean().optional(),
      womenOnly: z.boolean().optional(),
      limit: z.number().int().min(1).max(25).optional(),
    }),
    annotations: { readOnlyHint: true, openWorldHint: false },
  },
  async (args) => {
    const results = await searchScholarships(args);
    return toolText(formatScholarshipList(results));
  },
);

اپنی تفصیل لکھیں گویا ماڈل واحد دستاویز ہے جو آپ کو ٹول سے ملے گی۔ .describe() زوڈ فیلڈز کو JSON اسکیما میں تبدیل کرنے پر محفوظ کیا جاتا ہے۔ میزبان ماڈل سے کہتا ہے: fieldOfStudy طریقہ

title انسانی لیبل۔ description یہ ایک ماڈل پر مبنی معاہدہ ہے۔ وہ ایک ہی تار نہیں ہیں۔

تشریح

تشریحات تبدیل نہیں ہوتی ہیں کہ SDK ٹول کو کیسے چلاتا ہے۔ میزبان اس کا استعمال یہ فیصلہ کرنے کے لیے کرتا ہے کہ انہیں کتنا محتاط رہنا چاہیے۔

  • readOnlyHint: true تلاش کریں، حاصل کریں، میچ کریں، فہرست بنائیں، موازنہ کریں اور مقررہ تاریخ

  • readOnlyHint: false نوٹ محفوظ کرنے اور شامل کرنے کے لیے

  • idempotentHint: true ذخیرہ کرتے وقت منفرد انڈیکس کی وجہ سے

  • openWorldHint: false اس کی وجہ یہ ہے کہ یہ سرور ایک ڈیٹا بیس سے رابطہ کرتا ہے نہ کہ عوامی ویب سے۔

میزبان صرف پڑھنے والی تلاشوں کو خودکار طور پر منظور کر سکتے ہیں اور لکھنے سے پہلے صارف سے پوچھ سکتے ہیں۔ یہ آپ کی ترتیب میں 5 اضافی چابیاں رکھنے کے قابل ہے۔

واپسی کی شکل

تمام ٹولز MCP مواد کے بلاکس واپس کرتے ہیں۔

export function toolText(text, isError = false) {
  return {
    content: [{ type: "text", text }],
    isError,
  };
}

واپسی isError: true ڈومین کی خرابیوں کے بارے میں جیسے "اسکالرشپ نہیں ملا”۔ صرف اس وقت ہوتا ہے جب کوئی غیر متوقع خرابی واقع ہو۔ قیاس اس سے مختلف سلوک کرتا ہے۔ Zod کی توثیق کی غلطیاں ہینڈلر تک کبھی نہیں پہنچتی ہیں۔ SDK پہلے سے ہی یہ کرتا ہے۔ isError نتیجہ

آپ کی چیٹ کی سرگزشت کو سکیم کرنے والے لوگوں کے لیے ایک فہرست فارمیٹ کریں۔ MongoDB ID کو ہر قطار میں شامل کریں۔ اس کے بعد کے ٹولز کو اس ID کی ضرورت ہوگی اور ماڈل ایک درست ObjectId پیدا نہیں کر سکے گا۔

ٹولز کا مکمل سیٹ

سرور 9 ٹولز کو رجسٹر کرتا ہے۔

سامان فنکشن
search_scholarships کیٹلاگ فلٹرنگ
get_scholarship ایک پورا ریکارڈ لوٹاتا ہے۔
match_scholarships سٹوڈنٹ پروفائل کے لیے پوائنٹس ایوارڈ
save_scholarship ہمارے ایوارڈز کو بک مارک کریں۔
list_saved_scholarships امیدواروں کی فہرست دکھائیں۔
add_research_note ایک نوٹ منسلک کریں۔
list_research_notes اپنے نوٹ دوبارہ پڑھیں
get_upcoming_deadlines مقررہ تاریخ ونڈو
compare_scholarships 2 یا 3 IDs کو ساتھ ساتھ رکھیں

یہ تلاش کرنے، معائنہ کرنے، ملاپ کرنے، ذخیرہ کرنے، تشریح کرنے اور موازنہ کرنے کے ریسرچ لوپ کے لیے کافی ہے۔

شامل کرنے کی خواہش کے خلاف مزاحمت کریں۔ delete_everything سامان تباہ کن ٹولز کو اضافی تصدیق کی ضرورت ہوتی ہے اور وہ اس ورک فلو میں شامل نہیں ہیں۔

وسائل اور اشارے کو کیسے بے نقاب کریں۔

میزبانوں کے لیے یہ معلوم کرنے کا واحد طریقہ نہیں ہے کہ کیا ہو رہا ہے۔

وسائل

ایک مستحکم وسیلہ ایک مقررہ URI ہے۔ کیٹلاگ اس کے لیے موزوں ہے:

server.registerResource(
  "scholarship-catalog",
  "scholarship://catalog",
  {
    title: "Scholarship catalog",
    description: "Open scholarships currently stored in MongoDB",
    mimeType: "application/json",
  },
  async (uri) => {
    const catalog = await listCatalog();
    return {
      contents: [
        {
          uri: uri.href,
          mimeType: "application/json",
          text: JSON.stringify(catalog, null, 2),
        },
      ],
    };
  },
);

ریسورس ٹیمپلیٹس میں URI فیملی ہوتی ہے۔ استعمال کریں scholarship://item/{id} بلکہ scholarship://{id}. اگر یہ ایک نمونہ ہے۔ scholarship://{id}URI scholarship://catalog یہ مبہم ہو جاتا ہے۔

import { ResourceTemplate } from "@modelcontextprotocol/server";

server.registerResource(
  "scholarship-record",
  new ResourceTemplate("scholarship://item/{id}", {
    list: async () => {
      const catalog = await listCatalog(20);
      return {
        resources: catalog.map((scholarship) => ({
          uri: `scholarship://item/${scholarship._id}`,
          name: scholarship.title,
          mimeType: "text/plain",
        })),
      };
    },
  }),
  {
    title: "Scholarship record",
    description: "Full details for one scholarship",
    mimeType: "text/plain",
  },
  async (uri, { id }) => {
    const scholarship = await getScholarshipById(id);
    return {
      contents: [
        {
          uri: uri.href,
          mimeType: "text/plain",
          text: scholarship
            ? formatScholarship(scholarship)
            : `No scholarship found with id ${id}.`,
        },
      ],
    };
  },
);

list ٹیمپلیٹ کے لیے درکار ہے۔ پاس undefined اگر مثالیں شمار نہیں کی جا سکتیں۔ یہ وہ جگہ ہے جہاں میزبان سلیکٹر دکھا سکتا ہے۔

فوری

ایک پرامپٹ ایک ورک فلو ہے جسے آپ چاہتے ہیں کہ صارف شروع کرے۔ اسٹڈی پلان پرامپٹ خود MongoDB سے استفسار نہیں کرتا ہے۔ ماڈل کو ٹول استعمال کرنے کی ہدایت کریں اور پھر اس کے جواب کی تشکیل کریں۔

server.registerPrompt(
  "research-plan",
  {
    title: "Scholarship research plan",
    description: "Build a week-by-week research and application plan from a student profile.",
    argsSchema: z.object({
      fieldOfStudy: z.string(),
      educationLevel: z.string(),
      citizenship: z.string(),
      gpa: z.string(),
      weeks: z.string().optional(),
    }),
  },
  ({ fieldOfStudy, educationLevel, citizenship, gpa, weeks }) => ({
    messages: [
      {
        role: "user",
        content: {
          type: "text",
          text: `Create a ${weeks || "6"}-week scholarship research plan for this student.

Field of study: ${fieldOfStudy}
Education level: ${educationLevel}
Citizenship: ${citizenship}
GPA: ${gpa}

Use the scholarship research tools to find real awards first. Then produce a shortlist, a week-by-week plan, and risks. Name actual scholarships and dates from the tool results.`,
        },
      },
    ],
  }),
);

"ہمارا اسکالرشپ ریسرچ ٹول استعمال کریں” کے لیے ہدایات دیکھیں۔ اشارے ٹولز کا متبادل نہیں ہیں۔ ایک اسکرپٹ جو ٹول کو زیادہ قابل استعمال بناتا ہے اور آؤٹ پٹ کو زیادہ مستقل بناتا ہے۔

دوسرا اشارہ، application-checklistاسکالرشپ ID حاصل کریں اور دستاویزات کی فہرست اور ٹرانسفر کیلنڈر کی درخواست کریں۔ یہ دہرایا جانے والا کام ہے جسے MCP اشارہ کرتا ہے اچھی کارکردگی کا مظاہرہ کرتا ہے۔

پرامپٹ دلیل بہت سے میزبانوں پر ایک تار ہے، چاہے قدر عددی ہو۔ بلے باز gpa کیونکہ تار مایوسی کو روکتے ہیں۔ expected number, received string سلیش کمانڈ فارمیٹ میں خرابی۔

ایکسپریس پر ایم سی پی کی فراہمی کا طریقہ

یہ سیشن ہینڈلنگ کوڈ کا صفحہ ہے۔ SDK v2 میں یہ ایک فیکٹری اور ایک راستہ ہے۔

import "dotenv/config";
import { createMcpExpressApp } from "@modelcontextprotocol/express";
import { toNodeHandler } from "@modelcontextprotocol/node";
import { createMcpHandler } from "@modelcontextprotocol/server";
import { config } from "./config.js";
import { connectDatabase } from "./db.js";
import { createScholarshipServer } from "./mcp/server.js";

const mcpHandler = createMcpHandler(() => createScholarshipServer());
const nodeHandler = toNodeHandler(mcpHandler);

const app = createMcpExpressApp({
  host: config.host,
  allowedHosts: ["127.0.0.1", "localhost"],
});

app.get("/health", (_req, res) => {
  res.json({
    status: "ok",
    service: "scholarship-research-mcp",
    transport: "streamable-http",
  });
});

app.all("/mcp", (req, res) => {
  void nodeHandler(req, res, req.body);
});

async function start() {
  await connectDatabase();
  app.listen(config.port, config.host, () => {
    console.log(`Scholarship research MCP server listening on http://${config.host}:${config.port}/mcp`);
  });
}

start();

ہر اسسٹنٹ کیا کرتا ہے اس پر ایک نظر ڈالیں۔

createMcpHandler یہ ایک فنکشن لیتا ہے جو کچھ نیا لوٹاتا ہے۔ McpServer. ویب معیارات کو بے نقاب کریں۔ fetch. یہ وہی ہینڈلر ہے جسے Cloudflare ورکر برآمد کرتا ہے۔

toNodeHandler اس کے مطابق بنائیں fetch اظہار (req, res). تم گزر جاؤ req.body تیسری دلیل کے طور پر createMcpExpressApp میں پہلے ہی بھاگ گیا تھا۔ express.json(). اگر آپ باڈی کو چھوڑ دیتے ہیں، تو اڈاپٹر ایکسپریس اسٹریم کو پڑھنے کی کوشش کرے گا جو پہلے ہی استعمال ہو چکی ہے۔

createMcpExpressApp ہے express() دو اضافی خصوصیات: JSON پارسنگ اور میزبان/اصل کی تصدیق۔ یہ چیک DNS ری بائنڈنگ کی وجہ سے موجود ہیں۔ بدنیتی پر مبنی صفحات ان کے اپنے ڈومین کی طرف اشارہ کر سکتے ہیں۔ 127.0.0.1 میزبان ریزولوشن کے بغیر، براؤزر مقامی MCP سرور کو ایک ہی اصل کے طور پر مانیں گے۔ پہلے سے طے شدہ بائنڈنگ ہے۔ 127.0.0.1 اس لیے ہماری ایکسپریس ڈیلیوری گائیڈ اس کا مزید تفصیل سے احاطہ کرتی ہے۔

app.all("/mcp", ...) یہ جان بوجھ کر ہے۔ سٹریم ایبل HTTP JSON-RPC کے لیے POST اور SSE اسٹریمز کے لیے GET استعمال کرتا ہے۔ صرف POST کے لیے رجسٹر کرنے سے کچھ کلائنٹس ٹوٹ جائیں گے۔

اینڈ ہینڈلر SIGINT:

process.on("SIGINT", async () => {
  await mcpHandler.close();
  process.exit(0);
});

close() ہم آپ کی پرواز میں درخواست کا انتظار کر رہے ہیں۔ اس کے بعد آپ چھوڑ سکتے ہیں۔

این پی ایم اسکرپٹ شامل کریں۔

{
  "scripts": {
    "start": "node src/index.js",
    "dev": "node --watch src/index.js",
    "seed": "node scripts/seed.js",
    "smoke": "node scripts/smoke-test.js"
  }
}

node --watch یہ مقامی ترقی کے لیے کافی ہے۔ اس منصوبے کو نوڈیمون کی ضرورت نہیں ہے۔

کیٹلاگ کو بیج کرنے کا طریقہ

خالی ڈیٹا بیس کے لیے MCP ٹول کام کرتا ہے اور "کوئی مماثل وظائف نہیں” واپس کرتا ہے۔ یہ سچ ہے، لیکن یہ اچھا پہلا تاثر نہیں بناتا۔

20 سے 30 حقیقت پسندانہ ریکارڈز شامل کرنے کی کوشش کریں۔ data/scholarships.json. مکس:

  • انڈرگریجویٹ اور گریجویٹ ایوارڈز

  • STEM اور فیلڈ پبلک ایوارڈز

  • ملک سے متعلق اور عالمی پروگرام

  • رولنگ ڈیڈ لائنز اور سخت تاریخیں۔

  • پہلی نسل اور صرف خواتین کے جھنڈے

بیج اسکرپٹ کو کیٹلاگ کو تبدیل کرنا چاہئے، شامل نہیں کرنا چاہئے:

import "dotenv/config";
import { readFile } from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { connectDatabase } from "../src/db.js";
import { Scholarship } from "../src/models/index.js";

const __dirname = path.dirname(fileURLToPath(import.meta.url));

async function seed() {
  await connectDatabase();
  const raw = await readFile(path.join(__dirname, "..", "data", "scholarships.json"), "utf8");
  await Scholarship.deleteMany({});
  const inserted = await Scholarship.insertMany(JSON.parse(raw));
  console.log(`Seeded ${inserted.length} scholarships.`);
  process.exit(0);
}

seed();

چلائیں:

npm run seed

نمونہ ڈیٹا کے طور پر JSON پر کارروائی کریں۔ معروف پروگراموں کے نام ٹیوٹوریل کو حقیقت پسندانہ احساس دلانے میں مدد کرتے ہیں۔ یہ بھی ہمارا فرض ہے کہ ہم واضح طور پر بتائیں کہ طلباء کو سرکاری ویب سائٹ پر تمام نمبرز اور تاریخوں کو چیک کرنا چاہیے۔ کہ applicationUrl فیلڈ موجود ہے، لہذا نوٹیفکیشن کہیں کی طرف اشارہ کرتا ہے۔

اگر آپ بعد میں اپنے JSON کو لائیو سورس میں تبدیل کرتے ہیں تو وہی اسکیما رکھیں۔ MCP ٹولز کو اس بات کی پرواہ نہیں کرنی چاہیے کہ دستاویزات کہاں سے آتی ہیں۔

اپنے سرور کی جانچ کیسے کریں۔

MongoDB شروع کریں اور بیج کریں اور عمل شروع کریں۔

npm run seed
npm start

آپ کو درج ذیل کو چیک کرنا چاہئے:

Scholarship research MCP server listening on http://127.0.0.1:3000/mcp

صحت کی جانچ

curl -s http://127.0.0.1:3000/health

JSON status: ok اس کا مطلب ہے کہ ایکسپریس کام کر رہی ہے۔ اس کا مطلب یہ نہیں ہے کہ MCP صحیح طریقے سے جڑا ہوا ہے۔ ایسا کرنے کے لیے، ہم JSON-RPC کی درخواست بھیجتے ہیں۔

فہرست کا آلہ

curl -s -X POST http://127.0.0.1:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

جواب ایک SSE واقعہ ہے۔ data: قطار JSON-RPC نتیجہ پر مشتمل ہے۔ آپ کو Zod سے ماخوذ JSON اسکیما کے ساتھ تمام نو ٹولز کو دیکھنا چاہیے۔

کہ Accept ہیڈرز اہم ہیں۔ MCP Streamable HTTP JSON یا ایونٹ کے سلسلے کو واپس کر سکتا ہے۔ دونوں کی ضرورت ایک ہم آہنگ انتخاب ہے۔

ٹول کال

curl -s -X POST http://127.0.0.1:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/call",
    "params": {
      "name": "search_scholarships",
      "arguments": {
        "fieldOfStudy": "computer science",
        "limit": 3
      }
    }
  }'

آپ کو ID، مقررہ تاریخ، اور کم از کم GPA کے ساتھ ایک نمبر والی فہرست موصول ہونی چاہیے۔ ایک آئی ڈی کاپی کریں اور اسے پاس کریں۔ get_scholarship.

اگر آپ متعدد طریقوں کو کال کرتے ہیں تو چھوٹے نوڈ دھوئیں کے ٹیسٹ خام کرل سے بہتر ہیں۔ تعبیر کرنا data: بس لائنیں کھینچیں اور پرنٹ کریں۔ result.content[0].text. ذخیرہ میں شامل ہیں: scripts/smoke-test.js اس کے لیے۔

انسپکٹر

MCP انسپکٹر سرور کے لیے سرکاری GUI ہے۔ اس کی طرف اشارہ کرتا ہے۔ http://127.0.0.1:3000/mcp آپ ٹولز کی فہرست بنا سکتے ہیں، دلائل درج کر سکتے ہیں، اور میزبان ایپ کے بغیر وسائل پڑھ سکتے ہیں۔

اگر میزبان سرور کو "دیکھ” نہیں سکتا تو انسپکٹر کا استعمال کریں۔ اگر انسپکٹر کام کرتا ہے لیکن میزبان نہیں کرتا ہے تو، بگ میزبان کی ترتیب میں ہے۔ اگر انسپکٹر ناکام ہو جاتا ہے، تو پیش رفت میں ایک بگ ہے۔

اپنے کرسر کو کلاڈ ڈیسک ٹاپ سے کیسے جوڑیں۔

برقرار رکھنا npm start چل رہا ہے MCP اوور HTTP ایک لائیو سرور ہے، ایک شاٹ CLI نہیں۔

کرسر

کرسر کی MCP سیٹنگز میں سرور کا اندراج شامل کریں۔ سٹریمنگ کے قابل HTTP سرورز میں شامل ہیں:

{
  "mcpServers": {
    "scholarship-research": {
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

اگر کرسر کا پہلے سے ناکام کنکشن کیش شدہ ہے، تو MCP سیشن کو دوبارہ شروع کریں۔ پھر سوال پوچھیں۔

میں پہلی نسل کا انڈرگریجویٹ طالب علم ہوں جو امریکہ میں کمپیوٹر انجینئرنگ کا مطالعہ کر رہا ہوں۔ درجہ بندی 3.6 ہے۔ شارٹ لسٹ اور چھ ہفتے کا منصوبہ بنانے کے لیے ہمارے اسکالرشپ ریسرچ ٹول کا استعمال کریں۔

آپ کو ایک میزبان کال دیکھنا چاہئے۔ match_scholarships یا search_scholarshipsپھر get_scholarship ایک دلچسپ لائن کے لیے، شاید save_scholarship. اگر آپ ٹول کو کال نہیں کرتے ہیں، تو سرور واقعی منسلک نہیں ہے۔ اپنا کوڈ تبدیل کرنے سے پہلے اپنے کرسر پر MCP لاگ چیک کریں۔

بھی research-plan جب اشارہ کیا جائے تو میزبان کے پرامپٹ مینو سے پرامپٹ ڈسپلے کریں۔

کلاڈ ڈیسک ٹاپ

کلاڈ ڈیسک ٹاپ کے لیے کنفیگریشن فائلیں یہاں موجود ہیں:

کلاڈ ڈیسک ٹاپ stdio کو ترجیح دیتا ہے۔ اپنے HTTP سرور کو اس کے ساتھ مربوط کریں: mcp-remote:

{
  "mcpServers": {
    "scholarship-research": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://127.0.0.1:3000/mcp"]
    }
  }
}

فائل کو محفوظ کرنے کے بعد، کلاڈ ڈیسک ٹاپ کو دوبارہ شروع کریں. اسکالرشپ کا آلہ ٹولز کی فہرست میں ظاہر ہونا چاہئے۔

اپنی کلاڈ کنفیگریشن میں MongoDB اسناد نہ ڈالیں۔ نوڈ کا عمل پہلے ہی بھرا ہوا ہے۔ .env. میزبان کو صرف یو آر ایل کی ضرورت ہوتی ہے۔

مطالعہ کا سیشن کیسے کام کرتا ہے۔

یہاں بیج کیٹلاگ پر ایک حقیقت پسندانہ سیشن ہے۔ طالب علم امریکی شہری ہے اور 3.6 GPA کے ساتھ پہلی نسل کا کمپیوٹر سائنس انڈرگریجویٹ طالب علم ہے۔

میزبان کال کرتا ہے۔ match_scholarships اس پروفائل کے ساتھ۔ سرور درجہ بندی والی قطاریں لوٹاتا ہے۔ ویمن ان ٹیکنالوجی ایوارڈ اور فرسٹ جنریشن پروگرام دونوں نے مختلف وجوہات کی بنا پر اچھا اسکور کیا۔ صرف گریجویٹ ایوارڈز ظاہر نہیں ہوں گے۔

پھر میزبان آپ کو کال کرے گا۔ get_scholarship سب سے اوپر دو IDs پر. ہر نتیجہ میں ایک آفیشل یو آر ایل، ضروریات کی ایک فہرست اور مقررہ تاریخ شامل ہوتی ہے۔ یہ وہ لمحہ ہے جب آپ اپنے طالب علم کو URL کھولنے کو کہتے ہیں۔ ماڈل کو اہلیت کا حتمی فیصلہ نہیں ہونا چاہیے۔

اگر کوئی انعام حاصل کرنے کے قابل ہے تو میزبان کال کرے گا۔ save_scholarship اور researcherId پسند ada اور حیثیت saved. آپ اسے بعد میں ترتیب دے سکتے ہیں۔ applying. list_saved_scholarships اس طرح نئی چیٹ شارٹ لسٹ کا انتخاب کرتی ہے۔ MongoDB کے ساتھ یہاں استقامت کلید ہے۔ اس کے بغیر، تمام گفتگو صفر سے شروع ہوتی ہے۔

add_research_note یہ گندا انسانی تفصیلات کے بارے میں ہے۔ "ڈاکٹر چن سے 1 اکتوبر تک سفارش طلب کریں۔” get_upcoming_deadlines ہفتہ وار صفائی۔ compare_scholarships موجودہ طلباء کے پاس دو فائنلسٹ ہیں اور ان کی رقم، GPA، اور ضروریات کو ایک نظر میں دکھایا گیا ہے۔

کہ research-plan فوری پیکیج کو دہرانا۔ ہم پہلے ٹول کو کال کرتے ہیں اور پھر صارف کے پیغام میں ایک پروفائل داخل کرتے ہیں جو ماڈل کو ہفتہ وار پلان بنانے کی ہدایت کرتا ہے۔ اگر آپ کسی مربوط سرور کے بغیر پرامپٹ پر کال کرتے ہیں، تو آپ کو ایک باقاعدہ مضمون موصول ہوگا۔ اگر آپ سرور کے چلنے کے دوران اسے کال کرتے ہیں، تو آپ کو نامزد انعام اور اصل تاریخ ملے گی۔

پروڈکٹ ایک کیٹلاگ ہے جس سے ماڈل استفسار کر سکتا ہے، ایک شارٹ لسٹ جسے فراموش نہیں کیا جا سکتا، اور اشارہ کرتا ہے جو ورک فلو کو دوبارہ قابل بناتا ہے۔

میچ کی منطق کیسے کام کرتی ہے۔

یہ مماثلت کو کم کرنے کے قابل ہے کیونکہ یہ وہ جگہ ہے جہاں لوگوں کو ماڈل پر ہاتھ اٹھانے کا لالچ دیا جائے گا۔

طالب علم فرض کریں:

  • درجہ بندی 3.6

  • کمپیوٹر سائنس

  • انڈرگریجویٹ

  • امریکی شہری

  • پہلی نسل

  • خاتون

میچر تمام عوامی ایوارڈز چلائے گا۔

کم از کم 3.3 GPA کے ساتھ خواتین کی تکنیکی اسکالرشپ، CS درج شدہ فیلڈ، اعلی امریکی کوالیفائنگ اسکور (تعلیم، GPA، شہریت، صرف خواتین کے لیے جھنڈا اور فیلڈ سب ہٹ)۔ سائٹ پر کھلے فرسٹ جنریشن پروگرام بھی اعلیٰ نمبر حاصل کرتے ہیں۔ any یہ ایک فیلڈ میچ سمجھا جاتا ہے۔ صرف گریجویٹ ایوارڈز کو چھوڑیں، یہاں تک کہ اگر عنوان متعلقہ لگتا ہے۔ 3.8 GPA کٹ آف کو چھوڑیں چاہے باقی سب کچھ فٹ بیٹھتا ہو۔

ٹول پھر درج ذیل وجوہات کے ساتھ درجہ بندی والی قطاریں واپس کرتا ہے۔

1. Palantir Women in Technology Scholarship — score 90
   Why: education level matches; GPA 3.6 meets the 3.3 minimum; citizenship is eligible; women-only award matches; field of study matches

ماڈل اب بھی اس کے بارے میں گرم پیراگراف لکھ سکتے ہیں۔ یہ اہلیت کا تعین کرنے کا عنصر نہیں ہونا چاہئے۔

اگر آپ بعد میں توسیع کرتے ہیں، تو وہی تقسیم رکھیں۔ اہلیت کے نئے اصول سروس سے تعلق رکھتے ہیں۔ نیا نثر پرامپٹ سے تعلق رکھتا ہے۔

آپ آگے کیا بنا سکتے ہیں۔

آپ کے پاس جو سرور ہے وہ مکمل طور پر فعال اور استعمال کے لیے تیار ہے۔ یہ زیادہ سنجیدہ تحقیقی ٹولز کی بنیاد بھی ہے۔

سب سے پہلے، آپ سیڈ فائل کو لائیو سورس سے بدل سکتے ہیں۔ سرکاری فیڈز، جیسے Grants.gov اور یونیورسٹی کے زیر انتظام فہرستیں، تجارتی جمع کرنے والوں کو سکریپ کرنے سے زیادہ محفوظ ہیں۔ اپنی اسکیما کو برقرار رکھیں۔ ایک درآمدی ٹول لکھیں جو مستحکم بیرونی ID کے ساتھ اپ ڈیٹ ہو۔

آپ تصدیق بھی شامل کر سکتے ہیں۔ createMcpExpressApp مل کر کام کریں requireBearerAuth. نقشہ researcherId ٹول دلیل کے بجائے شناخت شدہ ٹوکن سے۔ ایکسپریس اڈاپٹر اپنے مڈل ویئر کو دستاویز کرتے ہیں۔

مکمل متن کی تلاش شامل کرنے کی کوشش کریں۔ اسکیما میں پہلے سے ہی ٹیکسٹ انڈیکس موجود ہے۔ بڑے کیٹلاگ کے لیے، اٹلس سرچ یا ایک سرشار سرچ انجن متعدد ریگولر ایکسپریشن فلٹرز کو پیچھے چھوڑ دے گا۔

آپ دستاویزات کے ساتھ ساتھ نوٹوں کو بھی ٹریک کرسکتے ہیں۔ کوئی راستہ نہیں documents ایک بار جب آپ ٹرانسکرپٹس، سفارش کی حیثیت، اور مضمون کے مسودے جمع کر لیتے ہیں، تو آپ کی شارٹ لسٹ کو ایپلیکیشن ٹریکر میں تبدیل کر دیا جائے گا۔

آپ میچرز کے ارد گرد ٹیسٹ بھی لکھ سکتے ہیں۔ استحقاق کوڈ وہ ہے جہاں خاموش کیڑے لوگوں کو تکلیف دیتے ہیں۔ پروفائل ٹیبلز اور متوقع شمولیت/ اخراج کی فہرستیں خود ادائیگی کرتی ہیں۔

اور آپ اسے تقسیم بھی کر سکتے ہیں۔ باندھنا 127.0.0.1 اپنے لیپ ٹاپ پر۔ اگر آپ اسے کسی نیٹ ورک سے جوڑ رہے ہیں تو درج ذیل سیٹ کریں: allowedHostsTLS کو ختم کرتا ہے اور ایک بیئرر ٹوکن کی ضرورت ہے۔ اوپن ایم سی پی سرور ایک مفید انگریزی انٹرفیس کے ساتھ ایک کھلا ڈیٹا بیس ہے۔

نتیجہ

اس گائیڈ میں، ہم نے ایک اسکالرشپ ریسرچ MCP سرور بنایا ہے جو کھلونا ٹولز کی فہرست سے زیادہ ہے۔

ہم نے جیتنے والوں، نامزدگیوں کی فہرست، اور نوٹوں کو MongoDB میں محفوظ کیا۔ ہم نے زوڈ اسکیما کا استعمال کرتے ہوئے MCP ٹولز کے طور پر تلاش، مماثلت اور ریسرچ ٹریکنگ کو بے نقاب کیا، جو میزبانوں کو ماڈلز کی تشہیر کرنے کی اجازت دیتا ہے۔ ہم نے اپنے کیٹلاگ کے لیے وسائل شامل کیے اور دوبارہ قابل کام فلو کا اشارہ کیا۔ ہم نے ایکسپریس کا استعمال کرتے ہوئے سٹریم ایبل HTTP پر ہر چیز کی خدمت کی، بشمول میزبان ہیڈر یہ چیک کہ SDK لوکل ہوسٹ کے لیے قابل بناتا ہے۔

پیٹرن بھیج دیا گیا ہے۔ کیٹلاگ اور پرائیویٹ ورکنگ سیٹ کے ساتھ تمام تحقیقی ورک فلو میں ایک جیسی تین پرتیں ہیں: ایک سروس جو قواعد کی مالک ہے۔ McpServer یہ ایک چھوٹی ایکسپریس ایپ ہے جو پروٹوکولز اور فیکٹریوں کے بارے میں بات کرتی ہے جو قدیم چیزوں کو رجسٹر کرتی ہیں۔

اگر آپ اس ٹیوٹوریل سے ایک آئیڈیا لیتے ہیں تو اگلا آئیڈیا لیں۔ ماڈل کو منصوبہ لکھنے دیں اور سرور کو فیصلہ کرنے دیں کہ کیا سچ ہے۔

نمونہ کیٹلاگ صرف تعلیمی مقاصد کے لیے ہیں۔ اپلائی کرنے سے پہلے اور کسی اور کو اپلائی کرنے کو کہنے سے پہلے ہمارے آفیشل ایپلیکیشن پیج پر موجود تمام وظائف کو دیکھیں۔

اوپر تک سکرول کریں۔