IRS Mileage Rate and Per Diem
Server Details
IRS mileage rates 2011-2026 (76 cents from July 2026), GSA per diem by ZIP FY2026-27, high-low.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- theluckystrike/irs-mileage-rate-per-diem-mcp
- GitHub Stars
- 0
- Server Listing
- irs-mileage-rate-per-diem-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 5 tools
Tools split cleanly between rate lookups (get_mileage_rate, get_per_diem_rates, get_high_low_per_diem) and trip calculations (calculate_mileage_deduction, calculate_trip_per_diem). The two per diem lookup tools could be briefly confused — GSA locality rates vs. IRS high-low substantiation — but descriptions make the distinction clear.
All tools use snake_case with a consistent verb_noun structure (calculate_* / get_*). Minor deviations: plural 'rates' in get_per_diem_rates vs. singular elsewhere, and the awkward word order in get_high_low_per_diem.
Five tools well-scoped to the domain: rates, deduction calculation, trip per diem calculation, GSA locality rates, and high-low rates. No redundant or filler tools.
Core mileage and per diem workflows are covered: rate lookup, deduction math, trip totals, and both GSA and high-low per diem methods. Minor gaps exist — no OCONUS/foreign per diem lookup and no transportation-industry-specific calculation tool — but agents can work around these.
Available Tools
5 toolscalculate_mileage_deductionMileage deduction or reimbursement calculatorARead-onlyIdempotentInspect
Calculates the deduction or tax-free reimbursement for driven miles at the IRS standard mileage rates, splitting by the date each trip was driven. Applies the 2026 mid-year increase automatically (72.5 cents before July 1, 76 cents from July 1). Supports business, medical, charity and military moving miles, returns the amount per rate period and purpose, and the depreciation basis reduction for business miles. Notes who can and cannot deduct (employees' unreimbursed mileage is not deductible after the One, Big, Beautiful Bill Act).
| Name | Required | Description | Default |
|---|---|---|---|
| trips | Yes | Trips or mileage totals, each with a date. | |
| default_purpose | No | Purpose for trips that do not set one. Default business. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses concrete 2026 rate values, the automatic mid-year split, what the response contains (amount per rate period and purpose, depreciation basis reduction), and an eligibility caveat about unreimbursed employee mileage. That is substantive behavioral context an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then rate mechanics, then return contents, then eligibility. Dense but nearly every clause carries information. It is a single long paragraph rather than structured, which slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so — amounts per rate period and purpose, plus depreciation basis reduction. Combined with the rate values and eligibility note, an agent has enough to call and interpret results correctly; only the moving/military wording is a small blemish.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the date on each trip determines which rate period applies, and purposes are enumerated with a business default. Minor friction: it says 'military moving' while the enum value is just 'moving', a small mismatch an agent must resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: calculates the deduction or tax-free reimbursement for driven miles at IRS standard rates. The scope (date-split rates, per-purpose breakdown, depreciation basis) clearly separates it from sibling rate-lookup tools like get_mileage_rate and from calculate_trip_per_diem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it — computing a deduction or reimbursement from actual trips, with a note on who can and cannot deduct. It does not explicitly route the agent away from siblings (e.g. 'use get_mileage_rate to look up a rate without computing an amount'), so the alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_trip_per_diemTrip per diem calculator (GSA rates)ARead-onlyIdempotentInspect
Calculates the maximum federal per diem for a business trip: lodging for each night at that month's GSA rate (crossing seasons and the Oct. 1 fiscal year change), M&IE for each day with 75% on the first and last day, minus meals provided at the GSA breakdown amounts. Uses the official FY2026 and FY2027 GSA rates for trips between Oct. 1, 2025 and Sept. 30, 2027.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit ZIP code of the destination (best match). | |
| city | No | City or county name, e.g. "Boston" or "Maricopa". | |
| state | No | 2-letter state code, e.g. MA. | |
| end_date | Yes | Last travel day (YYYY-MM-DD). | |
| start_date | Yes | First travel day (YYYY-MM-DD). | |
| meals_provided | No | Number of meals provided (by a conference or the employer) to deduct from M&IE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower, yet the description adds real substance: 75% M&IE on first/last day, meal deductions taken at GSA breakdown amounts, season and Oct. 1 fiscal-year crossing, and the supported rate vintages. It stops short of describing output shape or what happens on unmatched locations or out-of-range dates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the computation logic front-loaded and the coverage window stated last as a boundary condition; there is no filler. The nested parentheticals in the first sentence make it dense, but each clause carries computation-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should convey what comes back — a single total, an itemized lodging/M&IE breakdown, or per-day lines — and it does not. It also omits error behavior for dates outside the supported fiscal years or unresolvable locations, which matters for a tool whose correctness hinges on rate lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters, establishing a baseline of 3. The description adds some interpretive value by explaining that meals_provided is deducted at the GSA breakdown amounts and that dates are evaluated per night/day across seasons, but it says nothing about how zip/city/state are resolved or prioritized beyond the schema's 'best match' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Calculates') and a precisely scoped resource ('maximum federal per diem for a business trip'), enumerating the components computed: lodging per night, M&IE per day with proration, and meal deductions. It is clearly distinct from the getter-style siblings (get_per_diem_rates, get_mileage_rate), but it never names or contrasts those siblings explicitly, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the FY2026/FY2027 and Oct. 1, 2025–Sept. 30, 2027 window functions as an eligibility boundary, which is useful. However, there is no explicit 'use this instead of get_per_diem_rates when...' guidance and no stated behavior for trips outside that window, so the agent must infer routing and edge handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_high_low_per_diemIRS high-low per diem rates and high-cost localitiesARead-onlyIdempotentInspect
Returns the IRS high-low substantiation method rates for a date and whether a city is a high-cost locality then: from Oct. 1, 2026 $329 high / $230 low with $86 / $74 treated as meals (Notice 2026-60); Oct. 1, 2025 - Sept. 30, 2026 $319 / $225 (Notice 2025-54). Also the transportation industry M&IE ($80 CONUS, $86 OCONUS) and the $5 incidental-expenses-only rate. Checks the 91 FY2027 high-cost localities and their seasonal portions (e.g. Tucson added, Panama City removed).
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City or county to test against the high-cost list. | |
| date | No | Travel date. Default today (YYYY-MM-DD). | |
| state | No | 2-letter state code or state name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and non-open-world, so the safety profile is covered. The description goes well beyond that by disclosing effective-date windows (Oct. 1, 2026 onward vs. Oct. 1, 2025 – Sept. 30, 2026), the governing IRS notices, the transportation-industry M&IE rates, the $5 incidental-only rate, and the size of the high-cost locality list including seasonal portions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, which is good, but the remainder is a dense run-on of dollar figures, notice numbers, and parenthetical asides. The rate values and Notice citations are plausibly useful for answering without follow-up calls, but the packing hurts scanability and buries the high-cost-locality check mid-sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does: rate pairs, meal components, transportation M&IE, incidental rate, and a high-cost locality determination with seasonal variants. Gaps remain around behavior for unmatched cities, missing state, or dates outside the published windows, and around response shape, but the substantive business content is there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents city, date, and state, including the YYYY-MM-DD pattern and the today-default. The description adds only indirect meaning ('for a date', 'whether a city is a high-cost locality') and never mentions the state parameter or how city+state combine for locality matching, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns IRS high-low substantiation rates for a date and a boolean-ish answer on whether a city is a high-cost locality. The 'high-low substantiation method' phrasing implicitly separates it from get_per_diem_rates and calculate_trip_per_diem, but no sibling is named, so the agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the distinctive 'high-low substantiation method' framing and by the explicit mention of checking a city against the 91 FY2027 high-cost localities. There is no 'use this instead of X when...' statement and no note about when the standard per diem tool would be preferred, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mileage_rateIRS standard mileage rates (2011-2026, incl. the July 2026 increase)ARead-onlyIdempotentInspect
Returns the official IRS standard mileage rates in cents per mile for business, medical, charity and military moving use, for a year or a specific date. Knows the mid-year 2026 change: 72.5 cents for business from Jan. 1 to June 30, 2026 (Notice 2026-10) and 76 cents from July 1, 2026 (Announcement 2026-11, fuel price increase), medical/moving 20.5 then 23.5 cents, charity 14 cents. Also returns the depreciation (basis reduction) part of the business rate (35 cents for 2026) and the FAVR / employer-vehicle maximum value ($61,700 for 2026). 2027 rates are not announced yet and the tool says so.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | A date the miles were driven; returns the rate in force that day (YYYY-MM-DD). | |
| year | No | Tax year, e.g. 2026. Default 2026. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely behavioral detail: the tool honors the mid-year 2026 split (72.5 cents through June 30, 76 cents from July 1), returns auxiliary values (35-cent depreciation component, $61,700 FAVR maximum), and explicitly reports that 2027 rates are unavailable instead of failing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important information – purpose, units, categories, and the mid-year caveat – is front-loaded in the first two sentences. The remaining sentences pack in many specific figures (72.5, 76, 20.5, 23.5, 14, 35, 61,700); each is useful but the density approaches list-like rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so: units (cents per mile), categories, the depreciation component, and the FAVR maximum value. It also covers the edge case of unannounced future years, which is the main failure mode an agent would hit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (date pattern YYYY-MM-DD, year 2011-2100, default 2026) are already documented. The description reinforces the date semantics by noting the mid-year switch, but adds little beyond what the schema fields state, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Returns the official IRS standard mileage rates in cents per mile for business, medical, charity and military moving use.' That is enough for an agent to distinguish it from calculate_mileage_deduction, which computes a deduction rather than looking up statutory rates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two lookup modes ('for a year or a specific date') and the boundary that 2027 is not yet announced, but it never explicitly tells the agent when to call this versus calculate_mileage_deduction. The when-to-use is inferable from the purpose, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_per_diem_ratesGSA per diem rates by ZIP or city (FY2026 and FY2027)ARead-onlyIdempotentInspect
Returns the official GSA federal per diem rates for a U.S. (CONUS) destination by ZIP code or city/state: maximum lodging per night by month and the meals and incidental expenses (M&IE) rate with its breakfast/lunch/dinner/incidentals breakdown and the 75% first/last-day amount. Covers FY2026 (Oct. 1, 2025 - Sept. 30, 2026) and FY2027 (from Oct. 1, 2026; standard rate $113 lodging and $68 M&IE). Data from GSA's FY2026 and FY2027 ZIP code files, so it knows rates newer than a model's training data.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit ZIP code of the destination (best match). | |
| city | No | City or county name, e.g. "Boston" or "Maricopa". | |
| date | No | Travel date; picks the fiscal year and shows that night's lodging rate (YYYY-MM-DD). | |
| state | No | 2-letter state code, e.g. MA. | |
| fiscal_year | No | Federal fiscal year (2027 = Oct. 2026 - Sept. 2027). Default: the current one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuine context beyond them: the GSA ZIP-file data source, the FY2026/FY2027 coverage with the FY2027 standard rate figures, and what fields come back. It does not say what happens when no location parameter is supplied, which matters for a 5-param, zero-required tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core purpose and output contents before the fiscal-year detail. It is borderline long, and the embedded '$113 lodging and $68 M&IE' figures are close to filler, but every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema, the description covers data provenance, fiscal-year scope, and the shape of the result well. The remaining gap is the absent-parameter and multi-parameter behavior (all five params are optional), which an agent would need to know to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above baseline by clarifying the fiscal-year semantics ('FY2027 from Oct. 1, 2026') and framing ZIP-versus-city as alternative lookup paths that the schema only hints at. It still does not explain how zip, city, and state combine or which takes precedence when several are passed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the official GSA federal per diem rates') with the lookup key ('by ZIP code or city/state') and enumerates the returned components: monthly lodging caps, M&IE with meal breakdown, and the 75% first/last-day amount. It implicitly separates itself from the calculate_* siblings by being a rate lookup rather than a trip computation, but it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It signals the relevant window ('FY2026 ... and FY2027') and that data is fresher than training data, which implies 'use this for current rates'. However, it gives no explicit when-to-use guidance against calculate_trip_per_diem or get_high_low_per_diem, and no indication of whether a location argument is mandatory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
calculate_mileage_deduction - First observed
calculate_trip_per_diem - First observed
get_high_low_per_diem - First observed
get_mileage_rate - First observed
get_per_diem_rates
Related MCP Connectors
U.S. government per diem and overseas allowance rates from GSA, DTMO OCONUS and State DSSR tables.
Take-home pay for 2025-2026: IRS brackets, FICA wage base and state income tax for 50 states + DC.
GSA Per Diem access readiness, lodging, and meals and incidental expense rates. 7 tools.
US federal 2026 tax brackets, standard deductions, payroll and retirement limits, sourced.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceCurrent, source-cited US federal tax constants and freelancer calculators for tax year 2026, including the July 1 mid-year mileage change. Every response carries its IRS/SSA primary source and a last-verified date; refuses rather than guesses.MIT
- AlicenseNot gradedqualityCmaintenanceEnables 1099 gig workers and freelancers to calculate 2026 quarterly federal estimates, self-employment tax, safe-harbor minimum payments, and mileage or actual-expense deductions, including the mid-year business mileage rate change from 72.5 to 76 cents. It also compares standard mileage against actual vehicle costs and exposes every tax constant with its source.MIT
- AlicenseAqualityBmaintenanceEnables users to calculate 2026 US freelancer and sole-proprietor tax figures — quarterly estimated payments with safe harbor, self-employment tax, IRS due dates, mileage deductions, home office deductions, and SEP IRA vs Solo 401(k) contribution limits. Runs entirely locally with no API key, account, or network calls.81,235 npmMIT
- AlicenseAqualityAmaintenanceLogs deductible driving trips, manages effective-dated mileage rates, computes per-category summaries, and exports CSV for accountants, all locally with no network calls.90MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.