Skip to content

TDE

by danha2048 · remote · no sign-in to list tools · v1.0.0 · published by GitHub user danha2048

Prices a trade deal month by month: what an order does to your cash, and what to ask for instead.

Changes · 15

17 tools: 15 change things and 2 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http tde https://app.tdehq.com/mcp/

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Changes things 15Claude Code: ask
  • capabilitiesWhat this server answers: its endpoints, the lanes and whether each is live, the provenance labels, and the payment presets and splits a profile can use.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What this server answers: its endpoints, the lanes and whether each is live, the provenance labels, and the payment presets and splits a profile can use. Takes no input. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: What TDE serves
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • cash_runwayHow long the caller's cash lasts if costs move as the lane's price scenario says.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How long the caller's cash lasts if costs move as the lane's price scenario says. Needs cash on hand, revenue, margin and fixed costs in `profile.business`; each one absent is named in `missing` (`projected: false`). Returns `runway_months_low`/`mid`/`high` and `worst_drawdown_gbp` over `horizon_months` (default 12); a runway longer than the horizon is `null`. When the profile also plans an order, the plan's cash answer is added (`source: "plan"`): `plan_first_break_month` and `plan_first_break_amount_gbp` (first month below the cash floor), `plan_first_below_zero_month`, `plan_lowest_cash_gbp`, `plan_horizon_months`. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Cash runway
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • cost_scenarioWhat the goods could cost over the coming months: a `low`/`mid`/`high` band ESTIMATED from what this lane's past disruption episodes did to goods prices.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What the goods could cost over the coming months: a `low`/`mid`/`high` band ESTIMATED from what this lane's past disruption episodes did to goods prices. A band from measured history, not a forecast. Freight is held at the caller's own figure. `horizon_months` is optional. `events_behind_it` counts the past episodes behind the band. `projected: false` when the goods sit outside the ten measured categories or no price series exists for them on this lane. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Cost scenario
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • duty_at_stakeDuty on a year of the caller's goods at their stated rate, and what a preference claim under the UK-India trade agreement could be worth.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Duty on a year of the caller's goods at their stated rate, and what a preference claim under the UK-India trade agreement could be worth. COMPUTED from `profile` alone (spend, duty rate, preference status), with no network call. Whether goods qualify depends on their code and the rules of origin; the response names where to check. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Duty at stake
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • forecaster_backtestThe forecaster's backtest for one past disruption event, DERIVED: how many tracked series moved after the event's detected start, out of how many could be tested.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    The forecaster's backtest for one past disruption event, DERIVED: how many tracked series moved after the event's detected start, out of how many could be tested. `event_id` is optional (default: the first event; an unknown id is refused by name). `measurable: false` means the event sits too close to the edge of its series' history to test; `available: false` means no backtest is built on this deployment. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Forecaster backtest
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • landed_costCIF value, duty and import VAT, in GBP.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    CIF value, duty and import VAT, in GBP. Send the goods value as `goods_gbp`, or as `goods` with `currency`; amounts in another currency are converted at the Bank of England rate TDE holds, stated under `fx_rate` with its date. Give `duty_rate_pct`, or a `commodity_code` and `origin` for goods entering the UK: the rate is then read from the UK tariff and stated under `duty_lookup`. When more than one code fits, `choose_code` lists them and no total is given. A rate that cannot be found is asked for, never set to 0. For goods entering another country, `duty_rate_pct` and `vat_rate_pct` are required. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Landed cost
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lane_stateA trade lane's current state (how freely ships are passing the chokepoints on its route) and the date the data covers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    A trade lane's current state (how freely ships are passing the chokepoints on its route) and the date the data covers. `corridor_id` names the lane (for example `uk_india`; `capabilities` lists them); default is the deployment's live lane. READ from the daily pipeline: `as_of` is the data date, not today. `excluded_passages` names chokepoints left out because their feed stopped reporting. `transits_to` is the date of the newest ship count behind the state; `stale` is true when it is more than 14 days old. A lane with nothing built returns `state: null` with its absences named. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Lane state
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • learned_inputsWhat the record has taught the engine: each model, its standing, its published backtest, and whether it may change a figure a reader sees (false for every model today).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What the record has taught the engine: each model, its standing, its published backtest, and whether it may change a figure a reader sees (false for every model today). `proposals` is empty, with a `reason`, until a learned proposal is published with its backtest. `profile` is optional and does not change the answer today (`reader_specific` says so). Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Learned inputs
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • margin_cushionHow much of a gross margin survives the cost move TDE has MEASURED for the goods.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How much of a gross margin survives the cost move TDE has MEASURED for the goods. A v1 heuristic. Pass either `profile` (`{"business": {...}}`, with `margin_pct` and the goods' code or category) or `margin_pct` (percent) and `hs6` (six-digit commodity code) together; both reach the same calculation. `covered: false` means the goods sit outside the ten HS chapters measured, and no figure is given. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Margin cushion
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • plan_ledgerEvery pound the `test_order` plan moves, month by month.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Every pound the `test_order` plan moves, month by month. Takes the same `profile`, `regime_state` and `corridor_id` as `test_order` and builds the same plan without re-solving it, so cash lines and cost lines agree with that plan. `months` is monthly, the grain the plan is solved at. `ledgered: false` with `missing` means no plan exists for this profile. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Plan ledger, month by month
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • plan_productsA joint plan for up to 30 products sharing one cash floor, monthly budget, credit facility and supplier capacity.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    A joint plan for up to 30 products sharing one cash floor, monthly budget, credit facility and supplier capacity. `profile["navigator"]["products"]` is the list of product rows (each with `id`, `label`, `monthly_demand_units`, `monthly_spend_gbp` and optional `unit_sell_price_gbp`, `starting_inventory_units`). Products are planned together, not separately and summed. `which_product_lost` names which product gave up units to hold a shared limit, and why; `would_have_been_feasible_separately` names products that pass alone but not together. `regime_state` and `corridor_id` as in `test_order`. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Plan several products together
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • quote_checkWhere a supplier's quote sits in the MEASURED customs-value band (HMRC unit values, last twelve months) for one six-digit code and origin.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Where a supplier's quote sits in the MEASURED customs-value band (HMRC unit values, last twelve months) for one six-digit code and origin. `hs6` and `origin` (country) are required. `quote` is GBP per unit; `unit_mass_kg` converts it to GBP per kilogram, the band's unit. Only GBP quotes are placed (`currency` unset or `"GBP"`). A customs unit value averages many shipments, so `placement` says where the quote sits in the band, not whether it is overpriced. `band.available: false` with `band.reason` when no band is measured for that code and origin. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Check a quote
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • risk_registerWhat could go wrong on the caller's own figures, priced by stage: Source, Terms, Order, Pay, Ship, Clear, Cash.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What could go wrong on the caller's own figures, priced by stage: Source, Terms, Order, Pay, Ship, Clear, Cash. Takes the same inputs as `test_order` and prices against the same plan. Each row has an `exposure` (the cost if it happens), `covers` (what would cover it) and a `lever` (that cover's cost) where one is priced; otherwise an `absence` naming the one figure that would unlock it. `not_priced` lists exposures this register does not price (for example LC fees, demurrage and quality claims). Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Risk register
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • test_orderWhether the next order can be placed this month, and how large, checked month by month against the caller's cash, budget and stock limits.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Whether the next order can be placed this month, and how large, checked month by month against the caller's cash, budget and stock limits. `profile` is `{"business": {...}, "navigator": {...}}`. Needs `navigator.monthly_demand_units` (a monthly rate, not one order), `business.monthly_spend_gbp` (GBP/month), `business.cash_on_hand_gbp` and `business.monthly_revenue_gbp`; optional `navigator` keys include `navigator.unit_sell_price_gbp`, `supplier_deposit_pct`, `shipping_time_months` and `cash_floor_gbp`. `corridor_id` is the lane (default: live); `regime_state` overrides the lane's state. Returns `first_order`, `status` (`feasible`, `best_achievable` with `compromises`, or `below_zero_no_floor`) and `minimum_relaxation`. `deal_terms` (where enabled) judges payment terms. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Test an order
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • veteran_notesWhat usually goes wrong for these goods on this lane, and what to check before committing: sourced practitioner notes.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What usually goes wrong for these goods on this lane, and what to check before committing: sourced practitioner notes. `hs6_codes` (six-digit codes) and `corridor_id` are optional; without them only the notes that apply to any goods or any lane are returned. `lane_covered` and `chapter_specific` say whether anything more specific than the general notes matched. `proposed` and `rejected` count the lines a model proposed and the lines refused for promising a fixed timeframe. Each line carries its citation: `source_url`, `source_title`, `reviewed` (the date a person checked it against that source), `synthesis` (a reading of several sources rather than one source's words) and `pdf`. A line with no source is not served, so `every_line_sourced` is true. Information, not advice.

    Annotations the server declares

    • title: Veteran notes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 2Claude Code: allow
  • compare_lanesOne of the caller's saved products on the deployment's live lane and on a second lane, against one cash position.No findings

    Why it is in this group

    • The name "compare_lanes" says "compare": a word for reading.
    Description, as the server wrote it
    One of the caller's saved products on the deployment's live lane and on a second lane, against one cash position. `second_origin` names the second lane's origin; `product_id` picks the product (default: the first in `navigator.products`). `second_quote_gbp_per_unit` and `second_lead_time_months` describe the second lane; a measured sea transit replaces a typed lead time where the lane is live. Each lane carries `unit_cost_provenance`, `lead_time_provenance` and `duty_provenance` (READ or PROXY; duty is empty when no rate was found). `available: false` with `missing` when the comparison cannot be built. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Compare lanes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_quotesOne to five supplier quotes, each run as a whole-order plan against the caller's `profile` through the same engine as `test_order`, and ranked: feasible first, then total cost, the…No findings

    Why it is in this group

    • The name "compare_quotes" says "compare": a word for reading.
    Description, as the server wrote it
    One to five supplier quotes, each run as a whole-order plan against the caller's `profile` through the same engine as `test_order`, and ranked: feasible first, then total cost, then lead time. Each quote: `label` and `unit_price` required; `currency` one of GBP, USD, INR, CNY, EUR, THB, MYR (default GBP); optional `moq_units`, `lead_time_months`, `payment_terms_months`, `capacity_units_month` and `unit_mass_kg` replace the profile's figure for that quote only (`inputs_used` says which). Quotes in one call are ranked against the same plan. A currency with no Bank of England rate is named in `missing` and not ranked. `verdict` is one sentence. Figures carry a `provenance` stamp (READ, MEASURED, DERIVED, COMPUTED, PROXY or ESTIMATED; defined in the server instructions) and a `basis`; `missing` names any figure only the caller holds. Information, not advice.

    Annotations the server declares

    • title: Compare quotes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http tde https://app.tdehq.com/mcp/

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__tde__compare_lanes",
      "mcp__tde__compare_quotes"
    ],
    "ask": [
      "mcp__tde__test_order",
      "mcp__tde__margin_cushion",
      "mcp__tde__landed_cost",
      "mcp__tde__lane_state",
      "mcp__tde__plan_ledger",
      "mcp__tde__plan_products",
      "mcp__tde__risk_register",
      "mcp__tde__cost_scenario",
      "mcp__tde__cash_runway",
      "mcp__tde__duty_at_stake",
      "mcp__tde__quote_check",
      "mcp__tde__forecaster_backtest",
      "mcp__tde__learned_inputs",
      "mcp__tde__veteran_notes",
      "mcp__tde__capabilities"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as tde. Review it before you use it.