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
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (4)
🟢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
Evidence