laravel-forge-mcp
Provides tools to read and modify .env files for sites managed by Laravel Forge.
Integrates with Laravel Forge, providing tools for managing servers, sites, deployments, environment variables, Nginx configuration, logs, background processes, and scheduled jobs.
Provides tools to view and update Nginx configuration for sites managed by Laravel Forge.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@laravel-forge-mcp Deploy my main site and check the deployment log"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Laravel Forge MCP
An MCP server exposing the full Laravel Forge API v2 (273 operations) to Claude Code and other MCP clients.
Why not 273 tools
One tool per operation would burn roughly 43,000 tokens of context before you say anything. This server uses two layers instead:
Layer | Contents | Purpose |
Curated (26 tools) | deploys, logs, | one call per common task |
Universal (2 tools) |
| reaches all 273 operations |
Total: ~5,500 tokens, with no loss of API coverage.
Related MCP server: Forge MCP Server
Install
claude mcp add forge --env FORGE_API_TOKEN=your_token -- npx -y @wdevcom/laravel-forge-mcpGenerate a token at https://forge.laravel.com/profile/api.
Variable | Meaning |
| required |
| optional default organization slug; without it the server uses your only organization or asks |
The token is read only from the environment. Passing it as an argument is rejected, because process
arguments are visible in ps.
Safety modes
Forge has no trash can - a deleted server does not come back. Operations are classified into three levels:
laravel-forge-mcp # read + write (default), no destructive operations
laravel-forge-mcp --allow-destructive # everything, including DELETE and reboot
laravel-forge-mcp --read-only # read only, 19 toolsLevel | Rule | Operations |
| GET | 133 |
| POST, PUT, PATCH | 93 |
| DELETE plus | 47 |
Classification depends on the request body, not just the HTTP method - restarting a service passes,
stopping the same service is blocked. Tools also carry MCP annotations (readOnlyHint, destructiveHint)
so the client can ask for confirmation.
Tools
site and server arguments accept a domain, name, or ID - you never need numeric IDs.
Context:
forge_whoami,forge_list_servers,forge_list_sites,forge_resolveServer:
forge_get_server,forge_server_events,forge_restart_service,forge_server_action,forge_get_server_logDeploy:
forge_get_site,forge_deploy_site,forge_list_deployments,forge_get_deployment_log,forge_deployment_status,forge_get_deployment_script,forge_update_deployment_scriptConfig:
forge_get_env,forge_update_env,forge_get_nginx_config,forge_update_nginx_configDiagnostics:
forge_get_site_logs,forge_run_commandProcesses:
forge_list_background_processes,forge_background_process_action,forge_list_scheduled_jobs,forge_list_databases
Everything else - certificates, firewall, VPC, roles, recipes, backups - goes through the universal layer:
forge_search_operations("certificate") → matching operations with parameter schemas
forge_call("organizations.servers.sites.domains.certificates.store", { ... })A missing {organization} parameter is filled in automatically.
How it works
OpenAPI is the source of truth. The spec/forge.openapi.json snapshot ships with the package and loads
locally, so the server starts without network calls. New Forge endpoints become reachable through the
universal layer as soon as the file is refreshed (npm run sync:spec).
The resolver caches domain → {organization, server, site} mappings for five minutes; Forge allows only
60 requests per minute. On ambiguity (same domain on two servers) it returns candidates instead of guessing.
The formatter flattens JSON:API, dropping the links and relationships that dominate raw responses.
Pagination follows at most 5 pages and marks the result as truncated.
Development
npm install
npm test # 130 tests
npm run typecheck
npm run dev # run without buildingA contract test asserts that every operationId used in the code exists in the spec, catching Forge-side
changes before they blow up mid-conversation.
Notes
Transport is stdio; HTTP and SSE are not supported.
API v2 has no site-level workers, despite the PHP SDK exposing them (
$forge->workers(...)). Useforge_list_background_processesat server level.forge_get_envreturns secrets in plain text.
License
Apache-2.0. Forge API reference.
Available Tools
28 toolsforge_background_process_actionAkcja na procesie w tleA
Restartuje, uruchamia albo zatrzymuje proces w tle na serwerze - tak restartuje sie workery kolejek. Zatrzymanie jest operacja destrukcyjna i wymaga flagi --allow-destructive.
Inputs: server (required), process (required), org, action.
forge_callWywolaj dowolna operacje Forge APIB
Wykonuje dowolna z 273 operacji Laravel Forge API po jej operationId. Operacje znajdziesz narzedziem forge_search_operations. Brakujacy parametr {organization} jest uzupelniany z konfiguracji serwera.
Inputs: operationId (required), raw, body, path, +1 more.
forge_deployment_statusStatus wdrozeniaARead-onlyIdempotent
Pokazuje biezacy status wdrozenia site - czy trwa, czy sie zakonczylo i kiedy sie zaczelo.
Inputs: site (required), org.
forge_deploy_siteUruchom wdrozenieA
Uruchamia wdrozenie site. Domyslnie zwraca potwierdzenie startu bez czekania na koniec - ustaw wait na true, zeby odpytywac status az do zakonczenia (maksymalnie 2 minuty). Postep sprawdzisz tez narzedziem forge_deployment_status.
Inputs: site (required), org, wait.
forge_get_deployment_logLog wdrozeniaARead-onlyIdempotent
Pobiera pelne wyjscie wdrozenia. Bez argumentu deployment bierze ostatnie wdrozenie - to najczestszy przypadek przy diagnozowaniu nieudanego deploya.
Inputs: site (required), org, lines, deployment.
forge_get_deployment_scriptSkrypt wdrozeniowyBRead-onlyIdempotent
Pobiera tresc skryptu wdrozeniowego site - komendy uruchamiane przy kazdym deployu.
Inputs: site (required), org.
forge_get_envPlik .env siteARead-onlyIdempotent
Pobiera zawartosc pliku .env site. Uwaga: zwraca sekrety w czystej postaci, wiec nie wklejaj wyniku do publicznych miejsc.
Inputs: site (required), org.
forge_get_nginx_configKonfiguracja Nginx siteARead-onlyIdempotent
Pobiera konfiguracje Nginx dla site - przydatne przy diagnozowaniu przekierowan i naglowkow.
Inputs: site (required), org.
forge_get_serverSzczegoly serweraARead-onlyIdempotent
Pokazuje pelne dane serwera: adresy IP, dostawce, region, wersje PHP, typ bazy i status uslug. Argument server przyjmuje nazwe serwera albo jego identyfikator.
Inputs: server (required), org.
forge_get_server_logLog serweraARead-onlyIdempotent
Pobiera zawartosc logu systemowego serwera po jego kluczu, np. "nginx-error". Logi konkretnego site pobierzesz narzedziem forge_get_site_logs.
Inputs: key (required), server (required), org, lines.
forge_get_siteSzczegoly siteARead-onlyIdempotent
Pokazuje pelne dane site: status, wersje PHP, repozytorium, katalogi, HTTPS i status ostatniego wdrozenia. Argument site przyjmuje domene albo identyfikator.
Inputs: site (required), org.
forge_get_site_logsLogi siteARead-onlyIdempotent
Pobiera logi site: application (log aplikacji Laravel), nginx-error (bledy serwera WWW) albo nginx-access (ruch). Zwraca ostatnie linie, bo logi czyta sie od konca.
Inputs: site (required), org, type, lines.
forge_list_background_processesProcesy w tle serweraARead-onlyIdempotent
Wypisuje procesy w tle uruchomione na serwerze - to sa workery kolejek i inne dlugotrwale komendy (w starym Forge nazywane demonami). Podaj argument process, zeby zobaczyc jego log. Uwaga: w API v2 procesy w tle naleza do serwera, nie do pojedynczego site.
Inputs: server (required), org, lines, process.
forge_list_databasesBazy danych serweraARead-onlyIdempotent
Wypisuje bazy danych i uzytkownikow bazy na serwerze.
Inputs: server (required), org.
forge_list_deploymentsHistoria wdrozenBRead-onlyIdempotent
Wypisuje ostatnie wdrozenia site wraz ze statusem i czasami rozpoczecia oraz zakonczenia.
Inputs: site (required), org.
forge_list_scheduled_jobsZadania cykliczneARead-onlyIdempotent
Wypisuje zadania cykliczne (cron) serwera albo konkretnego site. Podaj argument job razem z site, zeby zobaczyc wyjscie ostatniego uruchomienia.
Inputs: server (required), job, org, site.
forge_list_serversLista serwerowARead-onlyIdempotent
Wypisuje serwery w organizacji: identyfikator, nazwe, adres IP, wersje PHP i gotowosc. Uzyj argumentu search, zeby zawezic liste po nazwie.
Inputs: org, search.
forge_list_sitesLista siteARead-onlyIdempotent
Wypisuje site w organizacji albo na wskazanym serwerze: identyfikator, domene, status i status ostatniego wdrozenia. Argument server przyjmuje nazwe serwera albo jego identyfikator.
Inputs: org, search, server.
forge_resolveZnajdz identyfikatory zasobuARead-onlyIdempotent
Zamienia domene albo nazwe na komplet identyfikatorow {organization, server, site}. Przydatne, gdy chcesz uzyc forge_call, ktore wymaga surowych identyfikatorow.
Inputs: query (required), org.
forge_restart_serviceAkcja na usludze serweraA
Restartuje, uruchamia albo zatrzymuje usluge na serwerze: nginx, php, mysql, postgres, redis lub supervisor. Zatrzymanie uslugi jest operacja destrukcyjna i wymaga flagi --allow-destructive.
Inputs: server (required), service (required), org, action.
forge_run_commandUruchom komende w katalogu siteA
Uruchamia komende powloki w katalogu site, np. "php artisan migrate --force" albo "php artisan cache:clear". Domyslnie czeka na zakonczenie i zwraca wyjscie (maksymalnie minute). Komenda wykonuje sie na produkcyjnym serwerze - sprawdz ja przed uruchomieniem.
Inputs: site (required), command (required), org, wait.
forge_search_operationsWyszukaj operacje Forge APIARead-onlyIdempotent
Przeszukuje wszystkie 273 operacje Laravel Forge API i zwraca dopasowania wraz ze schematem parametrow. Uzyj tego, gdy potrzebna operacja nie ma wlasnego narzedzia forge_*, a potem wywolaj ja przez forge_call. Przyklady zapytan: "certificate", "firewall", "recipe", "backup".
Inputs: query (required), tag, limit.
forge_server_actionAkcja na serwerzeB
Wykonuje akcje na samym serwerze, na przyklad reboot. Reboot jest operacja destrukcyjna i wymaga flagi --allow-destructive.
Inputs: action (required), server (required), org.
forge_server_eventsZdarzenia serweraARead-onlyIdempotent
Pokazuje ostatnie zdarzenia serwera - to odpowiedz na pytanie "co sie teraz dzieje z serwerem". Podaj argument event, zeby zobaczyc pelne wyjscie konkretnego zdarzenia.
Inputs: server (required), org, event.
forge_update_deployment_scriptZapisz skrypt wdrozeniowyA
Nadpisuje caly skrypt wdrozeniowy site. Najpierw pobierz obecna tresc narzedziem forge_get_deployment_script, zeby nie skasowac istniejacych komend.
Inputs: site (required), content (required), org.
forge_update_envZapisz plik .env siteA
Nadpisuje caly plik .env site. To operacja nadpisujaca, nie scalajaca - najpierw pobierz obecna tresc narzedziem forge_get_env i zmodyfikuj ja, inaczej skasujesz wszystkie pozostale zmienne.
Inputs: site (required), content (required), org.
forge_update_nginx_configZapisz konfiguracje Nginx siteA
Nadpisuje cala konfiguracje Nginx site. Bledna konfiguracja moze wylaczyc strone - najpierw pobierz obecna tresc narzedziem forge_get_nginx_config.
Inputs: site (required), content (required), org.
forge_whoamiKonto i organizacjeARead-onlyIdempotent
Pokazuje zalogowanego uzytkownika Forge oraz liste jego organizacji wraz z ich slugami. Zacznij od tego narzedzia, gdy nie wiesz, do ktorej organizacji nalezy zasob.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool targets a distinct resource/action: list/get/update/deploy/status are separated, and logs are explicitly scoped to server, site, or deployment. The generic forge_search_operations/forge_call pair is clearly framed as a fallback for operations without a dedicated tool, so it does not create ambiguity.
The forge_ prefix and snake_case are consistent, and most names follow verb_noun patterns like forge_list_servers, forge_get_site, and forge_update_env. A few names deviate with noun-phrase or verb-only forms such as forge_deployment_status, forge_server_events, forge_background_process_action, forge_resolve, and forge_call, so the pattern is mostly but not perfectly uniform.
28 tools is on the heavy side and above the ideal discoverability range for an MCP server. However, the Laravel Forge domain is broad and the tools are grouped by server, site, deployment, background process, and database concerns, so the set is not redundant; the generic forge_call/search pair also keeps the count from needing to grow further.
The dedicated tools cover core server, site, deployment, env, nginx, background process, scheduled job, and database workflows. Because forge_search_operations and forge_call expose all 273 Forge API operations, any missing capability such as certificates, firewall rules, recipes, or backups remains reachable without a dead end.
Maintenance
Related MCP Connectors
Create, deploy, and operate MCP servers directly from your GitHub repositories.
A MCP server built for developers enabling Git based project management with project and personal…
Official xCloud MCP: manage servers, sites, WordPress, SSL, backups and deploys from any MCP client.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- AlicenseDqualityDmaintenanceA minimalist MCP server that integrates with Laravel Forge, allowing users to manage their Laravel Forge servers, sites, and deployments through AI assistants like Claude Desktop, Windsurf, or Cursor.12MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates with the Laravel Forge API to provide comprehensive management of servers and sites. It enables users to perform health checks, monitor logs, create resources, and execute deployment tasks through MCP-compliant tools.22 npm2MIT
- AlicenseBqualityDmaintenanceMCP server for managing Laravel Forge servers, sites, and deployments via the Forge API.1236 npm9MIT
- AlicenseBqualityDmaintenanceMCP server for Laravel Cloud to manage projects, environments, deployments, and other resources.98ISC