@cyanheads/pubmed-mcp-server
Version:
A Model Context Protocol (MCP) server enabling AI agents to intelligently search, retrieve, and analyze biomedical literature from PubMed via NCBI E-utilities. Built on the mcp-ts-template for robust, production-ready performance.
150 lines (149 loc) • 7.37 kB
JavaScript
/**
* @fileoverview Defines the Zod input schema and TypeScript types for the pubmed_research_agent tool.
* This schema accepts detailed components of a research plan from the client,
* which the tool will then structure into a standardized output format.
* @module pubmedResearchAgent/logic/inputSchema
*/
import { z } from "zod";
export const PubMedResearchAgentInputSchema = z.object({
// Overall Project Information
project_title_suggestion: z
.string()
.min(5)
.describe("A concise and descriptive title for the research project."),
primary_research_goal: z
.string()
.min(10)
.describe('The main scientific objective or central question the research aims to address (e.g., "To investigate the role of TREM2 in microglial response to amyloid-beta plaques").'),
research_keywords: z
.array(z.string().min(1))
.min(1)
.describe('Core scientific keywords or MeSH terms defining the research domain (e.g., ["neuroinflammation", "Alzheimer\'s disease", "TREM2"]).'),
organism_focus: z
.string()
.optional()
.describe('Primary organism(s) or model systems (e.g., "Homo sapiens (iPSC-derived microglia)", "Mus musculus (5xFAD model)").'),
// Phase 1: Conception and Planning Inputs
p1_introduction_and_background: z
.string()
.optional()
.describe("Brief overview of the research area, its significance, and relevant background information leading to this study."),
p1_specific_research_question: z
.string()
.optional()
.describe("The precise, focused primary research question the study will answer."),
p1_knowledge_gap: z
.string()
.optional()
.describe("Statement clearly identifying the specific gap in current knowledge this research addresses."),
p1_primary_hypothesis: z
.string()
.optional()
.describe("The main, testable hypothesis. Should be clear, specific, and falsifiable."),
p1_secondary_questions_or_hypotheses: z
.array(z.string())
.optional()
.describe("Any secondary questions or hypotheses to be explored."),
p1_pubmed_search_strategy_description: z
.string()
.optional()
.describe("Description of the primary literature search strategy (e.g., for PubMed), including key terms and database considerations."),
p1_literature_review_scope: z
.string()
.optional()
.describe("The defined scope for the literature review (e.g., timeframes, study types, key themes)."),
p1_lit_review_databases_and_approach: z
.string()
.optional()
.describe("Key databases (e.g., PubMed, EMBASE) and the search approach (e.g., iterative queries, snowballing)."),
p1_experimental_paradigm: z
.string()
.optional()
.describe("The overarching experimental design or study type (e.g., 'comparative multi-omics analysis', 'longitudinal cohort study')."),
p1_data_acquisition_plan_existing_data: z
.string()
.optional()
.describe("Strategy for identifying and retrieving relevant existing datasets (databases, data types, tools)."),
p1_data_acquisition_plan_new_data: z
.string()
.optional()
.describe("Plan for generating novel data (data types, experimental models, key procedures, deposition plan)."),
p1_blast_utilization_plan: z
.string()
.optional()
.describe("If applicable, how sequence alignment services (e.g., NCBI BLAST) will be used (purpose, programs, databases)."),
p1_controls_and_rigor: z
.string()
.optional()
.describe("Description of key experimental controls and measures to ensure scientific rigor and reproducibility."),
p1_methodological_challenges_and_mitigation: z
.string()
.optional()
.describe("Anticipated methodological challenges and proposed mitigation strategies."),
// Phase 2: Data Collection and Processing Inputs
p2_data_collection_methods_wet_lab: z
.string()
.optional()
.describe("Specific wet-lab protocols if new data is generated (sample prep, treatments, instruments)."),
p2_data_collection_methods_dry_lab: z
.string()
.optional()
.describe("Execution details for data retrieval from databases (queries, tools, accessioning)."),
p2_data_preprocessing_and_qc_plan: z
.string()
.optional()
.describe("Pipeline for data cleaning, preprocessing (e.g., alignment, normalization), and quality control (metrics, thresholds, tools)."),
// Phase 3: Analysis and Interpretation Inputs
p3_data_analysis_strategy: z
.string()
.optional()
.describe("Core statistical and computational methods to analyze data and test hypotheses (tests, software, ML models if any)."),
p3_bioinformatics_pipeline_summary: z
.string()
.optional()
.describe("Summary of the bioinformatics pipeline for high-throughput data analysis (tools, downstream analyses)."),
p3_results_interpretation_framework: z
.string()
.optional()
.describe("Framework for evaluating findings against hypotheses (statistical significance, biological relevance)."),
p3_comparison_with_literature_plan: z
.string()
.optional()
.describe("Strategy for contextualizing results with existing literature and addressing discrepancies."),
// Phase 4: Dissemination and Iteration Inputs
p4_dissemination_manuscript_plan: z
.string()
.optional()
.describe("Plan for manuscript preparation (core message, target journal profile, key figures)."),
p4_dissemination_data_deposition_plan: z
.string()
.optional()
.describe("Strategy for depositing data in public repositories (types, repositories, FAIR principles)."),
p4_peer_review_and_publication_approach: z
.string()
.optional()
.describe("Approach to journal submission and addressing peer review."),
p4_future_research_directions: z
.string()
.optional()
.describe("Potential next steps, new questions, or translational applications arising from the research."),
// Cross-Cutting Considerations Inputs
cc_record_keeping_and_data_management: z
.string()
.optional()
.describe("Plan for record-keeping, version control, data storage, and DMP."),
cc_collaboration_strategy: z
.string()
.optional()
.describe("If applicable, strategy for collaboration, communication, roles, and authorship."),
cc_ethical_considerations: z
.string()
.optional()
.describe("Ethical considerations, IRB/IACUC approval plans, data privacy, RCR training."),
// Meta-parameter from previous iterations, still useful
include_detailed_prompts_for_agent: z
.boolean()
.optional()
.default(false) // Default to false, meaning the tool primarily structures the detailed input.
.describe("If true, the tool will add more detailed instructive prompts/guidance within the output fields for a research agent. If false (default), it will primarily structure the provided inputs with minimal additional prompting."),
});