
Consult LLM
STDIOMCP server for consulting stronger AI models for complex problem analysis.
MCP server for consulting stronger AI models for complex problem analysis.
An MCP server that lets Claude Code consult stronger AI models (o3, Gemini 2.5 Pro, DeepSeek Reasoner) when you need deeper analysis on complex problems.
OPENAI_API_KEY
- Your OpenAI API key (required for o3)GEMINI_API_KEY
- Your Google AI API key (required for Gemini models)DEEPSEEK_API_KEY
- Your DeepSeek API key (required for DeepSeek models)CONSULT_LLM_DEFAULT_MODEL
- Override the default model (optional)
o3
(default), gemini-2.5-pro
, deepseek-reasoner
Add the MCP server to Claude Code:
claude mcp add consult-llm -- npx -y consult-llm-mcp
Or for global availability:
claude mcp add --scope user consult-llm -- npx -y consult-llm-mcp
Optionally you can provide environment variables directly in the MCP configuration:
claude mcp add \ -e OPENAI_API_KEY=your_openai_key \ -e GEMINI_API_KEY=your_gemini_key \ -e DEEPSEEK_API_KEY=your_deepseek_key \ consult-llm -- npx -y consult-llm-mcp
Click to expand.
<Some long explanation of the issue here>
Consult LLM for assistance, use gemini
⏺ I see the issue! The problem is that the frontend is trying to use the hint
for "isn't" but the server generated a hint for "isn't it" (the full phrase).
This is a mismatch between how the frontend segments text and how the server
generates hints.
Let me consult the LLM to get assistance on this segmentation mismatch issue.
⏺ Write(hint-segmentation-issue.md) ⎿ Wrote 53 lines to
hint-segmentation-issue.md # Hint Segmentation Mismatch Issue ## Problem
Description There's a mismatch between how the frontend segments text for
clickable words and how the backend generates hints. This causes hint unlocking
to fail when the segments don't match exactly. ## Example Case **Original
Text**: "Hello! Nice weather, isn't it?" … +43 lines (ctrl+r to expand)
⏺ consult-llm:consult_llm (MCP)(model: "gemini-2.5-pro", files: ["/project/hint
-segmentation-issue.md","/project/web/src/compo
nents/HintsText.tsx","/project/web/src/utils/hi
nts.ts","/project/server/src/routes/public/hint
s.ts","/project/server/src/llm/hints.ts"]) ⎿ An excellent analysis of the
problem. The root cause has been correctly identified: a race condition within
the `handleConfirmGenerateHints` function in `HintsText.tsx`. The component
state updates in the background after `await generateHints()`, but the function
continues executing with a stale `activeSegment` variable, causing it to request
a hint for a smaller text segment ( e.g., "isn't") instead of the full,
newly-available hint phrase (e.g., "isn't it"). … +607 lines (ctrl+r to expand)
⏺ Perfect! The LLM identified the core issue - there's a race condition in
handleConfirmGenerateHints where the function uses stale state after async
operations. The solution is to re-target the hint key after generation to find
the correct matching hint.
Let me implement this solution:
⏺ Update Todos ⎿ ☐ Fix hint segmentation mismatch by implementing smarter hint
key targeting in handleConfirmGenerateHints
The server provides a single tool called consult_llm
for asking powerful AI
models complex questions.
files (optional): Array of file paths to process
prompt (optional): Direct prompt text for simple questions
files
or prompt
must be providedmodel (optional): LLM model to use
o3
(default), gemini-2.5-pro
, deepseek-reasoner
git_diff (optional): Include git diff output as context
With files:
{ "files": ["src/auth.ts", "src/middleware.ts", "review.md"], "model": "o3", "git_diff": { "files": ["src/auth.ts", "src/middleware.ts"], "base_ref": "main" } }
With direct prompt:
{ "prompt": "Analyze the performance implications of using async/await vs Promise.then() in Node.js", "files": ["src/database.ts"], "model": "gemini-2.5-pro" }
All prompts and responses are logged to ~/.consult-llm-mcp/logs/mcp.log
with:
[2025-06-22T20:16:04.673Z] TOOL CALL: consult_llm
Arguments: {
"files": [
"refactor-analysis.md",
"src/main.ts",
"src/schema.ts",
"src/config.ts",
"src/llm.ts",
"src/llm-cost.ts"
],
"model": "deepseek-reasoner"
}
================================================================================
[2025-06-22T20:16:04.675Z] PROMPT (model: deepseek-reasoner):
## Relevant Files
### File: src/main.ts
...
Please provide specific suggestions for refactoring with example code structure
where helpful.
================================================================================
[2025-06-22T20:19:20.632Z] RESPONSE (model: deepseek-reasoner):
Based on the analysis, here are the key refactoring suggestions to improve
separation of concerns and maintainability:
...
This refactoring maintains all existing functionality while significantly
improving maintainability and separation of concerns. The new structure makes
it easier to add features like new LLM providers, additional context sources,
or alternative prompt formats.
Tokens: 3440 input, 5880 output | Cost: $0.014769 (input: $0.001892, output: $0.012877)
While not strictly necessary, to help Claude Code understand when and how to use
this tool, you can optionally something like the following to your project's
CLAUDE.md
file:
## consult-llm-mcp Use the `consult_llm` MCP tool to ask a more powerful AI for help with complex problems. Include files to git_diff when asking feedback for changes. Use Gemini 2.5 Pro.
Claude Code seems to know pretty well when to use this MCP even without this instruction however.