Odometry Mileage Log
Mileage log and reimbursement
我該用這個嗎
品質與安全性
發現項目(1)
- LOW在 calculate_mileage_reimbursement 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"odometry-mileage-log": {
"url": "https://mileage-log.zovo.one/mcp"
}
}
}遠端端點
https://mileage-log.zovo.one/mcpstreamable-http它能做什麼
工具清單
工具(2)
🟢generate_mileage_log(trips, recurring, file, custom_rate_per_mile, log_title, ...)
Use this when the user wants a mileage log, mileage log template, mileage log for taxes, printable mileage log, mileage log in Excel, or mileage reimbursement report from trips they drove ("turn these trips into a mileage log for my taxes", "reconstruct my mileage log from my calendar"). Takes typed trips (date, from, to, purpose, miles or odometer start/end), recurring trips (for example weekdays in a month) and/or an attached CSV/XLSX file. Applies the IRS standard mileage rate for each trip's date (2025: 70 cents; Jan-Jun 2026: 72.5 cents; Jul-Dec 2026: 76 cents per business mile; medical, moving and charity rates) or a custom employer rate, checks odometer continuity, flags commuting and missing purposes, and totals by month, purpose and client. Returns a PDF mileage log and an XLSX file. Does not look up distances between addresses, track GPS, or give tax advice. Do not use for a single quick mileage total with no trip list (use calculate_mileage_reimbursement).
輸入結構描述
{
"type": "object",
"properties": {
"trips": {
"description": "Typed trips, one per drive, e.g. [{\"date\":\"2026-10-05\",\"from\":\"Office\",\"to\":\"Client A\",\"purpose\":\"Sales meeting\",\"miles\":12.4}].",
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40,
"description": "Date of the trip, YYYY-MM-DD, e.g. \"2026-10-05\". Turn weekdays like \"Mon\" into real dates from the conversation."
},
"from": {
"description": "Start location, e.g. \"Office\" or \"Home\".",
"type": "string",
"maxLength": 120
},
"to": {
"description": "Destination (the IRS requires it), e.g. \"Client A - 410 Main St, Austin TX\".",
"type": "string",
"maxLength": 120
},
"purpose": {
"description": "Business purpose (the IRS requires it), e.g. \"Quarterly review meeting\" or \"Home visit, patient care\".",
"type": "string",
"maxLength": 200
},
"client": {
"description": "Optional client, customer, project or property for totals by client, e.g. \"Acme Corp\" or \"123 Oak Ln listing\".",
"type": "string",
"maxLength": 80
},
"miles": {
"description": "Miles driven as the user gives them, e.g. 12.4. If the user says \"12.4 mi round trip\", 12.4 is already the total: pass 12.4 with round_trip false. Leave out when odometer readings are given.",
"type": "number",
"minimum": 0,
"maximum": 100000
},
"odometer_start": {
"description": "Odometer reading at the start of the trip, e.g. 41230.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"odometer_end": {
"description": "Odometer reading at the end of the trip, e.g. 41254.8. Miles = end - start.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"round_trip": {
"description": "true only when miles is the ONE-WAY distance and the driver came back the same way (\"6.2 mi each way\"): miles are doubled. Ignored when odometer readings are given.",
"type": "boolean"
},
"category": {
"description": "business (default), medical, moving (Armed Forces only), charity, commute (logged, not reimbursed) or personal (logged, not reimbursed).",
"type": "string",
"enum": [
"business",
"medical",
"moving",
"charity",
"commute",
"personal"
]
}
},
"required": [
"date"
]
}
},
"recurring": {
"description": "Repeating trips, e.g. \"every weekday in October, 18 mi to the clinic\" -> [{\"start_date\":\"2026-10-01\",\"end_date\":\"2026-10-31\",\"to\":\"Clinic\",\"purpose\":\"Patient visits\",\"miles\":18}].",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"start_date": {
"type": "string",
"maxLength": 20,
"description": "First date of the repeat, YYYY-MM-DD, e.g. \"2026-10-01\"."
},
"end_date": {
"type": "string",
"maxLength": 20,
"description": "Last date of the repeat (inclusive), YYYY-MM-DD, e.g. \"2026-10-31\"."
},
"weekdays": {
"description": "Days of the week it happens, default Monday-Friday, e.g. [\"mon\",\"wed\",\"fri\"].",
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"sun",
"mon",
"tue",
"wed",
"thu",
"fri",
"sat"
]
}
},
"from": {
"description": "Start location, e.g. \"Office\".",
"type": "string",
"maxLength": 120
},
"to": {
"description": "Destination, e.g. \"Riverside Clinic\".",
"type": "string",
"maxLength": 120
},
"purpose": {
"description": "Business purpose, e.g. \"Patient home visits\".",
"type": "string",
"maxLength": 200
},
"client": {
"description": "Optional client or project, e.g. \"Riverside Clinic\".",
"type": "string",
"maxLength": 80
},
"miles": {
"type": "number",
"minimum": 0,
"maximum": 100000,
"description": "Miles per occurrence as given, e.g. 18 (the round-trip total if the user says \"18 mi round trip\")."
},
"round_trip": {
"description": "true only if miles is one-way and should be doubled.",
"type": "boolean"
},
"category": {
"description": "business (default), medical, moving, charity, commute or personal.",
"type": "string",
"enum": [
"business",
"medical",
"moving",
"charity",
"commute",
"personal"
]
}
},
"required": [
"start_date",
"end_date",
"miles"
]
}
},
"file": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
},
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"mime_type": {
"description": "Media type if known, e.g. application/pdf.",
"type": "string"
},
"file_name": {
"description": "Original file name if known, e.g. statement.pdf.",
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"description": "Optional trip spreadsheet the user attached (CSV, TSV or XLSX) with columns such as Date, From, To, Purpose, Miles, or Odometer start and Odometer end, e.g. trips.xlsx."
},
"custom_rate_per_mile": {
"description": "Employer or contract reimbursement rate in US dollars per mile for business trips, e.g. 0.60. Leave out to use the IRS standard mileage rate for each trip date.",
"type": "number",
"minimum": 0,
"maximum": 5
},
"log_title": {
"description": "Title printed on the log, e.g. \"October 2026 mileage\".",
"type": "string",
"maxLength": 80
},
"driver_name": {
"description": "Optional driver name printed on the log, e.g. \"Dana Lee\".",
"type": "string",
"maxLength": 80
},
"vehicle": {
"description": "Optional vehicle description printed on the log, e.g. \"2021 Toyota Camry\". No VIN or plate needed.",
"type": "string",
"maxLength": 80
},
"year_start_odometer": {
"description": "Odometer at the start of the year (or of the log period), e.g. 38500. With year_end_odometer it gives total miles and business-use percentage.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"year_end_odometer": {
"description": "Odometer at the end of the year (or of the log period), e.g. 52120.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"regular_workplace": {
"description": "Name of the user's regular office or workplace, e.g. \"Main St office\", to flag home-to-office commuting.",
"type": "string",
"maxLength": 80
},
"home_office_is_principal_place": {
"description": "true if the user's home office is their principal place of business (then trips from home are not flagged as commuting).",
"type": "boolean"
},
"skip_dates": {
"description": "Dates to leave out of recurring trips (holidays, PTO), YYYY-MM-DD, e.g. [\"2026-10-12\"].",
"maxItems": 60,
"type": "array",
"items": {
"type": "string",
"maxLength": 20
}
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"title": {
"type": "string"
},
"period": {
"type": "string"
},
"rate_basis": {
"type": "string"
},
"totals": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"vehicle_use": {},
"rates_used": {
"type": "array",
"items": {}
},
"by_month": {
"type": "array",
"items": {}
},
"by_purpose": {
"type": "array",
"items": {}
},
"by_client": {
"type": "array",
"items": {}
},
"flags": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"preview": {
"type": "array",
"items": {}
},
"source": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"kind",
"title",
"period",
"rate_basis",
"totals",
"vehicle_use",
"rates_used",
"by_month",
"by_purpose",
"by_client",
"flags",
"preview",
"source",
"notes",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢calculate_mileage_reimbursement(miles, date, segments, category, custom_rate_per_mile, ...)
Use this when the user asks for a mileage reimbursement calculator, mileage deduction, or the IRS mileage rate 2026 applied to a number of miles ("how much can I deduct for 4,200 business miles", "my employer pays 0.70 a mile how much do I get", "odometer 41230 to 46890 how many business miles"). Applies the IRS standard mileage rate for the date driven (2025: 70 cents; Jan-Jun 2026: 72.5 cents; Jul-Dec 2026: 76 cents per business mile; medical/moving 21, 20.5, 23.5 cents; charity 14 cents), splits miles across the July 1, 2026 rate change, compares a custom employer rate with the IRS rate, and turns odometer readings into miles. Does not build a trip-by-trip log (use generate_mileage_log), look up distances, or give tax advice.
輸入結構描述
{
"type": "object",
"properties": {
"miles": {
"description": "Miles to reimburse or deduct, e.g. 4200. Leave out when odometer_start and odometer_end are given.",
"type": "number",
"minimum": 0,
"maximum": 1000000
},
"date": {
"description": "When the miles were driven, YYYY-MM-DD or YYYY-MM, e.g. \"2026-08-15\" or \"2026-03\". Picks the IRS rate for that date. Default: today.",
"type": "string",
"maxLength": 20
},
"segments": {
"description": "Miles split by date when they straddle a rate change, e.g. [{\"miles\":1800,\"date\":\"2026-05\"},{\"miles\":2400,\"date\":\"2026-09\"}].",
"maxItems": 60,
"type": "array",
"items": {
"type": "object",
"properties": {
"miles": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"description": "Miles in this part, e.g. 1800."
},
"date": {
"type": "string",
"maxLength": 20,
"description": "Date or month of these miles, e.g. \"2026-05\" or \"2026-09-30\"."
}
},
"required": [
"miles",
"date"
]
}
},
"category": {
"description": "business (default), medical, moving (Armed Forces only) or charity.",
"type": "string",
"enum": [
"business",
"medical",
"moving",
"charity"
]
},
"custom_rate_per_mile": {
"description": "Employer or contract rate in US dollars per mile, e.g. 0.70 or 0.60. The IRS amount is shown next to it.",
"type": "number",
"minimum": 0,
"maximum": 5
},
"odometer_start": {
"description": "Odometer reading at the start, e.g. 41230.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"odometer_end": {
"description": "Odometer reading at the end, e.g. 46890.",
"type": "number",
"minimum": 0,
"maximum": 9999999
},
"personal_miles": {
"description": "Personal or commuting miles inside the odometer range to subtract, e.g. 900.",
"type": "number",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"category": {
"type": "string"
},
"miles": {
"type": "number"
},
"amount": {
"type": "number"
},
"amount_text": {
"type": "string"
},
"rate_basis": {
"type": "string"
},
"lines": {
"type": "array",
"items": {}
},
"irs_amount": {
"type": "number"
},
"custom": {},
"odometer": {},
"alternatives": {
"type": "array",
"items": {}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kind",
"category",
"miles",
"amount",
"amount_text",
"rate_basis",
"lines",
"irs_amount",
"custom",
"odometer",
"alternatives",
"notes"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}社群
證據