MCP-Server

mfgcalcs

com.mfgcalcs/mfgcalcs

Was dieses MCP kann

Provides manufacturing calculators, sourcing optimization, tariff and economic data, forecasts, benchmarks, citations, provenance, and revision tracking.

ask
Answer manufacturing questions from committed data; deterministic, no LLM. Missing subjects and product ties ask for clarification. Calculators collect required inputs, retain corrections via `context`, and run when complete; defaults appear only in explicit worked examples. Statistics name period, frequency, scope and measure. `detail`: `answer` is compact, `evidence` adds scoped evidence and calculator guidance, `full` is default. Pass returned `context` for follow-ups. Shared by MFGChat, MFGSearch and `/api/answer`. Cite resolved sources. Try: {"query":"OEE","detail":"evidence"}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': "A full question, e.g. 'tariff on fasteners' or 'diesel price'"}, 'detail': {'enum': ['answer', 'evidence', 'full'], 'type': 'string', 'default': 'full', 'description': 'Response depth. `answer` is compact; `evidence` adds scoped evidence and adjacent facts; `full` preserves the compatibility-default forensic payload. Defaults to `full`.'}, 'context': {'type': 'string', 'maxLength': 1024, 'description': "Optional. The `context` string from a previous ask response. Pass it to ask a follow-up: 'and what about vietnam' or 'why did it go up' then resolve against the earlier subject instead of being answered on their own."}}, 'additionalProperties': False}
brief
Describe a SITUATION rather than a question and get every fact bearing on it, each answered and cited. `ask` for one figure, `brief` for a decision. Names what it could not establish. Try: {"situation":"sourcing bearings from china"}
Eingabeschema
{'type': 'object', 'required': ['situation'], 'properties': {'situation': {'type': 'string', 'description': "In plain words: 'importing $250,000 of aluminium from vietnam'."}}, 'additionalProperties': False}
get_calculator
Get a calculator's inputs (labels, units, defaults, min/max) and formula before running it. requiresPositive marks a field whose documented minimum of 0 is really exclusive. Use the tool slug from search_calculators. Try: {"tool":"oee"}
Eingabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'tool': {'type': 'string', 'description': "Calculator slug, e.g. 'oee' or 'unit-cost'"}}, 'additionalProperties': False}
get_change_events
Get every published or revised observation in order with a cursor. Poll by offset instead of re-pulling series. Same engine as /api/events and the vintage archive.
Eingabeschema
{'type': 'object', 'properties': {'type': {'type': 'string', 'description': "'published' or 'revised'"}, 'limit': {'type': 'string', 'description': 'Page size (bounded server-side)'}, 'since': {'type': 'string', 'description': "Non-negative integer offset from a previous page's cursor; omit to start at 0"}, 'series': {'type': 'string', 'description': 'Series key, slug, title, alias, or archive key.'}, 'artifact': {'type': 'string', 'description': "Artifact filter, e.g. 'econData'."}}, 'additionalProperties': False}
get_citation
Get a ready-to-paste citation for an MFG Calcs dataset — including, for vintage-tracked datasets, the ?asOf= URL that returns the numbers exactly as they read on the access date, so the citation stays checkable after revisions instead of rotting. Carries a stable site identifier rather than a DOI; none has been minted for this collection yet, and the payload says so. Call with no dataset for the catalogue of citable datasets. Same engine as /api/cite.
Eingabeschema
{'type': 'object', 'properties': {'dataset': {'type': 'string', 'description': 'Dataset id from the catalogue; omit to list what is citable'}, 'accessed': {'type': 'string', 'description': 'ISO date (YYYY-MM-DD) the data was accessed; defaults to today'}}, 'additionalProperties': False}
get_freshness
Get the freshness contract for MFG Calcs' live data: every series with its measured publishing cadence, latest period, age in days, and an honest state (current | due | stale | unknown). This is the number that decides 'answer from memory or call the tool' — and the cheapest way to know whether a re-sync is worth it. Derived from the committed data-status census; stale series are reported as stale.
Eingabeschema
{'type': 'object', 'properties': {'series': {'type': 'string', 'description': 'Series key, slug, title, or approved alias; omit for all series.'}}, 'additionalProperties': False}
get_index
Fetch a published MFG Calcs index, board, ledger, forecast, vintage, revision record, seasonal series, or HS-NAICS map. Tariff targets distinguish the tracked manufacturing panel's observed effective calculated-duty rate; origins are statistically associated with those reported Calculated Duties, not causes. The selected index's JSON Schema branch lists its accepted fields; unsupported, dependent, or conflicting fields return invalid params. Try: {"index":"get_state_cost_index","filter":"Ohio"}.
Eingabeschema
{'type': 'object', 'oneOf': [{'properties': {'index': {'const': 'get_tariff_index'}, 'points': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'rank_landed_cost'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'reshoring_score'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_tariff_bill'}, 'limit': {}, 'points': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_policy_premium'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_tariff_dollars_by_country'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_source_shift'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_tariff_effect'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_sourcing_diversification'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_import_price_movers'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_duty_free_routes'}, 'limit': {}, 'filter': {}, 'country': {}, 'scheduleYear': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_wage_board'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_forecast'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_forecast_accuracy'}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_cost_pressure_index'}, 'points': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_input_cost_diffusion'}, 'points': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_supply_chain_fragility'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_state_cost_index'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_cost_pass_through'}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_manufacturing_pmi'}, 'points': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'limit']}}], 'properties': {'index': {'const': 'get_reshoring_break_even'}, 'limit': {}, 'filter': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_tariff_action_ledger'}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_eti_outlook'}}, 'additionalProperties': False}, {'properties': {'asOf': {}, 'index': {'const': 'get_vintages'}, 'limit': {}, 'filter': {}}, 'dependencies': {'asOf': ['filter']}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_revisions'}, 'limit': {}, 'since': {}, 'filter': {}, 'artifact': {}}, 'additionalProperties': False}, {'properties': {'index': {'const': 'get_seasonally_adjusted'}, 'filter': {}}, 'additionalProperties': False}, {'allOf': [{'not': {'required': ['filter', 'naics']}}], 'properties': {'index': {'const': 'get_hs_naics'}, 'limit': {}, 'naics': {}, 'filter': {}}, 'additionalProperties': False}], 'required': ['index'], 'properties': {'asOf': {'type': 'string', 'maxLength': 500, 'description': 'Vintage cutoff (YYYY-MM-DD).'}, 'index': {'type': 'string', 'maxLength': 500, 'description': 'Published target.'}, 'limit': {'type': 'string', 'maxLength': 500, 'description': 'Rows: "all" or count.'}, 'naics': {'type': 'string', 'maxLength': 500, 'description': 'Six-digit NAICS code for get_hs_naics.'}, 'since': {'type': 'string', 'maxLength': 500, 'description': 'Revision cutoff (YYYY-MM-DD).'}, 'filter': {'type': 'string', 'maxLength': 500, 'description': 'Target selector; meaning depends on index.'}, 'points': {'type': 'string', 'maxLength': 500, 'description': 'History: "latest", "all", or count.'}, 'country': {'type': 'string', 'maxLength': 500, 'description': 'Duty-free origin.'}, 'artifact': {'type': 'string', 'maxLength': 500, 'description': 'Revision artifact filter.'}, 'scheduleYear': {'type': 'string', 'maxLength': 500, 'description': 'Duty-free HTS year.'}}, 'additionalProperties': False}
get_provenance
Get the MFG Calcs Provenance Manifest: the verifiable record for every branded index and ledger on the site. For each one it returns a SHA-256 of the committed artifact and of every committed public-data input it was built from, plus the generator that reproduces it and the page that renders it. Use this to VERIFY a number before quoting it: re-hash the committed artifact (integrity), re-run the named generator on the committed inputs (reproducibility), and read the git history (timestamp). Takes no arguments. The hashes prove the artifacts are intact and reproducible, not the correctness of the underlying government data. Cite the returned url.
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_receipts
Get the append-only archive of Ed25519-signed data receipts: every value signed for a series within the rolling window (current + previous signing year), revisions retained, each entry carrying its claim, claimHash, signature, and keyId. Call with no series for the catalogue plus the keyId→publicKey map and the permanent yearly ledger URLs. Same engine as /api/receipts. Try: {}
Eingabeschema
{'type': 'object', 'properties': {'series': {'type': 'string', 'description': 'Series key, slug, title, or approved alias; omit for the catalogue.'}}, 'additionalProperties': False}
get_revisions
Get every restatement of a published figure with its old value, new value, and first-known date. Filter by series, artifact, since, or limit; omit filters for the full record and per-series revision summary. Use it to judge whether a recent print needs a revision caveat. Cite the returned url.
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'string', 'maxLength': 500, 'description': 'Max revisions to return.'}, 'since': {'type': 'string', 'maxLength': 500, 'description': 'ISO date (YYYY-MM-DD); only later revisions.'}, 'series': {'type': 'string', 'maxLength': 500, 'description': 'Series key, slug, title, approved alias, or archive key. Unknown or ambiguous values are errors.'}, 'artifact': {'type': 'string', 'maxLength': 500, 'description': 'Artifact name to scope the record to.'}}, 'additionalProperties': False}
get_vintages
Get the MFG Calcs Vintage Archive: reproduce what a series said on a past date, before later revisions. Use series + asOf (YYYY-MM-DD) for the historical snapshot, series alone for its revision trail, or omit both for the catalogue. Multiple entries for one period indicate revision. Cite the returned url.
Eingabeschema
{'type': 'object', 'properties': {'asOf': {'type': 'string', 'maxLength': 500, 'description': 'ISO date (YYYY-MM-DD). Returns the series as it stood on that date, ignoring every revision published since.'}, 'limit': {'type': 'string', 'maxLength': 500, 'description': 'Max observations to return.'}, 'series': {'type': 'string', 'maxLength': 500, 'description': 'Series key, slug, title, approved alias, or archive key; omit for the catalogue.'}}, 'dependencies': {'asOf': ['series']}, 'additionalProperties': False}
get_whats_new
Get the daily what-changed digest for the newest data day, in one call with links deeper: every agency series that published a new reading, every agency value restated (derived signals that recomputed are listed separately by name), every projection graded against its printed actual, and the day's Market Wire editions. Designed to be the first call of an agent's day: if `date` hasn't advanced since your last look, nothing moved. Empty days are reported empty with the reason, never padded. Try: {}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
lookup_tariff
Look up U.S. manufacturing import tariffs: HTS General/Special fields, informational Chapter 99 references, observed effective calculated-duty rate, eligible families' aggregate customs unit value, source shares, and named-source HHI floor with retained-board coverage. Search by keyword, family, or HTS code. Schedule fields and Chapter 99 references do not establish entry liability; unit value is not a transaction price. USITC reference data, not a customs ruling. Cite the returned url. Try: {"query":"steel"}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Max family matches, default 5; allowed range 1-10'}, 'query': {'type': 'string', 'description': "Keyword, family key, or HTS code/prefix, e.g. 'bearings' or '8482'"}}, 'additionalProperties': False}
optimize_sourcing
Solve the cheapest legal supplier mix as a real linear program: given candidate suppliers with unit costs, tariff rates, freight and capacities, return the exact cost-minimizing allocation under a demand requirement, per-supplier capacity limits, and an optional diversification cap on any one supplier's share. Solved by HiGHS, the open-source solver inside SciPy, so this is the PROVEN optimum with dual prices, not a heuristic ranking. Answers 'how should I split this volume?', 'what does the diversification cap actually cost me?', and 'which supplier's capacity is the binding constraint?'. Pass suppliers as a JSON array of objects with name and unitCost, plus optional tariffPct, freightPerUnit and capacity; landed cost per unit is unitCost x (1 + tariffPct/100) + freightPerUnit. Call it with no arguments for the parameter documentation and a runnable example. The LP text is echoed back so the run is reproducible. Cite the returned url.
Eingabeschema
{'type': 'object', 'properties': {'demand': {'type': 'string', 'description': "Total units to allocate, e.g. '1000'."}, 'suppliers': {'type': 'string', 'description': 'JSON array, e.g. [{"name":"vietnam","unitCost":9.8,"tariffPct":8,"freightPerUnit":1.1},{"name":"domestic","unitCost":12.5,"freightPerUnit":0.4,"capacity":700}]. Omit for usage docs.'}, 'maxSharePct': {'type': 'string', 'description': "Diversification cap: the most any single supplier may take, in percent, e.g. '60'."}}, 'additionalProperties': False}
run_calculator
Run a manufacturing calculation. Provide inputs by field key or slugified label (see get_calculator); missing inputs use the calculator's documented defaults. Returns labeled results with units, the formula, and a citation URL that should be shared with the user. Inputs are checked against their documented min/max; an impossible value is refused by name. derivation.confidence grades the OUTPUT: "none" if any result row could not be computed. Try: {"tool":"oee"} (defaults fill every input)
Eingabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'tool': {'type': 'string', 'description': 'Calculator slug from search_calculators'}, 'inputs': {'type': 'object', 'description': 'Input values keyed by field key or label param, e.g. {"availability": 90}', 'additionalProperties': {'type': ['number', 'string']}}}, 'additionalProperties': False}
search_calculators
Search MFG Calcs' library of 5,000+ manufacturing calculators (machining, molding, welding, OEE, cost estimating, energy, quality, maintenance, and more). Returns matching calculators with their tool slug for run_calculator. Try: {"query":"OEE"}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Max results, default 10'}, 'query': {'type': 'string', 'description': "What to calculate, e.g. 'OEE' or 'injection molding cycle time'"}}, 'additionalProperties': False}
search_site
Search everything on mfgcalcs.com beyond calculators: 64 live economic data series (imports, prices, wages, energy), 57 tariff families, state cost data, calculator categories, and datasets. Returns typed matches with URLs to cite. Use search_calculators for the 5,000+ calculators themselves. Try: {"query":"industrial electricity price"}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Max matches, default 10, max 25'}, 'query': {'type': 'string', 'description': "Anything: 'steel imports', 'fastener tariff', 'texas electricity'"}}, 'additionalProperties': False}
Hinzugefügt
brief
17. September 2026 12:36
Hinzugefügt
ask
17. September 2026 12:36
Hinzugefügt
optimize_sourcing
17. September 2026 12:36
Hinzugefügt
get_revisions
17. September 2026 12:36
Hinzugefügt
get_vintages
17. September 2026 12:36
Hinzugefügt
get_citation
17. September 2026 12:36
Hinzugefügt
get_change_events
17. September 2026 12:36
Hinzugefügt
get_freshness
17. September 2026 12:36
Hinzugefügt
get_receipts
17. September 2026 12:36
Hinzugefügt
get_whats_new
17. September 2026 12:36
Hinzugefügt
search_site
17. September 2026 12:36
Hinzugefügt
get_provenance
17. September 2026 12:36
Hinzugefügt
get_index
17. September 2026 12:36
Hinzugefügt
lookup_tariff
17. September 2026 12:36
Hinzugefügt
run_calculator
17. September 2026 12:36
Hinzugefügt
get_calculator
17. September 2026 12:36
Hinzugefügt
search_calculators
17. September 2026 12:36