@houtini/gemini-mcp 1.0.3 → 1.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.
- package/.env.example +5 -0
- package/README.md +940 -614
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -7
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -9
- package/dist/index.js.map +1 -1
- package/dist/services/gemini/index.d.ts +12 -1
- package/dist/services/gemini/index.d.ts.map +1 -1
- package/dist/services/gemini/index.js +170 -36
- package/dist/services/gemini/index.js.map +1 -1
- package/dist/services/gemini/types.d.ts +8 -0
- package/dist/services/gemini/types.d.ts.map +1 -1
- package/dist/tools/gemini-chat.d.ts.map +1 -1
- package/dist/tools/gemini-chat.js +4 -4
- package/dist/tools/gemini-chat.js.map +1 -1
- package/dist/tools/gemini-deep-research.d.ts +13 -0
- package/dist/tools/gemini-deep-research.d.ts.map +1 -0
- package/dist/tools/gemini-deep-research.js +414 -0
- package/dist/tools/gemini-deep-research.js.map +1 -0
- package/dist/tools/gemini-list-models.d.ts +1 -1
- package/dist/tools/gemini-list-models.d.ts.map +1 -1
- package/dist/tools/gemini-list-models.js +1 -1
- package/dist/tools/gemini-list-models.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GeminiDeepResearchTool = void 0;
|
|
7
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
8
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
9
|
+
class GeminiDeepResearchTool {
|
|
10
|
+
geminiService;
|
|
11
|
+
constructor(geminiService) {
|
|
12
|
+
this.geminiService = geminiService;
|
|
13
|
+
}
|
|
14
|
+
getDefinition() {
|
|
15
|
+
return {
|
|
16
|
+
name: 'gemini_deep_research',
|
|
17
|
+
description: 'Conduct deep research on complex topics using iterative multi-step analysis with Gemini. This performs multiple searches and synthesizes comprehensive research reports (takes several minutes). [MCP_RECOMMENDED_TIMEOUT_MS: 900000]',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
research_question: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'The complex research question or topic to investigate deeply'
|
|
24
|
+
},
|
|
25
|
+
model: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
default: this.geminiService.getDefaultModel(),
|
|
28
|
+
enum: this.geminiService.getAvailableModels(),
|
|
29
|
+
description: 'Model to use for deep research (defaults to latest available)'
|
|
30
|
+
},
|
|
31
|
+
max_iterations: {
|
|
32
|
+
type: 'integer',
|
|
33
|
+
default: 5,
|
|
34
|
+
minimum: 3,
|
|
35
|
+
maximum: 10,
|
|
36
|
+
description: 'Number of research iterations (3-10, default 5). Environment guidance: Claude Desktop: use 3-4 (4-min timeout). Agent SDK/IDEs (VSCode, Cursor, Windsurf)/AI platforms (Cline, Roo-Cline): can use 7-10 (longer timeout tolerance)'
|
|
37
|
+
},
|
|
38
|
+
focus_areas: {
|
|
39
|
+
type: 'array',
|
|
40
|
+
items: { type: 'string' },
|
|
41
|
+
description: 'Optional: specific areas to focus the research on'
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
required: ['research_question']
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async execute(args) {
|
|
49
|
+
try {
|
|
50
|
+
logger_1.default.info('Starting deep research', {
|
|
51
|
+
question: args.research_question,
|
|
52
|
+
maxIterations: args.max_iterations || 5
|
|
53
|
+
});
|
|
54
|
+
const researchQuestion = args.research_question;
|
|
55
|
+
const maxIterations = Math.min(args.max_iterations || 5, 10);
|
|
56
|
+
const model = args.model || this.geminiService.getDefaultModel();
|
|
57
|
+
const focusAreas = args.focus_areas || [];
|
|
58
|
+
const modelContextWindow = this.geminiService.getModelContextWindow(model);
|
|
59
|
+
const synthesisReserve = Math.floor(modelContextWindow * 0.20);
|
|
60
|
+
const researchBudget = Math.floor(modelContextWindow * 0.75);
|
|
61
|
+
logger_1.default.info('Token budget allocation', {
|
|
62
|
+
model,
|
|
63
|
+
contextWindow: modelContextWindow,
|
|
64
|
+
researchBudget,
|
|
65
|
+
synthesisReserve,
|
|
66
|
+
buffer: modelContextWindow - researchBudget - synthesisReserve
|
|
67
|
+
});
|
|
68
|
+
let report = '# Deep Research Report\n\n';
|
|
69
|
+
report += `## Research Question\n${researchQuestion}\n\n`;
|
|
70
|
+
if (focusAreas.length > 0) {
|
|
71
|
+
report += `## Focus Areas\n${focusAreas.map((area) => `- ${area}`).join('\n')}\n\n`;
|
|
72
|
+
}
|
|
73
|
+
report += '## Research Process\n\n';
|
|
74
|
+
report += '*This research involves multiple iterative searches and analysis steps. Please wait...*\n\n';
|
|
75
|
+
const researchSteps = [];
|
|
76
|
+
let cumulativeTokens = 0;
|
|
77
|
+
report += '### Step 1: Creating Research Plan\n\n';
|
|
78
|
+
// IMPROVED: More explicit planning prompt that forces specific queries
|
|
79
|
+
const planningPrompt = `You are a research assistant. Create a detailed research plan for this question: "${researchQuestion}"
|
|
80
|
+
|
|
81
|
+
${focusAreas.length > 0 ? `Focus specifically on these areas: ${focusAreas.join(', ')}` : ''}
|
|
82
|
+
|
|
83
|
+
Create EXACTLY ${maxIterations} specific, actionable research queries that will comprehensively answer this question.
|
|
84
|
+
|
|
85
|
+
CRITICAL REQUIREMENTS:
|
|
86
|
+
1. Each query must be self-contained and include the main topic explicitly
|
|
87
|
+
2. Each query must be specific enough to guide a Google Search
|
|
88
|
+
3. Format as a numbered list: "1. [Your specific query here]"
|
|
89
|
+
4. Do NOT use vague phrases like "the topic", "this aspect", or "it" - always name the specific subject
|
|
90
|
+
5. Each query should be a complete question or statement that could stand alone
|
|
91
|
+
|
|
92
|
+
Example format for a question about "Impact of electric vehicles on oil industry":
|
|
93
|
+
1. What is the current global adoption rate of electric vehicles and projected growth through 2030?
|
|
94
|
+
2. How have major oil companies' stock prices and valuations changed since 2020 in response to EV adoption?
|
|
95
|
+
3. What strategic pivots are oil companies making to adapt to declining gasoline demand from EVs?
|
|
96
|
+
|
|
97
|
+
Now create ${maxIterations} research queries following this format for the question: "${researchQuestion}"`;
|
|
98
|
+
let planResponse;
|
|
99
|
+
try {
|
|
100
|
+
planResponse = await this.geminiService.chat({
|
|
101
|
+
message: planningPrompt,
|
|
102
|
+
model: model,
|
|
103
|
+
temperature: 0.7,
|
|
104
|
+
maxTokens: 4096,
|
|
105
|
+
grounding: false
|
|
106
|
+
});
|
|
107
|
+
if (planResponse.usageMetadata) {
|
|
108
|
+
cumulativeTokens += planResponse.usageMetadata.totalTokenCount;
|
|
109
|
+
logger_1.default.info('Planning phase tokens', {
|
|
110
|
+
used: planResponse.usageMetadata.totalTokenCount,
|
|
111
|
+
cumulative: cumulativeTokens
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
logger_1.default.error('Planning phase failed', { error });
|
|
117
|
+
throw new error_handler_1.McpError('Failed to create research plan. The question may be too complex. Try simplifying it.', 'RESEARCH_PLANNING_FAILED');
|
|
118
|
+
}
|
|
119
|
+
report += planResponse.content + '\n\n';
|
|
120
|
+
// IMPROVED: Pass research question to extraction for better fallback
|
|
121
|
+
const researchQueries = this.extractQueries(planResponse.content, maxIterations, researchQuestion);
|
|
122
|
+
report += `### Step 2: Executing Research Queries\n\n`;
|
|
123
|
+
report += `*Conducting ${researchQueries.length} research iterations...*\n\n`;
|
|
124
|
+
let consecutiveFailures = 0;
|
|
125
|
+
for (let i = 0; i < researchQueries.length; i++) {
|
|
126
|
+
const query = researchQueries[i];
|
|
127
|
+
if (cumulativeTokens >= researchBudget) {
|
|
128
|
+
logger_1.default.warn('Approaching token budget, stopping research iterations', {
|
|
129
|
+
cumulative: cumulativeTokens,
|
|
130
|
+
budget: researchBudget
|
|
131
|
+
});
|
|
132
|
+
report += `\n*Note: Research stopped at iteration ${i + 1} due to token budget limits.*\n\n`;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
logger_1.default.info(`Research iteration ${i + 1}/${researchQueries.length}`, {
|
|
136
|
+
query,
|
|
137
|
+
tokensUsed: cumulativeTokens,
|
|
138
|
+
budget: researchBudget
|
|
139
|
+
});
|
|
140
|
+
report += `#### Research Query ${i + 1}: ${query}\n\n`;
|
|
141
|
+
const contextContent = this.buildSmartContext(researchSteps, researchBudget - cumulativeTokens);
|
|
142
|
+
const searchPrompt = `Research this specific question: "${query}"
|
|
143
|
+
|
|
144
|
+
${contextContent ? `Context from previous research:\n${contextContent}` : ''}
|
|
145
|
+
|
|
146
|
+
Provide detailed, factual information with specific data points. Use Google Search grounding to find current information.`;
|
|
147
|
+
let searchResponse;
|
|
148
|
+
try {
|
|
149
|
+
searchResponse = await this.geminiService.chat({
|
|
150
|
+
message: searchPrompt,
|
|
151
|
+
model: model,
|
|
152
|
+
temperature: 0.5,
|
|
153
|
+
maxTokens: 8192,
|
|
154
|
+
grounding: true
|
|
155
|
+
});
|
|
156
|
+
if (searchResponse.usageMetadata) {
|
|
157
|
+
cumulativeTokens += searchResponse.usageMetadata.totalTokenCount;
|
|
158
|
+
logger_1.default.info(`Iteration ${i + 1} token usage`, {
|
|
159
|
+
iteration: searchResponse.usageMetadata.totalTokenCount,
|
|
160
|
+
cumulative: cumulativeTokens,
|
|
161
|
+
remaining: researchBudget - cumulativeTokens
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// IMPROVED: Validate that grounding actually occurred
|
|
165
|
+
if (searchResponse.groundingMetadata) {
|
|
166
|
+
const hasSearches = (searchResponse.groundingMetadata.webSearchQueries?.length ?? 0) > 0;
|
|
167
|
+
const hasSupports = (searchResponse.groundingMetadata.groundingSupports?.length ?? 0) > 0;
|
|
168
|
+
if (!hasSearches && !hasSupports) {
|
|
169
|
+
logger_1.default.warn(`Iteration ${i + 1}: Grounding enabled but no searches performed`, {
|
|
170
|
+
query,
|
|
171
|
+
responsePreview: searchResponse.content.substring(0, 200)
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
logger_1.default.info(`Iteration ${i + 1}: Grounding successful`, {
|
|
176
|
+
searchQueries: searchResponse.groundingMetadata.webSearchQueries?.length || 0,
|
|
177
|
+
supports: searchResponse.groundingMetadata.groundingSupports?.length || 0
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
logger_1.default.warn(`Iteration ${i + 1}: No grounding metadata returned`, {
|
|
183
|
+
query,
|
|
184
|
+
groundingRequested: true
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// IMPROVED: Check for generic failure responses
|
|
188
|
+
const responsePreview = searchResponse.content.substring(0, 100).toLowerCase();
|
|
189
|
+
if (responsePreview.includes('please specify') ||
|
|
190
|
+
responsePreview.includes('i need to know') ||
|
|
191
|
+
responsePreview.includes('clarify the topic')) {
|
|
192
|
+
throw new Error('Query was too vague - received generic response requesting clarification');
|
|
193
|
+
}
|
|
194
|
+
consecutiveFailures = 0; // Reset on success
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
consecutiveFailures++;
|
|
198
|
+
const errorMsg = error.message;
|
|
199
|
+
logger_1.default.error(`Research iteration ${i + 1} failed`, {
|
|
200
|
+
error: errorMsg,
|
|
201
|
+
query,
|
|
202
|
+
consecutiveFailures
|
|
203
|
+
});
|
|
204
|
+
// IMPROVED: Fail fast if queries are systematically failing
|
|
205
|
+
if (consecutiveFailures >= 2 && researchSteps.length === 0) {
|
|
206
|
+
throw new error_handler_1.McpError(`Multiple research queries failing consecutively. This usually means:\n` +
|
|
207
|
+
`1. The queries are too vague (missing context about "${researchQuestion}")\n` +
|
|
208
|
+
`2. Grounding/Google Search may not be available\n` +
|
|
209
|
+
`3. The topic may need to be more specific\n\n` +
|
|
210
|
+
`Last attempted query: "${query}"\n` +
|
|
211
|
+
`Error: ${errorMsg}`, 'RESEARCH_QUERIES_FAILING');
|
|
212
|
+
}
|
|
213
|
+
report += `*Research query ${i + 1} failed: ${errorMsg}*\n\n`;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const sources = this.extractSources(searchResponse.content);
|
|
217
|
+
researchSteps.push({
|
|
218
|
+
query,
|
|
219
|
+
response: searchResponse.content,
|
|
220
|
+
sources,
|
|
221
|
+
usageMetadata: searchResponse.usageMetadata || {
|
|
222
|
+
promptTokenCount: 0,
|
|
223
|
+
candidatesTokenCount: 0,
|
|
224
|
+
totalTokenCount: 0
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
report += searchResponse.content + '\n\n';
|
|
228
|
+
}
|
|
229
|
+
if (researchSteps.length === 0) {
|
|
230
|
+
throw new error_handler_1.McpError('All research iterations failed. Possible causes:\n' +
|
|
231
|
+
'1. Research queries were too generic\n' +
|
|
232
|
+
'2. Grounding/Google Search is not responding\n' +
|
|
233
|
+
'3. Network or API issues\n\n' +
|
|
234
|
+
'Try simplifying the question or checking your internet connection.', 'ALL_ITERATIONS_FAILED');
|
|
235
|
+
}
|
|
236
|
+
report += '### Step 3: Synthesizing Findings\n\n';
|
|
237
|
+
const availableForSynthesis = Math.min(synthesisReserve, modelContextWindow - cumulativeTokens - 10000);
|
|
238
|
+
logger_1.default.info('Synthesis phase', {
|
|
239
|
+
tokensUsed: cumulativeTokens,
|
|
240
|
+
synthesisReserve,
|
|
241
|
+
availableForSynthesis,
|
|
242
|
+
researchStepsCompleted: researchSteps.length
|
|
243
|
+
});
|
|
244
|
+
const synthesisContext = this.buildSynthesisContext(researchSteps, availableForSynthesis);
|
|
245
|
+
const synthesisPrompt = `Based on all the research conducted, synthesize a comprehensive answer to the original question: "${researchQuestion}"
|
|
246
|
+
|
|
247
|
+
Research conducted:
|
|
248
|
+
${synthesisContext}
|
|
249
|
+
|
|
250
|
+
Create a comprehensive synthesis that:
|
|
251
|
+
1. Directly answers the research question
|
|
252
|
+
2. Integrates findings from all research queries
|
|
253
|
+
3. Highlights key insights and patterns
|
|
254
|
+
4. Notes any contradictions or gaps
|
|
255
|
+
5. Provides actionable conclusions
|
|
256
|
+
|
|
257
|
+
Be thorough and well-structured.`;
|
|
258
|
+
let synthesisResponse;
|
|
259
|
+
try {
|
|
260
|
+
synthesisResponse = await this.geminiService.chat({
|
|
261
|
+
message: synthesisPrompt,
|
|
262
|
+
model: model,
|
|
263
|
+
temperature: 0.6,
|
|
264
|
+
maxTokens: 16384,
|
|
265
|
+
grounding: false
|
|
266
|
+
});
|
|
267
|
+
if (synthesisResponse.usageMetadata) {
|
|
268
|
+
cumulativeTokens += synthesisResponse.usageMetadata.totalTokenCount;
|
|
269
|
+
logger_1.default.info('Synthesis tokens', {
|
|
270
|
+
used: synthesisResponse.usageMetadata.totalTokenCount,
|
|
271
|
+
total: cumulativeTokens
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
logger_1.default.error('Synthesis phase failed', { error });
|
|
277
|
+
report += '*Note: Synthesis phase encountered an error. Individual research findings are provided above.*\n\n';
|
|
278
|
+
synthesisResponse = { content: 'Synthesis unavailable due to technical limitations. Please review the individual research findings above for insights.' };
|
|
279
|
+
}
|
|
280
|
+
report += synthesisResponse.content + '\n\n';
|
|
281
|
+
report += '### Sources Consulted\n\n';
|
|
282
|
+
const allSources = new Set();
|
|
283
|
+
researchSteps.forEach(step => {
|
|
284
|
+
step.sources.forEach(source => allSources.add(source));
|
|
285
|
+
});
|
|
286
|
+
if (allSources.size > 0) {
|
|
287
|
+
Array.from(allSources).forEach((source, i) => {
|
|
288
|
+
report += `${i + 1}. ${source}\n`;
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
report += '*Note: No external sources were cited. This may indicate grounding did not function properly.*\n';
|
|
293
|
+
}
|
|
294
|
+
report += `\n---\n\n*Research completed with ${researchSteps.length} successful iterations using ${model}*\n`;
|
|
295
|
+
report += `*Total tokens used: ${cumulativeTokens.toLocaleString()} / ${modelContextWindow.toLocaleString()} available*\n`;
|
|
296
|
+
report += `*Context window utilization: ${((cumulativeTokens / modelContextWindow) * 100).toFixed(1)}%*\n`;
|
|
297
|
+
logger_1.default.info('Deep research completed successfully', {
|
|
298
|
+
iterations: researchSteps.length,
|
|
299
|
+
totalSources: allSources.size,
|
|
300
|
+
totalTokens: cumulativeTokens,
|
|
301
|
+
contextWindow: modelContextWindow,
|
|
302
|
+
utilization: ((cumulativeTokens / modelContextWindow) * 100).toFixed(1) + '%'
|
|
303
|
+
});
|
|
304
|
+
return (0, error_handler_1.createToolResult)(true, report);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
logger_1.default.error('Deep research failed', { error });
|
|
308
|
+
if (error instanceof error_handler_1.McpError) {
|
|
309
|
+
return (0, error_handler_1.createToolResult)(false, error.message, error);
|
|
310
|
+
}
|
|
311
|
+
return (0, error_handler_1.createToolResult)(false, `Deep research failed: ${error.message}. Try reducing max_iterations or simplifying the question.`, error);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
buildSmartContext(steps, maxTokens) {
|
|
315
|
+
if (steps.length === 0)
|
|
316
|
+
return '';
|
|
317
|
+
const ESTIMATED_CHARS_PER_TOKEN = 4;
|
|
318
|
+
const maxChars = maxTokens * ESTIMATED_CHARS_PER_TOKEN * 0.8;
|
|
319
|
+
let context = '';
|
|
320
|
+
let currentLength = 0;
|
|
321
|
+
for (let i = steps.length - 1; i >= 0; i--) {
|
|
322
|
+
const step = steps[i];
|
|
323
|
+
const summaryLength = Math.min(1000, step.response.length);
|
|
324
|
+
const stepSummary = `Query ${i + 1}: ${step.query}\nKey findings: ${step.response.substring(0, summaryLength)}${summaryLength < step.response.length ? '...' : ''}\n\n`;
|
|
325
|
+
if (currentLength + stepSummary.length > maxChars) {
|
|
326
|
+
logger_1.default.info('Context budget reached, including most recent research only', {
|
|
327
|
+
includedSteps: steps.length - i,
|
|
328
|
+
totalSteps: steps.length
|
|
329
|
+
});
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
context = stepSummary + context;
|
|
333
|
+
currentLength += stepSummary.length;
|
|
334
|
+
}
|
|
335
|
+
return context;
|
|
336
|
+
}
|
|
337
|
+
buildSynthesisContext(steps, maxTokens) {
|
|
338
|
+
const ESTIMATED_CHARS_PER_TOKEN = 4;
|
|
339
|
+
const maxCharsPerStep = Math.floor((maxTokens * ESTIMATED_CHARS_PER_TOKEN) / steps.length);
|
|
340
|
+
return steps.map((step, i) => {
|
|
341
|
+
const truncatedResponse = step.response.length > maxCharsPerStep
|
|
342
|
+
? step.response.substring(0, maxCharsPerStep) + '...'
|
|
343
|
+
: step.response;
|
|
344
|
+
return `Research Query ${i + 1}: ${step.query}\nFindings: ${truncatedResponse}`;
|
|
345
|
+
}).join('\n\n');
|
|
346
|
+
}
|
|
347
|
+
// IMPROVED: Pass research question for context-aware fallback queries
|
|
348
|
+
extractQueries(planText, maxQueries, researchQuestion) {
|
|
349
|
+
const queries = [];
|
|
350
|
+
const lines = planText.split('\n');
|
|
351
|
+
// Try multiple patterns to extract queries
|
|
352
|
+
for (const line of lines) {
|
|
353
|
+
// Pattern 1: Standard numbered list (1. query)
|
|
354
|
+
let match = line.match(/^\d+\.\s*(.+?)(?:\s*[-:]\s*|$)/);
|
|
355
|
+
// Pattern 2: Bold numbered list (**1. query**)
|
|
356
|
+
if (!match) {
|
|
357
|
+
match = line.match(/^\*\*\d+\.\s*(.+?)\*\*/);
|
|
358
|
+
}
|
|
359
|
+
// Pattern 3: Query within bold markdown (**Research Query: query**)
|
|
360
|
+
if (!match) {
|
|
361
|
+
match = line.match(/\*\*Research Query:\s*(.+?)\*\*/i);
|
|
362
|
+
}
|
|
363
|
+
if (match) {
|
|
364
|
+
let query = match[1].trim();
|
|
365
|
+
// Remove any trailing punctuation or markdown
|
|
366
|
+
query = query.replace(/[*_]+$/, '').trim();
|
|
367
|
+
// Clean up query - remove question marks at the end if very long
|
|
368
|
+
if (query.length > 200) {
|
|
369
|
+
const questionMark = query.lastIndexOf('?');
|
|
370
|
+
if (questionMark > 50) {
|
|
371
|
+
query = query.substring(0, questionMark + 1);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (query.length > 10 && query.length < 500) {
|
|
375
|
+
queries.push(query);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// IMPROVED: Use context-aware fallback queries that include the research question
|
|
380
|
+
if (queries.length === 0) {
|
|
381
|
+
logger_1.default.warn('Failed to extract queries from plan, using context-aware fallback queries');
|
|
382
|
+
const fallbackQueries = [
|
|
383
|
+
`Provide comprehensive overview of: ${researchQuestion}`,
|
|
384
|
+
`What are the key aspects and current trends related to: ${researchQuestion}`,
|
|
385
|
+
`What are the recent developments and changes regarding: ${researchQuestion}`,
|
|
386
|
+
`Compare different perspectives and approaches to: ${researchQuestion}`,
|
|
387
|
+
`What are the conclusions and recommendations about: ${researchQuestion}`
|
|
388
|
+
];
|
|
389
|
+
logger_1.default.info('Using fallback queries with context', {
|
|
390
|
+
researchQuestion: researchQuestion.substring(0, 100),
|
|
391
|
+
fallbackCount: fallbackQueries.length
|
|
392
|
+
});
|
|
393
|
+
return fallbackQueries.slice(0, maxQueries);
|
|
394
|
+
}
|
|
395
|
+
logger_1.default.info('Extracted queries from plan', { count: queries.length, queries });
|
|
396
|
+
return queries.slice(0, maxQueries);
|
|
397
|
+
}
|
|
398
|
+
extractSources(content) {
|
|
399
|
+
const sources = [];
|
|
400
|
+
const urlRegex = /https?:\/\/[^\s)]+/g;
|
|
401
|
+
const matches = content.match(urlRegex);
|
|
402
|
+
if (matches) {
|
|
403
|
+
matches.forEach(url => {
|
|
404
|
+
const cleanUrl = url.replace(/[.,;:]+$/, '');
|
|
405
|
+
if (cleanUrl.length > 10) {
|
|
406
|
+
sources.push(cleanUrl);
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
return [...new Set(sources)];
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
exports.GeminiDeepResearchTool = GeminiDeepResearchTool;
|
|
414
|
+
//# sourceMappingURL=gemini-deep-research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-deep-research.js","sourceRoot":"","sources":["../../src/tools/gemini-deep-research.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ export declare class GeminiListModelsTool {
|
|
|
4
4
|
private geminiService;
|
|
5
5
|
constructor(geminiService: GeminiService);
|
|
6
6
|
getDefinition(): Tool;
|
|
7
|
-
execute(
|
|
7
|
+
execute(): Promise<TextContent[]>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=gemini-list-models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-list-models.d.ts","sourceRoot":"","sources":["../../src/tools/gemini-list-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD,aAAa,IAAI,IAAI;IAWf,OAAO,
|
|
1
|
+
{"version":3,"file":"gemini-list-models.d.ts","sourceRoot":"","sources":["../../src/tools/gemini-list-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD,aAAa,IAAI,IAAI;IAWf,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAqBxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-list-models.js","sourceRoot":"","sources":["../../src/tools/gemini-list-models.ts"],"names":[],"mappings":";;;;;;AAEA,0DAA0D;AAC1D,6DAAqC;AAErC,MAAa,oBAAoB;IACX;IAApB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,aAAa;QACX,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,qDAAqD;YAClE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO
|
|
1
|
+
{"version":3,"file":"gemini-list-models.js","sourceRoot":"","sources":["../../src/tools/gemini-list-models.ts"],"names":[],"mappings":";;;;;;AAEA,0DAA0D;AAC1D,6DAAqC;AAErC,MAAa,oBAAoB;IACX;IAApB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,aAAa;QACX,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,qDAAqD;YAClE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,gBAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;YAEvD,IAAI,UAAU,GAAG,8BAA8B,CAAC;YAEhD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpC,UAAU,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,IAAI,CAAC;YAC9D,CAAC;YAED,UAAU,IAAI,mBAAmB,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEtD,OAAO,IAAA,gCAAgB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACpE,OAAO,IAAA,gCAAgB,EAAC,KAAK,EAAE,yBAA0B,KAAe,CAAC,OAAO,EAAE,EAAE,KAAc,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;CACF;AAnCD,oDAmCC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@houtini/gemini-mcp",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Professional Model Context Protocol server for Google Gemini AI models with enterprise-grade features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
"url": "https://github.com/houtini-ai/gemini-mcp/issues"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@google/generative-ai": "^0.
|
|
60
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
59
|
+
"@google/generative-ai": "^0.24.1",
|
|
60
|
+
"@modelcontextprotocol/sdk": "^1.19.1",
|
|
61
61
|
"dotenv": "^16.4.5",
|
|
62
62
|
"winston": "^3.14.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
+
"@types/jest": "^29.5.0",
|
|
65
66
|
"@types/node": "^22.0.0",
|
|
66
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
67
|
-
"@typescript-eslint/parser": "^8.
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
68
|
+
"@typescript-eslint/parser": "^8.45.0",
|
|
68
69
|
"eslint": "^8.57.0",
|
|
69
70
|
"jest": "^29.7.0",
|
|
70
|
-
"@types/jest": "^29.5.0",
|
|
71
71
|
"ts-jest": "^29.1.0",
|
|
72
72
|
"tsx": "^4.16.0",
|
|
73
73
|
"typescript": "^5.5.0"
|