@mkrlbs/mcp-adonisjs 1.0.2 → 1.1.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 +64 -98
- package/build/index.d.ts +0 -1
- package/build/index.js +298 -131
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +406 -191
package/build/index.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
3
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
4
|
import { z } from "zod";
|
|
6
5
|
import { execSync } from "child_process";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
import path from "path";
|
|
7
8
|
/**
|
|
8
9
|
* Blacklisted commands that are considered dangerous
|
|
9
10
|
*/
|
|
10
11
|
const BLACKLISTED_COMMANDS = [
|
|
11
|
-
"db:wipe",
|
|
12
12
|
"migration:fresh",
|
|
13
|
-
"migration:refresh",
|
|
14
|
-
"migration:reset",
|
|
15
13
|
];
|
|
16
14
|
/**
|
|
17
15
|
* Shell injection characters that are not allowed in command arguments
|
|
18
16
|
*/
|
|
19
|
-
const SHELL_INJECTION_PATTERN = /[
|
|
17
|
+
const SHELL_INJECTION_PATTERN = /[;&|`$<>\\]/;
|
|
20
18
|
/**
|
|
21
19
|
* Validates that command arguments don't contain shell injection characters
|
|
22
20
|
*/
|
|
@@ -33,22 +31,32 @@ function validateArguments(args) {
|
|
|
33
31
|
function isBlacklisted(command) {
|
|
34
32
|
return BLACKLISTED_COMMANDS.includes(command);
|
|
35
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Verify that we are in an AdonisJS project
|
|
36
|
+
*/
|
|
37
|
+
function verifyAdonisProject() {
|
|
38
|
+
const acePath = path.join(process.cwd(), "ace");
|
|
39
|
+
const aceJsPath = path.join(process.cwd(), "ace.js");
|
|
40
|
+
if (!fs.existsSync(acePath) && !fs.existsSync(aceJsPath)) {
|
|
41
|
+
throw new Error(`AdonisJS 'ace' entry point not found in current directory (${process.cwd()}).\n` +
|
|
42
|
+
`Please ensure the MCP server is running in the root of your AdonisJS project.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
36
45
|
/**
|
|
37
46
|
* Executes an Ace command safely
|
|
38
47
|
*/
|
|
39
48
|
function executeAceCommand(command, args = []) {
|
|
40
|
-
|
|
49
|
+
verifyAdonisProject();
|
|
41
50
|
if (isBlacklisted(command)) {
|
|
42
51
|
throw new Error(`Command "${command}" is blacklisted for security reasons. Blocked commands: ${BLACKLISTED_COMMANDS.join(", ")}`);
|
|
43
52
|
}
|
|
44
|
-
// Validate arguments
|
|
45
53
|
validateArguments(args);
|
|
46
|
-
// Build the command
|
|
47
54
|
const fullCommand = `node ace ${command} ${args.join(" ")}`.trim();
|
|
48
55
|
try {
|
|
49
56
|
const output = execSync(fullCommand, {
|
|
50
57
|
cwd: process.cwd(),
|
|
51
58
|
encoding: "utf-8",
|
|
59
|
+
timeout: 30_000,
|
|
52
60
|
stdio: ["pipe", "pipe", "pipe"],
|
|
53
61
|
});
|
|
54
62
|
return output;
|
|
@@ -57,147 +65,303 @@ function executeAceCommand(command, args = []) {
|
|
|
57
65
|
throw new Error(`Command execution failed: ${error.message}\nStderr: ${error.stderr || "N/A"}`);
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
|
-
|
|
61
|
-
* Schema definitions for tool arguments
|
|
62
|
-
*/
|
|
68
|
+
// ─── Schema Definitions ─────────────────────────────────────────────────────
|
|
63
69
|
const MakeControllerArgsSchema = z.object({
|
|
64
70
|
name: z.string().describe("Name of the controller to create"),
|
|
65
|
-
resource: z
|
|
66
|
-
.boolean()
|
|
67
|
-
.optional()
|
|
68
|
-
.default(false)
|
|
69
|
-
.describe("Whether to create a resource controller"),
|
|
71
|
+
resource: z.boolean().optional().default(false).describe("Whether to create a resource controller"),
|
|
70
72
|
});
|
|
71
73
|
const MakeServiceArgsSchema = z.object({
|
|
72
74
|
name: z.string().describe("Name of the service to create"),
|
|
73
75
|
});
|
|
76
|
+
const MakeMigrationArgsSchema = z.object({
|
|
77
|
+
name: z.string().describe("Name of the migration (e.g., 'create_projects_table')"),
|
|
78
|
+
withModel: z.boolean().optional().default(false).describe("Also create the corresponding model (-m flag)"),
|
|
79
|
+
});
|
|
80
|
+
const MakeModelArgsSchema = z.object({
|
|
81
|
+
name: z.string().describe("Name of the model to create (e.g., 'Project')"),
|
|
82
|
+
});
|
|
83
|
+
const MakeValidatorArgsSchema = z.object({
|
|
84
|
+
name: z.string().describe("Name of the validator to create (e.g., 'project')"),
|
|
85
|
+
});
|
|
86
|
+
const MakeSeederArgsSchema = z.object({
|
|
87
|
+
name: z.string().describe("Name of the seeder to create (e.g., 'project')"),
|
|
88
|
+
});
|
|
89
|
+
const MakeExceptionArgsSchema = z.object({
|
|
90
|
+
name: z.string().describe("Name of the exception to create (e.g., 'UnauthorizedException')"),
|
|
91
|
+
});
|
|
92
|
+
const MakeMiddlewareArgsSchema = z.object({
|
|
93
|
+
name: z.string().describe("Name of the middleware to create (e.g., 'auth')"),
|
|
94
|
+
});
|
|
95
|
+
const MakeTestArgsSchema = z.object({
|
|
96
|
+
name: z.string().describe("Name of the test file to create (e.g., 'users/list')"),
|
|
97
|
+
suite: z.enum(["unit", "functional", "browser"]).optional().describe("Test suite to create the test in"),
|
|
98
|
+
});
|
|
99
|
+
const MakeFactoryArgsSchema = z.object({
|
|
100
|
+
name: z.string().describe("Name of the factory to create (e.g., 'User')"),
|
|
101
|
+
});
|
|
102
|
+
const MakePolicyArgsSchema = z.object({
|
|
103
|
+
name: z.string().describe("Name of the policy to create (e.g., 'project')"),
|
|
104
|
+
});
|
|
105
|
+
const MakeEventArgsSchema = z.object({
|
|
106
|
+
name: z.string().describe("Name of the event to create (e.g., 'UserRegistered')"),
|
|
107
|
+
});
|
|
108
|
+
const MakeListenerArgsSchema = z.object({
|
|
109
|
+
name: z.string().describe("Name of the listener to create (e.g., 'SendWelcomeEmail')"),
|
|
110
|
+
});
|
|
111
|
+
const MakeMailerArgsSchema = z.object({
|
|
112
|
+
name: z.string().describe("Name of the mailer to create (e.g., 'VerificationMailer')"),
|
|
113
|
+
});
|
|
114
|
+
const MakeCommandArgsSchema = z.object({
|
|
115
|
+
name: z.string().describe("Name of the command to create (e.g., 'SyncUsers')"),
|
|
116
|
+
});
|
|
117
|
+
const MigrationRunArgsSchema = z.object({
|
|
118
|
+
force: z.boolean().optional().default(false).describe("Force run in production"),
|
|
119
|
+
});
|
|
120
|
+
const MigrationRollbackArgsSchema = z.object({
|
|
121
|
+
batch: z.number().optional().describe("Batch number to rollback to (default: last batch)"),
|
|
122
|
+
});
|
|
123
|
+
const DbSeedArgsSchema = z.object({
|
|
124
|
+
files: z.string().optional().describe("Specific seeder file to run (e.g., 'database/seeders/user_seeder')"),
|
|
125
|
+
});
|
|
74
126
|
const RunAceCommandArgsSchema = z.object({
|
|
75
127
|
command: z.string().describe("The Ace command to run (e.g., 'make:model')"),
|
|
76
|
-
args: z
|
|
77
|
-
.array(z.string())
|
|
78
|
-
.optional()
|
|
79
|
-
.default([])
|
|
80
|
-
.describe("Arguments to pass to the command"),
|
|
128
|
+
args: z.array(z.string()).optional().default([]).describe("Arguments to pass to the command"),
|
|
81
129
|
});
|
|
82
|
-
|
|
83
|
-
* Initialize the MCP server
|
|
84
|
-
*/
|
|
85
|
-
const server = new Server({
|
|
86
|
-
name: "adonisjs-mcp-server",
|
|
87
|
-
version: "0.1.0",
|
|
88
|
-
}, {
|
|
89
|
-
capabilities: {
|
|
90
|
-
tools: {},
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
/**
|
|
94
|
-
* Handler for listing available tools
|
|
95
|
-
*/
|
|
96
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
130
|
+
function simpleNameTool(name, description, paramDesc) {
|
|
97
131
|
return {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
properties: {
|
|
105
|
-
name: {
|
|
106
|
-
type: "string",
|
|
107
|
-
description: "Name of the controller to create",
|
|
108
|
-
},
|
|
109
|
-
resource: {
|
|
110
|
-
type: "boolean",
|
|
111
|
-
description: "Whether to create a resource controller",
|
|
112
|
-
default: false,
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
required: ["name"],
|
|
116
|
-
},
|
|
132
|
+
name,
|
|
133
|
+
description,
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: "object",
|
|
136
|
+
properties: {
|
|
137
|
+
name: { type: "string", description: paramDesc },
|
|
117
138
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
},
|
|
139
|
+
required: ["name"],
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const TOOLS = [
|
|
144
|
+
{
|
|
145
|
+
name: "make_controller",
|
|
146
|
+
description: "Creates an AdonisJS controller using 'node ace make:controller'",
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: "object",
|
|
149
|
+
properties: {
|
|
150
|
+
name: { type: "string", description: "Name of the controller to create" },
|
|
151
|
+
resource: { type: "boolean", description: "Whether to create a resource controller", default: false },
|
|
131
152
|
},
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
type: "array",
|
|
145
|
-
items: {
|
|
146
|
-
type: "string",
|
|
147
|
-
},
|
|
148
|
-
description: "Arguments to pass to the command",
|
|
149
|
-
default: [],
|
|
150
|
-
},
|
|
151
|
-
},
|
|
152
|
-
required: ["command"],
|
|
153
|
-
},
|
|
153
|
+
required: ["name"],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
simpleNameTool("make_service", "Creates an AdonisJS service using 'node ace make:service'", "Name of the service"),
|
|
157
|
+
{
|
|
158
|
+
name: "make_migration",
|
|
159
|
+
description: "Creates an AdonisJS migration using 'node ace make:migration'. Use withModel to also create the model (-m flag).",
|
|
160
|
+
inputSchema: {
|
|
161
|
+
type: "object",
|
|
162
|
+
properties: {
|
|
163
|
+
name: { type: "string", description: "Name of the migration (e.g., 'create_projects_table')" },
|
|
164
|
+
withModel: { type: "boolean", description: "Also create the corresponding model (-m flag)", default: false },
|
|
154
165
|
},
|
|
155
|
-
|
|
156
|
-
|
|
166
|
+
required: ["name"],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
simpleNameTool("make_model", "Creates an AdonisJS Lucid model using 'node ace make:model'", "Name of the model (e.g., 'Project')"),
|
|
170
|
+
simpleNameTool("make_validator", "Creates an AdonisJS VineJS validator using 'node ace make:validator'", "Name of the validator (e.g., 'project')"),
|
|
171
|
+
simpleNameTool("make_seeder", "Creates an AdonisJS database seeder using 'node ace make:seeder'", "Name of the seeder (e.g., 'project')"),
|
|
172
|
+
simpleNameTool("make_exception", "Creates an AdonisJS custom exception using 'node ace make:exception'", "Name of the exception (e.g., 'UnauthorizedException')"),
|
|
173
|
+
simpleNameTool("make_middleware", "Creates an AdonisJS middleware using 'node ace make:middleware'", "Name of the middleware (e.g., 'auth')"),
|
|
174
|
+
{
|
|
175
|
+
name: "make_test",
|
|
176
|
+
description: "Creates a Japa test file using 'node ace make:test'",
|
|
177
|
+
inputSchema: {
|
|
178
|
+
type: "object",
|
|
179
|
+
properties: {
|
|
180
|
+
name: { type: "string", description: "Name of the test (e.g., 'users/list')" },
|
|
181
|
+
suite: { type: "string", enum: ["unit", "functional", "browser"], description: "Test suite" },
|
|
182
|
+
},
|
|
183
|
+
required: ["name"],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
simpleNameTool("make_factory", "Creates a Lucid model factory using 'node ace make:factory'", "Name of the factory (e.g., 'User')"),
|
|
187
|
+
simpleNameTool("make_policy", "Creates a bouncer policy using 'node ace make:policy'", "Name of the policy (e.g., 'project')"),
|
|
188
|
+
simpleNameTool("make_event", "Creates an AdonisJS event using 'node ace make:event'", "Name of the event (e.g., 'UserRegistered')"),
|
|
189
|
+
simpleNameTool("make_listener", "Creates an AdonisJS event listener using 'node ace make:listener'", "Name of the listener (e.g., 'SendWelcomeEmail')"),
|
|
190
|
+
simpleNameTool("make_mailer", "Creates an AdonisJS mailer using 'node ace make:mailer'", "Name of the mailer (e.g., 'VerificationMailer')"),
|
|
191
|
+
simpleNameTool("make_command", "Creates an AdonisJS Ace command using 'node ace make:command'", "Name of the command (e.g., 'SyncUsers')"),
|
|
192
|
+
{
|
|
193
|
+
name: "migration_run",
|
|
194
|
+
description: "Runs pending database migrations using 'node ace migration:run'. Auto-generates database/schema.ts.",
|
|
195
|
+
inputSchema: {
|
|
196
|
+
type: "object",
|
|
197
|
+
properties: {
|
|
198
|
+
force: { type: "boolean", description: "Force run in production", default: false },
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: "migration_rollback",
|
|
204
|
+
description: "Rolls back the last batch of migrations using 'node ace migration:rollback'",
|
|
205
|
+
inputSchema: {
|
|
206
|
+
type: "object",
|
|
207
|
+
properties: {
|
|
208
|
+
batch: { type: "number", description: "Batch number to rollback to (default: last batch)" },
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: "migration_status",
|
|
214
|
+
description: "Shows the status of all migrations using 'node ace migration:status'",
|
|
215
|
+
inputSchema: { type: "object", properties: {} },
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: "db_seed",
|
|
219
|
+
description: "Runs database seeders using 'node ace db:seed'",
|
|
220
|
+
inputSchema: {
|
|
221
|
+
type: "object",
|
|
222
|
+
properties: {
|
|
223
|
+
files: { type: "string", description: "Specific seeder file to run (e.g., 'database/seeders/user_seeder')" },
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: "list_routes",
|
|
229
|
+
description: "Lists all registered routes using 'node ace list:routes'",
|
|
230
|
+
inputSchema: { type: "object", properties: {} },
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: "run_ace_command",
|
|
234
|
+
description: "Executes any AdonisJS Ace command with security checks. Use this for commands without a dedicated tool. Blacklisted: " + BLACKLISTED_COMMANDS.join(", "),
|
|
235
|
+
inputSchema: {
|
|
236
|
+
type: "object",
|
|
237
|
+
properties: {
|
|
238
|
+
command: { type: "string", description: "The Ace command to run" },
|
|
239
|
+
args: { type: "array", items: { type: "string" }, description: "Arguments to pass", default: [] },
|
|
240
|
+
},
|
|
241
|
+
required: ["command"],
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
];
|
|
245
|
+
// ─── Server Setup ────────────────────────────────────────────────────────────
|
|
246
|
+
const server = new Server({ name: "adonisjs-mcp-server", version: "1.1.0" }, { capabilities: { tools: {} } });
|
|
247
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
248
|
+
return { tools: TOOLS };
|
|
157
249
|
});
|
|
158
|
-
|
|
159
|
-
* Handler for executing tools
|
|
160
|
-
*/
|
|
250
|
+
// ─── Tool Handlers ───────────────────────────────────────────────────────────
|
|
161
251
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
162
252
|
try {
|
|
163
253
|
const { name, arguments: args } = request.params;
|
|
164
254
|
switch (name) {
|
|
165
255
|
case "make_controller": {
|
|
166
256
|
const parsed = MakeControllerArgsSchema.parse(args);
|
|
167
|
-
const
|
|
168
|
-
const output = executeAceCommand("make:controller",
|
|
169
|
-
return {
|
|
170
|
-
content: [
|
|
171
|
-
{
|
|
172
|
-
type: "text",
|
|
173
|
-
text: `Controller created successfully:\n${output}`,
|
|
174
|
-
},
|
|
175
|
-
],
|
|
176
|
-
};
|
|
257
|
+
const cmdArgs = parsed.resource ? [parsed.name, "--resource"] : [parsed.name];
|
|
258
|
+
const output = executeAceCommand("make:controller", cmdArgs);
|
|
259
|
+
return { content: [{ type: "text", text: `Controller created successfully:\n${output}` }] };
|
|
177
260
|
}
|
|
178
261
|
case "make_service": {
|
|
179
262
|
const parsed = MakeServiceArgsSchema.parse(args);
|
|
180
263
|
const output = executeAceCommand("make:service", [parsed.name]);
|
|
181
|
-
return {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
264
|
+
return { content: [{ type: "text", text: `Service created successfully:\n${output}` }] };
|
|
265
|
+
}
|
|
266
|
+
case "make_migration": {
|
|
267
|
+
const parsed = MakeMigrationArgsSchema.parse(args);
|
|
268
|
+
const cmdArgs = parsed.withModel ? [parsed.name, "-m"] : [parsed.name];
|
|
269
|
+
const output = executeAceCommand("make:migration", cmdArgs);
|
|
270
|
+
return { content: [{ type: "text", text: `Migration created successfully:\n${output}` }] };
|
|
271
|
+
}
|
|
272
|
+
case "make_model": {
|
|
273
|
+
const parsed = MakeModelArgsSchema.parse(args);
|
|
274
|
+
const output = executeAceCommand("make:model", [parsed.name]);
|
|
275
|
+
return { content: [{ type: "text", text: `Model created successfully:\n${output}` }] };
|
|
276
|
+
}
|
|
277
|
+
case "make_validator": {
|
|
278
|
+
const parsed = MakeValidatorArgsSchema.parse(args);
|
|
279
|
+
const output = executeAceCommand("make:validator", [parsed.name]);
|
|
280
|
+
return { content: [{ type: "text", text: `Validator created successfully:\n${output}` }] };
|
|
281
|
+
}
|
|
282
|
+
case "make_seeder": {
|
|
283
|
+
const parsed = MakeSeederArgsSchema.parse(args);
|
|
284
|
+
const output = executeAceCommand("make:seeder", [parsed.name]);
|
|
285
|
+
return { content: [{ type: "text", text: `Seeder created successfully:\n${output}` }] };
|
|
286
|
+
}
|
|
287
|
+
case "make_exception": {
|
|
288
|
+
const parsed = MakeExceptionArgsSchema.parse(args);
|
|
289
|
+
const output = executeAceCommand("make:exception", [parsed.name]);
|
|
290
|
+
return { content: [{ type: "text", text: `Exception created successfully:\n${output}` }] };
|
|
291
|
+
}
|
|
292
|
+
case "make_middleware": {
|
|
293
|
+
const parsed = MakeMiddlewareArgsSchema.parse(args);
|
|
294
|
+
const output = executeAceCommand("make:middleware", [parsed.name]);
|
|
295
|
+
return { content: [{ type: "text", text: `Middleware created successfully:\n${output}` }] };
|
|
296
|
+
}
|
|
297
|
+
case "make_test": {
|
|
298
|
+
const parsed = MakeTestArgsSchema.parse(args);
|
|
299
|
+
const cmdArgs = [parsed.name];
|
|
300
|
+
if (parsed.suite)
|
|
301
|
+
cmdArgs.push("--suite", parsed.suite);
|
|
302
|
+
const output = executeAceCommand("make:test", cmdArgs);
|
|
303
|
+
return { content: [{ type: "text", text: `Test created successfully:\n${output}` }] };
|
|
304
|
+
}
|
|
305
|
+
case "make_factory": {
|
|
306
|
+
const parsed = MakeFactoryArgsSchema.parse(args);
|
|
307
|
+
const output = executeAceCommand("make:factory", [parsed.name]);
|
|
308
|
+
return { content: [{ type: "text", text: `Factory created successfully:\n${output}` }] };
|
|
309
|
+
}
|
|
310
|
+
case "make_policy": {
|
|
311
|
+
const parsed = MakePolicyArgsSchema.parse(args);
|
|
312
|
+
const output = executeAceCommand("make:policy", [parsed.name]);
|
|
313
|
+
return { content: [{ type: "text", text: `Policy created successfully:\n${output}` }] };
|
|
314
|
+
}
|
|
315
|
+
case "make_event": {
|
|
316
|
+
const parsed = MakeEventArgsSchema.parse(args);
|
|
317
|
+
const output = executeAceCommand("make:event", [parsed.name]);
|
|
318
|
+
return { content: [{ type: "text", text: `Event created successfully:\n${output}` }] };
|
|
319
|
+
}
|
|
320
|
+
case "make_listener": {
|
|
321
|
+
const parsed = MakeListenerArgsSchema.parse(args);
|
|
322
|
+
const output = executeAceCommand("make:listener", [parsed.name]);
|
|
323
|
+
return { content: [{ type: "text", text: `Listener created successfully:\n${output}` }] };
|
|
324
|
+
}
|
|
325
|
+
case "make_mailer": {
|
|
326
|
+
const parsed = MakeMailerArgsSchema.parse(args);
|
|
327
|
+
const output = executeAceCommand("make:mailer", [parsed.name]);
|
|
328
|
+
return { content: [{ type: "text", text: `Mailer created successfully:\n${output}` }] };
|
|
329
|
+
}
|
|
330
|
+
case "make_command": {
|
|
331
|
+
const parsed = MakeCommandArgsSchema.parse(args);
|
|
332
|
+
const output = executeAceCommand("make:command", [parsed.name]);
|
|
333
|
+
return { content: [{ type: "text", text: `Command created successfully:\n${output}` }] };
|
|
334
|
+
}
|
|
335
|
+
case "migration_run": {
|
|
336
|
+
const parsed = MigrationRunArgsSchema.parse(args);
|
|
337
|
+
const cmdArgs = parsed.force ? ["--force"] : [];
|
|
338
|
+
const output = executeAceCommand("migration:run", cmdArgs);
|
|
339
|
+
return { content: [{ type: "text", text: `Migrations executed successfully:\n${output}` }] };
|
|
340
|
+
}
|
|
341
|
+
case "migration_rollback": {
|
|
342
|
+
const parsed = MigrationRollbackArgsSchema.parse(args);
|
|
343
|
+
const cmdArgs = parsed.batch ? ["--batch", String(parsed.batch)] : [];
|
|
344
|
+
const output = executeAceCommand("migration:rollback", cmdArgs);
|
|
345
|
+
return { content: [{ type: "text", text: `Rollback completed:\n${output}` }] };
|
|
346
|
+
}
|
|
347
|
+
case "migration_status": {
|
|
348
|
+
const output = executeAceCommand("migration:status");
|
|
349
|
+
return { content: [{ type: "text", text: `Migration status:\n${output}` }] };
|
|
350
|
+
}
|
|
351
|
+
case "db_seed": {
|
|
352
|
+
const parsed = DbSeedArgsSchema.parse(args);
|
|
353
|
+
const cmdArgs = parsed.files ? ["--files", parsed.files] : [];
|
|
354
|
+
const output = executeAceCommand("db:seed", cmdArgs);
|
|
355
|
+
return { content: [{ type: "text", text: `Seeding completed:\n${output}` }] };
|
|
356
|
+
}
|
|
357
|
+
case "list_routes": {
|
|
358
|
+
const output = executeAceCommand("list:routes");
|
|
359
|
+
return { content: [{ type: "text", text: `Routes:\n${output}` }] };
|
|
189
360
|
}
|
|
190
361
|
case "run_ace_command": {
|
|
191
362
|
const parsed = RunAceCommandArgsSchema.parse(args);
|
|
192
363
|
const output = executeAceCommand(parsed.command, parsed.args);
|
|
193
|
-
return {
|
|
194
|
-
content: [
|
|
195
|
-
{
|
|
196
|
-
type: "text",
|
|
197
|
-
text: `Command executed successfully:\n${output}`,
|
|
198
|
-
},
|
|
199
|
-
],
|
|
200
|
-
};
|
|
364
|
+
return { content: [{ type: "text", text: `Command executed successfully:\n${output}` }] };
|
|
201
365
|
}
|
|
202
366
|
default:
|
|
203
367
|
throw new Error(`Unknown tool: ${name}`);
|
|
@@ -205,24 +369,27 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
205
369
|
}
|
|
206
370
|
catch (error) {
|
|
207
371
|
return {
|
|
208
|
-
content: [
|
|
209
|
-
{
|
|
210
|
-
type: "text",
|
|
211
|
-
text: `Error: ${error.message}`,
|
|
212
|
-
},
|
|
213
|
-
],
|
|
372
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
214
373
|
isError: true,
|
|
215
374
|
};
|
|
216
375
|
}
|
|
217
376
|
});
|
|
218
|
-
|
|
219
|
-
* Start the server
|
|
220
|
-
*/
|
|
377
|
+
// ─── Start ───────────────────────────────────────────────────────────────────
|
|
221
378
|
async function main() {
|
|
379
|
+
const targetCwd = process.env.cwd || process.env.CWD;
|
|
380
|
+
if (targetCwd) {
|
|
381
|
+
try {
|
|
382
|
+
process.chdir(targetCwd);
|
|
383
|
+
console.error(`Changed working directory to: ${targetCwd}`);
|
|
384
|
+
}
|
|
385
|
+
catch (err) {
|
|
386
|
+
console.error(`Failed to change working directory to ${targetCwd}:`, err);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
222
389
|
const transport = new StdioServerTransport();
|
|
223
390
|
await server.connect(transport);
|
|
224
|
-
// Use stderr for logging since stdout is used for MCP protocol communication
|
|
225
391
|
console.error("AdonisJS MCP Server running on stdio");
|
|
392
|
+
console.error(`Current working directory: ${process.cwd()}`);
|
|
226
393
|
}
|
|
227
394
|
main().catch((error) => {
|
|
228
395
|
console.error("Fatal error:", error);
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|