So verwenden Sie cipi/agent in Laravel – Projekt MCP für Debug und Seeder
Von Andrea Pollastri · Letzte Aktualisierung: · Kostenlose Lektüre, keine Paywall
SSHing in die Produktion für a migrate:status, ein fehlgeschlagener Job-Peek oder ein Staging-Seeder sind langsam, nicht teilbar und für einen KI-Assistenten nutzlos. Das offizielle Laravel-Paket cipi/agent stellt Webhooks, Health-Checks und – was am nützlichsten ist – a Projekt MCP innerhalb der App, sodass Cursor Protokolle lesen, Artisan ausführen und die Datenbank über HTTPS abfragen kann.
- Warum ein Agent in der App?
- Installieren Sie cipi/agent
- Was das Paket eigentlich macht
- Schalten Sie das Projekt MCP ein
- Verbinden Sie Cursor, VS Code oder Claude
- Debuggen ohne SSH
- Seeder, Migration und Cache über artisan
- Eine tägliche Schleife, die Sie kopieren können
- Projekt MCP vs. Panel API MCP
- Token, Blöcke und geringste Privilegien
- FAQ
Warum ein Agent in der App?
Cipi besitzt bereits den Server: Nginx, PHP, Datenbanken, SSL, Bereitstellungen ohne Ausfallzeiten. Das ist Infrastruktur. Eine Laravel-App hat immer noch ihre eigene Welt – Eloquent-Modelle, Seeder, Horizon-Warteschlangen, tägliche Protokollrotation, der aktuelle Migrationssatz. Eine KI, die nur die Repo-Vermutungen sieht. Eine KI, die Werkzeuge auf dem aufrufen kannlaufen App hört auf zu raten.
Dafür gibt es das Projekt MCP. Es lebt bei POST /cipi/mcp auf der App-Domäne, spricht MCP 2024-11-05 über HTTPS und stellt sechs Tools vor, auf die es sich bezieht das Anwendung. Kein Root-SSH. Kein gemeinsamer Bereitstellungsschlüssel in der IDE. Der Assistent fragt nach Gesundheit, Schwänzen laravel.log, läuft db:seed --class=RoleSeeder beim Staging und überprüft die Zeilenanzahl mit db_query.
Health-Check und MCP funktionieren auf jedem Laravel 12+ Host. Webhook Bereitstellungen und der vollständige Protokollsatz (nginx, php, worker, deploy) erwarten a Cipi-verwaltet Umfeld. Die Referenz lebt in der Cipi Agentendokumente.
Installieren Sie cipi/agent
Anforderungen: PHP 8.3+ und Laravel 12 oder 13. Der Dienstanbieter erkennt automatisch – verlassen config/app.php allein.
$ composer require cipi/agent
$ php artisan cipi:status # config + live DB connectivityAuf einem Cipi VPS, cipi app create spritzt schon CIPI_APP_USER, CIPI_WEBHOOK_TOKEN und die Bereitstellungspfade. Sie aktivieren nur die optionalen Dienste, die Sie möchten. Off Cipi, veröffentlichen Sie die Konfiguration, wenn Sie andere Standardeinstellungen benötigen:
$ php artisan vendor:publish --tag=cipi-configCommit und Push. Beim nächsten Deployment wird das Paket abgeholt. Auf der Schalttafelseite muss nichts weiter verkabelt werden.
Was das Paket eigentlich macht
| Funktion | Endpunkt | Wenn Sie es verwenden |
|---|---|---|
| Webhook bereitstellen | POST /cipi/webhook | GitHub / GitLab Push-Schreibvorgänge .deploy-trigger; Der Deployer wird innerhalb einer Minute als App-Benutzer ausgeführt |
| Health-Check | GET /cipi/health | UptimeRobot/Grafana: App, Datenbank, Cache, Warteschlangenrückstand, letzter Commit |
| Projekt MCP | POST /cipi/mcp | Cursor / VS Code / Claude: Gesundheit, Protokolle, SQL, Artisan, Bereitstellung – dieses Handbuch |
| DB-Anonymisierer | POST /cipi/db | DSGVO-sichere Dumps für lokale/Qualitätssicherung, Faker-Transformationen, signierter 15-minütiger Download |
Jede Funktion verfügt über ein eigenes Bearer-Token und kann unabhängig voneinander ausgeschaltet werden. Ein deaktivierter Endpunkt kehrt zurück 404 — Es existiert nicht, soweit es einen Scanner betrifft.
Schalten Sie das Projekt MCP ein
Der MCP-Server ist standardmäßig deaktiviert. Aktivieren Sie es, erstellen Sie ein dediziertes Token und drucken Sie dann die Client-Snippets aus:
$ php artisan cipi:service mcp --enable
$ php artisan cipi:generate-token mcp
$ php artisan cipi:mcpcipi:mcp druckt die sechs Tools und ein einfügefertiges JSON für Cursor (nativ HTTP), VS Code/Copilot und Claude Desktop (via mcp-remote). Der Token landet in .env als CIPI_MCP_TOKEN. Verwenden Sie das webhook-Geheimnis nicht erneut.
Verbinden Sie Cursor, VS Code oder Claude
Geben Sie dies für Cursor ein ~/.cursor/mcp.json (oder Einstellungen → MCP). Ersetzen Sie die Domain und das Token von Ihrem .env:
{
"mcpServers": {
"cipi-myapp": {
"type": "http",
"url": "https://yourdomain.com/cipi/mcp",
"headers": {
"Authorization": "Bearer YOUR_CIPI_MCP_TOKEN"
}
}
}
}VS Code 1.102+ verwendet den gleichen HTTP-Transport in .vscode/mcp.json unter a servers Schlüssel. Claude Desktop braucht das mcp-remote stdio-Brücke – php artisan cipi:mcp druckt diesen Block auch.
Benennen Sie den Server nach dem App-Benutzer (cipi-myapp, cipi-staging). Eine Laravel-App, eine MCP. Wenn Sie Staging und Produktion betreiben, registrieren Sie zwei Server und sagen Sie, welchen Sie meinen.
Debuggen ohne SSH
Dies ist der Teil, der den Tagesrhythmus verändert. Sie bleiben in der IDE. Der Assistent spricht mit der Live-App.
Gesundheit – geht es überhaupt?
Gleiche Nutzlast wie GET /cipi/health: Laravel-Version, APP_DEBUG, Datenbankname, Cache, Warteschlangentreiber, ausstehende Jobs, letzter Bereitstellungs-Commit. Fragen Sie: „Ist die Produktion gesund? Gibt es einen Rückstand in der Warteschlange?“ Wenn checks.app.debug ist true Auf einem öffentlichen Host haben Sie gerade ein Problem gefunden, ohne es zu öffnen .env.
Protokolle – letzte Fehler, nicht die gesamte Datei
Die logs Das Tool liest die letzten N Zeilen (Standard 50, max. 500) und hält die Stack-Traces intakt. Filter:
type—laravel,nginx,php,worker,deploylevel—error,warning, … (nur Laravel)search– Schlüsselwort, bei dem die Groß-/Kleinschreibung nicht beachtet wird, z. B.PaymentFailedoder eine Berufsklasse
Täglicher Wechsel (laravel-YYYY-MM-DD.log) wird automatisch erkannt. Eine nützliche erste Eingabeaufforderung nach einem 500: „Zeige die letzten 100 Laravel Fehler und dann die passenden nginx Zeilen.“
db_query – Schauen Sie, machen Sie nicht kaputt
Lesen Sie: SELECT, SHOW, DESCRIBE, EXPLAIN. Schreiben Sie: INSERT, UPDATE, DELETE. Gesperrt: DROP, TRUNCATE, GRANT, REVOKE, Datei-E/A. Die Ergebnisse werden als ASCII-Tabelle zurückgegeben, die auf 100 Zeilen begrenzt ist – genug, um einen Seeder zu bestätigen, nicht genug, um die Benutzertabelle zu löschen.
# after a RoleSeeder on staging
SELECT id, name, created_at FROM roles ORDER BY id;
# did today’s signups land?
SELECT COUNT(*) FROM users WHERE created_at >= CURRENT_DATE;Seeder, Migration und Cache über artisan
Die artisan Das Tool ist der Grund, warum dieses Paket einen Platz in einem Repo für Laravel verdient. Es führt alle Artisan-Befehle aus, mit Ausnahme der lang andauernden/interaktiven Befehle (serve, tinker, queue:work, queue:listen, schedule:work, horizon, octane:start, reverb:start). Alles andere – einschließlich Sämaschinen – ist Freiwild.
Eingabeaufforderungen, die tatsächlich einen Sprung zu SSH ersparen:
- „Lauf
migrate:statuszur Inszenierung.“ - „Nur Seed-Rollen:
db:seed --class=RoleSeeder.” - „Laden Sie Demo-Bestellungen mit
DemoDataSeeder, dannSELECT COUNT(*) FROM orders.” - “
queue:failed– Gibt es Jobs, die seit der letzten Bereitstellung hängengeblieben sind?“ - “
cache:clearundoptimize:clearnach der Konfigurationsänderung.“
Nicht Richten Sie dies auf die Produktion und sagen Sie „Run the DatabaseSeeder“. migrate:fresh --seed ist nicht in der Sperrliste – das Paket führt es aus. Verwenden Sie beim Staging benannte Seeder und bestätigen Sie mit db_query. Produktionsdaten sind kein Spielplatz, nur weil der Transport MCP statt SSH erfolgt.
Ein sicheres Staging-Muster: eine Seeder-Klasse pro Gerät, idempotent, wo Sie können, mit Namen aufgerufen. Der Assistent leitet die Klasse, liest die Tabelle und erst dann befördern Sie denselben Seeder über CI. Das ist das Gegenteil von „Produktion wegwerfen und beten“.
Kombinieren Sie es mit dem Anonymisierer Wenn lokal Volumen ohne PII benötigt wird: Anonymisieren Sie einen produktionsförmigen Dump, laden Sie ihn lokal, behalten Sie MCP Seeder für die kleinen Referenztabellen (Rollen, Pläne, Feature-Flags), die sich bei jedem Sprint ändern.
Eine tägliche Schleife, die Sie kopieren können
Sie: Staging healthy? Any pending jobs?
Agent: health → healthy, queue 0, debug false, commit a1b2c3d
Sie: Last Laravel errors, search "InvoiceJob"
Agent: logs type=laravel level=error search=InvoiceJob
→ 1 error, missing column invoices.paid_at
Sie: migrate:status. Is 2026_08_22_add_paid_at pending?
Agent: artisan migrate:status → yes, pending
Sie: After I deploy, seed InvoiceStatusSeeder only.
Agent: deploy → queued
artisan db:seed --class=InvoiceStatusSeeder
db_query SELECT id, name FROM invoice_statuses
→ 4 rowsKeine SSH-Sitzung. Kein Kopieren und Einfügen von storage/logs. Die gleiche Konversation funktioniert für einen Teamkollegen, der den MCP-Token hat und niemals Root auf der Box haben sollte – was der größte Teil des Teams ist.
Projekt MCP vs. Panel API MCP
Cipi Schiffe zwei MCP Server. Sie zu verwechseln ist der übliche erste Fehler.
Projekt MCP (cipi/agent) | Panel API MCP (cipi/api) | |
|---|---|---|
| Wo | POST /cipi/mcp auf der App Domäne | POST /mcp auf dem API vhost |
| Umfang | Eine Laravel-App: ihre Datenbank, Protokolle, Artisan, Bereitstellungsflag | Der gesamte Server: Apps, SSL, Datenbanken, PHP, Worker |
| Werkzeuge | 6 – Gesundheit, app_info, Bereitstellung, Protokolle, db_query, artisan | 50+ – Apps erstellen, Zertifikate ausstellen, bearbeiten .env, als App-Benutzer ausführen |
| Benutze es für | Debuggen, Seeder, migrate:status, Warteschlangeneinblick | Bereitstellung, SSL, Auflistung aller Datenbanken, Server-Cockpit |
Wenn Sie möchten, behalten Sie beide im Cursor. Fragen Sie das Projekt MCP danach dies App; frag den Blende API MCP um den nächsten Staging-Klon zu erstellen. Die spezifikationsgesteuerter KI-Leitfaden deckt den größeren Kreis ab – diese Seite ist die In-App-Hälfte.
Token, Blöcke und geringste Privilegien
- Dedizierter Token.
CIPI_MCP_TOKENist nicht das webhook-Geheimnis und nicht der Gesundheitstoken. Wenn es undicht ist,php artisan cipi:generate-token mcpund neu starten. Jeder mit dem Token kann Artisan ausführen und SQL schreiben (innerhalb der 100-Zeilen-Obergrenze). - Aus bedeutet 404.
php artisan cipi:service mcp --disableoderCIPI_MCP=false. Bevorzugen Sie dies in der Produktion, bis Sie tatsächlich eine IDE-Verbindung benötigen. - Blockiert Artisan:
serve,tinker,queue:work,queue:listen,schedule:work,horizon,octane:start,reverb:start. - Blockiertes SQL:
DROP,TRUNCATE,GRANT,REVOKE, Datei-E/A. - Nur HTTPS, kein SSH. Gut für einen Entwickler, der ohne bereitstellen und prüfen sollte
sudo. Immer noch ein privilegierter Kanal – behandeln Sie das Token wie ein Produktionspasswort.
Installieren Sie das Paket und dann den Server
cipi/agent ist der Laravel Begleiter. Cipi ist das kostenlose, open-source Deploy CLI, das die Umgebung injiziert und Deployer ausführt, wenn webhook oder MCP deploy Werkzeugbrände.
Häufig gestellte Fragen
Benötige ich SSH, um das Projekt MCP zu nutzen?
Nein. Sobald das Paket bereitgestellt wurde und CIPI_MCP ist eingeschaltet, die IDE spricht mit https://yourdomain.com/cipi/mcp mit dem Bearer-Token. Das ist der Punkt für Teamkollegen, die sich niemals als Root anmelden sollten.
Was ist der Unterschied zwischen dem Agenten MCP und dem Cipi API MCP?
Der Agent MCP befindet sich in einer Laravel-App (sechs Tools: Integrität, Protokolle, SQL, Artisan, Bereitstellung). Das Panel API MCP verwaltet das gesamte VPS – Apps erstellen, SSL, Datenbanken, PHP. Verwenden Sie den Agenten für Debug und Seeder. Verwende die API zur Versorgung.
Kann ich db:seed bis MCP in der Produktion ausführen?
Technisch gesehen ja – db:seed ist nicht blockiert. Betreiben Sie praktisch nur eine benannte, überprüfte Sämaschine und niemals migrate:fresh --seed auf Live-Daten. Bevorzugen Sie die Bereitstellung und bestätigen Sie dann mit db_query.
Welche Artisan Befehle sind gesperrt?
serve, tinker, queue:work, queue:listen, schedule:work, horizon, octane:start, reverb:start. Lang laufende und interaktive Prozesse gehören nicht zu einem HTTP-Tool-Aufruf.
Funktioniert cipi/agent ohne Cipi-Server?
Health-Check und MCP ja, auf jedem Laravel 12+ Host. Durch Webhook ausgelöste Deployer-Bereitstellungen und die zusätzlichen Protokolltypen erwarten das Cipi-Layout unten /home/<app>/.
Wie rotiere ich einen durchgesickerten MCP-Token?
php artisan cipi:generate-token mcp, App neu starten (oder PHP-FPM / Octane neu laden), aktualisieren ~/.cursor/mcp.json. Der alte Token stirbt mit dem .env umschreiben.