# EnvKit (mcpb · envkit-mcp-0.33.0-beta.44.mcpb)

Control the EnvKit local dev stack (PHP, nginx, MySQL, sites). Requires the EnvKit desktop app.

- Trust score: 43/100 (low)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- mcpb · `envkit-mcp-0.33.0-beta.44.mcpb`: 43/100 (this document), [markdown](https://verifymcp.io/servers/env-kit-envkit/envkit-mcp.md), [page](https://verifymcp.io/servers/env-kit-envkit/envkit-mcp)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/Env-Kit/envkit-releases/releases/download/v0.33.0-beta.44/envkit-mcp-0.33.0-beta.44.mcpb`
- Version: `0.33.0-beta.44`
- Transport: `stdio`
- SHA-256: `47c45be8c6eab6370a50c7b57c25c0990233e9b76b4c676ecbd38daa7c43362a`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-06.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (Proprietary) isn't a recognized OSI-approved license.
  - Actively maintained (last published 19 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 72/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 7965 tokens (~72/item across 110 items; 110 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 67/100
  - Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 88/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 4 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "nvm_uninstall" implies "uninstall" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 111 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the EnvKit MCP server?

EnvKit ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 47c45be8c6eab6370a50c7b57c25c0990233e9b76b4c676ecbd38daa7c43362a; the commands to do that are on this page. If it does not match, do not open it.

- Download bundle: `https://github.com/Env-Kit/envkit-releases/releases/download/v0.33.0-beta.44/envkit-mcp-0.33.0-beta.44.mcpb`
- SHA-256: `47c45be8c6eab6370a50c7b57c25c0990233e9b76b4c676ecbd38daa7c43362a`

### Verify on macOS / Linux

```bash
echo "47c45be8c6eab6370a50c7b57c25c0990233e9b76b4c676ecbd38daa7c43362a  envkit-mcp-0.33.0-beta.44.mcpb" | shasum -a 256 -c
```

### Verify on Windows (PowerShell)

```powershell
(Get-FileHash -Algorithm SHA256 .\envkit-mcp-0.33.0-beta.44.mcpb).Hash -eq "47c45be8c6eab6370a50c7b57c25c0990233e9b76b4c676ecbd38daa7c43362a"
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-06 (score 43, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-04 (score 42, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 41, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 40, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 39, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 38, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 37, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 36, +3)

- [functional improvement] Stability: unverified → 0.17

## MCP tools (110)

### `help` (~130 tokens)

Answer "how do I / where is / can I …" questions about USING EnvKit itself — features, where each setting lives, and step-by-step how-tos (e.g. change the default editor → Settings → Startup; add a custom service version; enable a database admin UI; put tools on PATH). Read-only. Call this for ANY question about the app's UI / features / settings, optionally with a `topic` keyword.

Input parameters:

- `topic` (string): optional keyword to focus on, e.g. "editor", "php", "path", "ssl", "database", "cron"

### `status` (~57 tokens)

FULL EnvKit status: services, sites, SSL trust, port conflicts, and the whole bundled catalog with every installable version. Heavy — prefer status_live for routine checks; call this only when you need catalog/SSL/port-conflict detail.

### `status_live` (~50 tokens)

Fast runtime snapshot: running services, sites, ports — the same cheap poll the dashboard uses (no cert checks, no port-conflict scan, no catalog). Prefer this over `status` for routine checks.

### `config` (~14 tokens)

Read the current EnvKit configuration.

### `paths` (~20 tokens)

EnvKit data dir, projects dir, config + log paths.

### `list_sites` (~14 tokens)

List all registered sites/projects.

### `add_site` (~72 tokens)

Register an existing project folder as a site (auto-detects the framework, then provisions its .test host + SSL). Appears in the app immediately — no restart.

Input parameters:

- `name` (string): optional site name (defaults to the folder name)
- `path` (string, required): absolute path to the project directory

### `remove_site` (~115 tokens)

Unregister a site (removes its host/vhost). By default the project files and databases are KEPT; pass delete_files / drop_databases to also delete the project folder and drop the database(s) named in its .env / wp-config.php — irreversible, confirm with the user first.

Input parameters:

- `delete_files` (boolean): also delete the project folder (irreversible)
- `drop_databases` (boolean): also drop the database(s) the site config names (irreversible)
- `name` (string, required): site name

### `list_databases` (~21 tokens)

List databases on the running MySQL/MariaDB server.

### `create_database` (~46 tokens)

Create a MySQL/MariaDB database (utf8mb4). The mysql service must be running.

Input parameters:

- `name` (string, required): database name (letters, digits, _ $ -)

### `drop_database` (~41 tokens)

Drop a MySQL/MariaDB database (destructive — system schemas are refused). Confirm intent with the user first.

Input parameters:

- `name` (string, required): database name

### `list_services` (~17 tokens)

List bundled services with install + runtime status.

### `start_service` (~36 tokens)

Start a service (nginx, php-fpm, mysql, redis, postgres, …).

Input parameters:

- `name` (string, required): service name

### `stop_service` (~22 tokens)

Stop a running service.

Input parameters:

- `name` (string, required): service name

### `restart_service` (~21 tokens)

Restart a service.

Input parameters:

- `name` (string, required): service name

### `diagnose_service` (~41 tokens)

Diagnose why a service won't start (port conflict, missing config/dir, stale pid, log errors). Read-only.

Input parameters:

- `name` (string, required): service name

### `repair_service` (~64 tokens)

Auto-repair a failed service (regenerate config, recreate dir, clear stale pid; with killConflicting also free its port) and retry start.

Input parameters:

- `killConflicting` (boolean): also stop the process holding the port
- `name` (string, required): service name

### `list_logs` (~53 tokens)

List available log sources. `logical: true` sources follow the newest file of a daily-rotated log (e.g. Laravel laravel-YYYY-MM-DD.log); `path` is the file they currently read.

### `tail_log` (~89 tokens)

Read the last N lines of a log source. Returns { lines, truncated, size, bytesRead, file }: truncated "lines" = older lines exist, "bytes" = the read budget ran out before N lines (very long records), "none" = the whole file is shown.

Input parameters:

- `id` (string, required): log source id
- `lines` (number): lines (default 100)

### `php_versions` (~13 tokens)

List installed PHP versions.

### `default_php` (~14 tokens)

Get the default PHP version.

### `set_default_php` (~31 tokens)

Set the default PHP version.

Input parameters:

- `version` (string, required): e.g. 8.3.30

### `nvm_status` (~19 tokens)

nvm-windows status and installed Node versions.

### `nvm_install` (~38 tokens)

Install a Node version via nvm-windows.

Input parameters:

- `version` (string, required): e.g. 20 or 20.11.0

### `nvm_uninstall` (~43 tokens)

Uninstall a Node version via nvm-windows (not the one in use).

Input parameters:

- `version` (string, required): e.g. 18.20.4

### `nvm_use` (~36 tokens)

Switch the active Node version via nvm-windows.

Input parameters:

- `version` (string, required): e.g. 20.11.0

### `laragon_detect` (~35 tokens)

Detect a Laragon install (projects, PHP, Node, databases).

Input parameters:

- `root` (string): Laragon root (optional)

### `create_laravel_site` (~65 tokens)

Scaffold a new Laravel site (needs PHP + Composer).

Input parameters:

- `name` (string, required): project name
- `starter_kit` (string): optional Packagist starter kit, e.g. laravel/react-starter-kit (default: plain laravel/laravel)

### `set_site_enabled` (~34 tokens)

Enable or disable a site.

Input parameters:

- `enabled` (boolean, required): true to enable
- `name` (string, required): site name

### `set_site_queue_workers` (~60 tokens)

Configure managed Laravel queue workers for a site (label, connection, queue names, tries, timeout, processes, etc.). Replaces the full worker list.

Input parameters:

- `name` (string, required): site name
- `workers` (array, required): Queue worker definitions

### `set_site_scheduler` (~47 tokens)

Enable or disable the managed php artisan schedule:work process for a Laravel site.

Input parameters:

- `enabled` (boolean, required): true to run schedule:work
- `name` (string, required): site name

### `set_site_live_reload` (~154 tokens)

Turn browser auto-refresh on or off for a PHP site: EnvKit watches the project files and reloads the open tab on save (Laravel sites with a running Vite dev server keep Vite HMR). Optional `database` also reloads the site's other open tabs after a save in the site's dashboard (WordPress admin, Laravel/Filament): any POST/PUT/PATCH/DELETE that is not background noise like heartbeats, autosave or polling.

Input parameters:

- `database` (boolean): true to also reload other open tabs after a write request on the site; omit to keep the current setting
- `enabled` (boolean, required): true to watch files and auto-refresh
- `name` (string, required): site name

### `restart_site_queue_worker` (~38 tokens)

Restart a named queue worker for a site.

Input parameters:

- `name` (string, required): site name
- `workerId` (string, required): worker id

### `get_site_workers` (~33 tokens)

Get queue worker, scheduler, and custom process runtime status for a site.

Input parameters:

- `name` (string, required): site name

### `set_site_processes` (~55 tokens)

Configure user-defined long-running commands for a site (label, command, cwd, restart policy). Replaces the full process list.

Input parameters:

- `name` (string, required): site name
- `processes` (array, required): Custom process definitions

### `debug_tail` (~124 tokens)

Read recent Debug-window events captured from a site (dump()/dd(), SQL queries with N+1/slow flags, mail, rendered views, dispatched events, queued jobs, outgoing HTTP). Scoped per site and per git branch. Read-only.

Input parameters:

- `branch` (string): git branch to scope to (optional; defaults to all branches)
- `limit` (number): max events (default 100)
- `name` (string, required): site name
- `type` (string): filter by type: dump|query|mail|view|event|job|http (optional)

### `dumps_tail` (~95 tokens)

Read recent dump()/dd() output from the Dumps page, across every PHP site or one site (newest last; `data.text` is the plain-text dump, `source` the file:line). Capture must be on for the site (set_site_dumps). Read-only.

Input parameters:

- `limit` (number): max dumps (default 500)
- `site` (string): site name (optional; defaults to every site)

### `set_site_dumps` (~84 tokens)

Send a PHP site's dump()/dd() output to the EnvKit Dumps page instead of the page (no code added to the project; needs symfony/var-dumper, which every Laravel app has). The first site switched on restarts PHP once.

Input parameters:

- `enabled` (boolean, required): true to capture, false to stop
- `name` (string, required): site name

### `start_all` (~13 tokens)

Start all enabled services.

### `stop_all` (~12 tokens)

Stop all services.

### `apply` (~21 tokens)

Re-apply config: render service configs, sync hosts + SSL.

### `site_detail` (~82 tokens)

Full detail for one site (framework, hostname, PHP version, dev server, workers, SSL, asleep, process usage, last visit, …). `usage` is the site's live memory/CPU: 0 / no groups when idle (nothing of it runs), null only when the process probe failed. Read-only.

Input parameters:

- `name` (string, required): site name

### `create_wordpress_site` (~180 tokens)

Create a WordPress site: downloads WordPress, creates its MySQL database and writes wp-config.php (needs PHP + MySQL installed). Pass admin_user + admin_password + admin_email (and optionally title) to finish the install too, so /wp-admin logs in immediately; otherwise the user completes the setup wizard in the browser. Returns the site list plus a `wordpress` object with url/adminUrl/installUrl/outcome.

Input parameters:

- `admin_email` (string): optional admin email
- `admin_password` (string): optional admin password (8+ characters)
- `admin_user` (string): optional admin username
- `db_name` (string): optional MySQL database name (default: derived from the folder name)
- `name` (string, required): project folder name
- `title` (string): optional site title (default: the folder name)

### `create_codeigniter_site` (~75 tokens)

Scaffold a new CodeIgniter 4 site with composer create-project codeigniter4/appstarter (needs PHP + Composer), then prepare it like prepare_codeigniter_site. Returns the site list plus a `codeigniter` object with url and the prepare result.

Input parameters:

- `name` (string, required): project folder name

### `prepare_codeigniter_site` (~117 tokens)

Get an existing CodeIgniter 4 site ready for local development: creates .env from the project's env file when missing (else updates only these keys), sets CI_ENVIRONMENT=development, app.baseURL to the site URL, database.default.* to the main MySQL server with a database named after the site (created; MySQL is started when idle), and email.* SMTP to Mailpit. Edits the project's .env — only run it when the user asked for it.

Input parameters:

- `name` (string, required): site name

### `create_bedrock_site` (~89 tokens)

Scaffold a new Roots Bedrock (Composer-based WordPress) site with composer create-project roots/bedrock (needs PHP + Composer), served from web/ with wp-admin at /wp/wp-admin/, then prepare it like prepare_bedrock_site. Returns the site list plus a `bedrock` object with url and the prepare result.

Input parameters:

- `name` (string, required): project folder name

### `prepare_bedrock_site` (~115 tokens)

Get an existing Roots Bedrock site ready for local development: when .env is missing it is written from .env.example with DB_NAME/DB_USER/DB_PASSWORD/DB_HOST for the main MySQL server, WP_ENV=development, WP_HOME/WP_SITEURL for the site URL and fresh salts. An existing .env is never modified — the result's `suggestions` lists the lines to set instead. Creates the database (MySQL is started when idle).

Input parameters:

- `name` (string, required): site name

### `list_blueprints` (~24 tokens)

List saved project blueprints (user zip templates for one-click site creation).

### `create_site_from_blueprint` (~220 tokens)

Create a new site from a saved blueprint zip: unpacks into the projects dir, optionally creates a MySQL database and rewrites wp-config / Laravel .env, registers the site with HTTPS, and runs an optional post-create command. For a WordPress blueprint that ships no db/*.sql dump, pass admin_user + admin_password + admin_email (and optionally title) to finish the WordPress install too; the result's `blueprint.wordpress` carries outcome/adminUrl/installUrl. Returns sites plus a `blueprint` result with url/notes.

Input parameters:

- `admin_email` (string): optional WordPress admin email
- `admin_password` (string): optional WordPress admin password (8+ characters)
- `admin_user` (string): optional WordPress admin username
- `blueprint_id` (string, required): blueprint id from list_blueprints
- `db_name` (string): optional MySQL database name
- `name` (string, required): project folder name
- `title` (string): optional WordPress site title (default: the folder name)

### `create_node_site` (~59 tokens)

Scaffold a new Node/JS site using the official scaffolder. Provisions its .test host + SSL.

Input parameters:

- `framework` (string, required): nextjs | nuxtjs | vite | angular | node
- `name` (string, required): project name

### `add_proxy_site` (~115 tokens)

Register a reverse-proxy site: <name>.test forwards to 127.0.0.1:<port> for a server EnvKit does not run (Docker, Go, Rust, .NET…). No project folder, no managed process; provisions the host + SSL.

Input parameters:

- `domain` (string): optional custom hostname instead of <name>.test
- `name` (string, required): site name (becomes <name>.test)
- `port` (string, required): local port to forward to, 1-65535

### `set_site_proxy_port` (~43 tokens)

Change a reverse-proxy site's target port.

Input parameters:

- `name` (string, required): site name
- `port` (string, required): local port, 1-65535

### `create_empty_site` (~28 tokens)

Create an empty project folder registered as a site.

Input parameters:

- `name` (string, required): project name

### `clone_git_site` (~52 tokens)

Clone a git repo into the projects folder, register it as a site, and install dependencies (composer for PHP).

Input parameters:

- `name` (string): optional project name
- `url` (string, required): git clone URL

### `set_site_domain` (~73 tokens)

Set a site's primary domain + aliases (re-provisions hosts/SSL). Pass an empty domain to revert to the default .test host.

Input parameters:

- `aliases` (array): optional aliases
- `domain` (string): primary hostname, e.g. shop.test or example.com
- `name` (string, required): site name

### `set_site_php_version` (~54 tokens)

Pin a site to an isolated PHP version (empty = use the default).

Input parameters:

- `name` (string, required): site name
- `version` (string): e.g. 8.3.30; empty for default

### `set_site_group` (~79 tokens)

File a site under a group title (groups are shown as collapsible sections on the Sites page). Pass an empty group to ungroup it. Metadata only — no vhost/hosts/SSL change.

Input parameters:

- `group` (string): group title, 1–40 chars; empty to ungroup
- `name` (string, required): site name

### `sleep_site` (~99 tokens)

Pause all of a site's background processes (queue workers, scheduler, Reverb, Octane, dev server, custom processes). Files, database and settings are kept; the site's URL shows a sleep page until woken. Works for any site, including one with no background processes (then only the sleep page changes). Refused for a disabled site or one with a custom vhost. Returns the site detail.

Input parameters:

- `name` (string, required): site name

### `wake_site` (~74 tokens)

Wake a sleeping site: restart its background processes. Pass minutes=60 to put it back to sleep after an hour without visits. Returns the site detail.

Input parameters:

- `minutes` (number): optional: 60 = go back to sleep after an hour without visits; omit to stay awake
- `name` (string, required): site name

### `set_site_framework` (~65 tokens)

Override a site's detected framework (empty = re-auto-detect).

Input parameters:

- `framework` (string): laravel|wordpress|nextjs|nuxtjs|vite|angular|node|generic|proxy; empty to auto-detect
- `name` (string, required): site name

### `set_serve_mode` (~62 tokens)

Switch a Node site between 'dev' (dev server/HMR) and 'prod' (build + serve production). Prod auto-builds first.

Input parameters:

- `mode` (string, required): 'dev' or 'prod'
- `name` (string, required): site name

### `set_all_serve_mode` (~38 tokens)

Switch ALL sites (and the global default) between dev and production.

Input parameters:

- `mode` (string, required): 'dev' or 'prod'

### `build_site` (~33 tokens)

Run a Node site's production build (npm run build); returns the build status.

Input parameters:

- `name` (string, required): site name

### `clear_site_cache` (~30 tokens)

Purge a production site's server-side cache and rebuild it.

Input parameters:

- `name` (string, required): site name

### `set_dev_server` (~93 tokens)

Configure a Node site's dev server (enabled, runtime 'node' | 'bun' | 'deno', port, script, mode, build/start scripts, output dir, prod port). runtime 'bun' runs `bun run --bun <script>`, 'deno' runs `deno task <script>`.

Input parameters:

- `name` (string, required): site name
- `patch` (object, required): dev-server patch

### `set_octane` (~103 tokens)

Laravel Octane for a Laravel site: enable/disable `php artisan octane:start` (EnvKit supervises it and proxies the site's host to it), port, server ('frankenphp' | 'swoole' | 'roadrunner'; null = OCTANE_SERVER from .env / auto), workers.

Input parameters:

- `name` (string, required): site name
- `patch` (object, required): octane patch: { enabled?, port?, server?, workers? }

### `restart_octane` (~25 tokens)

Restart a site's Octane server.

Input parameters:

- `name` (string, required): site name

### `list_site_scripts` (~48 tokens)

List a site's package.json scripts, the detected package manager (npm/pnpm/yarn/bun, or deno) and the exact install command.

Input parameters:

- `name` (string, required): site name

### `run_site_script` (~100 tokens)

Open a terminal window on the user's desktop at the site folder running one package.json script (e.g. build, test, lint) with the site's Node version and package manager. Omit script to install dependencies. The output stays in that terminal; nothing is returned but the command. For dev servers prefer restart_dev_server.

Input parameters:

- `name` (string, required): site name
- `script` (string): package.json script name; omit to run the install

### `restart_dev_server` (~26 tokens)

Restart a site's dev/prod server.

Input parameters:

- `name` (string, required): site name

### `git_overview` (~46 tokens)

Git snapshot for a site: branch, ahead/behind, changed files (staged/unstaged), and recent commits. Read-only.

Input parameters:

- `name` (string, required): site name

### `create_worktree_site` (~109 tokens)

Check out a branch of a site's repo as a git worktree (in <root>/.worktrees/<branch>, excluded from the parent repo via .git/info/exclude) and serve it as its own site on a subdomain of the parent: https://<branch>.<site>.test. Uses an existing local/remote branch or creates it from HEAD.

Input parameters:

- `branch` (string, required): branch name, e.g. feature/login
- `name` (string, required): parent site name

### `git_action` (~107 tokens)

Run a Git action on a site: pull|push|fetch|stageAll|stage|unstage|discardFile|commit|checkout|createBranch. payload: {file?, message?, all?, branch?}.

Input parameters:

- `action` (string, required): pull|push|fetch|stageAll|stage|unstage|discardFile|commit|checkout|createBranch
- `name` (string, required): site name
- `payload` (object): { file?, message?, all?, branch? }

### `db_connections` (~33 tokens)

Connection details (host/port/user) for each running DB engine, for copying into a project .env. Read-only.

### `databases_overview` (~46 tokens)

Per-engine database list + status and ordered adminUis across MySQL/MariaDB, PostgreSQL, MongoDB. The legacy adminUi field remains the primary UI. Read-only.

### `create_db` (~80 tokens)

Create a database on a specific engine. The engine must be running.

Input parameters:

- `engine` (string, required): 'mysql' | 'postgres' | 'mongodb'
- `instance` (string): mysql only: the version of an extra MySQL/MariaDB server (see databases_overview); omit for the main server
- `name` (string, required): database name

### `drop_db` (~82 tokens)

Drop a database on a specific engine (destructive — system schemas refused). Confirm with the user first.

Input parameters:

- `engine` (string, required): 'mysql' | 'postgres' | 'mongodb'
- `instance` (string): mysql only: the version of an extra MySQL/MariaDB server; omit for the main server
- `name` (string, required): database name

### `start_mysql_version` (~88 tokens)

Start one installed MySQL/MariaDB version. The active version is the main server; any other runs alongside it on its own port (reported as `mysql-<version>` in status; the port goes in the project .env as DB_PORT) and comes back when EnvKit restarts.

Input parameters:

- `version` (string, required): full version, e.g. 5.7.44

### `stop_mysql_version` (~54 tokens)

Stop one MySQL/MariaDB version. Stopping the active version stops the main server; stopping another keeps its port reserved.

Input parameters:

- `version` (string, required): full version, e.g. 5.7.44

### `install_service` (~56 tokens)

Download + install a bundled service version (nginx/php/mysql/postgres/redis/mongodb/node/…). Use list_services for ids/versions.

Input parameters:

- `id` (string, required): service id
- `version` (string, required): version to install

### `uninstall_service` (~64 tokens)

Uninstall a bundled service (removes its files; destructive). Pass version to remove only that version, leaving other installed versions intact.

Input parameters:

- `id` (string, required): service id
- `version` (string): version to remove (default: the whole service, every installed version)

### `cron_list` (~55 tokens)

List scheduled tasks (cron jobs). Read-only. A job with `site` belongs to that site; `siteState` other than "active" (disabled / asleep / missing = site removed) means its scheduled runs are skipped.

### `cron_save` (~127 tokens)

Create or update a scheduled task. job: {id?, name, schedule (5-field cron), command, cwd?, site?, enabled?}. `site` links the job to a site by name: it runs in the site folder when cwd is empty and is skipped while the site is disabled or asleep; null unlinks, omitting it keeps the current link. For Laravel `schedule:run` prefer set_site_scheduler (the site's built-in scheduler) over a cron job.

Input parameters:

- `job` (object, required): { id?, name, schedule, command, cwd?, site?, enabled? }

### `cron_run` (~24 tokens)

Run a scheduled task now.

Input parameters:

- `id` (string, required): cron job id

### `cron_remove` (~23 tokens)

Delete a scheduled task.

Input parameters:

- `id` (string, required): cron job id

### `set_web_server` (~72 tokens)

Switch the active web server ('nginx', 'apache', 'caddy' or 'frankenphp'; Apache is Windows-only; FrankenPHP serves PHP in-process with its embedded PHP).

Input parameters:

- `server` (string, required): 'nginx' | 'apache' | 'caddy' | 'frankenphp'

### `set_tld` (~50 tokens)

Change the local TLD (e.g. 'test' → 'localhost'); regenerates hosts/certs/vhosts.

Input parameters:

- `tld` (string, required): local TLD, e.g. 'test'

### `save_settings` (~33 tokens)

Patch app settings (general.*, services.*). patch mirrors the config shape.

Input parameters:

- `patch` (object, required): AppSettingsPatch

### `tinker_eval` (~45 tokens)

Run PHP/Laravel Tinker code in a site and return the output.

Input parameters:

- `code` (string, required): PHP code to evaluate
- `name` (string, required): site name

### `issue_letsencrypt` (~81 tokens)

Issue a Let's Encrypt certificate for a site's real (public) domain. opts: {challenge:'http-01'|'dns-01', email?, dnsProvider?, cloudflareToken?, staging?}.

Input parameters:

- `name` (string, required): site name
- `opts` (object, required): { challenge, email?, dnsProvider?, cloudflareToken?, staging? }

### `php_extensions` (~65 tokens)

List PHP extensions for a version (name, enabled, recommended, builtin). Read-only. On macOS `builtin` modules are compiled in (always on); only the ext/ add-ons toggle.

Input parameters:

- `version` (string): PHP version (optional; defaults to the default version)

### `set_php_extension` (~100 tokens)

Enable or disable a PHP extension (verifies it loads; rolls back a broken enable). Returns the updated list. On macOS only the ext/ add-ons (xdebug, apcu, ���) toggle; compiled-in modules cannot be disabled.

Input parameters:

- `enabled` (boolean, required): true to enable
- `name` (string, required): extension name, e.g. xdebug, intl, gd
- `version` (string): PHP version (optional)

### `set_frankenphp_extensions` (~104 tokens)

Set which loadable extensions FrankenPHP's embedded PHP enables (Windows `ext/php_*.dll`). Pass `names` as an array of bare names (e.g. ['curl','gd']), or null to restore the recommended defaults. Regenerates php.ini and restarts FrankenPHP when it is the active web server. No-op on macOS (static build, no ext/).

Input parameters:

- `names` (required): string[] of extension names, or null for defaults

### `refresh_php_build` (~95 tokens)

macOS: bring an older PHP install up to the current mirrored build in place (re-downloads the version, swaps bin/ + ext/, keeps php.ini) so the loadable add-ons (xdebug, apcu, imagick, memcached, mongodb, igbinary) become available. Use when php_extensions reports legacyBuild=true.

Input parameters:

- `version` (string): PHP version (optional; defaults to the default version)

### `install_php_extension` (~88 tokens)

Download + install a PECL extension build matching the PHP version (e.g. xdebug, redis, imagick), then enable it. Also accepts the encoded-PHP loaders "ioncube" (Windows) and "sourceguardian" (Windows x64, macOS arm64).

Input parameters:

- `name` (string, required): PECL extension name
- `version` (string): PHP version (optional)

### `dev_tools_status` (~33 tokens)

Install status of the managed developer tools: Composer, PIE, Git, GitHub CLI, Laravel installer. Read-only.

### `install_dev_tool` (~48 tokens)

Install a managed developer tool and put it on PATH.

Input parameters:

- `tool` (string, required): 'composer' | 'pie' | 'git' | 'gh' | 'laravel-installer'

### `share_site` (~317 tokens)

Share a site publicly and return the URL. provider "envkit" (default, EnvKit Share): https://<subdomain>.envkit.net, the same address every time; reuses the previous subdomain for that site when one is not given; optionally require a password (HTTP basic auth on the share URL only; the .test site stays open): the result then carries `auth` {user, password} to hand to the user; without password arguments the site keeps its previous protection setting. provider "cloudflare" (Cloudflare quick tunnel, no account): a random https://<words>.trycloudflare.com that changes every time the site is shared and ends when the tunnel stops; no subdomain and no password. Several sites can be shared at the same time; sharing a site again replaces its current share.

Input parameters:

- `name` (string, required): site name
- `password` (string): login password (optional; 8-72 printable characters; generated when omitted). Giving one implies require_password
- `provider` (string): share provider (optional; default "envkit")
- `require_password` (boolean): EnvKit Share only: protect the share URL with a username + password (optional; false removes an existing password)
- `subdomain` (string): EnvKit Share only: subdomain to serve it under (optional; 3-63 chars, letters/numbers/hyphens)
- `username` (string): login username (optional; default "guest"; letters, numbers, . _ -)

### `stop_share` (~43 tokens)

Stop a public share and release its tunnel. Stops every share when no site name is given.

Input parameters:

- `name` (string): site name (optional; omit to stop all)

### `share_status` (~98 tokens)

Every active public share (site, provider "envkit" or "cloudflare", URL, status, expiry — empty for cloudflare — and `auth` {user, password} when password-protected) as {shares:[...]}. A share that ended by itself (status "stopped" or "expired") stays listed until stop_share dismisses it; `error` says why (e.g. its site was disabled). Read-only.

### `backup_site` (~82 tokens)

Create a local zip backup of a site (project files + a logical dump of its detected MySQL/Postgres database). Returns the archive path. Skips node_modules, vendor, .git, storage/logs.

Input parameters:

- `dest_dir` (string): optional destination folder (default: <dataDir>/backups/<site>)
- `name` (string, required): site name

### `apply_project_config` (~348 tokens)

Apply a project's committed envkit.json (at the project root) to its EnvKit site: PHP version, required PHP extensions and php.ini values (schema 2 `php: {version, extensions, ini}`), domain/aliases, databases to create, Laravel scheduler/queue workers, custom processes. An optional envkit.local.json (per developer, not committed) is merged over it; items it decided carry origin:'local'. Node is only checked, never changed. The file only adds and updates — workers/processes/aliases it does not mention are kept. web_server is a GLOBAL switch that affects every site, so it is applied only when its key 'web_server' is named in items. PHP extension/ini items belong to a PHP version: when other sites use that version the item lists them in sharedWith and is applied only when its key (e.g. 'php_extension:intl', 'php_ini:memory_limit') is named in items — tell the user which sites it reaches first. With FrankenPHP as the web server, web requests run FrankenPHP's embedded PHP; the plan reports a version or extension it lacks as blocked. Call with dry_run:true first and show the plan to the user before applying. Returns {applied, skipped, errors} (dry run: the plan with items[] and their state same|change|blocked).

Input parameters:

- `dry_run` (boolean): only return the plan: what envkit.json would change, nothing is applied
- `items` (array): plan item keys to apply; default = every applicable change except web_server and PHP extension/ini changes shared with other sites
- `name` (string, required): site name

### `export_project_config` (~139 tokens)

Write a site's current EnvKit setup (PHP major.minor, Node from .nvmrc, custom domain, aliases, detected databases, scheduler, queue workers, processes) to envkit.json at the project root, so teammates can apply it. Never writes the web server; process env variables are written by name with an empty value (never the value). Queue worker extraArgs are written as configured, so review the file before committing it. Refuses to replace an existing envkit.json unless overwrite is true — ask the user first.

Input parameters:

- `name` (string, required): site name
- `overwrite` (boolean): replace an existing envkit.json

### `list_site_backups` (~40 tokens)

List local zip backups for a site (path, size, createdAt, databases included). Read-only.

Input parameters:

- `name` (string, required): site name

### `snapshot_database` (~136 tokens)

Take a snapshot (logical dump) of ONE MySQL/MariaDB or PostgreSQL database, saved under <dataDir>/snapshots/<engine>/<name>/. Starts the server if it is stopped. System databases (mysql, sys, information_schema, performance_schema, postgres) are refused. Returns the snapshot (id, path, size, createdAt).

Input parameters:

- `engine` (string): 'mysql' | 'postgres' (default mysql)
- `instance` (string): full version of an extra MySQL/MariaDB server running next to the main one (omit for the main server)
- `name` (string, required): database name

### `restore_database_snapshot` (~175 tokens)

Restore a database from one of its snapshots: drops and replaces the database on that server — confirm with the user first. By default a snapshot of the current data is taken first so the restore can be undone. A snapshot restores onto any server of the same engine (pass instance to target an extra MySQL/MariaDB version). PostgreSQL: other connections to that database are closed first. System databases are refused.

Input parameters:

- `engine` (string): 'mysql' | 'postgres' (default mysql)
- `id` (string, required): snapshot id from list_database_snapshots
- `instance` (string): full version of an extra MySQL/MariaDB server (omit for the main server)
- `name` (string, required): database name
- `safety_snapshot` (boolean): take a snapshot of the current data first (default true)

### `list_database_snapshots` (~68 tokens)

List the snapshots of a database, newest first (id, createdAt, size, source instance/port) as {snapshots:[...]}. Read-only.

Input parameters:

- `engine` (string): 'mysql' | 'postgres' (default mysql)
- `name` (string, required): database name

### `open_site_in_editor` (~39 tokens)

Open a site's project folder in the user's preferred code editor (falls back to the OS file manager).

Input parameters:

- `name` (string, required): site name

### `run_artisan` (~62 tokens)

Run a php artisan command in a Laravel site and return its output (e.g. args ["migrate","--force"]).

Input parameters:

- `args` (array, required): artisan arguments, e.g. ["migrate:status"]
- `name` (string, required): site name

### `open_app` (~113 tokens)

Show and focus the EnvKit app window (restores it from the tray, recreating it if closed). Optionally open a specific page. This server runs inside the app, so EnvKit is already running whenever this tool is reachable.

Input parameters:

- `page` (string): optional page to open: 'dashboard' | 'sites' | 'services' | 'databases' | 'logs' | 'dumps' | 'mailpit' | 'tools' | 'cron' | 'ai' | 'settings'

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/env-kit-envkit/envkit-mcp#diagnostics

## Score history

- 2026-11-06: 43
- 2026-11-05: 42
- 2026-11-04: 42
- 2026-11-03: 41
- 2026-11-02: 41
- 2026-11-01: 40
- 2026-10-31: 40
- 2026-10-30: 39
- 2026-10-29: 39
- 2026-10-28: 39
- 2026-10-27: 38
- 2026-10-26: 38
- 2026-10-25: 37
- 2026-10-24: 37
- 2026-10-23: 36
- 2026-10-22: 36
- 2026-10-21: 33
- 2026-10-20: 33
- 2026-10-19: 33
- 2026-10-18: 33
- 2026-10-17: 33

## Common questions

### What is the EnvKit MCP server?

EnvKit is an MCP server listed in the public MCP registry as io.github.Env-Kit/envkit. Control the EnvKit local dev stack (PHP, nginx, MySQL, sites). Requires the EnvKit desktop app. This page covers its MCPB bundle (https://github.com/Env-Kit/envkit-releases/releases/download/v0.33.0-beta.44/envkit-mcp-0.33.0-beta.44.mcpb).

### Is the EnvKit MCP server safe to use?

EnvKit scores 43 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the EnvKit MCP server expose?

EnvKit exposes 110 tools: help, status, status_live, config, paths, and 105 more. Their descriptions and schemas cost roughly 7,656 tokens of context every time the server is loaded.

### What licence is the EnvKit MCP server under?

EnvKit declares the Proprietary licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.

### What did VerifyMCP test on the EnvKit MCP server?

VerifyMCP ran 12 checks on EnvKit, covering Source repository, Provenance, License, Maintenance and 8 more. 4 items could not be completed, a gap on our side rather than a finding about EnvKit: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to an MCPB bundle, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Repository: https://github.com/Env-Kit/envkit-releases
- Website: https://envkit.net/docs#ai-mcp
- Changelog RSS feed: https://verifymcp.io/servers/env-kit-envkit/envkit-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/env-kit-envkit/envkit-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/env-kit-envkit/envkit-mcp.json
- HTML version of this page: https://verifymcp.io/servers/env-kit-envkit/envkit-mcp
