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:
- Claude Code baslatildiginda
.claude/mcp.jsondosyasini okur - Tanimli MCP server'lari calistirir (genellikle npx ile)
- Her server, sunabilecegi "tool"lari (araclar) Claude'a bildirir
- Claude, ihtiyac duydugunca bu tool'lari cagirir
- 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 TABLEcalistirmasini 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 requireyaptiginizda 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.