@studiometa/forge-mcp 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -0
- package/dist/auth.d.ts +15 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +18 -0
- package/dist/auth.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/formatters.d.ts +187 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/handlers/backups.d.ts +2 -0
- package/dist/handlers/backups.d.ts.map +1 -0
- package/dist/handlers/certificates.d.ts +2 -0
- package/dist/handlers/certificates.d.ts.map +1 -0
- package/dist/handlers/commands.d.ts +2 -0
- package/dist/handlers/commands.d.ts.map +1 -0
- package/dist/handlers/daemons.d.ts +2 -0
- package/dist/handlers/daemons.d.ts.map +1 -0
- package/dist/handlers/database-users.d.ts +2 -0
- package/dist/handlers/database-users.d.ts.map +1 -0
- package/dist/handlers/databases.d.ts +2 -0
- package/dist/handlers/databases.d.ts.map +1 -0
- package/dist/handlers/deployments.d.ts +9 -0
- package/dist/handlers/deployments.d.ts.map +1 -0
- package/dist/handlers/env.d.ts +2 -0
- package/dist/handlers/env.d.ts.map +1 -0
- package/dist/handlers/factory.d.ts +71 -0
- package/dist/handlers/factory.d.ts.map +1 -0
- package/dist/handlers/firewall-rules.d.ts +2 -0
- package/dist/handlers/firewall-rules.d.ts.map +1 -0
- package/dist/handlers/help.d.ts +16 -0
- package/dist/handlers/help.d.ts.map +1 -0
- package/dist/handlers/index.d.ts +20 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/monitors.d.ts +2 -0
- package/dist/handlers/monitors.d.ts.map +1 -0
- package/dist/handlers/nginx-config.d.ts +2 -0
- package/dist/handlers/nginx-config.d.ts.map +1 -0
- package/dist/handlers/nginx-templates.d.ts +2 -0
- package/dist/handlers/nginx-templates.d.ts.map +1 -0
- package/dist/handlers/recipes.d.ts +2 -0
- package/dist/handlers/recipes.d.ts.map +1 -0
- package/dist/handlers/redirect-rules.d.ts +2 -0
- package/dist/handlers/redirect-rules.d.ts.map +1 -0
- package/dist/handlers/scheduled-jobs.d.ts +2 -0
- package/dist/handlers/scheduled-jobs.d.ts.map +1 -0
- package/dist/handlers/schema.d.ts +16 -0
- package/dist/handlers/schema.d.ts.map +1 -0
- package/dist/handlers/security-rules.d.ts +2 -0
- package/dist/handlers/security-rules.d.ts.map +1 -0
- package/dist/handlers/servers.d.ts +2 -0
- package/dist/handlers/servers.d.ts.map +1 -0
- package/dist/handlers/sites.d.ts +2 -0
- package/dist/handlers/sites.d.ts.map +1 -0
- package/dist/handlers/ssh-keys.d.ts +2 -0
- package/dist/handlers/ssh-keys.d.ts.map +1 -0
- package/dist/handlers/types.d.ts +38 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/user.d.ts +2 -0
- package/dist/handlers/user.d.ts.map +1 -0
- package/dist/handlers/utils.d.ts +29 -0
- package/dist/handlers/utils.d.ts.map +1 -0
- package/dist/hints.d.ts +60 -0
- package/dist/hints.d.ts.map +1 -0
- package/dist/http-CfjqK_e4.js +277 -0
- package/dist/http-CfjqK_e4.js.map +1 -0
- package/dist/http.d.ts +55 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +3 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/instructions.d.ts +11 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +76 -0
- package/dist/server.js.map +1 -0
- package/dist/sessions.d.ts +64 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/src-BdwavqrN.js +189 -0
- package/dist/src-BdwavqrN.js.map +1 -0
- package/dist/stdio.d.ts +36 -0
- package/dist/stdio.d.ts.map +1 -0
- package/dist/tools.d.ts +47 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/version-DaD5zvGh.js +3470 -0
- package/dist/version-DaD5zvGh.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +53 -1
- package/skills/SKILL.md +219 -0
package/skills/SKILL.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forge-mcp
|
|
3
|
+
description: MCP server for Laravel Forge — manage servers, sites, deployments, SSL, databases, and more via AI agents
|
|
4
|
+
keywords:
|
|
5
|
+
- forge
|
|
6
|
+
- laravel
|
|
7
|
+
- servers
|
|
8
|
+
- deployment
|
|
9
|
+
- devops
|
|
10
|
+
- mcp
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Laravel Forge MCP Server
|
|
14
|
+
|
|
15
|
+
MCP (Model Context Protocol) server for [Laravel Forge](https://forge.laravel.com). Provides two tools: `forge` for read operations and `forge_write` for write operations.
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
Before your first interaction with any resource, call `action="help"` with that resource to discover required fields and examples.
|
|
20
|
+
|
|
21
|
+
## Tools
|
|
22
|
+
|
|
23
|
+
### `forge` — Read Operations
|
|
24
|
+
|
|
25
|
+
Safe, read-only queries. Use for listing, getting details, help, and schema.
|
|
26
|
+
|
|
27
|
+
**Actions**: `list`, `get`, `help`, `schema`
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
forge(resource, action, [parameters...])
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### `forge_write` — Write Operations
|
|
34
|
+
|
|
35
|
+
Mutating operations that modify server state. Always requires confirmation.
|
|
36
|
+
|
|
37
|
+
**Actions**: `create`, `update`, `delete`, `deploy`, `reboot`, `restart`, `activate`, `run`
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
forge_write(resource, action, [parameters...])
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Resources & Actions
|
|
44
|
+
|
|
45
|
+
| Resource | Read Actions (`forge`) | Write Actions (`forge_write`) | Scope |
|
|
46
|
+
| ----------------- | ---------------------- | ------------------------------ | ------ |
|
|
47
|
+
| `servers` | `list`, `get` | `create`, `delete`, `reboot` | global |
|
|
48
|
+
| `sites` | `list`, `get` | `create`, `delete` | server |
|
|
49
|
+
| `deployments` | `list` | `deploy`, `update` | site |
|
|
50
|
+
| `env` | `get` | `update` | site |
|
|
51
|
+
| `nginx` | `get` | `update` | site |
|
|
52
|
+
| `certificates` | `list`, `get` | `create`, `delete`, `activate` | site |
|
|
53
|
+
| `databases` | `list`, `get` | `create`, `delete` | server |
|
|
54
|
+
| `database-users` | `list`, `get` | `create`, `delete` | server |
|
|
55
|
+
| `daemons` | `list`, `get` | `create`, `delete`, `restart` | server |
|
|
56
|
+
| `firewall-rules` | `list`, `get` | `create`, `delete` | server |
|
|
57
|
+
| `ssh-keys` | `list`, `get` | `create`, `delete` | server |
|
|
58
|
+
| `security-rules` | `list`, `get` | `create`, `delete` | site |
|
|
59
|
+
| `redirect-rules` | `list`, `get` | `create`, `delete` | site |
|
|
60
|
+
| `monitors` | `list`, `get` | `create`, `delete` | server |
|
|
61
|
+
| `nginx-templates` | `list`, `get` | `create`, `update`, `delete` | server |
|
|
62
|
+
| `recipes` | `list`, `get` | `create`, `delete`, `run` | global |
|
|
63
|
+
|
|
64
|
+
### Scope Guide
|
|
65
|
+
|
|
66
|
+
- **global**: No parent ID needed (e.g. `servers`, `recipes`)
|
|
67
|
+
- **server**: Requires `server_id` (e.g. `sites`, `databases`, `daemons`)
|
|
68
|
+
- **site**: Requires `server_id` + `site_id` (e.g. `deployments`, `env`, `certificates`)
|
|
69
|
+
|
|
70
|
+
### Getting Help
|
|
71
|
+
|
|
72
|
+
Use `action: "help"` to get detailed documentation for any resource:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{ "resource": "servers", "action": "help" }
|
|
76
|
+
{ "resource": "deployments", "action": "help" }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Use `action: "schema"` for a compact machine-readable spec:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{ "resource": "sites", "action": "schema" }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Common Parameters
|
|
86
|
+
|
|
87
|
+
| Parameter | Type | Description |
|
|
88
|
+
| ----------- | ------- | ------------------------------------------------------------- |
|
|
89
|
+
| `resource` | string | **Required**. Resource type (see table above) |
|
|
90
|
+
| `action` | string | **Required**. Action to perform |
|
|
91
|
+
| `id` | string | Resource ID (for `get`, `delete`, `activate`, `restart`) |
|
|
92
|
+
| `server_id` | string | Server ID (for server-scoped and site-scoped resources) |
|
|
93
|
+
| `site_id` | string | Site ID (for site-scoped resources) |
|
|
94
|
+
| `compact` | boolean | Compact output (default: true) |
|
|
95
|
+
| `content` | string | Content for env/nginx `update` and deployment script `update` |
|
|
96
|
+
|
|
97
|
+
## Common Workflows
|
|
98
|
+
|
|
99
|
+
### Deploy a Site
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
// 1. Find the server (forge tool — read)
|
|
103
|
+
{ "resource": "servers", "action": "list" }
|
|
104
|
+
|
|
105
|
+
// 2. Find the site (forge tool — read)
|
|
106
|
+
{ "resource": "sites", "action": "list", "server_id": "123" }
|
|
107
|
+
|
|
108
|
+
// 3. Deploy (forge_write tool — write, blocks until complete)
|
|
109
|
+
{ "resource": "deployments", "action": "deploy", "server_id": "123", "site_id": "456" }
|
|
110
|
+
// Returns: deployment status, log output, and elapsed time
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Check Server Status
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
// Get server details (forge)
|
|
117
|
+
{ "resource": "servers", "action": "get", "id": "123" }
|
|
118
|
+
|
|
119
|
+
// List sites on server (forge)
|
|
120
|
+
{ "resource": "sites", "action": "list", "server_id": "123" }
|
|
121
|
+
|
|
122
|
+
// List databases (forge)
|
|
123
|
+
{ "resource": "databases", "action": "list", "server_id": "123" }
|
|
124
|
+
|
|
125
|
+
// List background processes (forge)
|
|
126
|
+
{ "resource": "daemons", "action": "list", "server_id": "123" }
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Manage SSL Certificates
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
// List existing certs (forge)
|
|
133
|
+
{ "resource": "certificates", "action": "list", "server_id": "123", "site_id": "456" }
|
|
134
|
+
|
|
135
|
+
// Request a new Let's Encrypt cert (forge_write)
|
|
136
|
+
{ "resource": "certificates", "action": "create", "server_id": "123", "site_id": "456", "domain": "example.com", "type": "new" }
|
|
137
|
+
|
|
138
|
+
// Activate it (forge_write)
|
|
139
|
+
{ "resource": "certificates", "action": "activate", "server_id": "123", "site_id": "456", "id": "789" }
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Update Environment Variables
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
// Get current env (forge)
|
|
146
|
+
{ "resource": "env", "action": "get", "server_id": "123", "site_id": "456" }
|
|
147
|
+
|
|
148
|
+
// Update env (forge_write)
|
|
149
|
+
{ "resource": "env", "action": "update", "server_id": "123", "site_id": "456", "content": "APP_ENV=production\nAPP_DEBUG=false" }
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Create a Queue Worker
|
|
153
|
+
|
|
154
|
+
```json
|
|
155
|
+
// forge_write
|
|
156
|
+
{
|
|
157
|
+
"resource": "daemons",
|
|
158
|
+
"action": "create",
|
|
159
|
+
"server_id": "123",
|
|
160
|
+
"command": "php artisan queue:work --tries=3",
|
|
161
|
+
"user": "forge"
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Run a Recipe on Multiple Servers
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
// Create recipe (forge_write)
|
|
169
|
+
{ "resource": "recipes", "action": "create", "name": "Clear caches", "script": "php artisan cache:clear" }
|
|
170
|
+
|
|
171
|
+
// Run it on servers (forge_write)
|
|
172
|
+
{ "resource": "recipes", "action": "run", "id": "456", "servers": [1, 2, 3] }
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Authentication
|
|
176
|
+
|
|
177
|
+
### Stdio Mode (Claude Desktop)
|
|
178
|
+
|
|
179
|
+
Set `FORGE_API_TOKEN` environment variable, or use the `forge_configure` tool:
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
// Configure interactively
|
|
183
|
+
{ tool: "forge_configure", arguments: { api_token: "your-token" } }
|
|
184
|
+
|
|
185
|
+
// Check current config
|
|
186
|
+
{ tool: "forge_get_config", arguments: {} }
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Getting Your API Token
|
|
190
|
+
|
|
191
|
+
1. Log into [Laravel Forge](https://forge.laravel.com)
|
|
192
|
+
2. Go to **Account → API Tokens**
|
|
193
|
+
3. Create a new token
|
|
194
|
+
4. Copy the token (shown only once)
|
|
195
|
+
|
|
196
|
+
## Read-Only Mode
|
|
197
|
+
|
|
198
|
+
The server can run in read-only mode where the `forge_write` tool is not available at all:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
forge-mcp --read-only
|
|
202
|
+
# or
|
|
203
|
+
FORGE_READ_ONLY=true forge-mcp
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
When enabled, only `forge` (read operations), `forge_configure`, and `forge_get_config` are registered.
|
|
207
|
+
|
|
208
|
+
## Audit Logging
|
|
209
|
+
|
|
210
|
+
All `forge_write` operations are automatically logged to `~/.config/forge-tools/audit.log` (configurable via `FORGE_AUDIT_LOG` env var). Sensitive fields (tokens, passwords) are redacted. Logging never interrupts operations.
|
|
211
|
+
|
|
212
|
+
## Tips for Efficient Usage
|
|
213
|
+
|
|
214
|
+
1. **Use help first**: Call `action="help"` for any resource before using it
|
|
215
|
+
2. **Use schema for specs**: Call `action="schema"` for compact field metadata
|
|
216
|
+
3. **Start with list**: Use `action="list"` to discover existing resources
|
|
217
|
+
4. **Chain operations**: List servers → list sites → deploy (follow the hierarchy)
|
|
218
|
+
5. **Scope matters**: Server-scoped resources need `server_id`, site-scoped need both `server_id` and `site_id`
|
|
219
|
+
6. **Read vs Write**: Use `forge` for queries, `forge_write` for mutations — MCP clients enforce this split
|