Skip to main content
Glama
research.ts2.52 kB
/** * Research Operation * * Structures research intent and placeholders for downstream web tooling */ import { BaseOperation, type OperationContext, type OperationResult } from '../base.js'; import type { ResearchFinding, ResearchSource, ResearchResult } from '../../../types/index.js'; export class ResearchOperation extends BaseOperation { name = 'research'; category = 'analysis'; async execute(context: OperationContext): Promise<OperationResult> { const { prompt, parameters } = context; const subqueries = (parameters.subqueries as string[]) || []; let findings = (parameters.findings as ResearchFinding[]) || []; let citations = (parameters.citations as ResearchSource[]) || []; // If no structured input, create placeholder findings from prompt if (findings.length === 0 && prompt) { findings = this.generatePlaceholderFindings(prompt); } // Generate sub-queries if none provided let derivedSubqueries = subqueries; if (derivedSubqueries.length === 0 && prompt) { derivedSubqueries = this.generateSubqueries(prompt); } const result: ResearchResult = { query: prompt, findings, citations, }; return this.createResult({ ...result, subqueries: derivedSubqueries, note: "This operation structures research intent. Use external tools for actual web search and data gathering." }); } private generatePlaceholderFindings(prompt: string): ResearchFinding[] { const findings: ResearchFinding[] = []; const sentences = prompt.split(/[.!?]+/).filter(s => s.trim().length > 0); for (const sentence of sentences.slice(0, 3)) { const trimmed = sentence.trim(); if (trimmed) { findings.push({ claim: `Research needed: ${trimmed}`, evidence: "[Evidence to be gathered]", confidence: 0.0, sources: [] }); } } return findings; } private generateSubqueries(prompt: string): string[] { const subqueries: string[] = []; const questionStarters = ['What', 'How', 'Why', 'When', 'Where', 'Who']; const keywords = prompt.split(/\s+/).filter(w => w.length > 3).slice(0, 3); for (const starter of questionStarters.slice(0, 3)) { for (const keyword of keywords.slice(0, 2)) { subqueries.push(`${starter} ${keyword.toLowerCase()}?`); } } return subqueries.slice(0, 5); } } export default new ResearchOperation();

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/waldzellai/clearthought-onepointfive'

If you have feedback or need assistance with the MCP directory API, please join our Discord server