· Admin

Laravel Boost ve MCP Server'lar: AI Agent'iniza Eksik Olan Context

AI kodlama asistanlarinin en buyuk problemi ne biliyor musunuz? Hallucination degil. Context eksikligi. Claude veya GPT, Laravel'i mukemmel biliyor. Ama SIZIN projenizi bilmiyor. Hangi paketleri yuklediniz, veritabani semaniz ne, route'lariniz nasil, model iliskileriniz ne - bunlari bilmeden urettigi kod tahmine dayali oluyor.

MCP (Model Context Protocol) tam bu sorunu cozuyor. Bu yazida MCP'nin ne oldugunu, nasil calistigini, Laravel Boost paketini ve kendi MCP server'inizi nasil kuracaginizi anlatacagim.

MCP Nedir?

MCP, Anthropic'in gelistirdigi acik bir protokol. AI modeline "dis dunya" ile etkilesim imkani veriyor. Dusunun ki Claude Code bir kutunun icinde calisiyor. Dosyalarinizi gorebiliyor ama:

  • Yuklu paketlerinizin API'lerini bilmiyor
  • Veritabani semanizi gormez (migration dosyalari okusa da guncel durumu bilmez)
  • Route listenizdeki middleware'leri, parametreleri bilmez
  • Redis, queue, cache konfigurasyonunuzu bilmez

MCP server'lari bu kutuya pencereler aciyor. Her pencere farkli bir veri kaynagina bakiyor.

┌─────────────────────────────┐
│        Claude Code          │
│                             │
│  ┌─────┐ ┌─────┐ ┌─────┐  │
│  │MCP 1│ │MCP 2│ │MCP 3│  │
│  └──┬──┘ └──┬──┘ └──┬──┘  │
└─────┼───────┼───────┼──────┘
      │       │       │
      ▼       ▼       ▼
   Laravel  Context7  DB
   Boost    (docs)   Schema

MCP Nasil Calisiyor?

Teknik olarak MCP, stdio veya HTTP uzerinden JSON-RPC mesajlari tasiyan bir protokol. Ama bunu bilmenize gerek yok. Pratikte soyle calisiyor:

  1. Claude Code baslatildiginda .claude/mcp.json dosyasini okur
  2. Tanimli MCP server'lari calistirir (genellikle npx ile)
  3. Her server, sunabilecegi "tool"lari (araclar) Claude'a bildirir
  4. Claude, ihtiyac duydugunca bu tool'lari cagirir
  5. Tool sonuclari Claude'a context olarak doner

Ornegin siz "Product model'ine yeni bir iliskieklé" dediginizde, Claude once MCP uzerinden mevcut model iliskilerini sorgular, sonra uyumlu kod uretir.

Kurulum: .claude/mcp.json

Proje root'unda .claude/ klasoru olusturun:

mkdir -p .claude
// .claude/mcp.json
{
    "mcpServers": {
        "laravel-boost": {
            "command": "npx",
            "args": ["-y", "@nicepkg/laravel-boost"]
        }
    }
}

Bu kadar. Claude Code'u yeniden baslattiginizda Laravel Boost aktif olacak.

Laravel Boost Ne Yapar?

Laravel Boost, projenizi analiz edip Claude'a sunulan en kapsamli Laravel MCP server'i. Neler saglıyor:

1. Paket Analizi

composer.json'daki paketleri okur ve her birinin API'sini, kullanim pattern'lerini sunar:

// composer.json'daki paketler
{
    "require": {
        "laravel/framework": "^12.0",
        "spatie/laravel-permission": "^6.0",
        "laravel/sanctum": "^4.0",
        "spatie/laravel-media-library": "^11.0"
    }
}

Claude artik "bu projede Spatie Permission kullaniliyor, yeni bir controller yazarken $this->authorize() yerine $user->hasPermissionTo() kullan" bilgisine sahip.

2. Route Bilgisi

Tum route'lari, middleware'leri, parametreleri ve controller mapping'leri:

GET    /api/v1/products          ProductController@index     [auth:sanctum, throttle:60,1]
POST   /api/v1/products          ProductController@store     [auth:sanctum, throttle:60,1]
GET    /api/v1/products/{id}     ProductController@show      [auth:sanctum]
PUT    /api/v1/products/{id}     ProductController@update    [auth:sanctum]
DELETE /api/v1/products/{id}     ProductController@destroy    [auth:sanctum, can:delete-product]

3. Model Yapisi

Model'lerinizin kolonlari, iliskileri, cast'leri, scope'lari:

Product Model:
- Columns: id, name, slug, price, stock_quantity, category_id, is_active
- Relations: category (belongsTo), reviews (hasMany), tags (belongsToMany)
- Casts: price -> decimal:2, is_active -> boolean
- Scopes: active(), inStock(), byCategory()

4. Migration Durumu

Hangi migration'lar calistirilmis, hangisi bekliyor:

[Ran]     2026_01_01_000001_create_users_table
[Ran]     2026_01_01_000002_create_products_table
[Pending] 2026_02_15_000001_add_featured_to_products_table

Pratik Faydalari

Daha Az Hallucination

MCP olmadan Claude bazen soyle seyler yapar:

// YANLIS: Projede boyle bir method yok
$user->assignRole('admin'); // Spatie Permission yuklu degilse hata

MCP ile Claude, projede Spatie Permission yuklu olup olmadigini bilir. Yukluyse dogru syntax'i kullanir, degilse alternatif sunar.

Tutarli Kod

Projenizde ApiResponse::success() helper'i varsa, Claude bunu bilir ve her yerde kullanir. MCP olmadan bazen response()->json() bazen ApiResponse::success() kullanir - tutarsiz.

Dogru Iliskiler

Yeni bir iliskieklirken mevcut iliskileri bilir:

Sen: "Order model'ine shipping adresi ekle"

Claude (MCP ile): "Order model'inde zaten user(), products(),
payment() iliskileri var. ShippingAddress model'i olusturup
hasOne iliskisi ekleyeyim. Mevcut pattern'e uygun olarak
ShippingAddress model'inde de order() belongsTo iliskisini
tanimlarim."

MCP olmadan Claude mevcut iliskileri bilmeden, belki address diye bir field eklerdi veya farkli naming convention kullanirdi.

Diger Faydali MCP Server'lar

Context7

Herhangi bir kutuphanenin guncel dokumantasyonunu ceker:

{
    "mcpServers": {
        "context7": {
            "command": "npx",
            "args": ["-y", "@context7/mcp"]
        }
    }
}

Ne ise yarar? Laravel 12'de degisen bir API varsa, Claude'un training data'si eski olabilir. Context7 gercek dokumantasyondan okur.

Sequential Thinking

Karmasik gorevleri adim adim planlar:

{
    "mcpServers": {
        "sequential-thinking": {
            "command": "npx",
            "args": ["-y", "@anthropic/sequential-thinking-mcp"]
        }
    }
}

"Multi-tenancy sistemi kur" gibi buyuk gorevlerde once plan yapar, sonra adim adim uygular.

Veritabani MCP

Dogrudan veritabanini sorgulama imkani:

{
    "mcpServers": {
        "postgres": {
            "command": "npx",
            "args": [
                "-y",
                "@modelcontextprotocol/server-postgres",
                "postgresql://user:pass@localhost:5432/mydb"
            ]
        }
    }
}

Claude artik "users tablosunda kac kayit var" sorusuna gercek cevap verebilir. Migration dosyalarini okumak yerine canli veritabanini gorur.

Kendi MCP Tool'unuzu Yazma

Laravel projenize ozel bir MCP tool yazmak isteyebilirsiniz. Ornegin projenizin queue durumunu sorgulayan bir tool:

// .claude/mcp-tools/queue-status.js
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { exec } from "child_process";
import { promisify } from "util";

const execAsync = promisify(exec);
const server = new Server({
    name: "laravel-queue-status",
    version: "1.0.0",
}, {
    capabilities: { tools: {} },
});

server.setRequestHandler("tools/list", async () => ({
    tools: [
        {
            name: "queue_status",
            description: "Laravel queue durumunu gosterir (bekleyen, calisan, basarisiz job'lar)",
            inputSchema: {
                type: "object",
                properties: {
                    queue: {
                        type: "string",
                        description: "Queue adi (default, emails, notifications)",
                    },
                },
            },
        },
        {
            name: "failed_jobs",
            description: "Basarisiz job'lari listeler",
            inputSchema: {
                type: "object",
                properties: {
                    limit: {
                        type: "number",
                        description: "Kac tane gosterilsin",
                        default: 10,
                    },
                },
            },
        },
    ],
}));

server.setRequestHandler("tools/call", async (request) => {
    const { name, arguments: args } = request.params;

    if (name === "queue_status") {
        const { stdout } = await execAsync("php artisan queue:monitor default,emails,notifications");
        return { content: [{ type: "text", text: stdout }] };
    }

    if (name === "failed_jobs") {
        const limit = args?.limit || 10;
        const { stdout } = await execAsync(`php artisan queue:failed --limit=${limit}`);
        return { content: [{ type: "text", text: stdout }] };
    }
});

const transport = new StdioServerTransport();
await server.connect(transport);

MCP config'e ekleyin:

{
    "mcpServers": {
        "laravel-queue": {
            "command": "node",
            "args": [".claude/mcp-tools/queue-status.js"]
        }
    }
}

Artik Claude Code'a "queue durumu nasil?" diye sordugunuzda gercek veriyi gorur.

Tum MCP Konfigurasyonu

Tam bir Laravel projesi icin ideal MCP setup'i:

{
    "mcpServers": {
        "laravel-boost": {
            "command": "npx",
            "args": ["-y", "@nicepkg/laravel-boost"]
        },
        "context7": {
            "command": "npx",
            "args": ["-y", "@context7/mcp"]
        },
        "sequential-thinking": {
            "command": "npx",
            "args": ["-y", "@anthropic/sequential-thinking-mcp"]
        },
        "postgres": {
            "command": "npx",
            "args": [
                "-y",
                "@modelcontextprotocol/server-postgres",
                "postgresql://user:pass@localhost:5432/mydb"
            ]
        }
    }
}

Performans ve Dikkat Edilecekler

MCP server'lari ek process'ler olusturdugu icin bazi seyler:

  • Baslangic suresi artar: Her MCP server spawn edilir. Cok fazla MCP server konfigurasyonu Claude Code'un baslamasini yavaslatir.
  • Bellek kullanimi: Her server bir Node.js process'i. 4-5 tane normal, 10+ olmasi gereksiz.
  • Guvenlik: Veritabani MCP'si read-only kullanici ile baglayin. Claude'un DROP TABLE calistirmasini istemezsiniz.
  • Cache: MCP sonuclari cache'lenmez, her sorguda yeniden calisir. Agir sorgulari MCP'ye koymayin.

Gelecek: AI-Native Laravel Development

MCP, AI-destekli gelistirmenin yakindan takip etmemiz gereken parca. Bugun elle yapilandiriyoruz ama gelecekte:

  • composer require yaptiginizda MCP otomatik guncellenecek
  • Migration calistirdiginizda AI'in model bilgisi aninda guncellenecek
  • CI/CD pipeline'daki test sonuclari AI'a otomatik akacak
  • Production log'lari ve hata raporlari AI'in context'ine girecek

Laravel ekosistemi bu konuda hizli ilerliyor. Taylor Otwell'in Laravel AI SDK'yi cikarmasinin sebebi de bu: Laravel'i AI-native yapmak.

Sonuc

MCP olmadan AI kodlama asistani, projenizin yarisini goremeden kod yazan bir gelistirici gibi. Yetenekli ama context'siz. MCP ile bu gelistirici projenizi tamamen anlayarak kod yazar.

Laravel Boost tek basina bile buyuk fark yaratir. Yukleyin, deneyin, hallucination oraninin nasil dustugunu gorun.

ProjeMan'da tum projelerimizde MCP konfigurasyonu var. Ozellikle modular yapili buyuk projelerde (nwidart/laravel-modules kullananlar) MCP olmazsa olmaz. Claude'un modul A'daki bir model'i modul B'de kullanirken dogru namespace ve iliskileri bulmasi ancak MCP ile mumkun.