Laravel MCP Tools کے ذریعے AI Agents کو محفوظ بنانا

MCP کے ذریعے کسی AI agent کو اپنی ایپ تک رسائی دینا کسی کو چابیوں کا گچھا تھمانے کے مترادف ہے۔ اگر آپ قواعد مقرر نہیں کرتے، تو وہ غلط دروازے کھول سکتے ہیں۔

میں نے حال ہی میں ایک multi-tenant Laravel ایپ کے لیے MCP tools بنائے ہیں۔ میرا ایک ہی مقصد تھا: ایجنٹ کو ایپ چلانے کی اجازت دینا لیکن اسے کسی دوسرے کا ڈیٹا دیکھنے سے روکنا۔

MCP Tools کے ساتھ مسئلہ

ہر MCP tool ایک endpoint ہے۔ ایجنٹ ایک tool کو کال کرتا ہے، اور آپ کا سرور کوڈ چلاتا ہے۔ ایک multi-tenant ایپ میں، ہر tool کو دو سوالوں کے جواب دینے ہوں گے:

  • کیا آپ کو یہ کرنے کی اجازت ہے؟
  • کیا آپ کو اس مخصوص تنظیم (organization) میں یہ کرنے کی اجازت ہے؟

اگر آپ ایک بھی بھول جائیں، تو ڈیٹا لیک ہو سکتا ہے۔

عام Multi-Tenancy یہاں کیوں ناکام ہو جاتی ہے

ایک عام ویب ایپ میں، آپ کے پاس sessions ہوتے ہیں۔ آپ organization ID کے ذریعے ڈیٹا کو فلٹر کرنے کے لیے global scopes کا استعمال کرتے ہیں۔ یہ اس لیے کام کرتا ہے کیونکہ "موجودہ تنظیم" (current organization) ہمیشہ session میں موجود ہوتی ہے۔

MCP tools sessions کا استعمال نہیں کرتے۔ وہ tokens کا استعمال کرتے ہیں۔ tenant context سیٹ کرنے کے لیے کوئی middleware نہیں ہوتا۔ اگر آپ ایسے global scope پر بھروسہ کرتے ہیں جو session تلاش کرتا ہے، تو اسے کچھ نہیں ملے گا۔ اس کے نتیجے میں وہ آپ کے ڈیٹا بیس کی ہر row واپس کر سکتا ہے۔ یہ ایک خاموش ڈیٹا لیک (silent data leak) ہے۔

حل: واضح فلٹرنگ (Explicit Filtering)

ٹوکن آتھنٹیکیشن (token authentication) کے ساتھ کبھی بھی ambient scope پر بھروسہ نہ کریں۔ ہر بار واضح طور پر فلٹر کریں۔

میں نے اس کے لیے ایک واحد trait بنایا ہے:

trait ResolvesOrgEvents
{
    protected function resolveOrgEvent(Authenticatable $user, string $uuid): ?Event
    {
        if (empty($user->organization_id)) {
            return null;
        }

        return Event::query()
            ->withOrganization($user->organization_id)
            ->where('uuid', $uuid)
            ->first();
    }
}

یہ طریقہ کار چار قواعد پر عمل کرتا ہے:

  • Use UUIDs: کبھی بھی auto-increment IDs استعمال نہ کریں۔ ایجنٹس کو نمبر تبدیل کر کے IDs کا اندازہ لگانے کے قابل نہیں ہونا چاہیے۔
  • Single Source of Truth: تنظیم کا فلٹر ایک ہی trait میں ہوتا ہے۔ ہر tool اسے استعمال کرتا ہے۔
  • Reuse Permissions: ایجنٹس کے لیے نئی permissions ایجاد نہ کریں۔ وہی permission strings استعمال کریں جو آپ کی ویب ایپ استعمال کرتی ہے۔ یہ ایجنٹ کو انسانی صارف سے زیادہ طاقت حاصل کرنے سے روکتا ہے۔
  • Mark Side Effects: یہ دکھانے کے لیے annotations کا استعمال کریں کہ آیا کوئی tool read-only ہے یا write-enabled۔

حدود کی جانچ (Testing the Boundary)

آپ کو منفی صورتحال (negative path) کی جانچ کرنی چاہیے۔ صرف یہ نہ دیکھیں کہ tool کام کر رہا ہے یا نہیں۔ یہ بھی چیک کریں کہ تنظیم A کا صارف تنظیم B کا ڈیٹا نہ دیکھ سکے۔

اگر کوئی ایجنٹ کسی دوسرے tenant کے UUID تک رسائی حاصل کرنے کی کوشش کرتا ہے، تو tool کو "not found" واپس کرنا چاہیے۔ اسے ایجنٹ کو یہ نہیں بتانا چاہیے کہ ڈیٹا موجود ہے لیکن کسی اور کا ہے۔

ہر AI tool کو ایک غیر قابل اعتماد endpoint سمجھیں۔ نظم و ضبط ہی آپ کے ڈیٹا کو محفوظ رکھنے کا واحد طریقہ ہے۔

Source: https://dev.to/nasrulhazim/giving-an-ai-agent-the-keys-without-giving-it-the-building-rbac-org-scoped-mcp-tools-in-laravel-43oi