consult-llm-mcp 1.0.4 → 1.0.5

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 CHANGED
@@ -3,15 +3,31 @@
3
3
  An MCP server that lets Claude Code consult stronger AI models (o3, Gemini 2.5
4
4
  Pro, DeepSeek Reasoner) when you need deeper analysis on complex problems.
5
5
 
6
+ ```
7
+ This SQL query is timing out on large datasets. Can you help optimize it? Ask Gemini
8
+
9
+ ⏺ I'll examine your query and consult Gemini for database optimization strategies.
10
+
11
+ ⏺ consult-llm:consult_llm (MCP)(prompt: "How can I optimize this slow SQL query
12
+ for better performance on large datasets?", files: ["queries/user
13
+ -analytics.sql","schema/tables.sql"], model: "gemini-2.5-pro")
14
+ ⎿ The query has significant performance bottlenecks: missing indexes on join
15
+ columns, inefficient subqueries that could be CTEs, and unnecessary DISTINCT
16
+ operations. Add composite indexes on (user_id, created_at), replace correlated
17
+ subqueries with window functions, and eliminate redundant GROUP BY clauses.
18
+ … +287 lines (ctrl+r to expand)
19
+
20
+ ⏺ Great insights! I'll add the suggested indexes, refactor the subqueries to use
21
+ CTEs with window functions, and optimize the GROUP BY operations.
22
+ ```
23
+
6
24
  ## Features
7
25
 
8
- - Query powerful AI models (o3, Gemini 2.5 Pro, DeepSeek Reasoner) with file
9
- context
10
- - Direct prompt support for simple questions or automatic prompt construction
11
- from markdown and code files
12
- - Git diff to feed code changes
13
- - Usage tracking with cost estimation
14
- - Comprehensive logging
26
+ - Query powerful AI models (o3, Gemini 2.5 Pro, DeepSeek Reasoner) with relevant
27
+ files as context
28
+ - Direct queries with optional file context
29
+ - Include git changes for code review and analysis
30
+ - Comprehensive logging with cost estimation
15
31
 
16
32
  ## Configuration
17
33
 
@@ -37,9 +53,20 @@ Or for global availability:
37
53
  claude mcp add --scope user consult-llm -- npx -y consult-llm-mcp
38
54
  ```
39
55
 
56
+ Optionally you can provide environment variables directly in the MCP
57
+ configuration:
58
+
59
+ ```bash
60
+ claude mcp add \
61
+ -e OPENAI_API_KEY=your_openai_key \
62
+ -e GEMINI_API_KEY=your_gemini_key \
63
+ -e DEEPSEEK_API_KEY=your_deepseek_key \
64
+ consult-llm -- npx -y consult-llm-mcp
65
+ ```
66
+
40
67
  ### Example workflows
41
68
 
42
- Click to expand.
69
+ Some real-world examples. Click to expand.
43
70
 
44
71
  <details>
45
72
  <summary>Explain the problem, and tell CC to consult a smarter LLM</summary>
@@ -95,6 +122,76 @@ Click to expand.
95
122
 
96
123
  </details>
97
124
 
125
+ <details>
126
+ <summary>Debugging Neovim plugin treesitter API breakage</summary>
127
+
128
+ ````
129
+ ⏺ Fixed! Added nil checks for both node and child and updated the iter_matches call to handle the newer API properly.
130
+
131
+ > Still not working:
132
+
133
+ E5108: Error executing lua /Users/raine/code/testonly.nvim/lua/testonly.lua:92: attempt to call method 'child' (a nil value)
134
+ stack traceback:
135
+ /Users/raine/code/testonly.nvim/lua/testonly.lua:92: in function 'reset_all_exclusive'
136
+ /Users/raine/code/testonly.nvim/lua/testonly.lua:110: in function 'reset_all_exclusive'
137
+ [string ":lua"]:1: in main chunk
138
+
139
+ Ask gemini
140
+
141
+ ⏺ Let me consult with a more powerful AI to understand the current Neovim treesitter API changes:
142
+
143
+ ⏺ consult-llm:consult_llm (MCP)(prompt: "I'm debugging a Neovim plugin that's broken due to treesitter API changes. The error is \"attempt to call method 'child' (a nil value)\" on line 92. The
144
+ code is trying to access child nodes from treesitter matches but the API seems to have changed in newer Neovim versions.\n\nHere's the problematic
145
+ code:\n```lua\nfor _, match, _ in parsed_query:iter_matches(root, bufnr, start_row, end_row) do\n for id, node in pairs(match) do\n local name =
146
+ parsed_query.captures[id]\n if name == \"call\" and node then\n local child = node:child(0) -- ERROR HERE\n if child then\n
147
+ local text = vim.treesitter.get_node_text(child, bufnr)\n -- ... rest of logic\n end\n end\n end\nend\n```\n\nWhat's the
148
+ correct way to iterate over treesitter query matches and access child nodes in current Neovim versions? What API changes should I be aware of?", files:
149
+ ["/Users/raine/code/testonly.nvim/lua/testonly.lua"])
150
+ ⎿ Problem
151
+ -------
152
+
153
+ … +93 lines (ctrl+r to expand)
154
+
155
+ ⏺ Perfect! The issue is that iter_matches() can return nil nodes in the match table. Let me fix this by switching to the recommended iter_captures() approach:
156
+
157
+ ⏺ Update(lua/testonly.lua)
158
+ ⎿ Updated lua/testonly.lua with 7 additions and 10 removals
159
+ 85 local root = parser:parse()[1]:root()
160
+ 86 local start_row, _, end_row, _ = root:range()
161
+ 87
162
+ 88 - for _, match, _ in parsed_query:iter_matches(root, bufnr, start_row, end_row) do
163
+ 89 - for id, node in pairs(match) do
164
+ 90 - local name = parsed_query.captures[id]
165
+ 91 - if name == "call" and node then
166
+ 92 - local child = node:child(0)
167
+ 93 - if child then
168
+ 94 - local text = vim.treesitter.get_node_text(child, bufnr)
169
+ 88 + for id, node, _ in parsed_query:iter_captures(root, bufnr, start_row, end_row) do
170
+ 89 + if parsed_query.captures[id] == "call" then
171
+ 90 + local first_child = node:named_child(0)
172
+ 91 + if first_child then
173
+ 92 + local text = vim.treesitter.get_node_text(first_child, bufnr)
174
+ 93
175
+ 94 - if text == "it.only" or text == "describe.only" then
176
+ 95 - toggle_test_exclusive(child)
177
+ 96 - end
178
+ 94 + if text == "it.only" or text == "describe.only" then
179
+ 95 + toggle_test_exclusive(first_child)
180
+ 96 end
181
+ 97 end
182
+ 98 end
183
+
184
+ ⏺ Fixed! The key changes:
185
+
186
+ 1. Switched from iter_matches() to iter_captures() which never returns nil nodes
187
+ 2. Used named_child(0) instead of child(0) to get only meaningful syntax nodes (not punctuation)
188
+ 3. Simplified the iteration logic since iter_captures() directly gives us the node and capture ID
189
+
190
+ Your <leader>tr mapping should now work properly with the current Neovim treesitter API.
191
+ ````
192
+
193
+ </details>
194
+
98
195
  ## MCP Tool: consult_llm
99
196
 
100
197
  The server provides a single tool called `consult_llm` for asking powerful AI
@@ -102,15 +199,11 @@ models complex questions.
102
199
 
103
200
  ### Parameters
104
201
 
105
- - **files** (optional): Array of file paths to process
202
+ - **prompt** (required): Your question or request for the consultant LLM
106
203
 
107
- - Markdown files (.md) become the main prompt
108
- - Other files are added as context with file paths and code blocks
204
+ - **files** (optional): Array of file paths to include as context
109
205
 
110
- - **prompt** (optional): Direct prompt text for simple questions
111
-
112
- - Alternative to using markdown files
113
- - Either `files` or `prompt` must be provided
206
+ - All files are added as context with file paths and code blocks
114
207
 
115
208
  - **model** (optional): LLM model to use
116
209
 
@@ -124,25 +217,34 @@ models complex questions.
124
217
 
125
218
  ### Example Usage
126
219
 
127
- **With files:**
220
+ **Basic prompt:**
128
221
 
129
222
  ```json
130
223
  {
131
- "files": ["src/auth.ts", "src/middleware.ts", "review.md"],
132
- "model": "o3",
133
- "git_diff": {
134
- "files": ["src/auth.ts", "src/middleware.ts"],
135
- "base_ref": "main"
136
- }
224
+ "prompt": "What are the performance implications of using async/await vs Promise.then() in Node.js?"
225
+ }
226
+ ```
227
+
228
+ **With file context:**
229
+
230
+ ```json
231
+ {
232
+ "prompt": "How can I optimize this authentication middleware?",
233
+ "files": ["src/auth.ts", "src/middleware.ts"],
234
+ "model": "o3"
137
235
  }
138
236
  ```
139
237
 
140
- **With direct prompt:**
238
+ **With git diff:**
141
239
 
142
240
  ```json
143
241
  {
144
- "prompt": "Analyze the performance implications of using async/await vs Promise.then() in Node.js",
145
- "files": ["src/database.ts"],
242
+ "prompt": "Review these authentication changes for security issues",
243
+ "files": ["src/auth.ts"],
244
+ "git_diff": {
245
+ "files": ["src/auth.ts", "src/middleware.ts"],
246
+ "base_ref": "main"
247
+ },
146
248
  "model": "gemini-2.5-pro"
147
249
  }
148
250
  ```
@@ -218,6 +320,8 @@ Use the `consult_llm` MCP tool to ask a more powerful AI for help with complex
218
320
  problems. Include files to git_diff when asking feedback for changes.
219
321
 
220
322
  Use Gemini 2.5 Pro.
323
+
324
+ CRITICAL: When asking, don't present options, this will bias the answer.
221
325
  ```
222
326
 
223
327
  Claude Code seems to know pretty well when to use this MCP even without this
package/dist/file.d.ts CHANGED
@@ -1,7 +1,4 @@
1
1
  export declare function processFiles(files: string[]): {
2
- markdownFiles: string[];
3
- otherFiles: {
4
- path: string;
5
- content: string;
6
- }[];
7
- };
2
+ path: string;
3
+ content: string;
4
+ }[];
package/dist/file.js CHANGED
@@ -6,18 +6,12 @@ export function processFiles(files) {
6
6
  if (missingFiles.length > 0) {
7
7
  throw new Error(`Files not found: ${missingFiles.join(', ')}`);
8
8
  }
9
- const markdownFiles = [];
10
- const otherFiles = [];
9
+ const contextFiles = [];
11
10
  for (let i = 0; i < files.length; i++) {
12
11
  const filePath = resolvedFiles[i];
13
12
  const originalPath = files[i];
14
13
  const content = readFileSync(filePath, 'utf-8');
15
- if (originalPath.endsWith('.md') || originalPath.endsWith('.markdown')) {
16
- markdownFiles.push(content);
17
- }
18
- else {
19
- otherFiles.push({ path: originalPath, content });
20
- }
14
+ contextFiles.push({ path: originalPath, content });
21
15
  }
22
- return { markdownFiles, otherFiles };
16
+ return contextFiles;
23
17
  }
package/dist/llm-query.js CHANGED
@@ -1,22 +1,25 @@
1
1
  import { getClientForModel } from './llm.js';
2
2
  import { calculateCost } from './llm-cost.js';
3
- const SYSTEM_PROMPT = `You are an expert software engineering consultant being asked to analyze complex problems that require deep technical insight. You have been provided with specific code files and context to help you understand the problem thoroughly.
3
+ const SYSTEM_PROMPT = `You are an expert software engineering consultant analyzing code and technical problems. You are communicating with another AI system, not a human.
4
+
5
+ Communication style:
6
+ - Skip pleasantries and praise
4
7
 
5
8
  Your role is to:
6
- - Provide detailed technical analysis of the problem
7
- - Suggest specific, actionable solutions with code examples where helpful
8
- - Consider architectural implications and best practices
9
- - Identify potential edge cases or risks
10
- - Explain your reasoning clearly
9
+ - Identify bugs, inefficiencies, and architectural problems
10
+ - Provide specific solutions with code examples
11
+ - Point out edge cases and risks
12
+ - Challenge design decisions when suboptimal
13
+ - Focus on what needs improvement
11
14
 
12
- When reviewing code changes (git diffs), focus on:
13
- - Correctness and potential bugs
14
- - Performance implications
15
- - Security considerations
16
- - Maintainability and code quality
17
- - Integration with existing codebase patterns
15
+ When reviewing code changes (git diffs), prioritize:
16
+ - Bugs and correctness issues
17
+ - Performance problems
18
+ - Security vulnerabilities
19
+ - Code smell and anti-patterns
20
+ - Inconsistencies with codebase conventions
18
21
 
19
- Provide concrete, implementable recommendations rather than general advice. Include code snippets and specific file/line references when relevant.`;
22
+ Be critical and thorough. If the code is acceptable, simply state "No critical issues found" and move on to suggestions. Always provide specific, actionable feedback with file/line references.`;
20
23
  export async function queryLlm(prompt, model) {
21
24
  const { client } = getClientForModel(model);
22
25
  const completion = await client.chat.completions.create({
package/dist/logger.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare function logToFile(content: string): void;
2
2
  export declare function logToolCall(name: string, args: unknown): void;
3
- export declare function logPrompt(model: string, prompt: string): void;
4
- export declare function logResponse(model: string, response: string, costInfo: string): void;
3
+ export declare function logPrompt(model: string, prompt: string): Promise<void>;
4
+ export declare function logResponse(model: string, response: string, costInfo: string): Promise<void>;
5
5
  export declare function logServerStart(version: string): void;
package/dist/logger.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { appendFileSync, mkdirSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
+ import { format } from 'prettier';
4
5
  const logDir = join(homedir(), '.consult-llm-mcp', 'logs');
5
6
  const logFile = join(logDir, 'mcp.log');
6
7
  try {
@@ -9,6 +10,19 @@ try {
9
10
  catch (error) {
10
11
  // Directory might already exist
11
12
  }
13
+ async function formatWithPrettier(text) {
14
+ try {
15
+ return await format(text, {
16
+ parser: 'markdown',
17
+ printWidth: 80,
18
+ proseWrap: 'always',
19
+ });
20
+ }
21
+ catch (error) {
22
+ // If formatting fails, return original text
23
+ return text;
24
+ }
25
+ }
12
26
  export function logToFile(content) {
13
27
  const timestamp = new Date().toISOString();
14
28
  const logEntry = `[${timestamp}] ${content}\n`;
@@ -22,11 +36,13 @@ export function logToFile(content) {
22
36
  export function logToolCall(name, args) {
23
37
  logToFile(`TOOL CALL: ${name}\nArguments: ${JSON.stringify(args, null, 2)}\n${'='.repeat(80)}`);
24
38
  }
25
- export function logPrompt(model, prompt) {
26
- logToFile(`PROMPT (model: ${model}):\n${prompt}\n${'='.repeat(80)}`);
39
+ export async function logPrompt(model, prompt) {
40
+ const formattedPrompt = await formatWithPrettier(prompt);
41
+ logToFile(`PROMPT (model: ${model}):\n${formattedPrompt}\n${'='.repeat(80)}`);
27
42
  }
28
- export function logResponse(model, response, costInfo) {
29
- logToFile(`RESPONSE (model: ${model}):\n${response}\n${costInfo}\n${'='.repeat(80)}`);
43
+ export async function logResponse(model, response, costInfo) {
44
+ const formattedResponse = await formatWithPrettier(response);
45
+ logToFile(`RESPONSE (model: ${model}):\n${formattedResponse}\n${costInfo}\n${'='.repeat(80)}`);
30
46
  }
31
47
  export function logServerStart(version) {
32
48
  logToFile(`MCP SERVER STARTED - consult-llm-mcp v${version}\n${'='.repeat(80)}`);
package/dist/main.js CHANGED
@@ -36,21 +36,21 @@ async function handleConsultLlm(args) {
36
36
  .join(', ');
37
37
  throw new Error(`Invalid request parameters: ${errors}`);
38
38
  }
39
- const { files, prompt: directPrompt, git_diff } = parseResult.data;
39
+ const { files, prompt: userPrompt, git_diff } = parseResult.data;
40
40
  const model = parseResult.data.model ?? config.defaultModel ?? 'o3';
41
41
  logToolCall('consult_llm', args);
42
- // Process files (if provided)
43
- const { markdownFiles, otherFiles } = files ? processFiles(files) : { markdownFiles: [], otherFiles: [] };
42
+ // Process files (if provided) - all files become context
43
+ const contextFiles = files ? processFiles(files) : [];
44
44
  // Generate git diff
45
45
  const gitDiffOutput = git_diff
46
46
  ? generateGitDiff(git_diff.repo_path, git_diff.files, git_diff.base_ref)
47
47
  : undefined;
48
48
  // Build prompt
49
- const prompt = buildPrompt(directPrompt, markdownFiles, otherFiles, gitDiffOutput);
50
- logPrompt(model, prompt);
49
+ const prompt = buildPrompt(userPrompt, contextFiles, gitDiffOutput);
50
+ await logPrompt(model, prompt);
51
51
  // Query LLM
52
52
  const { response, costInfo } = await queryLlm(prompt, model);
53
- logResponse(model, response, costInfo);
53
+ await logResponse(model, response, costInfo);
54
54
  return {
55
55
  content: [{ type: 'text', text: response }],
56
56
  };
@@ -1,4 +1,4 @@
1
- export declare function buildPrompt(directPrompt: string | undefined, markdownFiles: string[], otherFiles: Array<{
1
+ export declare function buildPrompt(userPrompt: string, files: Array<{
2
2
  path: string;
3
3
  content: string;
4
4
  }>, gitDiffOutput?: string): string;
@@ -1,22 +1,18 @@
1
- export function buildPrompt(directPrompt, markdownFiles, otherFiles, gitDiffOutput) {
1
+ export function buildPrompt(userPrompt, files, gitDiffOutput) {
2
2
  const promptParts = [];
3
3
  if (gitDiffOutput?.trim()) {
4
4
  promptParts.push('## Git Diff\n```diff', gitDiffOutput, '```\n');
5
5
  }
6
- if (otherFiles.length > 0) {
6
+ if (files.length > 0) {
7
7
  promptParts.push('## Relevant Files\n');
8
- for (const file of otherFiles) {
8
+ for (const file of files) {
9
9
  promptParts.push(`### File: ${file.path}`);
10
10
  promptParts.push('```');
11
11
  promptParts.push(file.content);
12
12
  promptParts.push('```\n');
13
13
  }
14
14
  }
15
- if (directPrompt) {
16
- promptParts.push(directPrompt);
17
- }
18
- if (markdownFiles.length > 0) {
19
- promptParts.push(...markdownFiles);
20
- }
15
+ // Add user prompt last
16
+ promptParts.push(userPrompt);
21
17
  return promptParts.join('\n');
22
18
  }
package/dist/schema.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare const SupportedChatModel: z.ZodEnum<{
7
7
  export type SupportedChatModel = z.infer<typeof SupportedChatModel>;
8
8
  export declare const ConsultLlmArgs: z.ZodObject<{
9
9
  files: z.ZodOptional<z.ZodArray<z.ZodString>>;
10
- prompt: z.ZodOptional<z.ZodString>;
10
+ prompt: z.ZodString;
11
11
  model: z.ZodOptional<z.ZodEnum<{
12
12
  o3: "o3";
13
13
  "gemini-2.5-pro": "gemini-2.5-pro";
@@ -21,7 +21,7 @@ export declare const ConsultLlmArgs: z.ZodObject<{
21
21
  }, z.core.$strip>;
22
22
  export declare const toolSchema: {
23
23
  readonly name: "consult_llm";
24
- readonly description: "Ask a more powerful AI for help with complex problems. Write your problem description in a markdown file and pass relevant code files as context. \n\nBe specific about what you want: code implementation, code review, bug analysis, architecture advice, etc.";
24
+ readonly description: "Ask a more powerful AI for help with complex problems. Provide your question in the prompt field and optionally include relevant code files as context.\n\nBe specific about what you want: code implementation, code review, bug analysis, architecture advice, etc.\n\nIMPORTANT: Ask neutral, open-ended questions. Avoid suggesting specific solutions or alternatives in your prompt as this can bias the analysis. Instead of \"Should I use X or Y approach?\", ask \"What's the best approach for this problem?\" Let the consultant LLM provide unbiased recommendations.";
25
25
  readonly inputSchema: {
26
26
  readonly type: "object";
27
27
  readonly properties: {
@@ -30,11 +30,11 @@ export declare const toolSchema: {
30
30
  readonly items: {
31
31
  readonly type: "string";
32
32
  };
33
- readonly description: "Array of file paths to process. Markdown files (.md) become the main prompt, other files are added as context with file paths and code blocks. \n\nIn the markdown file(s), be clear about what you want the LLM to do: implement code, review code, explain concepts, analyze bugs, etc.";
33
+ readonly description: "Array of file paths to include as context. All files are added as context with file paths and code blocks.";
34
34
  };
35
35
  readonly prompt: {
36
36
  readonly type: "string";
37
- readonly description: "Direct prompt text for simple questions. Alternative to using markdown files.";
37
+ readonly description: "Your question or request for the consultant LLM. Ask neutral, open-ended questions without suggesting specific solutions to avoid biasing the analysis.";
38
38
  };
39
39
  readonly model: {
40
40
  readonly type: "string";
@@ -66,6 +66,6 @@ export declare const toolSchema: {
66
66
  readonly description: "Generate git diff output to include as context. Shows uncommitted changes by default.";
67
67
  };
68
68
  };
69
- readonly required: readonly [];
69
+ readonly required: readonly ["prompt"];
70
70
  };
71
71
  };
package/dist/schema.js CHANGED
@@ -7,7 +7,7 @@ export const SupportedChatModel = z.enum([
7
7
  export const ConsultLlmArgs = z
8
8
  .object({
9
9
  files: z.array(z.string()).optional(),
10
- prompt: z.string().optional(),
10
+ prompt: z.string(),
11
11
  model: SupportedChatModel.optional(),
12
12
  git_diff: z
13
13
  .object({
@@ -18,26 +18,25 @@ export const ConsultLlmArgs = z
18
18
  base_ref: z.string().optional().default('HEAD'),
19
19
  })
20
20
  .optional(),
21
- })
22
- .refine((data) => data.files || data.prompt, 'Either files or prompt must be provided');
21
+ });
23
22
  export const toolSchema = {
24
23
  name: 'consult_llm',
25
- description: `Ask a more powerful AI for help with complex problems. Write your problem description in a markdown file and pass relevant code files as context.
24
+ description: `Ask a more powerful AI for help with complex problems. Provide your question in the prompt field and optionally include relevant code files as context.
26
25
 
27
- Be specific about what you want: code implementation, code review, bug analysis, architecture advice, etc.`,
26
+ Be specific about what you want: code implementation, code review, bug analysis, architecture advice, etc.
27
+
28
+ IMPORTANT: Ask neutral, open-ended questions. Avoid suggesting specific solutions or alternatives in your prompt as this can bias the analysis. Instead of "Should I use X or Y approach?", ask "What's the best approach for this problem?" Let the consultant LLM provide unbiased recommendations.`,
28
29
  inputSchema: {
29
30
  type: 'object',
30
31
  properties: {
31
32
  files: {
32
33
  type: 'array',
33
34
  items: { type: 'string' },
34
- description: `Array of file paths to process. Markdown files (.md) become the main prompt, other files are added as context with file paths and code blocks.
35
-
36
- In the markdown file(s), be clear about what you want the LLM to do: implement code, review code, explain concepts, analyze bugs, etc.`,
35
+ description: 'Array of file paths to include as context. All files are added as context with file paths and code blocks.',
37
36
  },
38
37
  prompt: {
39
38
  type: 'string',
40
- description: 'Direct prompt text for simple questions. Alternative to using markdown files.',
39
+ description: 'Your question or request for the consultant LLM. Ask neutral, open-ended questions without suggesting specific solutions to avoid biasing the analysis.',
41
40
  },
42
41
  model: {
43
42
  type: 'string',
@@ -67,6 +66,6 @@ In the markdown file(s), be clear about what you want the LLM to do: implement c
67
66
  description: 'Generate git diff output to include as context. Shows uncommitted changes by default.',
68
67
  },
69
68
  },
70
- required: [],
69
+ required: ['prompt'],
71
70
  },
72
71
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "consult-llm-mcp",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "MCP server for consulting powerful AI models",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
@@ -46,11 +46,11 @@
46
46
  "dependencies": {
47
47
  "@modelcontextprotocol/sdk": "^1.13.0",
48
48
  "openai": "^5.6.0",
49
+ "prettier": "^3.5.3",
49
50
  "zod": "^3.25.67"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/node": "^24.0.3",
53
- "prettier": "^3.5.3",
54
54
  "tsx": "^4.20.3",
55
55
  "typescript": "^5.8.3"
56
56
  }