Odometry Mileage Log

Mileage log and reimbursement

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
90%
이름 품질
90%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (1)

  • LOWTool 'calculate_mileage_reimbursement' name length outside 3-30 rangecalculate_mileage_reimbursement에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,942토큰 (도구 정의)
~13.7 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.30%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 2개