UNPKG

@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
/** * @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."), });