@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.
Files changed (91) hide show
  1. package/README.md +152 -0
  2. package/dist/auth.d.ts +15 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +18 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/errors.d.ts +36 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/formatters.d.ts +187 -0
  9. package/dist/formatters.d.ts.map +1 -0
  10. package/dist/handlers/backups.d.ts +2 -0
  11. package/dist/handlers/backups.d.ts.map +1 -0
  12. package/dist/handlers/certificates.d.ts +2 -0
  13. package/dist/handlers/certificates.d.ts.map +1 -0
  14. package/dist/handlers/commands.d.ts +2 -0
  15. package/dist/handlers/commands.d.ts.map +1 -0
  16. package/dist/handlers/daemons.d.ts +2 -0
  17. package/dist/handlers/daemons.d.ts.map +1 -0
  18. package/dist/handlers/database-users.d.ts +2 -0
  19. package/dist/handlers/database-users.d.ts.map +1 -0
  20. package/dist/handlers/databases.d.ts +2 -0
  21. package/dist/handlers/databases.d.ts.map +1 -0
  22. package/dist/handlers/deployments.d.ts +9 -0
  23. package/dist/handlers/deployments.d.ts.map +1 -0
  24. package/dist/handlers/env.d.ts +2 -0
  25. package/dist/handlers/env.d.ts.map +1 -0
  26. package/dist/handlers/factory.d.ts +71 -0
  27. package/dist/handlers/factory.d.ts.map +1 -0
  28. package/dist/handlers/firewall-rules.d.ts +2 -0
  29. package/dist/handlers/firewall-rules.d.ts.map +1 -0
  30. package/dist/handlers/help.d.ts +16 -0
  31. package/dist/handlers/help.d.ts.map +1 -0
  32. package/dist/handlers/index.d.ts +20 -0
  33. package/dist/handlers/index.d.ts.map +1 -0
  34. package/dist/handlers/monitors.d.ts +2 -0
  35. package/dist/handlers/monitors.d.ts.map +1 -0
  36. package/dist/handlers/nginx-config.d.ts +2 -0
  37. package/dist/handlers/nginx-config.d.ts.map +1 -0
  38. package/dist/handlers/nginx-templates.d.ts +2 -0
  39. package/dist/handlers/nginx-templates.d.ts.map +1 -0
  40. package/dist/handlers/recipes.d.ts +2 -0
  41. package/dist/handlers/recipes.d.ts.map +1 -0
  42. package/dist/handlers/redirect-rules.d.ts +2 -0
  43. package/dist/handlers/redirect-rules.d.ts.map +1 -0
  44. package/dist/handlers/scheduled-jobs.d.ts +2 -0
  45. package/dist/handlers/scheduled-jobs.d.ts.map +1 -0
  46. package/dist/handlers/schema.d.ts +16 -0
  47. package/dist/handlers/schema.d.ts.map +1 -0
  48. package/dist/handlers/security-rules.d.ts +2 -0
  49. package/dist/handlers/security-rules.d.ts.map +1 -0
  50. package/dist/handlers/servers.d.ts +2 -0
  51. package/dist/handlers/servers.d.ts.map +1 -0
  52. package/dist/handlers/sites.d.ts +2 -0
  53. package/dist/handlers/sites.d.ts.map +1 -0
  54. package/dist/handlers/ssh-keys.d.ts +2 -0
  55. package/dist/handlers/ssh-keys.d.ts.map +1 -0
  56. package/dist/handlers/types.d.ts +38 -0
  57. package/dist/handlers/types.d.ts.map +1 -0
  58. package/dist/handlers/user.d.ts +2 -0
  59. package/dist/handlers/user.d.ts.map +1 -0
  60. package/dist/handlers/utils.d.ts +29 -0
  61. package/dist/handlers/utils.d.ts.map +1 -0
  62. package/dist/hints.d.ts +60 -0
  63. package/dist/hints.d.ts.map +1 -0
  64. package/dist/http-CfjqK_e4.js +277 -0
  65. package/dist/http-CfjqK_e4.js.map +1 -0
  66. package/dist/http.d.ts +55 -0
  67. package/dist/http.d.ts.map +1 -0
  68. package/dist/http.js +3 -0
  69. package/dist/index.d.ts +44 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +4 -0
  72. package/dist/instructions.d.ts +11 -0
  73. package/dist/instructions.d.ts.map +1 -0
  74. package/dist/server.d.ts +35 -0
  75. package/dist/server.d.ts.map +1 -0
  76. package/dist/server.js +76 -0
  77. package/dist/server.js.map +1 -0
  78. package/dist/sessions.d.ts +64 -0
  79. package/dist/sessions.d.ts.map +1 -0
  80. package/dist/src-BdwavqrN.js +189 -0
  81. package/dist/src-BdwavqrN.js.map +1 -0
  82. package/dist/stdio.d.ts +36 -0
  83. package/dist/stdio.d.ts.map +1 -0
  84. package/dist/tools.d.ts +47 -0
  85. package/dist/tools.d.ts.map +1 -0
  86. package/dist/version-DaD5zvGh.js +3470 -0
  87. package/dist/version-DaD5zvGh.js.map +1 -0
  88. package/dist/version.d.ts +2 -0
  89. package/dist/version.d.ts.map +1 -0
  90. package/package.json +53 -1
  91. package/skills/SKILL.md +219 -0
@@ -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