Travel Per Diem & Allowance Calculator

Compliant per diems in one call: official US GSA, German BMF and UK HMRC rates, with a trip…

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
74%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,460Tokens (tool definitions)
~17.8 KBTypical response size
Significant attention impact (5.05% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "travel-per-diem": {
      "url": "https://syntropicapi.com/mcp/travel-per-diem/mcp"
    }
  }
}

Remote endpoints

https://syntropicapi.com/mcp/travel-per-diem/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_per_diem_rates(regime, country, city, state, postal_code, ...)

Returns the lodging and meal allowance for one location under one regime, with the regime's breakdown (BMF meal deductions, GSA M&IE breakdown and seasons, HMRC meal/room rates), fallbacks applied, source citation and data freshness. us-gsa picks the fiscal year by date (FY2026: 2025-10-01..2026-09-30, FY2027: 2026-10-01..2027-09-30).

Input Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "de-bmf (Germany), us-gsa (US CONUS), us-state (US State Dept foreign) or uk-hmrc (UK overseas scale rates)"
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60,
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "Country",
      "description": "ISO alpha-2 code or English/German name. Default: DE for de-bmf, US for us-gsa"
    },
    "city": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ],
      "title": "City",
      "description": "City; unlisted cities fall back per the regime's rules"
    },
    "state": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "State",
      "description": "US state code (us-gsa)"
    },
    "postal_code": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 10
        },
        {
          "type": "null"
        }
      ],
      "title": "Postal Code",
      "description": "US ZIP (us-gsa) or French postcode (de-bmf)"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Date",
      "description": "Travel date (ISO 8601). Default: today (UTC)"
    }
  },
  "required": [
    "regime"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "Regime the rate comes from"
    },
    "date": {
      "type": "string",
      "format": "date",
      "title": "Date",
      "description": "Date the rate applies to"
    },
    "currency": {
      "type": "string",
      "title": "Currency",
      "description": "ISO 4217 currency of the summary fields"
    },
    "location": {
      "properties": {
        "country": {
          "type": "string",
          "title": "Country",
          "description": "ISO 3166-1 alpha-2 code of the rate's country (after any fallback)"
        },
        "country_name": {
          "type": "string",
          "title": "Country Name",
          "description": "English country name"
        },
        "label": {
          "type": "string",
          "title": "Label",
          "description": "Location as named by the source"
        },
        "matched_by": {
          "type": "string",
          "title": "Matched By",
          "description": "How the input was matched: city, county, postal_code, country, fallback or standard"
        }
      },
      "type": "object",
      "required": [
        "country",
        "country_name",
        "label",
        "matched_by"
      ],
      "title": "Location",
      "description": "The location that was resolved from the input"
    },
    "lodging": {
      "type": "number",
      "title": "Lodging",
      "description": "Per-night lodging figure (BMF flat rate, GSA maximum, HMRC room rate)"
    },
    "meals_full_day": {
      "type": "number",
      "title": "Meals Full Day",
      "description": "Meals allowance for a full day (BMF 24 h rate, GSA M&IE, HMRC 24-hour rate)"
    },
    "meals_partial_day": {
      "type": "number",
      "title": "Meals Partial Day",
      "description": "Reduced day (BMF arrival/departure/>8 h, GSA 75 % first/last day, HMRC over-10-hours)"
    },
    "de_bmf": {
      "anyOf": [
        {
          "properties": {
            "full_day": {
              "type": "number",
              "title": "Full Day",
              "description": "Allowance for 24 h absence (EUR)"
            },
            "partial_day": {
              "type": "number",
              "title": "Partial Day",
              "description": "Allowance for arrival/departure day or >8 h one-day trip (EUR)"
            },
            "lodging_flat": {
              "type": "number",
              "title": "Lodging Flat",
              "description": "Übernachtungspauschale per night for employer reimbursement (EUR)"
            },
            "deduction_breakfast": {
              "type": "number",
              "title": "Deduction Breakfast",
              "description": "Deduction if breakfast is provided: 20 % of full_day"
            },
            "deduction_lunch": {
              "type": "number",
              "title": "Deduction Lunch",
              "description": "Deduction if lunch is provided: 40 % of full_day"
            },
            "deduction_dinner": {
              "type": "number",
              "title": "Deduction Dinner",
              "description": "Deduction if dinner is provided: 40 % of full_day"
            },
            "domestic": {
              "type": "boolean",
              "title": "Domestic",
              "description": "True for trips inside Germany"
            }
          },
          "type": "object",
          "required": [
            "full_day",
            "partial_day",
            "lodging_flat",
            "deduction_breakfast",
            "deduction_lunch",
            "deduction_dinner",
            "domestic"
          ],
          "title": "BmfDetail"
        },
        {
          "type": "null"
        }
      ],
      "description": "de-bmf breakdown (only for regime de-bmf)"
    },
    "us_gsa": {
      "anyOf": [
        {
          "properties": {
            "fiscal_year": {
              "type": "integer",
              "title": "Fiscal Year",
              "description": "US federal fiscal year (Oct 1 – Sep 30)"
            },
            "destination": {
              "type": "string",
              "title": "Destination",
              "description": "GSA destination name or 'Standard CONUS rate'"
            },
            "state": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State",
              "description": "US state code"
            },
            "county": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "County",
              "description": "County / location defined by GSA"
            },
            "lodging": {
              "type": "integer",
              "title": "Lodging",
              "description": "Maximum lodging rate for the requested date (USD, taxes excluded)"
            },
            "mie": {
              "type": "integer",
              "title": "Mie",
              "description": "Meals & incidental expenses rate per full day (USD)"
            },
            "breakfast": {
              "type": "integer",
              "title": "Breakfast",
              "description": "M&IE breakdown: breakfast"
            },
            "lunch": {
              "type": "integer",
              "title": "Lunch",
              "description": "M&IE breakdown: lunch"
            },
            "dinner": {
              "type": "integer",
              "title": "Dinner",
              "description": "M&IE breakdown: dinner"
            },
            "incidentals": {
              "type": "integer",
              "title": "Incidentals",
              "description": "M&IE breakdown: incidental expenses"
            },
            "first_last_day": {
              "type": "number",
              "title": "First Last Day",
              "description": "75 % of M&IE for the first and last day of travel"
            },
            "seasons": {
              "items": {
                "properties": {
                  "start": {
                    "type": "string",
                    "title": "Start",
                    "description": "Season start as MM-DD"
                  },
                  "end": {
                    "type": "string",
                    "title": "End",
                    "description": "Season end as MM-DD"
                  },
                  "lodging": {
                    "type": "integer",
                    "title": "Lodging",
                    "description": "Maximum lodging rate per night (USD)"
                  },
                  "mie": {
                    "type": "integer",
                    "title": "Mie",
                    "description": "M&IE rate per day (USD)"
                  }
                },
                "type": "object",
                "required": [
                  "start",
                  "end",
                  "lodging",
                  "mie"
                ],
                "title": "GsaSeason"
              },
              "type": "array",
              "title": "Seasons",
              "description": "Lodging seasons of this destination for the fiscal year"
            },
            "standard": {
              "type": "boolean",
              "title": "Standard",
              "description": "True if the standard CONUS rate applies"
            }
          },
          "type": "object",
          "required": [
            "fiscal_year",
            "destination",
            "state",
            "county",
            "lodging",
            "mie",
            "breakfast",
            "lunch",
            "dinner",
            "incidentals",
            "first_last_day",
            "seasons",
            "standard"
          ],
          "title": "GsaDetail"
        },
        {
          "type": "null"
        }
      ],
      "description": "us-gsa breakdown (only for regime us-gsa)"
    },
    "us_state": {
      "anyOf": [
        {
          "properties": {
            "post": {
              "type": "string",
              "title": "Post",
              "description": "Post (location) as named by the State Dept; 'Other' = rest of the country"
            },
            "country_label": {
              "type": "string",
              "title": "Country Label",
              "description": "Country as named by the State Dept"
            },
            "lodging": {
              "type": "integer",
              "title": "Lodging",
              "description": "Maximum lodging rate for the requested date (USD)"
            },
            "mie": {
              "type": "integer",
              "title": "Mie",
              "description": "Meals & incidental expenses rate per full day (USD)"
            },
            "breakfast": {
              "type": "number",
              "title": "Breakfast",
              "description": "M&IE breakdown (FTR ch. 301 Appendix B): breakfast"
            },
            "lunch": {
              "type": "number",
              "title": "Lunch",
              "description": "M&IE breakdown: lunch"
            },
            "dinner": {
              "type": "number",
              "title": "Dinner",
              "description": "M&IE breakdown: dinner"
            },
            "incidentals": {
              "type": "number",
              "title": "Incidentals",
              "description": "M&IE breakdown: incidental expenses"
            },
            "first_last_day": {
              "type": "number",
              "title": "First Last Day",
              "description": "75 % of M&IE for the first and last day of travel"
            },
            "seasons": {
              "items": {
                "properties": {
                  "start": {
                    "type": "string",
                    "title": "Start",
                    "description": "Season start as MM-DD"
                  },
                  "end": {
                    "type": "string",
                    "title": "End",
                    "description": "Season end as MM-DD"
                  },
                  "lodging": {
                    "type": "integer",
                    "title": "Lodging",
                    "description": "Maximum lodging rate per night (USD)"
                  },
                  "mie": {
                    "type": "integer",
                    "title": "Mie",
                    "description": "M&IE rate per day (USD)"
                  }
                },
                "type": "object",
                "required": [
                  "start",
                  "end",
                  "lodging",
                  "mie"
                ],
                "title": "GsaSeason"
              },
              "type": "array",
              "title": "Seasons",
              "description": "Seasons of this post (a season may wrap the year end, e.g. 10-01..04-30)"
            },
            "effective_from": {
              "type": "string",
              "format": "date",
              "title": "Effective From",
              "description": "Date the State Dept made this post's current rate effective"
            },
            "footnotes": {
              "items": {
                "type": "integer"
              },
              "type": "array",
              "title": "Footnotes",
              "description": "State Dept footnote numbers for this post (see footnote_url)"
            },
            "footnote_url": {
              "type": "string",
              "title": "Footnote Url",
              "description": "Where the footnotes are explained"
            }
          },
          "type": "object",
          "required": [
            "post",
            "country_label",
            "lodging",
            "mie",
            "breakfast",
            "lunch",
            "dinner",
            "incidentals",
            "first_last_day",
            "seasons",
            "effective_from",
            "footnotes",
            "footnote_url"
          ],
          "title": "StateDetail"
        },
        {
          "type": "null"
        }
      ],
      "description": "us-state breakdown (only for regime us-state)"
    },
    "uk_hmrc": {
      "anyOf": [
        {
          "properties": {
            "city": {
              "type": "string",
              "title": "City",
              "description": "City as listed by HMRC"
            },
            "currency": {
              "type": "string",
              "title": "Currency",
              "description": "ISO 4217 currency of the rates (unless a field's own currency says otherwise)"
            },
            "over_5_hours": {
              "type": "number",
              "title": "Over 5 Hours",
              "description": "Rate for a period of more than 5 hours"
            },
            "over_10_hours": {
              "type": "number",
              "title": "Over 10 Hours",
              "description": "Rate for a period of more than 10 hours"
            },
            "rate_24_hours": {
              "type": "number",
              "title": "Rate 24 Hours",
              "description": "24-hour rate, excluding the room rate"
            },
            "room": {
              "type": "number",
              "title": "Room",
              "description": "Room rate per night"
            },
            "room_currency": {
              "type": "string",
              "title": "Room Currency",
              "description": "Currency of the room rate"
            },
            "breakfast": {
              "type": "number",
              "title": "Breakfast",
              "description": "Breakfast rate (0 when included in the room rate)"
            },
            "lunch": {
              "type": "number",
              "title": "Lunch",
              "description": "Lunch rate"
            },
            "dinner": {
              "type": "number",
              "title": "Dinner",
              "description": "Dinner rate"
            },
            "other": {
              "type": "number",
              "title": "Other",
              "description": "'Other' meal/incidentals component of the HMRC table"
            },
            "drinks": {
              "type": "number",
              "title": "Drinks",
              "description": "Drinks component"
            },
            "hotel_to_office": {
              "type": "number",
              "title": "Hotel To Office",
              "description": "Hotel-to-office travel component"
            },
            "total_residual": {
              "type": "number",
              "title": "Total Residual",
              "description": "Subsistence per 24 h when the room is paid separately"
            },
            "breakfast_included_in_room": {
              "type": "boolean",
              "title": "Breakfast Included In Room",
              "description": "HMRC marks breakfast as included in the room rate"
            }
          },
          "type": "object",
          "required": [
            "city",
            "currency",
            "over_5_hours",
            "over_10_hours",
            "rate_24_hours",
            "room",
            "room_currency",
            "breakfast",
            "lunch",
            "dinner",
            "other",
            "drinks",
            "hotel_to_office",
            "total_residual",
            "breakfast_included_in_room"
          ],
          "title": "HmrcDetail"
        },
        {
          "type": "null"
        }
      ],
      "description": "uk-hmrc breakdown (only for regime uk-hmrc)"
    },
    "other_locations": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Other Locations",
      "description": "Other listed locations in the same country for this regime"
    },
    "notes": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Notes",
      "description": "Fallbacks and caveats that applied"
    },
    "source": {
      "properties": {
        "name": {
          "type": "string",
          "title": "Name",
          "description": "Official publication the numbers come from"
        },
        "url": {
          "type": "string",
          "title": "Url",
          "description": "Where to find it"
        },
        "license": {
          "type": "string",
          "title": "License",
          "description": "Reuse terms of the source"
        },
        "valid_from": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "Valid From",
          "description": "First day the table applies (null if the publisher gives none)"
        },
        "valid_to": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "Valid To",
          "description": "Last day the table applies (null if open-ended)"
        },
        "data_as_of": {
          "type": "string",
          "format": "date",
          "title": "Data As Of",
          "description": "Date the bundled snapshot was taken from the source"
        }
      },
      "type": "object",
      "required": [
        "name",
        "url",
        "license",
        "data_as_of"
      ],
      "title": "Source",
      "description": "Official publication the rate comes from"
    },
    "disclaimer": {
      "type": "string",
      "title": "Disclaimer",
      "description": "Informational use only, not tax advice"
    }
  },
  "required": [
    "regime",
    "date",
    "currency",
    "location",
    "lodging",
    "meals_full_day",
    "meals_partial_day",
    "other_locations",
    "notes",
    "source",
    "disclaimer"
  ],
  "title": "RatesOut",
  "x-fastmcp-top-level-schema": "RatesOut"
}
🟢calculate_trip_allowance(regime, legs, leave_home, return_home, meals_provided, ...)

Applies the regime's rules to an itinerary and returns one line per allowance, deduction and night, each with the rule it applied, plus totals. - de-bmf: >8 h one-day trips (last place of work), partial arrival/departure days, full days at the place reached before midnight, higher rate on a home stop-over day, 20 %/40 % meal deductions of that day's full-day rate (never below 0), Übernachtungspauschale per night. The three-month rule is not applied. - us-gsa: 75 % M&IE on first and last day, M&IE of the lodging location, last day at the last TDY location, 75 % for 12-24 h trips without lodging, full meal-amount deductions with an incidentals floor, max lodging per night by season. - us-state: the same FTR rules as us-gsa with State Dept foreign rates per post (country 'Other' and 'Other Foreign Localities' fallbacks) and the FTR Appendix B meal amounts. - uk-hmrc: 24-hour periods from arrival abroad, over-5/over-10-hour rates for the remainder, room rate per night, provided meals deducted at the HMRC meal rate of the location at 08:00 / 13:00 / 19:00 that day.

Input Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "Which rule set to apply"
    },
    "legs": {
      "items": {
        "properties": {
          "country": {
            "type": "string",
            "maxLength": 60,
            "minLength": 2,
            "title": "Country",
            "description": "ISO alpha-2 code or English/German country name"
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ],
            "title": "City",
            "description": "City (BMF city rows, GSA destination, HMRC city)"
          },
          "state": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2
              },
              {
                "type": "null"
              }
            ],
            "title": "State",
            "description": "US state code (us-gsa)"
          },
          "postal_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Postal Code",
            "description": "US ZIP (us-gsa) or French postcode (de-bmf Paris region)"
          },
          "arrive": {
            "type": "string",
            "format": "date-time",
            "title": "Arrive",
            "description": "Local arrival time at this destination (ISO 8601)"
          },
          "depart": {
            "type": "string",
            "format": "date-time",
            "title": "Depart",
            "description": "Local departure time from this destination (ISO 8601)"
          },
          "transport": {
            "type": "string",
            "enum": [
              "flight",
              "ship",
              "train",
              "car",
              "other"
            ],
            "title": "Transport",
            "description": "How this destination was reached (de-bmf: multi-day flights use Austria, days at sea use Luxembourg)",
            "default": "other"
          },
          "returns_home_before": {
            "type": "boolean",
            "title": "Returns Home Before",
            "description": "de-bmf: the traveller went home between the previous leg and this one (new trip; shared day gets the higher rate)",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "country",
          "arrive",
          "depart"
        ],
        "title": "LegIn"
      },
      "type": "array",
      "maxItems": 20,
      "minItems": 1,
      "title": "Legs",
      "description": "Destinations in chronological order (1-20)"
    },
    "leave_home": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Leave Home",
      "description": "When the traveller leaves home / the first place of work (de-bmf, us-gsa). Default: first arrive"
    },
    "return_home": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Return Home",
      "description": "When the traveller is back home. Default: last depart"
    },
    "meals_provided": {
      "items": {
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "Calendar day the meals were provided"
          },
          "breakfast": {
            "type": "boolean",
            "title": "Breakfast",
            "description": "Breakfast was provided",
            "default": false
          },
          "lunch": {
            "type": "boolean",
            "title": "Lunch",
            "description": "Lunch was provided",
            "default": false
          },
          "dinner": {
            "type": "boolean",
            "title": "Dinner",
            "description": "Dinner was provided",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "date"
        ],
        "title": "MealsIn"
      },
      "type": "array",
      "maxItems": 92,
      "title": "Meals Provided",
      "description": "Meals provided by employer/host"
    },
    "lodging_provided": {
      "type": "boolean",
      "title": "Lodging Provided",
      "description": "Lodging paid directly by the employer: no lodging lines",
      "default": false
    },
    "overnight": {
      "type": "boolean",
      "title": "Overnight",
      "description": "False for a trip across midnight without an overnight stay (de-bmf/us-gsa: combine hours)",
      "default": true
    }
  },
  "required": [
    "regime",
    "legs"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "Regime applied"
    },
    "currency": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Currency",
      "description": "Currency of total, if the trip has a single currency"
    },
    "total": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Total",
      "description": "Grand total (null if several currencies are involved; see totals)"
    },
    "meals_total": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Meals Total",
      "description": "Meal allowances before deductions (single-currency trips, else null)"
    },
    "deductions_total": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Deductions Total",
      "description": "Meal deductions, negative (single-currency trips, else null)"
    },
    "lodging_total": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Lodging Total",
      "description": "Lodging total (single-currency trips, else null)"
    },
    "totals": {
      "items": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency"
          },
          "meals": {
            "type": "number",
            "title": "Meals",
            "description": "Meal allowances before deductions"
          },
          "deductions": {
            "type": "number",
            "title": "Deductions",
            "description": "Meal deductions (negative; capped so meals never go below 0)"
          },
          "lodging": {
            "type": "number",
            "title": "Lodging",
            "description": "Lodging amounts"
          },
          "total": {
            "type": "number",
            "title": "Total",
            "description": "meals + deductions (floored at 0) + lodging"
          }
        },
        "type": "object",
        "required": [
          "currency",
          "meals",
          "deductions",
          "lodging",
          "total"
        ],
        "title": "CurrencyTotal"
      },
      "type": "array",
      "title": "Totals",
      "description": "Totals per currency"
    },
    "days": {
      "type": "integer",
      "title": "Days",
      "description": "Calendar days touched by the trip"
    },
    "lines": {
      "items": {
        "properties": {
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date",
            "description": "Calendar day (HMRC: day the period starts)"
          },
          "kind": {
            "type": "string",
            "enum": [
              "meals",
              "deduction",
              "lodging"
            ],
            "title": "Kind",
            "description": "meals = allowance, deduction = provided-meal deduction (negative), lodging = per-night lodging"
          },
          "location": {
            "type": "string",
            "title": "Location",
            "description": "Location whose rate was used"
          },
          "amount": {
            "type": "number",
            "title": "Amount",
            "description": "Amount of this line (deductions are negative)"
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency of amount"
          },
          "rule": {
            "type": "string",
            "title": "Rule",
            "description": "The rule applied to produce this line"
          },
          "rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate",
            "description": "Underlying full rate the line is based on"
          },
          "meal": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Meal",
            "description": "Meal a deduction refers to"
          },
          "period_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Period Start",
            "description": "uk-hmrc: start of the 24 h / residual period"
          },
          "period_end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Period End",
            "description": "uk-hmrc: end of the period"
          }
        },
        "type": "object",
        "required": [
          "date",
          "kind",
          "location",
          "amount",
          "currency",
          "rule"
        ],
        "title": "TripLine"
      },
      "type": "array",
      "title": "Lines",
      "description": "One line per day/period, deduction and night, each with its rule"
    },
    "notes": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Notes",
      "description": "Assumptions and caveats that applied"
    },
    "sources": {
      "items": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Official publication the numbers come from"
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Where to find it"
          },
          "license": {
            "type": "string",
            "title": "License",
            "description": "Reuse terms of the source"
          },
          "valid_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid From",
            "description": "First day the table applies (null if the publisher gives none)"
          },
          "valid_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid To",
            "description": "Last day the table applies (null if open-ended)"
          },
          "data_as_of": {
            "type": "string",
            "format": "date",
            "title": "Data As Of",
            "description": "Date the bundled snapshot was taken from the source"
          }
        },
        "type": "object",
        "required": [
          "name",
          "url",
          "license",
          "data_as_of"
        ],
        "title": "Source"
      },
      "type": "array",
      "title": "Sources",
      "description": "Official publications used"
    },
    "disclaimer": {
      "type": "string",
      "title": "Disclaimer",
      "description": "Informational use only, not tax advice"
    }
  },
  "required": [
    "regime",
    "currency",
    "total",
    "meals_total",
    "deductions_total",
    "lodging_total",
    "totals",
    "days",
    "lines",
    "notes",
    "sources",
    "disclaimer"
  ],
  "title": "TripOut",
  "x-fastmcp-top-level-schema": "TripOut"
}
🟢list_per_diem_regimes

Lists the available regimes with validity periods, snapshot dates, sources and the rules the trip calculator applies, plus regimes that are planned but not yet available.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}

Output Schema

{
  "type": "object",
  "properties": {
    "regimes": {
      "items": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Regime id used in the other endpoints"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Human-readable regime name"
          },
          "jurisdiction": {
            "type": "string",
            "title": "Jurisdiction",
            "description": "Country/authority that publishes the rates"
          },
          "status": {
            "type": "string",
            "enum": [
              "available",
              "planned"
            ],
            "title": "Status",
            "description": "'available' or 'planned' (not yet served)"
          },
          "currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency",
            "description": "Currency of the rates (uk-hmrc: local currency per city)"
          },
          "coverage": {
            "type": "string",
            "title": "Coverage",
            "description": "What locations and years are covered"
          },
          "valid_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid From",
            "description": "First day covered by the bundled tables"
          },
          "valid_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid To",
            "description": "Last day covered by the bundled tables"
          },
          "data_as_of": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data As Of",
            "description": "Date the bundled snapshot was taken"
          },
          "location_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Count",
            "description": "Number of locations with their own rate"
          },
          "rules": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Rules",
            "description": "Rules the trip calculator applies"
          },
          "sources": {
            "items": {
              "properties": {
                "name": {
                  "type": "string",
                  "title": "Name",
                  "description": "Official publication the numbers come from"
                },
                "url": {
                  "type": "string",
                  "title": "Url",
                  "description": "Where to find it"
                },
                "license": {
                  "type": "string",
                  "title": "License",
                  "description": "Reuse terms of the source"
                },
                "valid_from": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "title": "Valid From",
                  "description": "First day the table applies (null if the publisher gives none)"
                },
                "valid_to": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "title": "Valid To",
                  "description": "Last day the table applies (null if open-ended)"
                },
                "data_as_of": {
                  "type": "string",
                  "format": "date",
                  "title": "Data As Of",
                  "description": "Date the bundled snapshot was taken from the source"
                }
              },
              "type": "object",
              "required": [
                "name",
                "url",
                "license",
                "data_as_of"
              ],
              "title": "Source"
            },
            "type": "array",
            "title": "Sources",
            "description": "Official publications used"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "jurisdiction",
          "status",
          "currency",
          "coverage",
          "rules"
        ],
        "title": "RegimeOut"
      },
      "type": "array",
      "title": "Regimes",
      "description": "All regimes, available and planned"
    },
    "disclaimer": {
      "type": "string",
      "title": "Disclaimer",
      "description": "Informational use only, not tax advice"
    }
  },
  "required": [
    "regimes",
    "disclaimer"
  ],
  "title": "RegimesOut",
  "x-fastmcp-top-level-schema": "RegimesOut"
}
🟢search_per_diem_locations(regime, q, country, state, limit, ...)

Lists the locations with their own rate in a regime (us-gsa: current fiscal-year destinations), filtered by text, country or state. Use the returned country/city/state values in /rates and /trip.

Input Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "Regime to search"
    },
    "q": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ],
      "title": "Q",
      "description": "Case- and accent-insensitive text search over city, country, state, county and aliases"
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60,
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "Country",
      "description": "Only this country (ISO alpha-2 or name)"
    },
    "state": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2
        },
        {
          "type": "null"
        }
      ],
      "title": "State",
      "description": "Only this US state (us-gsa)"
    },
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "title": "Limit",
      "description": "Maximum items to return",
      "default": 50
    },
    "offset": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 0,
      "title": "Offset",
      "description": "Items to skip",
      "default": 0
    }
  },
  "required": [
    "regime"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "regime": {
      "type": "string",
      "enum": [
        "de-bmf",
        "us-gsa",
        "us-state",
        "uk-hmrc"
      ],
      "title": "Regime",
      "description": "Regime searched"
    },
    "total": {
      "type": "integer",
      "title": "Total",
      "description": "Number of matching locations before limit/offset"
    },
    "items": {
      "items": {
        "properties": {
          "regime": {
            "type": "string",
            "enum": [
              "de-bmf",
              "us-gsa",
              "us-state",
              "uk-hmrc"
            ],
            "title": "Regime",
            "description": "Regime this row belongs to"
          },
          "country": {
            "type": "string",
            "title": "Country",
            "description": "ISO 3166-1 alpha-2 ('*' for the us-state 'Other Foreign Localities' rate)"
          },
          "country_name": {
            "type": "string",
            "title": "Country Name",
            "description": "English country name"
          },
          "city": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "City",
            "description": "City/destination label; null for the country-wide or 'rest of country' rate"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State",
            "description": "US state (us-gsa)"
          },
          "county": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "County",
            "description": "GSA county / location defined"
          },
          "aliases": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Aliases",
            "description": "Other names that match this row"
          }
        },
        "type": "object",
        "required": [
          "regime",
          "country",
          "country_name",
          "city"
        ],
        "title": "LocationItem"
      },
      "type": "array",
      "title": "Items",
      "description": "Matching locations (after limit/offset)"
    }
  },
  "required": [
    "regime",
    "total",
    "items"
  ],
  "title": "LocationsOut",
  "x-fastmcp-top-level-schema": "LocationsOut"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools