@launchframe/mcp 1.1.6 → 1.1.8

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 (2) hide show
  1. package/dist/tools/cli.js +28 -5
  2. package/package.json +1 -1
package/dist/tools/cli.js CHANGED
@@ -6,6 +6,11 @@ import { execSync } from 'child_process';
6
6
  * client does not support elicitation (fails safe — aborts rather than proceeds).
7
7
  */
8
8
  async function confirmDestructive(server, message) {
9
+ const capabilities = server.server.getClientCapabilities();
10
+ // If client doesn't support elicitation, proceed — the LLM already has user intent
11
+ if (!capabilities?.elicitation) {
12
+ return true;
13
+ }
9
14
  try {
10
15
  const result = await server.server.elicitInput({
11
16
  mode: 'form',
@@ -24,7 +29,7 @@ async function confirmDestructive(server, message) {
24
29
  return result.action === 'accept' && result.content?.confirmed === true;
25
30
  }
26
31
  catch {
27
- // Client does not support elicitation — fail safe
32
+ // Elicitation failed unexpectedly — fail safe
28
33
  return false;
29
34
  }
30
35
  }
@@ -132,10 +137,28 @@ export function registerCliTools(server) {
132
137
  return { content: [{ type: 'text', text: error.message }] };
133
138
  }
134
139
  });
135
- server.tool('cli_database_query', 'Execute a SQL query against the local (or remote) database and return results. Use for SELECT queries, schema inspection, or data checks. When remote=true, will prompt for confirmation before touching production. Call database_schema first if you need to know what tables/columns exist.', {
140
+ server.tool('cli_database_query', [
141
+ 'Execute a SQL query and return the results as text.',
142
+ '',
143
+ 'Workflow:',
144
+ '1. Call database_schema first to learn table/column names.',
145
+ '2. Call this tool with a complete, valid SQL statement.',
146
+ '3. Read the returned text — it is raw psql output (column headers + rows).',
147
+ '',
148
+ 'Local (default): runs against the Docker Compose database on the developer machine.',
149
+ ' → Requires `launchframe docker:up` to be running.',
150
+ '',
151
+ 'Remote (remote=true): SSHs into the VPS and runs against the production database.',
152
+ ' → Will ask the user for confirmation before executing.',
153
+ ' → Only use when the user explicitly asks about production/live data.',
154
+ '',
155
+ 'Supported statements: SELECT, INSERT, UPDATE, DELETE, EXPLAIN, etc.',
156
+ 'Always end the SQL with a semicolon.',
157
+ 'Quote identifiers that are reserved words (e.g. "user", "order").',
158
+ ].join('\n'), {
136
159
  projectPath: z.string().describe('Absolute path to the LaunchFrame project root'),
137
- sql: z.string().describe('SQL to execute (e.g., "SELECT * FROM users LIMIT 10;")'),
138
- remote: z.boolean().optional().describe('If true, query the production database via SSH instead of local. Requires confirmation.'),
160
+ sql: z.string().describe('Complete SQL statement to execute, ending with a semicolon. Example: SELECT id, email FROM "user" LIMIT 10;'),
161
+ remote: z.boolean().optional().describe('Set to true to query the PRODUCTION database via SSH. Omit or set false for the local database.'),
139
162
  }, async ({ projectPath, sql, remote }) => {
140
163
  try {
141
164
  if (remote) {
@@ -144,7 +167,7 @@ export function registerCliTools(server) {
144
167
  return { content: [{ type: 'text', text: 'Aborted. Query not executed on production.' }] };
145
168
  }
146
169
  }
147
- const remoteFlag = remote ? ' --remote' : '';
170
+ const remoteFlag = remote ? ' --remote --skip-permission' : '';
148
171
  const output = execSync(`launchframe database:console${remoteFlag} --query ${JSON.stringify(sql)}`, { cwd: projectPath, encoding: 'utf8' });
149
172
  return { content: [{ type: 'text', text: output || '(no output)' }] };
150
173
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchframe/mcp",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "LaunchFrame MCP Server — knowledge tools for AI agents building LaunchFrame projects",
5
5
  "bin": {
6
6
  "launchframe-mcp": "dist/index.js"