Skip to content

Laravel Forge MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Manage Laravel Forge servers, sites, and deployments from your AI assistant.

Deletes · 23 high findings

17 tools: 2 can delete or cancel things and 15 only read.

Scanned Oct 21, 2026

5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http laravel-forge https://laravel-forge.usefulapi.io/mcp

Findings

Matches of fixed checks, with the text they matched.

3 high1 warn1 info

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Deletes or cancels 2Claude Code: deny
  • forge_deploy_site⚠[U+FE0F] Triggers a new deployment of the site (runs the deployment script).No findings

    Why it is in this group

    • The name "forge_deploy_site" says "deploy": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    ⚠[U+FE0F] Triggers a new deployment of the site (runs the deployment script). Returns the created deployment. Forge v2: POST /orgs/{organization}/servers/{server}/sites/{site}/deployments.

    Annotations the server declares

    • title: Deploy site
    • destructiveHint: true
  • forge_run_site_command⚠[U+FE0F] Runs an arbitrary shell command in the site's directory on the server.No findings

    Why it is in this group

    • The name "forge_run_site_command" says "run": a word for a change.
    • The input takes a statement or command to run (input.command), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    ⚠[U+FE0F] Runs an arbitrary shell command in the site's directory on the server. Use with care. Forge v2: POST /orgs/{organization}/servers/{server}/sites/{site}/commands.

    Annotations the server declares

    • title: Run site command
    • destructiveHint: true
Only reads 15Claude Code: allow
  • forge_get_current_userGet the authenticated Forge user.No findings

    Why it is in this group

    • The name "forge_get_current_user" says "get": a word for reading.
    Description, as the server wrote it
    Get the authenticated Forge user. Forge v2: GET /user.

    Annotations the server declares

    • title: Get current user
    • readOnlyHint: true
  • forge_get_deploymentGet a single deployment's details.No findings

    Why it is in this group

    • The name "forge_get_deployment" says "get": a word for reading.
    Description, as the server wrote it
    Get a single deployment's details. Forge v2: GET /orgs/{organization}/servers/{server}/sites/{site}/deployments/{deployment}.

    Annotations the server declares

    • title: Get deployment
    • readOnlyHint: true
  • forge_get_deployment_logGet a deployment's output/log.No findings

    Why it is in this group

    • The name "forge_get_deployment_log" says "get": a word for reading.
    Description, as the server wrote it
    Get a deployment's output/log. Forge v2: GET /orgs/{organization}/servers/{server}/sites/{site}/deployments/{deployment}/log.

    Annotations the server declares

    • title: Get deployment log
    • readOnlyHint: true
  • forge_get_deployment_statusGet the current deployment status for a site.No findings

    Why it is in this group

    • The name "forge_get_deployment_status" says "get": a word for reading.
    Description, as the server wrote it
    Get the current deployment status for a site. Forge v2: GET /orgs/{organization}/servers/{server}/sites/{site}/deployments/status.

    Annotations the server declares

    • title: Get deployment status
    • readOnlyHint: true
  • forge_get_serverGet a single server's details.No findings

    Why it is in this group

    • The name "forge_get_server" says "get": a word for reading.
    Description, as the server wrote it
    Get a single server's details. Forge v2: GET /orgs/{organization}/servers/{server}.

    Annotations the server declares

    • title: Get server
    • readOnlyHint: true
  • forge_get_siteGet a single site's details (org-level lookup — no server id needed).No findings

    Why it is in this group

    • The name "forge_get_site" says "get": a word for reading.
    Description, as the server wrote it
    Get a single site's details (org-level lookup — no server id needed). Forge v2: GET /orgs/{organization}/sites/{site}.

    Annotations the server declares

    • title: Get site
    • readOnlyHint: true
  • forge_get_site_envGet a site's .env file content.4 findings

    Why it is in this group

    • The name "forge_get_site_env" says "get": a word for reading.

    Findings

    • High

      The title refers to ".env".

      Matched text

      title: "Get site environment (.env)"

      What this check looks for
    • High

      The annotations title refers to ".env".

      Matched text

      annotations.title: "Get site environment (.env)"

      What this check looks for
    • High

      The description refers to ".env".

      Matched text

      description: "Get a site's .env file content. ⚠[U+FE0F] Returns SENSITIVE conf..."

      What this check looks for
    • Info

      The description mentions "credentials".

      Matched text

      description: "...[U+FE0F] Returns SENSITIVE config (secrets, DB credentials, API keys). Forge v2: GET /orgs/{organi..."

      What this check looks for
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    Get a site's .env file content. ⚠[U+FE0F] Returns SENSITIVE config (secrets, DB credentials, API keys). Forge v2: GET /orgs/{organization}/servers/{server}/sites/{site}/environment.

    Annotations the server declares

    • title: Get site environment (.env)
    • readOnlyHint: true
  • forge_list_databasesList database schemas on a server.No findings

    Why it is in this group

    • The name "forge_list_databases" says "list": a word for reading.
    Description, as the server wrote it
    List database schemas on a server. Forge v2: GET /orgs/{organization}/servers/{server}/database/schemas.

    Annotations the server declares

    • title: List databases
    • readOnlyHint: true
  • forge_list_deploymentsList a site's deployment history.No findings

    Why it is in this group

    • The name "forge_list_deployments" says "list": a word for reading.
    Description, as the server wrote it
    List a site's deployment history. Forge v2: GET /orgs/{organization}/servers/{server}/sites/{site}/deployments.

    Annotations the server declares

    • title: List deployments
    • readOnlyHint: true
  • forge_list_monitorsList server monitors (CPU/disk/etc.).No findings

    Why it is in this group

    • The name "forge_list_monitors" says "list": a word for reading.
    Description, as the server wrote it
    List server monitors (CPU/disk/etc.). Forge v2: GET /orgs/{organization}/servers/{server}/monitors.

    Annotations the server declares

    • title: List monitors
    • readOnlyHint: true
  • forge_list_organizationsList organizations you belong to.1 finding

    Why it is in this group

    • The name "forge_list_organizations" says "list": a word for reading.

    Findings

    • Warn

      The description contains "every other tool", wording about other tools or servers.

      Matched text

      description: "...get the organization id used by nearly every other tool. Forge v2: GET /orgs."

      What this check looks for
    Description, as the server wrote it
    List organizations you belong to. Call this FIRST to get the organization id used by nearly every other tool. Forge v2: GET /orgs.

    Annotations the server declares

    • title: List organizations
    • readOnlyHint: true
  • forge_list_scheduled_jobsList cron/scheduled jobs on a server.No findings

    Why it is in this group

    • The name "forge_list_scheduled_jobs" says "list": a word for reading.
    Description, as the server wrote it
    List cron/scheduled jobs on a server. Forge v2: GET /orgs/{organization}/servers/{server}/scheduled-jobs.

    Annotations the server declares

    • title: List scheduled jobs
    • readOnlyHint: true
  • forge_list_server_eventsList provisioning/activity events for a server.No findings

    Why it is in this group

    • The name "forge_list_server_events" says "list": a word for reading.
    Description, as the server wrote it
    List provisioning/activity events for a server. Forge v2: GET /orgs/{organization}/servers/{server}/events.

    Annotations the server declares

    • title: List server events
    • readOnlyHint: true
  • forge_list_serversList servers in an organization.No findings

    Why it is in this group

    • The name "forge_list_servers" says "list": a word for reading.
    Description, as the server wrote it
    List servers in an organization. Call forge_list_organizations first to get the organization id. Forge v2: GET /orgs/{organization}/servers.

    Annotations the server declares

    • title: List servers
    • readOnlyHint: true
  • forge_list_sitesList sites hosted on a server.No findings

    Why it is in this group

    • The name "forge_list_sites" says "list": a word for reading.
    Description, as the server wrote it
    List sites hosted on a server. Forge v2: GET /orgs/{organization}/servers/{server}/sites.

    Annotations the server declares

    • title: List sites
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http laravel-forge https://laravel-forge.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__laravel-forge__forge_list_organizations",
      "mcp__laravel-forge__forge_get_current_user",
      "mcp__laravel-forge__forge_list_servers",
      "mcp__laravel-forge__forge_get_server",
      "mcp__laravel-forge__forge_list_server_events",
      "mcp__laravel-forge__forge_list_sites",
      "mcp__laravel-forge__forge_get_site",
      "mcp__laravel-forge__forge_list_deployments",
      "mcp__laravel-forge__forge_get_deployment",
      "mcp__laravel-forge__forge_get_deployment_log",
      "mcp__laravel-forge__forge_get_deployment_status",
      "mcp__laravel-forge__forge_list_databases",
      "mcp__laravel-forge__forge_list_scheduled_jobs",
      "mcp__laravel-forge__forge_list_monitors",
      "mcp__laravel-forge__forge_get_site_env"
    ],
    "ask": [],
    "deny": [
      "mcp__laravel-forge__forge_deploy_site",
      "mcp__laravel-forge__forge_run_site_command"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as laravel-forge. Review it before you use it.