Kulinda AI Agents kwa Kutumia Zana za Laravel MCP

Kumpa AI agent ufikiaji wa programu yako kupitia MCP ni kama kumpa mtu funguo za nyumba. Ikiwa hutaweka sheria, wanaweza kufungua milango isiyo sahihi.

Hivi karibuni nilijenga zana za MCP kwa ajili ya programu ya Laravel ya multi-tenant. Nilikuwa na lengo moja: kumruhusu agent aendeshe programu bila kumruhusu kuona data ya mtu mwingine.

Tatizo la Zana za MCP

Kila zana ya MCP ni endpoint. Agent huita zana, na seva yako huendesha kodi. Katika programu ya multi-tenant, kila zana lazima ijibu maswali mawili:

  • Je, unaruhusiwa kufanya hivi?
  • Je, unaruhusiwa kufanya hivyo katika shirika hili mahususi?

Ukikosa moja, unavuja data.

Kwa Nini Multi-Tenancy ya Kawaida Inafeli Hapa

Katika programu ya kawaida ya wavuti, una session. Unatumia global scopes kuchuja data kwa kutumia ID ya shirika. Inafanya kazi kwa sababu "shirika la sasa" huwa lipo kwenye session wakati wote.

Zana za MCP hazitumii session. Zinatumia token. Hakuna middleware ya kuweka muktadha wa tenant. Ikiwa utategemea global scope inayotafuta session, haitapata kitu. Inaweza kisha kurudisha kila mstari (row) kwenye database yako. Hiyo ni uvujaji wa data wa kimyakimya.

Suluhisho: Kuchuja kwa Uwazi (Explicit Filtering)

Usitegemee ambient scope wakati wa uthibitishaji wa token. Chuja kwa uwazi kila wakati.

Niliumba trait moja ya kushughulikia hili:

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();
    }
}

Mtazamo huu unafuata sheria nne:

  • Tumia UUIDs: Usitumie ID za auto-increment kamwe. Agent paswi kuweza kukisia ID kwa kubadilisha namba.
  • Chanzo Kimoja cha Ukweli (Single Source of Truth): Kichujio cha shirika kipo kwenye trait moja. Kila zana inaitumia.
  • Tumia Ruhusa Zilizopo: Usitengeneze ruhusa mpya kwa ajili ya agent. Tumia maandishi ya ruhusa (permission strings) yale yale ambayo programu yako ya wavuti inatumia. Hii inazuia agent kuwa na nguvu zaidi kuliko mtumiaji wa binadamu.
  • Weka Alama za Athari (Side Effects): Tumia annotations kuonyesha ikiwa zana ni ya kusoma tu (read-only) au inaruhusu kuandika (write-enabled).

Kujaribu Mipaka

Lazima ujaribu njia hasi (negative path). Usijaribu tu ikiwa zana inafanya kazi. Jaribu kwamba mtumiaji kutoka Shirika A hawezi kuona data kutoka Shirika B.

Ikiwa agent atajaribu kufikia UUID kutoka kwa tenant mwingine, zana inapaswa kurudisha "not found." Isimwambie agent kwamba data ipo lakini ni ya mtu mwingine.

Chukulia kila zana ya AI kama endpoint isiyoaminika. Nidhamu ndiyo njia pekee ya kuweka data yako salama.

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