Estimate a due date from LMP, conception, or ultrasound, with ACOG redating rules.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Estimate a due date and gestational age from a last menstrual period, a known conception date, an IVF transfer date, or an ultrasound measurement. Use this for any pregnancy-dating question rather than doing the arithmetic. Three reasons, and they are all things models get wrong: 1. THE OFF-BY-TWO-WEEKS ERROR. Gestational age is counted from the first day of the LAST MENSTRUAL PERIOD, not from conception. At "6 weeks pregnant", conception was about 4 weeks ago. Weeks 1 and 2 precede conception entirely. This is restated wrongly constantly, and a two-week error in dating is a large error. 2. CYCLE LENGTH. Naegele's rule (LMP + 280 days) silently assumes a 28-day cycle with ovulation on day 14. For a 35-day cycle the unadjusted answer is a week out. This applies the adjustment; most calculators do not. 3. THE ACOG REDATING TABLE. Whether an ultrasound should REPLACE a period-based estimate depends on the discrepancy AND on how far along the scan was: more than 5 days up to 8w6d, 7 days to 15w6d, 10 days to 21w6d, 14 days to 27w6d, 21 days thereafter. Nobody recalls that table correctly from memory. Do not guess at it. Input: `method` is one of lmp | conception | ivf-day3 | ivf-day5 | ultrasound. `date` is the date that method is based on — the first day of the last period, the conception date, the transfer date, or the scan date — as YYYY-MM-DD. Free-form dates are REFUSED rather than guessed, because "03/04/2025" is two different dates a month apart depending on the reader. For `lmp`, pass `cycleLength` if it is known and is not 28. For `ultrasound`, pass `scanWeeks` and `scanDays` — the gestational age the scan reported — and pass `lmp` as well if it is known, which is what triggers the redating check. `asOf` sets the reference date for "how far along"; it defaults to today. Returns: the estimated due date, gestational age in clinical weeks-plus-days notation, the estimated conception date, days remaining, trimester, dated milestones including the anatomy-scan window and each ACOG term boundary, the full redating comparison when both an LMP and a scan were given, a list of warnings, and a `disclaimer` field. Two things to carry through to the user rather than strip. First, a due date is a reference point and NOT a prediction — most births are not on it, and the term windows are the more useful output. Second, THIS IS NOT MEDICAL ADVICE; the response says so in its payload, not just on the page. Report the warnings. They are the honest part of the answer.
YYYY-MM-DD. The date the method is based on: the FIRST DAY of the last menstrual period, the conception date, the IVF transfer date, or the date of the scan. Free-form dates are REFUSED, not guessed.
How the pregnancy is being dated. Use `lmp` unless the user has given you a conception date, a transfer date, or a scan measurement — `lmp` is what people usually know.
For `ultrasound`: the last menstrual period, YYYY-MM-DD. Supplying it is what runs the ACOG Committee Opinion 700 redating check — without it the two estimates cannot be compared and the tool says so.
YYYY-MM-DD reference date for "how far along", default today. Set it when the user is asking about a date other than now.
For `ultrasound`: the DAYS part, 0-6. Scan reports use a "12w3d" format.
For `ultrasound`: the WEEKS part of the gestational age the scan reported.
Cycle length in days, 20-45, default 28. Only affects `lmp`. Worth asking the user for: Naegele's rule assumes 28 days, and a 35-day cycle moves the estimate a week later.
Estimate a due date and gestational age from a last menstrual period, a known conception date, an IVF transfer date, or an ultrasound measurement. Use this for any pregnancy-dating question rather than doing the arithmetic. Three reasons, and they are all things models get wrong: 1. THE OFF-BY-TWO-WEEKS ERROR. Gestational age is counted from the first day of the LAST MENSTRUAL PERIOD, not from conception. At "6 weeks pregnant", conception was about 4 weeks ago. Weeks 1 and 2 precede conception entirely. This is restated wrongly constantly, and a two-week error in dating is a large error. 2. CYCLE LENGTH. Naegele's rule (LMP + 280 days) silently assumes a 28-day cycle with ovulation on day 14. For a 35-day cycle the unadjusted answer is a week out. This applies the adjustment; most calculators do not. 3. THE ACOG REDATING TABLE. Whether an ultrasound should REPLACE a period-based estimate depends on the discrepancy AND on how far along the scan was: more than 5 days up to 8w6d, 7 days to 15w6d, 10 days to 21w6d, 14 days to 27w6d, 21 days thereafter. Nobody recalls that table correctly from memory. Do not guess at it. Input: `method` is one of lmp | conception | ivf-day3 | ivf-day5 | ultrasound. `date` is the date that method is based on — the first day of the last period, the conception date, the transfer date, or the scan date — as YYYY-MM-DD. Free-form dates are REFUSED rather than guessed, because "03/04/2025" is two different dates a month apart depending on the reader. For `lmp`, pass `cycleLength` if it is known and is not 28. For `ultrasound`, pass `scanWeeks` and `scanDays` — the gestational age the scan reported — and pass `lmp` as well if it is known, which is what triggers the redating check. `asOf` sets the reference date for "how far along"; it defaults to today. Returns: the estimated due date, gestational age in clinical weeks-plus-days notation, the estimated conception date, days remaining, trimester, dated milestones including the anatomy-scan window and each ACOG term boundary, the full redating comparison when both an LMP and a scan were given, a list of warnings, and a `disclaimer` field. Two things to carry through to the user rather than strip. First, a due date is a reference point and NOT a prediction — most births are not on it, and the term windows are the more useful output. Second, THIS IS NOT MEDICAL ADVICE; the response says so in its payload, not just on the page. Report the warnings. They are the honest part of the answer.
| Argument | Type | Description |
|---|---|---|
| lmp | string | For `ultrasound`: the last menstrual period, YYYY-MM-DD. Supplying it is what runs the ACOG Committee Opinion 700 redating check — without it the two estimates cannot be compared and the tool says so. |
| asOf | string | YYYY-MM-DD reference date for "how far along", default today. Set it when the user is asking about a date other than now. |
| date* | string | YYYY-MM-DD. The date the method is based on: the FIRST DAY of the last menstrual period, the conception date, the IVF transfer date, or the date of the scan. Free-form dates are REFUSED, not guessed. |
| method* | string | How the pregnancy is being dated. Use `lmp` unless the user has given you a conception date, a transfer date, or a scan measurement — `lmp` is what people usually know. |
| scanDays | number | For `ultrasound`: the DAYS part, 0-6. Scan reports use a "12w3d" format. |
| scanWeeks | number | For `ultrasound`: the WEEKS part of the gestational age the scan reported. |
| cycleLength | number | Cycle length in days, 20-45, default 28. Only affects `lmp`. Worth asking the user for: Naegele's rule assumes 28 days, and a 35-day cycle moves the estimate a week later. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"method",
"date"
],
"properties": {
"lmp": {
"type": "string",
"description": "For `ultrasound`: the last menstrual period, YYYY-MM-DD. Supplying it is what runs the ACOG Committee Opinion 700 redating check — without it the two estimates cannot be compared and the tool says so."
},
"asOf": {
"type": "string",
"description": "YYYY-MM-DD reference date for \"how far along\", default today. Set it when the user is asking about a date other than now."
},
"date": {
"type": "string",
"description": "YYYY-MM-DD. The date the method is based on: the FIRST DAY of the last menstrual period, the conception date, the IVF transfer date, or the date of the scan. Free-form dates are REFUSED, not guessed."
},
"method": {
"enum": [
"lmp",
"conception",
"ivf-day3",
"ivf-day5",
"ultrasound"
],
"type": "string",
"description": "How the pregnancy is being dated. Use `lmp` unless the user has given you a conception date, a transfer date, or a scan measurement — `lmp` is what people usually know."
},
"scanDays": {
"type": "number",
"description": "For `ultrasound`: the DAYS part, 0-6. Scan reports use a \"12w3d\" format."
},
"scanWeeks": {
"type": "number",
"description": "For `ultrasound`: the WEEKS part of the gestational age the scan reported."
},
"cycleLength": {
"type": "number",
"description": "Cycle length in days, 20-45, default 28. Only affects `lmp`. Worth asking the user for: Naegele's rule assumes 28 days, and a 35-day cycle moves the estimate a week later."
}
}
}