{"schema_version":"1.0","tools":[{"schema_version":"1.0","tool_id":"serial-dilution-planner","title":"Serial Dilution Planner","description":"Generate pipette-ready serial dilution protocols and 96/384-well plate layouts from stock and target concentrations.\n","tags":["dilution","pipette","plate-map","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["stock_concentration","stock_unit","target_concentration","target_unit","num_steps","final_volume_ul"],"properties":{"stock_concentration":{"type":"number","description":"Starting concentration value"},"stock_unit":{"type":"string","description":"Unit: M, mM, uM, nM, mg_per_mL, ug_per_uL, ng_per_uL, percent"},"target_concentration":{"type":"number","description":"Final target concentration value"},"target_unit":{"type":"string","description":"Target concentration unit (same enum as stock_unit)"},"num_steps":{"type":"integer","description":"Number of serial dilution steps (1-50)"},"final_volume_ul":{"type":"number","description":"Final volume per tube in µL"},"pipettes":{"type":"array","description":"Available pipettes (id, min_ul, max_ul, resolution_ul)"},"economy_mode":{"type":"boolean","default":false,"description":"Minimize final volume per tube while keeping rounded transfers at or above the smallest enabled pipette minimum\n"},"molecular_weight_g_per_mol":{"type":"number","description":"Required when mixing molar and mass/volume units"},"plate_map":{"type":"object","description":"Optional plate map generation (format, orientation, replicates)"}}},"output":{"type":"object","properties":{"steps":{"type":"array"},"summary":{"type":"object"},"notes":{"type":"array"},"plate_map":{"type":"object"},"error":{"type":"string"}}},"agent_notes":"Computes serial dilution steps with pipette rounding. Warns when transfer\nvolumes are below pipette minimums. Auto-expands step count if per-step\ndilution exceeds 1000×. Provide molecular_weight_g_per_mol when using mg/mL\nor other mass/volume units with molar targets.\n","example_prompts":["Plan a 4-step serial dilution from 10 mM to 10 µM with 100 µL per tube","Map my dilution series to a 96-well plate with 3 replicates"],"examples":[{"name":"standard_4step","input":{"stock_concentration":10,"stock_unit":"mM","target_concentration":10,"target_unit":"uM","num_steps":4,"final_volume_ul":100,"pipettes":[{"id":"P2","label":"P2","min_ul":0.5,"max_ul":2,"resolution_ul":0.1},{"id":"P10","label":"P10","min_ul":1,"max_ul":10,"resolution_ul":0.5},{"id":"P20","label":"P20","min_ul":2,"max_ul":20,"resolution_ul":1},{"id":"P200","label":"P200","min_ul":20,"max_ul":200,"resolution_ul":1},{"id":"P1000","label":"P1000","min_ul":100,"max_ul":1000,"resolution_ul":5}],"economy_mode":false},"output":{"summary":{"step_count":4,"warning_count":3},"steps":[{"step":1,"transfer_ul":18,"pipette_label":"P20"}]}},{"name":"economy_reduces_volume","input":{"stock_concentration":10,"stock_unit":"mM","target_concentration":10,"target_unit":"uM","num_steps":4,"final_volume_ul":100,"economy_mode":true,"pipettes":[{"id":"P2","label":"P2","min_ul":0.5,"max_ul":2,"resolution_ul":0.1},{"id":"P10","label":"P10","min_ul":1,"max_ul":10,"resolution_ul":0.5}]},"output":{"summary":{"step_count":4,"final_volume_ul":2.81},"notes":["Economy mode reduced final volume to 2.81 µL per tube"]}},{"name":"plate_map_384","input":{"stock_concentration":10,"stock_unit":"mM","target_concentration":10,"target_unit":"uM","num_steps":4,"final_volume_ul":100,"plate_map":{"format":"384","orientation":"column","replicates":1},"pipettes":[{"id":"P200","label":"P200","min_ul":20,"max_ul":200,"resolution_ul":1}]},"output":{"plate_map":{"format":"384"}}},{"name":"antibody_mass","input":{"stock_concentration":2,"stock_unit":"mg_per_mL","target_concentration":20,"target_unit":"ng_per_uL","num_steps":3,"final_volume_ul":200,"molecular_weight_g_per_mol":150000,"pipettes":[{"id":"P10","label":"P10","min_ul":1,"max_ul":10,"resolution_ul":0.5},{"id":"P200","label":"P200","min_ul":20,"max_ul":200,"resolution_ul":1},{"id":"P1000","label":"P1000","min_ul":100,"max_ul":1000,"resolution_ul":5}]},"output":{"summary":{"step_count":3}}},{"name":"extreme_ratio_split","input":{"stock_concentration":1,"stock_unit":"M","target_concentration":1,"target_unit":"nM","num_steps":2,"final_volume_ul":100,"pipettes":[{"id":"P10","label":"P10","min_ul":1,"max_ul":10,"resolution_ul":0.5},{"id":"P200","label":"P200","min_ul":20,"max_ul":200,"resolution_ul":1}]},"output":{"notes":[]}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["stock_concentration","stock_unit","target_concentration","target_unit","num_steps","final_volume_ul"],"properties":{"stock_concentration":{"type":"number","description":"Starting concentration value"},"stock_unit":{"type":"string","description":"Unit: M, mM, uM, nM, mg_per_mL, ug_per_uL, ng_per_uL, percent"},"target_concentration":{"type":"number","description":"Final target concentration value"},"target_unit":{"type":"string","description":"Target concentration unit (same enum as stock_unit)"},"num_steps":{"type":"integer","description":"Number of serial dilution steps (1-50)"},"final_volume_ul":{"type":"number","description":"Final volume per tube in µL"},"pipettes":{"type":"array","description":"Available pipettes (id, min_ul, max_ul, resolution_ul)"},"economy_mode":{"type":"boolean","default":false,"description":"Minimize final volume per tube while keeping rounded transfers at or above the smallest enabled pipette minimum\n"},"molecular_weight_g_per_mol":{"type":"number","description":"Required when mixing molar and mass/volume units"},"plate_map":{"type":"object","description":"Optional plate map generation (format, orientation, replicates)"}}}},{"schema_version":"1.0","tool_id":"molarity-solution-calculator","title":"Molarity Solution Calculator","description":"Calculate powder mass, dilution volumes, and serial steps with hydrate and purity correction plus bench-ready protocols.\n","tags":["molarity","dilution","solution-prep","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string","description":"powder, dilution, or serial"},"mw_anhydrous_g_per_mol":{"type":"number","description":"Anhydrous molecular weight (g/mol) for powder mode"},"hydrate_notation":{"type":"string","description":"Hydrate notation e.g. ·5H₂O"},"purity_percent":{"type":"number","description":"Reagent purity (default 100)"},"target_concentration":{"type":"number","description":"Target concentration value"},"target_concentration_unit":{"type":"string","description":"M, mM, uM, or nM for powder mode"},"target_unit":{"type":"string","description":"Target unit for dilution mode"},"stock_concentration":{"type":"number","description":"Stock concentration (dilution / serial)"},"stock_unit":{"type":"string","description":"Stock concentration unit"},"final_volume":{"type":"number","description":"Final volume (powder / dilution)"},"final_volume_unit":{"type":"string","description":"mL or L"},"final_volume_ul":{"type":"number","description":"Final volume per step in µL (serial mode)"},"num_steps":{"type":"integer","description":"Serial dilution step count (1-50)"},"molecular_weight_g_per_mol":{"type":"number","description":"MW when using mass/volume units in dilution mode"}}},"output":{"type":"object","properties":{"mode":{"type":"string"},"result":{"type":"object"},"effective_mw_g_per_mol":{"type":"number"},"warnings":{"type":"array"},"protocol_steps":{"type":"array"},"flags":{"type":"object"},"error":{"type":"string"}}},"agent_notes":"Three modes via `mode`: powder (mass to weigh), dilution (C1V1=C2V2),\nserial (lightweight step table). Apply hydrate offset and purity for powders.\nFor pipette-aware serial plans with plate maps, chain to serial-dilution-planner.\n","example_prompts":["How much CuSO4·5H2O to make 10 mM in 50 mL at 99% purity?","Dilute 10x PBS stock to 1x in 1 liter","Plan 4-step serial dilution from 1 M to 1 µM in 100 µL"],"examples":[{"name":"powder_cuso4","input":{"mode":"powder","mw_anhydrous_g_per_mol":159.61,"hydrate_notation":"·5H2O","purity_percent":99,"target_concentration":10,"target_concentration_unit":"mM","final_volume":50,"final_volume_unit":"mL"},"output":{"result":{"mass_g":0.126}}},{"name":"dilution_pbs_10x","input":{"mode":"dilution","stock_concentration":10,"stock_unit":"M","target_concentration":1,"target_unit":"M","final_volume":1,"final_volume_unit":"L"},"output":{"result":{"stock_volume_L":0.1}}},{"name":"serial_1M_to_1uM","input":{"mode":"serial","stock_concentration":1,"stock_unit":"M","target_concentration":1,"target_unit":"uM","num_steps":4,"final_volume_ul":100},"output":{"result":{"step_count":4}}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["mode"],"properties":{"mode":{"type":"string","description":"powder, dilution, or serial"},"mw_anhydrous_g_per_mol":{"type":"number","description":"Anhydrous molecular weight (g/mol) for powder mode"},"hydrate_notation":{"type":"string","description":"Hydrate notation e.g. ·5H₂O"},"purity_percent":{"type":"number","description":"Reagent purity (default 100)"},"target_concentration":{"type":"number","description":"Target concentration value"},"target_concentration_unit":{"type":"string","description":"M, mM, uM, or nM for powder mode"},"target_unit":{"type":"string","description":"Target unit for dilution mode"},"stock_concentration":{"type":"number","description":"Stock concentration (dilution / serial)"},"stock_unit":{"type":"string","description":"Stock concentration unit"},"final_volume":{"type":"number","description":"Final volume (powder / dilution)"},"final_volume_unit":{"type":"string","description":"mL or L"},"final_volume_ul":{"type":"number","description":"Final volume per step in µL (serial mode)"},"num_steps":{"type":"integer","description":"Serial dilution step count (1-50)"},"molecular_weight_g_per_mol":{"type":"number","description":"MW when using mass/volume units in dilution mode"}}}},{"schema_version":"1.0","tool_id":"ph-buffer-recipe-calculator","title":"pH Buffer Recipe Calculator","description":"Get weighed buffer recipes with temperature-corrected pH, ionic strength, stock dilution, and copy-ready protocols.\n","tags":["buffer","ph","biochemistry","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["mode","buffer_id","target_ph","concentration_mM","final_volume","final_volume_unit","prep_temp_c","working_temp_c"],"properties":{"mode":{"type":"string","description":"calculator or stock"},"buffer_id":{"type":"string","description":"Buffer system id (tris, phosphate, hepes, etc.)"},"target_ph":{"type":"number","description":"Target pH at preparation temperature"},"concentration_mM":{"type":"number","description":"Final buffer concentration in mM"},"final_volume":{"type":"number","description":"Final solution volume"},"final_volume_unit":{"type":"string","description":"mL or L"},"prep_temp_c":{"type":"number","description":"Temperature during preparation (°C)"},"working_temp_c":{"type":"number","description":"Temperature during use (°C)"},"target_ionic_strength_mM":{"type":"number","description":"Optional target ionic strength (adds NaCl)"},"added_salt_mM":{"type":"number","description":"Additional NaCl to add (mM)"},"stock_concentration_mM":{"type":"number","description":"Stock concentration for stock mode"}}},"output":{"type":"object","properties":{"mode":{"type":"string"},"result":{"type":"object"},"warnings":{"type":"array"},"protocol_steps":{"type":"array"},"metadata":{"type":"object"},"corrections_applied":{"type":"object"},"error":{"type":"string"}}},"agent_notes":"Modes: calculator (recipe from scratch), stock (dilute concentrated stock).\nUses van't Hoff pKa correction and simplified Debye-Hückel ionic strength adjustment.\nReturns gravimetric and titration preparation routes.\n","example_prompts":["50 mM Tris-HCl pH 7.5 in 1 L prepared at 25°C used at 4°C","100 mM sodium phosphate pH 7.4 in 500 mL","Dilute 1 M Tris stock to 50 mM in 100 mL"],"examples":[{"name":"tris_50mM_1L","input":{"mode":"calculator","buffer_id":"tris","target_ph":7.5,"concentration_mM":50,"final_volume":1,"final_volume_unit":"L","prep_temp_c":25,"working_temp_c":4},"output":{"result":{"acid_mass_g":6.21},"metadata":{"predicted_working_ph":8.13}}},{"name":"phosphate_100mM","input":{"mode":"calculator","buffer_id":"phosphate","target_ph":7.4,"concentration_mM":100,"final_volume":500,"final_volume_unit":"mL","prep_temp_c":25,"working_temp_c":25},"output":{"result":{"acid_mass_g":4.13,"base_mass_g":2.85}}},{"name":"stock_tris_dilution","input":{"mode":"stock","buffer_id":"tris","target_ph":7.5,"concentration_mM":50,"stock_concentration_mM":1000,"final_volume":100,"final_volume_unit":"mL","prep_temp_c":25,"working_temp_c":25},"output":{"result":{"stock_volume_mL":5,"predicted_ph_after_dilution":7.62}}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["mode","buffer_id","target_ph","concentration_mM","final_volume","final_volume_unit","prep_temp_c","working_temp_c"],"properties":{"mode":{"type":"string","description":"calculator or stock"},"buffer_id":{"type":"string","description":"Buffer system id (tris, phosphate, hepes, etc.)"},"target_ph":{"type":"number","description":"Target pH at preparation temperature"},"concentration_mM":{"type":"number","description":"Final buffer concentration in mM"},"final_volume":{"type":"number","description":"Final solution volume"},"final_volume_unit":{"type":"string","description":"mL or L"},"prep_temp_c":{"type":"number","description":"Temperature during preparation (°C)"},"working_temp_c":{"type":"number","description":"Temperature during use (°C)"},"target_ionic_strength_mM":{"type":"number","description":"Optional target ionic strength (adds NaCl)"},"added_salt_mM":{"type":"number","description":"Additional NaCl to add (mM)"},"stock_concentration_mM":{"type":"number","description":"Stock concentration for stock mode"}}}},{"schema_version":"1.0","tool_id":"tm-annealing-temperature-calculator","title":"Tm / Annealing Temperature Calculator","description":"Calculate primer Tm and suggested annealing temperature for single pairs or batch CSV, with QC flags and exportable results.\n","tags":["pcr","primer","tm","molecular-biology","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["mode","polymerase_id"],"properties":{"mode":{"type":"string","description":"single or batch"},"name":{"type":"string","description":"Optional primer pair name (single mode)"},"fwd_seq":{"type":"string","description":"Forward primer sequence (single mode)"},"rev_seq":{"type":"string","description":"Reverse primer sequence (single mode, optional)"},"batch_rows":{"type":"array","description":"Batch rows with fwd_seq and optional rev_seq"},"batch_csv":{"type":"string","description":"CSV/TSV text with name,fwd,rev columns"},"polymerase_id":{"type":"string","description":"q5 | phusion | taq | kapa_hifi | custom"},"custom_na_mM":{"type":"number","description":"Custom buffer Na+ mM (custom polymerase only)"},"custom_mg_mM":{"type":"number","description":"Custom buffer Mg2+ mM (custom polymerase only)"},"dmso_percent":{"type":"number","description":"DMSO percent (0-10+)"},"betaine_M":{"type":"number","description":"Betaine concentration in M"},"oligo_concentration_nM":{"type":"number","description":"Oligo concentration for Tm (default 250 nM)"}}},"output":{"type":"object","properties":{"mode":{"type":"string"},"method_used":{"type":"string"},"warnings":{"type":"array"},"metadata":{"type":"object"},"corrections_applied":{"type":"object"},"single":{"type":"object"},"batch":{"type":"array"},"error":{"type":"string"}}},"agent_notes":"Sequences are validated as ACGT only (minimum 10 nt for Tm). Primary Tm uses SantaLucia 1998\nnearest-neighbor thermodynamics with initiation at both 5′ and 3′ termini, then Owczarzy 2008 salt\ncorrection (Mg²⁺ and dNTP-aware; von Ahsen Na_eq when Mg=0). DMSO: −0.675°C per 1%. Betaine is not\nsupported (returns error if betaine_M > 0). Ta: Taq/custom Tm_lower−5°C; Q5/Phusion/KAPA Tm_lower+3°C\nwhen both primers >20 nt else Tm_lower (NEB protocols). UI runs in-browser; batch limit 200 pairs.\nHairpin/dimer ΔG use SantaLucia NN at 37°C (alignment-based). Print uses browser print.\n","example_prompts":["Calculate Tm for forward ATGCGTACGTACGTACGTACG and reverse CGTACGTACGTACGTACGCAT with Q5 buffer","Batch Tm QC for a CSV of multiplex PCR primers"],"examples":[{"name":"single_q5_pair","input":{"mode":"single","name":"test_pair","fwd_seq":"ATGCGTACGTACGTACGTACG","rev_seq":"CGTACGTACGTACGTACGCAT","polymerase_id":"q5","dmso_percent":0,"betaine_M":0},"output":{"single":{"status":"go"}}},{"name":"batch_multiplex","input":{"mode":"batch","polymerase_id":"taq","batch_csv":"name,fwd,rev\nGAPDH_F,GAAGGTGAAGGTCGGAGTC,GAAGATGGTGATGGGATTTC\nACTB_F,GGCTGGGGTGTTGAAGGT,CCGCTCGTTGTAGACAGG\n"},"output":{"batch":[{"status":"go"}]}},{"name":"invalid_base_row","input":{"mode":"batch","polymerase_id":"q5","batch_rows":[{"name":"bad","fwd_seq":"ATGCX","rev_seq":"ATGC"}]},"output":{"batch":[{"error":"Invalid forward sequence"}]}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["mode","polymerase_id"],"properties":{"mode":{"type":"string","description":"single or batch"},"name":{"type":"string","description":"Optional primer pair name (single mode)"},"fwd_seq":{"type":"string","description":"Forward primer sequence (single mode)"},"rev_seq":{"type":"string","description":"Reverse primer sequence (single mode, optional)"},"batch_rows":{"type":"array","description":"Batch rows with fwd_seq and optional rev_seq"},"batch_csv":{"type":"string","description":"CSV/TSV text with name,fwd,rev columns"},"polymerase_id":{"type":"string","description":"q5 | phusion | taq | kapa_hifi | custom"},"custom_na_mM":{"type":"number","description":"Custom buffer Na+ mM (custom polymerase only)"},"custom_mg_mM":{"type":"number","description":"Custom buffer Mg2+ mM (custom polymerase only)"},"dmso_percent":{"type":"number","description":"DMSO percent (0-10+)"},"betaine_M":{"type":"number","description":"Betaine concentration in M"},"oligo_concentration_nM":{"type":"number","description":"Oligo concentration for Tm (default 250 nM)"}}}},{"schema_version":"1.0","tool_id":"pcr-master-mix-calculator","title":"PCR Master Mix Calculator","description":"Plan PCR master mixes for multiple assays with pipette volumes, overage, and a bench sheet you can print or paste.\n","tags":["pcr","qpcr","master-mix","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["assays"],"properties":{"assays":{"type":"array","description":"One or more assay recipes per session","items":{"type":"object","properties":{"name":{"type":"string"},"reaction_volume_ul":{"type":"number"},"reaction_count":{"type":"integer"},"overage_factor":{"type":"number"},"reagents":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"stock_value":{"type":"number"},"stock_unit":{"type":"string","description":"M, mM, uM, nM, or fold"},"final_value":{"type":"number"},"final_unit":{"type":"string"},"is_water":{"type":"boolean"}}}}}}}}},"output":{"type":"object","properties":{"assays":{"type":"array"},"consolidated":{"type":"array"},"has_blocking_errors":{"type":"boolean"},"warnings":{"type":"array"}}},"agent_notes":"Volume (µL) = (final / stock) × reaction_volume_ul for matching molar or fold units.\nWater fills remainder. Totals multiply by reaction_count × overage_factor.\nFlag volumes below 0.5 µL with dilution suggestions.\nEnzyme activity (U/µL) is not supported — use fold or molar units only.\n","example_prompts":["How much master mix for 24× 20 µL SYBR qPCR reactions with 10% overage?","Consolidate reagents for three genotyping assays on one plate","Warn if any component is below 0.5 µL"],"examples":[{"name":"qpcr_20ul_sybr","input":{"assays":[{"name":"SYBR panel","reaction_volume_ul":20,"reaction_count":24,"overage_factor":1.1,"reagents":[{"name":"10× PCR buffer","stock_value":10,"stock_unit":"fold","final_value":1,"final_unit":"fold"},{"name":"dNTP mix","stock_value":10,"stock_unit":"mM","final_value":0.2,"final_unit":"mM"},{"name":"Forward primer","stock_value":10,"stock_unit":"uM","final_value":0.4,"final_unit":"uM"},{"name":"Reverse primer","stock_value":10,"stock_unit":"uM","final_value":0.4,"final_unit":"uM"},{"name":"Taq","stock_value":1,"stock_unit":"fold","final_value":0.02,"final_unit":"fold"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]}]},"output":{"has_blocking_errors":false}},{"name":"genotyping_25ul_gotaq","input":{"assays":[{"name":"Genotyping","reaction_volume_ul":25,"reaction_count":48,"overage_factor":1.1,"reagents":[{"name":"2× GoTaq MM","stock_value":2,"stock_unit":"fold","final_value":1,"final_unit":"fold"},{"name":"Forward primer","stock_value":10,"stock_unit":"uM","final_value":0.5,"final_unit":"uM"},{"name":"Reverse primer","stock_value":10,"stock_unit":"uM","final_value":0.5,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]}]},"output":{"has_blocking_errors":false}},{"name":"multi_assay_three_primers","input":{"assays":[{"name":"Assay A","reaction_volume_ul":20,"reaction_count":12,"overage_factor":1.1,"reagents":[{"name":"10× buffer","stock_value":10,"stock_unit":"fold","final_value":1,"final_unit":"fold"},{"name":"dNTP","stock_value":10,"stock_unit":"mM","final_value":0.2,"final_unit":"mM"},{"name":"Primer","stock_value":10,"stock_unit":"uM","final_value":0.4,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]},{"name":"Assay B","reaction_volume_ul":20,"reaction_count":12,"overage_factor":1.1,"reagents":[{"name":"10× buffer","stock_value":10,"stock_unit":"fold","final_value":1,"final_unit":"fold"},{"name":"dNTP","stock_value":10,"stock_unit":"mM","final_value":0.2,"final_unit":"mM"},{"name":"Primer","stock_value":10,"stock_unit":"uM","final_value":0.5,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]},{"name":"Assay C","reaction_volume_ul":20,"reaction_count":12,"overage_factor":1.1,"reagents":[{"name":"10× buffer","stock_value":10,"stock_unit":"fold","final_value":1,"final_unit":"fold"},{"name":"dNTP","stock_value":10,"stock_unit":"mM","final_value":0.2,"final_unit":"mM"},{"name":"Primer","stock_value":10,"stock_unit":"uM","final_value":0.6,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]}]},"output":{"has_blocking_errors":false}},{"name":"invalid_final_gt_stock","input":{"assays":[{"name":"Bad","reaction_volume_ul":20,"reaction_count":1,"overage_factor":1,"reagents":[{"name":"Primer","stock_value":0.4,"stock_unit":"uM","final_value":10,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]}]},"output":{"has_blocking_errors":true}},{"name":"pipette_warning_sub_half_ul","input":{"assays":[{"name":"Small vol","reaction_volume_ul":20,"reaction_count":1,"overage_factor":1,"reagents":[{"name":"Probe","stock_value":100,"stock_unit":"uM","final_value":0.05,"final_unit":"uM"},{"name":"Water","stock_value":1,"stock_unit":"fold","final_value":1,"final_unit":"fold","is_water":true}]}]},"output":{"has_blocking_errors":false}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["assays"],"properties":{"assays":{"type":"array","description":"One or more assay recipes per session","items":{"type":"object","properties":{"name":{"type":"string"},"reaction_volume_ul":{"type":"number"},"reaction_count":{"type":"integer"},"overage_factor":{"type":"number"},"reagents":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"stock_value":{"type":"number"},"stock_unit":{"type":"string","description":"M, mM, uM, nM, or fold"},"final_value":{"type":"number"},"final_unit":{"type":"string"},"is_water":{"type":"boolean"}}}}}}}}}},{"schema_version":"1.0","tool_id":"well-plate-seeding-density-calculator","title":"Cell Seeding Density Calculator","description":"Calculate cells per well and pipette volume for all six plate formats from one hemocytometer count and confluency target.\n","tags":["cell-culture","seeding","tissue-culture","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["cells_per_cm2","stock_concentration_cells_per_mL","viability_pct","seeding_confluency_pct"],"properties":{"cell_line_name":{"type":"string"},"cells_per_cm2":{"type":"number","description":"Cells per cm² at 100% confluency"},"doubling_time_h":{"type":"number","description":"Population doubling time in hours"},"stock_concentration_cells_per_mL":{"type":"number"},"viability_pct":{"type":"number","description":"Trypan blue viability (live cells only)"},"seeding_confluency_pct":{"type":"number","description":"Target confluency at seeding (10–100%)"},"assay_confluency_pct":{"type":"number","description":"Confluency goal for assay timing (default 80%)"},"assay_datetime":{"type":"string","description":"Optional ISO datetime for assay scheduling"}}},"output":{"type":"object","properties":{"plates":{"type":"array"},"time_to_confluency":{"type":"object"},"warnings":{"type":"array"},"has_blocking_errors":{"type":"boolean"}}},"agent_notes":"Volume µL = (cells_needed / (stock cells/mL × viability%/100)) × 1000.\ncells_needed = (seeding_confluency%/100) × cells_per_cm² × well_area_cm².\nTime to assay confluency: doublings = log2(assay%/seeding%), hours = doublings × doubling_time_h.\nWell areas from Corning/Falcon manufacturer specs.\n","example_prompts":["How many HEK293T cells per 96-well at 30% seeding from 2 million/mL stock?","Calculate seeding volumes for all plate formats with 90% viability","When will my HeLa reach 80% confluency if I seed at 25%?"],"examples":[{"name":"hek293t_standard","input":{"cell_line_name":"HEK293T","cells_per_cm2":230000,"doubling_time_h":27,"stock_concentration_cells_per_mL":2000000,"viability_pct":95,"seeding_confluency_pct":30,"assay_confluency_pct":80},"output":{"has_blocking_errors":false,"time_to_confluency":{"hours":38,"assay_confluency_pct":80},"plates":[{"format":"96W","cells_per_well":22080,"volume_uL":11.62,"badges":["ok"]}]}},{"name":"hela_seeding","input":{"cell_line_name":"HeLa","cells_per_cm2":125000,"doubling_time_h":24,"stock_concentration_cells_per_mL":1800000,"viability_pct":98,"seeding_confluency_pct":25,"assay_confluency_pct":70},"output":{"has_blocking_errors":false}},{"name":"low_viability_warn","input":{"cells_per_cm2":200000,"doubling_time_h":24,"stock_concentration_cells_per_mL":1500000,"viability_pct":65,"seeding_confluency_pct":30,"assay_confluency_pct":80},"output":{"has_blocking_errors":false}},{"name":"invalid_stock","input":{"cells_per_cm2":200000,"stock_concentration_cells_per_mL":100,"viability_pct":95,"seeding_confluency_pct":30},"output":{"has_blocking_errors":true}},{"name":"cho_384w","input":{"cell_line_name":"CHO-K1","cells_per_cm2":100000,"doubling_time_h":18,"stock_concentration_cells_per_mL":3000000,"viability_pct":97,"seeding_confluency_pct":20,"assay_confluency_pct":80},"output":{"has_blocking_errors":false,"plates":[{"format":"384W","cells_per_well":2000,"volume_uL":0.69,"badges":["below_pipette"]}]}}],"limits":{"max_input_bytes":65536,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["cells_per_cm2","stock_concentration_cells_per_mL","viability_pct","seeding_confluency_pct"],"properties":{"cell_line_name":{"type":"string"},"cells_per_cm2":{"type":"number","description":"Cells per cm² at 100% confluency"},"doubling_time_h":{"type":"number","description":"Population doubling time in hours"},"stock_concentration_cells_per_mL":{"type":"number"},"viability_pct":{"type":"number","description":"Trypan blue viability (live cells only)"},"seeding_confluency_pct":{"type":"number","description":"Target confluency at seeding (10–100%)"},"assay_confluency_pct":{"type":"number","description":"Confluency goal for assay timing (default 80%)"},"assay_datetime":{"type":"string","description":"Optional ISO datetime for assay scheduling"}}}},{"schema_version":"1.0","tool_id":"absorbance-curve-calculator","title":"Standard Curve & Concentration Calculator","description":"Turn pasted 96-well absorbance into dilution-corrected sample concentrations with assay-aware curve fitting and QC flags.\n","tags":["assay","elisa","bca","standard-curve","plate-reader","lab"],"execution_mode":"sync","estimated_runtime_sec":1,"input":{"type":"object","required":["assay_type","concentration_unit","wells","layout","standards"],"properties":{"assay_type":{"type":"string","description":"bca, bradford, sandwich_elisa, or competitive_elisa"},"concentration_unit":{"type":"string","description":"Concentration unit e.g. mg/mL or ng/mL"},"wells":{"type":"array","description":"Well absorbance values"},"layout":{"type":"array","description":"Well roles and group assignments"},"standards":{"type":"array","description":"Standard level concentrations"},"dilution_factors":{"type":"object","description":"Sample ID to dilution factor map"},"excluded_wells":{"type":"array","description":"Wells excluded as outliers"},"model_override":{"type":"string","description":"linear, quadratic, four_pl, or four_pl_inverted"}}},"output":{"type":"object","properties":{"has_blocking_errors":{"type":"boolean"},"errors":{"type":"array"},"warnings":{"type":"array"},"samples":{"type":"array"},"model_comparison":{"type":"object"},"selected_model":{"type":"string"},"recommended_model":{"type":"string"},"audit_log":{"type":"array"},"qc_summary":{"type":"object"},"blank_mean":{"type":"number"}}},"agent_notes":"Blank-subtract mean of blank wells before fitting. BCA/Bradford default linear;\nELISA default 4PL. Dilution correction: final = interpolated × dilution factor.\nFlag CV >20%, out-of-range ODs, R² below 0.98 (linear) or 0.995 (4PL).\n","example_prompts":["Fit a BCA standard curve from my 96-well plate absorbance data","Back-calculate ELISA sample concentrations with 20x dilution factor","Compare linear vs 4PL fit for my Bradford assay"],"examples":[{"name":"bca_linear","input":{"assay_type":"bca","concentration_unit":"mg/mL","wells":[{"well":"A1","absorbance":0.052},{"well":"A4","absorbance":0.148},{"well":"A6","absorbance":0.278},{"well":"A8","absorbance":0.548},{"well":"A10","absorbance":1.012},{"well":"B1","absorbance":0.195},{"well":"B4","absorbance":0.42},{"well":"H1","absorbance":0.048}],"layout":[{"well":"A1","role":"standard","standard_level":1},{"well":"A4","role":"standard","standard_level":2},{"well":"A6","role":"standard","standard_level":3},{"well":"A8","role":"standard","standard_level":4},{"well":"A10","role":"standard","standard_level":5},{"well":"B1","role":"sample","sample_id":"S1"},{"well":"B4","role":"sample","sample_id":"S2"},{"well":"H1","role":"blank"}],"standards":[{"level":1,"concentration":0},{"level":2,"concentration":0.125},{"level":3,"concentration":0.25},{"level":4,"concentration":0.5},{"level":5,"concentration":1}],"dilution_factors":{"S1":1,"S2":20},"excluded_wells":[]},"output":{"has_blocking_errors":false}},{"name":"blocking_few_standards","input":{"assay_type":"bca","concentration_unit":"mg/mL","wells":[{"well":"A1","absorbance":0.05},{"well":"A2","absorbance":1}],"layout":[{"well":"A1","role":"standard","standard_level":1},{"well":"A2","role":"standard","standard_level":2}],"standards":[{"level":1,"concentration":0},{"level":2,"concentration":1}],"dilution_factors":{},"excluded_wells":[]},"output":{"has_blocking_errors":true}},{"name":"sandwich_elisa_4pl","input":{"assay_type":"sandwich_elisa","concentration_unit":"ng/mL","wells":[{"well":"A1","absorbance":0.068},{"well":"A4","absorbance":0.42},{"well":"A7","absorbance":1.05},{"well":"A10","absorbance":1.88},{"well":"A12","absorbance":2.28},{"well":"B2","absorbance":1.12},{"well":"B5","absorbance":1.65},{"well":"H1","absorbance":0.065}],"layout":[{"well":"A1","role":"standard","standard_level":1},{"well":"A4","role":"standard","standard_level":2},{"well":"A7","role":"standard","standard_level":3},{"well":"A10","role":"standard","standard_level":4},{"well":"A12","role":"standard","standard_level":5},{"well":"B2","role":"sample","sample_id":"S1"},{"well":"B5","role":"sample","sample_id":"S2"},{"well":"H1","role":"blank"}],"standards":[{"level":1,"concentration":0},{"level":2,"concentration":5},{"level":3,"concentration":20},{"level":4,"concentration":80},{"level":5,"concentration":320}],"dilution_factors":{"S1":1,"S2":10},"excluded_wells":[]},"output":{"has_blocking_errors":false,"selected_model":"four_pl"}},{"name":"competitive_elisa_4pl","input":{"assay_type":"competitive_elisa","concentration_unit":"ng/mL","wells":[{"well":"A1","absorbance":2.35},{"well":"A4","absorbance":2.1},{"well":"A7","absorbance":1.5},{"well":"A10","absorbance":0.6},{"well":"A12","absorbance":0.15},{"well":"B2","absorbance":1.12},{"well":"B5","absorbance":0.65},{"well":"H1","absorbance":0.065}],"layout":[{"well":"A1","role":"standard","standard_level":1},{"well":"A4","role":"standard","standard_level":2},{"well":"A7","role":"standard","standard_level":3},{"well":"A10","role":"standard","standard_level":4},{"well":"A12","role":"standard","standard_level":5},{"well":"B2","role":"sample","sample_id":"S1"},{"well":"B5","role":"sample","sample_id":"S2"},{"well":"H1","role":"blank"}],"standards":[{"level":1,"concentration":0},{"level":2,"concentration":5},{"level":3,"concentration":20},{"level":4,"concentration":80},{"level":5,"concentration":320}],"dilution_factors":{"S1":1,"S2":10},"excluded_wells":[]},"output":{"has_blocking_errors":false,"selected_model":"four_pl_inverted"}}],"limits":{"max_input_bytes":131072,"max_output_bytes":262144},"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["assay_type","concentration_unit","wells","layout","standards"],"properties":{"assay_type":{"type":"string","description":"bca, bradford, sandwich_elisa, or competitive_elisa"},"concentration_unit":{"type":"string","description":"Concentration unit e.g. mg/mL or ng/mL"},"wells":{"type":"array","description":"Well absorbance values"},"layout":{"type":"array","description":"Well roles and group assignments"},"standards":{"type":"array","description":"Standard level concentrations"},"dilution_factors":{"type":"object","description":"Sample ID to dilution factor map"},"excluded_wells":{"type":"array","description":"Wells excluded as outliers"},"model_override":{"type":"string","description":"linear, quadratic, four_pl, or four_pl_inverted"}}}}]}