{"serverId":"mcp-registry/io.github.sawftware-apps/commodities-sh","tools":[{"name":"calendar.get","fixed":{"name":"calendar_get","description":"List EIA, USDA, and CFTC release calendar entries with cadence, typical Eastern time, and next-hint notes. Free discovery tool — call before scheduling agents around inventory or WASDE prints.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Release Calendar"},"changes":[{"kind":"name","detail":"Renamed \"calendar.get\" → \"calendar_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"catalog.list","fixed":{"name":"catalog_list","description":"List every commodity instrument in the catalog with sector, unit, primary source, and freshness metadata. Call this first to discover valid codes before price.latest or inventory.get. Free discovery tool — no payment required.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List Instruments"},"changes":[{"kind":"name","detail":"Renamed \"catalog.list\" → \"catalog_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":96,"tokensAfter":96},{"name":"decision.get","fixed":{"name":"decision_get","description":"Build a deterministic decision pack for energy, metals, ags, or all sectors. Returns method, signals with direction/rationale, an embedded snapshot, and a disclaimer — no ML model, rule-based only.","inputSchema":{"type":"object","required":["sector"],"properties":{"sector":{"enum":["energy","metals","ags","all"],"type":"string","description":"Sector for the decision pack. Use all to bundle every sector."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Decision Pack"},"changes":[{"kind":"name","detail":"Renamed \"decision.get\" → \"decision_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"fundamentals.get","fixed":{"name":"fundamentals_get","description":"Fetch a fundamentals document: USDA WASDE, crop progress, export sales, or USGS mineral summaries. Choose kind based on the ags/metals question you are answering.","inputSchema":{"type":"object","required":["kind"],"properties":{"kind":{"enum":["wasde","crop_progress","export_sales","usgs"],"type":"string","description":"Fundamentals report kind. Example: wasde for World Agricultural Supply and Demand Estimates."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"USDA/USGS Fundamentals"},"changes":[{"kind":"name","detail":"Renamed \"fundamentals.get\" → \"fundamentals_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"fx.latest","fixed":{"name":"fx_latest","description":"Return the latest FX rate observation for a pair or FRED FX series. Useful alongside commodity prices when converting cash values across currencies.","inputSchema":{"type":"object","required":["pair"],"properties":{"pair":{"type":"string","description":"FX pair or series id. Example: EURUSD, USDCNY, DTWEXBGS."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Latest FX Rate"},"changes":[{"kind":"name","detail":"Renamed \"fx.latest\" → \"fx_latest\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":106,"tokensAfter":106},{"name":"inventory.get","fixed":{"name":"inventory_get","description":"Fetch EIA weekly petroleum inventory levels. Omit series to list all latest inventory points, or pass a series key to get week-over-week change, vs-5y deviation, and a surprise label for that series.","inputSchema":{"type":"object","properties":{"series":{"type":"string","description":"Optional EIA inventory series key. Omit to return all latest inventory rows. Example: crude_stocks."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"EIA Inventory"},"changes":[{"kind":"name","detail":"Renamed \"inventory.get\" → \"inventory_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"positioning.get","fixed":{"name":"positioning_get","description":"Return the latest CFTC Commitments of Traders managed-money positioning for an instrument code. Includes long, short, net, and week-over-week net change with source URL.","inputSchema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"Instrument code from catalog.list. Example: CL, NG, GC, ZC."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"COT Positioning"},"changes":[{"kind":"name","detail":"Renamed \"positioning.get\" → \"positioning_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"price.history","fixed":{"name":"price_history","description":"Return historical observations for an instrument code (up to 500 points). Use after price.latest when you need a short time series for the same code.","inputSchema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"Instrument code from catalog.list. Example: CL, GC, ZC."},"limit":{"type":"number","description":"Number of historical points to return. Max 500, default 60."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Price History"},"changes":[{"kind":"name","detail":"Renamed \"price.history\" → \"price_history\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"price.latest","fixed":{"name":"price_latest","description":"Return the latest cash/fundies observation for one instrument code. Use catalog.list to discover codes such as CL, GC, or ZC. Response follows the shared observation contract with provenance and license tags.","inputSchema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"Instrument code from catalog.list. Example: CL, GC, ZC."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Latest Price"},"changes":[{"kind":"name","detail":"Renamed \"price.latest\" → \"price_latest\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"snapshot.get","fixed":{"name":"snapshot_get","description":"Build a sector snapshot bundling prices, inventories, spreads, and related fundies for energy, metals, ags, or all sectors. Prefer this over calling many single-observation tools when you need a full sector picture.","inputSchema":{"type":"object","required":["sector"],"properties":{"sector":{"enum":["energy","metals","ags","all"],"type":"string","description":"Sector to snapshot. Use all to receive energy, metals, and ags together."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Sector Snapshot"},"changes":[{"kind":"name","detail":"Renamed \"snapshot.get\" → \"snapshot_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":142,"tokensAfter":142},{"name":"spread.get","fixed":{"name":"spread_get","description":"Compute a derived spread observation: 3-2-1 crack, soybean crush, WTI-Brent basis, or calendar (calendar requires licensed curve data and may return available=false). Prefer crack/crush/basis for live derived values with formula and inputs.","inputSchema":{"type":"object","required":["type"],"properties":{"root":{"type":"string","description":"Optional root symbol for calendar spreads. Example: CL. Ignored for crack/crush/basis."},"type":{"enum":["crack","crush","basis","calendar"],"type":"string","description":"Spread type to compute. Example: crack for 3-2-1 gasoline/distillate crack."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Derived Spread"},"changes":[{"kind":"name","detail":"Renamed \"spread.get\" → \"spread_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":185,"tokensAfter":185}],"toolsChanged":11,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}