GSA Per Diem access readiness, lodging, and meals and incidental expense rates. 7 tools.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Compare per diem rates across multiple locations. locations: list of {"city": "...", "state": "XX"} dicts (optionally with "county"), max 25 entries. Returns rates sorted by max daily total (highest first). Ambiguous or unresolved cities are listed with their status and candidate rate areas instead of a rate. Useful for travel IGCE development when comparing destination costs.
Compare per diem rates across multiple locations. locations: list of {"city": "...", "state": "XX"} dicts (optionally with "county"), max 25 entries. Returns rates sorted by max daily total (highest first). Ambiguous or unresolved cities are listed with their status and candidate rate areas instead of a rate. Useful for travel IGCE development when comparing destination costs.
| Argument | Type | Description |
|---|---|---|
| locations* | array | |
| fiscal_year | any |
{
"type": "object",
"title": "compare_locationsArguments",
"required": [
"locations"
],
"properties": {
"locations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"title": "Locations"
},
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
}
}
}Estimate total per diem cost for a trip. Calculates lodging + M&IE for the specified number of nights. First and last travel days use 75% M&IE per 41 CFR 301-11.20. travel_month: 3-letter abbreviation (Jan, Feb, ..., Dec). Every night is priced at that month's rate; for a trip that crosses into another month or fiscal year, add only each month's lodging_total at the applicable fiscal year rate. Calculate M&IE once across the actual trip days, using 75% only on the actual departure and return days. Do not add separate monthly mie_total or grand_total values: each estimate assumes a new trip. If omitted, uses the max monthly lodging rate (conservative estimate for IGCE). fiscal_year: if omitted, the FY of the next occurrence of travel_month (or the current FY when no month is given). Pass it for a trip that already happened. county: optional; selects the rate area when the city spans more than one (see lookup_city_perdiem). No estimate is produced when the city is ambiguous or unresolved; the candidate rate areas are returned instead. Does NOT include airfare or ground transportation. Formula: - Lodging = nightly_rate * num_nights - M&IE = full_day_rate * (travel_days - 2) + first/last_day_rate * 2 - Travel days = num_nights + 1 num_nights bounded 1-365.
| Argument | Type | Description |
|---|---|---|
| city* | string | |
| state* | string | |
| county | any | |
| num_nights* | integer | |
| fiscal_year | any | |
| travel_month | any |
{
"type": "object",
"title": "estimate_travel_costArguments",
"required": [
"city",
"state",
"num_nights"
],
"properties": {
"city": {
"type": "string",
"title": "City"
},
"state": {
"type": "string",
"title": "State"
},
"county": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "County",
"default": null
},
"num_nights": {
"type": "integer",
"title": "Num Nights"
},
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
},
"travel_month": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Travel Month",
"default": null
}
}
}Report which fiscal years are bundled, their GSA source files, and which tools call the GSA API. ZIP, state, and M&IE lookups for bundled fiscal years are answered from GSA's published files with no network call. City requests with a supplied county for a bundled year also need no key or network call. City-name requests without a county, and unbundled years, use the live GSA Per Diem API. Credential presence is reported without revealing or validating any value.
No arguments.
{
"type": "object",
"title": "get_data_statusArguments",
"properties": {}
}Get the M&IE (meals and incidental expenses) tier breakdown table. Returns all M&IE tiers with breakfast, lunch, dinner, incidental, and first/last day (75%) amounts, for showing the meal component of a per diem estimate. Bundled fiscal years come from GSA's published M&IE breakdown with no API call. M&IE does NOT vary seasonally (unlike lodging). The tier is set per location and applies year-round.
| Argument | Type | Description |
|---|---|---|
| fiscal_year | any |
{
"type": "object",
"title": "get_mie_breakdownArguments",
"properties": {
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
}
}
}Look up federal per diem rates for a city and state. Returns lodging rates (monthly breakdown for seasonal locations) and M&IE (meals and incidental expenses) for the specified fiscal year. state: 2-letter USPS code (e.g., 'DC', 'VA', 'MD', 'CA'). fiscal_year: defaults to current FY. FY runs Oct 1 - Sep 30, so FY2026 = 2025-10-01 through 2026-09-30. county: optional county or independent city (e.g., 'Fairfax', 'Hampden', 'Richmond city'). When given for a bundled fiscal year the rate is determined from GSA's county definitions without an API call. Without county, the GSA Per Diem API resolves the city name to rate areas. The result's status is: - resolved: one rate applies (exact name, composite name such as 'Boston / Cambridge', GSA's own city-to-county resolution, or a Census county tie-break among GSA's candidates) - ambiguous: GSA lists several rate areas for the city; candidates are returned and no single rate is chosen - unresolved: GSA did not recognize the city; no rate is asserted CONUS only: AK, HI, and territories return a pointer to DoD/State rates.
| Argument | Type | Description |
|---|---|---|
| city* | string | |
| state* | string | |
| county | any | |
| fiscal_year | any |
{
"type": "object",
"title": "lookup_city_perdiemArguments",
"required": [
"city",
"state"
],
"properties": {
"city": {
"type": "string",
"title": "City"
},
"state": {
"type": "string",
"title": "State"
},
"county": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "County",
"default": null
},
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
}
}
}Get all Non-Standard Area (NSA) per diem rates for a state. Returns every city/county with rates above the standard rate in that state, plus the state's standard rate. Seasonal areas include their lodging rate for each month (lodging_by_month). Useful for comparing rates across cities within a state or for building a travel IGCE with multiple destinations. Bundled fiscal years are answered from GSA's published files with no API call. CONUS only: AK, HI, and territories return a pointer to DoD/State rates instead of an empty list that would falsely imply the standard CONUS rate applies there.
| Argument | Type | Description |
|---|---|---|
| state* | string | |
| fiscal_year | any |
{
"type": "object",
"title": "lookup_state_ratesArguments",
"required": [
"state"
],
"properties": {
"state": {
"type": "string",
"title": "State"
},
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
}
}
}Look up federal per diem rates by ZIP code. Accepts 5-digit ZIPs or ZIP+4 (e.g., '02101' or '02101-1234'). Bundled fiscal years are answered from GSA's published ZIP file with no API call; other years use the GSA Per Diem API. GSA sets rates by county or locality, and about 1,800 ZIPs span more than one rate area. The result's status is 'resolved' when every rate area GSA lists for the ZIP has the same rate, otherwise 'ambiguous' with all candidates and no single rate chosen. county (optional) selects the candidate for that county.
| Argument | Type | Description |
|---|---|---|
| county | any | |
| zip_code* | string | |
| fiscal_year | any |
{
"type": "object",
"title": "lookup_zip_perdiemArguments",
"required": [
"zip_code"
],
"properties": {
"county": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "County",
"default": null
},
"zip_code": {
"type": "string",
"title": "Zip Code"
},
"fiscal_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Fiscal Year",
"default": null
}
}
}