Serveur MCP

per-diem

io.github.theluckystrike/per-diem
Entreprise et opérations Voyage et hôtellerie Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Calculates and records travel allowances from Poland, HMRC, and GSA CONUS rate tables, with trip listings and reports.

license_activate
Activate license
Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': 'License key from checkout, MCPL1.<payload>.<signature>'}}, 'additionalProperties': False}
license_status
License status
Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
perdiem_calc
Calculate a travel allowance
Calculate the daily travel allowance for one trip: the amount per day and the total in the scheme's currency, with the partial-day fraction and the meal deductions the scheme's own rule applies. Free and unlimited.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['scheme', 'destination', 'start', 'end'], 'properties': {'end': {'type': 'string', 'minLength': 1, 'description': 'When it ended, same form as start. It must be after start as an instant'}, 'start': {'type': 'string', 'minLength': 1, 'description': 'When the trip began, ISO 8601 WITH a zone: "2026-03-28T22:00:00+01:00", or "2026-03-28T22:00" together with timezone'}, 'scheme': {'enum': ['pl', 'uk', 'us'], 'type': 'string', 'description': '"pl" Polish delegation regulation, "uk" HMRC benchmark scale rates, "us" GSA CONUS standard'}, 'timezone': {'type': 'string', 'description': 'IANA id such as "Europe/Warsaw". Required when start or end carries no offset; also the zone the US scheme counts calendar days in'}, 'destination': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Country or locality, e.g. "Germany", "Poland", "United Kingdom", "United States"'}, 'fiscal_year': {'type': 'string', 'description': 'US only, e.g. "FY2025". Defaults to the current bundled fiscal year'}, 'late_evening': {'type': 'array', 'items': {'type': 'boolean'}, 'description': 'UK only, per day: the journey was ongoing at 8pm and a meal was bought after it, which adds the 10.00 GBP supplement'}, 'lodging_nights': {'type': 'integer', 'maximum': 366, 'minimum': 0, 'description': 'Nights of accommodation. What this pays depends on the scheme and the answer says so'}, 'meals_provided': {'type': 'array', 'items': {'type': 'array', 'items': {'enum': ['breakfast', 'lunch', 'dinner'], 'type': 'string'}}, 'description': 'Per day, in order: the free meals the traveller was given that day, e.g. [["breakfast"],["breakfast","lunch"]]. Each one reduces that day\'s allowance by the scheme\'s own percentage or amount'}, 'meals_provided_daily': {'$ref': '#/properties/meals_provided/items', 'description': 'The same free meals on every day. Ignored for any day that meals_provided already names'}}, 'additionalProperties': False}
perdiem_rates
List the bundled per diem rates
List a scheme's bundled daily allowance rates with the authority, instrument, source URL and effective date they came from. Filter by country or city. Free and unlimited.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'city': {'type': 'string', 'description': 'City or locality name, for the schemes that publish per-city rates'}, 'scheme': {'enum': ['pl', 'uk', 'us'], 'type': 'string', 'description': '"pl" Polish delegation regulation, "uk" HMRC benchmark scale rates, "us" GSA CONUS standard. Omit for every scheme'}, 'country': {'type': 'string', 'description': 'Country name or ISO code, e.g. Germany or DE. Matched exactly first, then as a substring'}}, 'additionalProperties': False}
perdiem_report
Totals per scheme and month
Total saved trips per scheme and calendar month, bucketed by start date: trips, days, subsistence and lodging, each in the scheme's own currency, with the trip ids behind every figure. Pro.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'YYYY-MM, latest month by start date'}, 'from': {'type': 'string', 'description': 'YYYY-MM, earliest month by start date'}, 'scheme': {'enum': ['pl', 'uk', 'us', 'all'], 'type': 'string', 'description': 'Default "all"'}, 'traveller': {'type': 'string', 'description': 'Only this traveller'}}, 'additionalProperties': False}
trip_delete
Delete a saved trip
Delete one saved trip and free the free-tier slot it held that month. A trip that has been exported or has an expense booked against it is refused with the blocker named, and nothing is written. Free and unlimited.
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['trip'], 'properties': {'trip': {'type': 'string', 'minLength': 1, 'description': 'Trip id such as TRIP-2026-0001, or an exact or partial trip name. A partial name matching more than one trip is refused with the list'}}, 'additionalProperties': False}
trip_export
Export a trip as expenses
Return the exact expense_add arguments for a saved trip: one payload for subsistence and, with split_lodging, one for lodging. It writes nothing in the expense-tracker server; only mark_exported changes this trip. Pro.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['trip'], 'properties': {'trip': {'type': 'string', 'minLength': 1, 'description': 'Trip id such as TRIP-2026-0001, or an exact or partial trip name'}, 'billable': {'type': 'boolean', 'description': 'Rebillable to the client. Default: true when the trip has a project, false otherwise'}, 'category': {'type': 'string', 'maxLength': 200, 'description': 'Expense category to put on the payload. Default "travel"'}, 'mark_exported': {'type': 'boolean', 'description': 'Stamp exported_at on the trip so a later export can see it already went out. Default false'}, 'split_lodging': {'type': 'boolean', 'description': 'Return lodging as its own expense rather than folded into the subsistence total. Default true'}}, 'additionalProperties': False}
trip_list
List saved trips
List saved trips with the scheme, destination, dates and total on each, and a total per currency. Filter by scheme, destination, traveller, project and start date range. Free and unlimited.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'YYYY-MM-DD, latest start date'}, 'from': {'type': 'string', 'description': 'YYYY-MM-DD, earliest start date'}, 'scheme': {'enum': ['pl', 'uk', 'us', 'all'], 'type': 'string', 'description': 'Default "all"'}, 'project': {'type': 'string', 'description': 'Only trips on this project'}, 'traveller': {'type': 'string', 'description': 'Only trips by this traveller'}, 'destination': {'type': 'string', 'description': 'Only trips to a destination containing this text'}}, 'additionalProperties': False}
trip_record
Save a calculated trip
Calculate a trip and save it under a name, traveller taken from the shared business profile; returns the TRIP-YYYY-NNNN id. An identical record is refused and named, spending no slot. Free: 5 trips a calendar month.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'scheme', 'destination', 'start', 'end'], 'properties': {'end': {'type': 'string', 'minLength': 1, 'description': 'When it ended, same form as start. It must be after start as an instant'}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'What to call it, e.g. "Berlin client workshop"'}, 'start': {'type': 'string', 'minLength': 1, 'description': 'When the trip began, ISO 8601 WITH a zone: "2026-03-28T22:00:00+01:00", or "2026-03-28T22:00" together with timezone'}, 'scheme': {'enum': ['pl', 'uk', 'us'], 'type': 'string', 'description': '"pl" Polish delegation regulation, "uk" HMRC benchmark scale rates, "us" GSA CONUS standard'}, 'project': {'type': 'string', 'maxLength': 200, 'description': 'Project or client this belongs to; carried onto the expense payload'}, 'purpose': {'type': 'string', 'maxLength': 2000, 'description': 'Why the trip happened; kept on the record and carried onto the expense payload'}, 'timezone': {'type': 'string', 'description': 'IANA id such as "Europe/Warsaw". Required when start or end carries no offset; also the zone the US scheme counts calendar days in'}, 'traveller': {'type': 'string', 'maxLength': 200, 'description': "Who travelled. Defaults to the shared business profile's name"}, 'destination': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Country or locality, e.g. "Germany", "Poland", "United Kingdom", "United States"'}, 'fiscal_year': {'type': 'string', 'description': 'US only, e.g. "FY2025". Defaults to the current bundled fiscal year'}, 'late_evening': {'type': 'array', 'items': {'type': 'boolean'}, 'description': 'UK only, per day: the journey was ongoing at 8pm and a meal was bought after it, which adds the 10.00 GBP supplement'}, 'lodging_nights': {'type': 'integer', 'maximum': 366, 'minimum': 0, 'description': 'Nights of accommodation. What this pays depends on the scheme and the answer says so'}, 'meals_provided': {'type': 'array', 'items': {'type': 'array', 'items': {'enum': ['breakfast', 'lunch', 'dinner'], 'type': 'string'}}, 'description': 'Per day, in order: the free meals the traveller was given that day, e.g. [["breakfast"],["breakfast","lunch"]]. Each one reduces that day\'s allowance by the scheme\'s own percentage or amount'}, 'meals_provided_daily': {'$ref': '#/properties/meals_provided/items', 'description': 'The same free meals on every day. Ignored for any day that meals_provided already names'}}, 'additionalProperties': False}
Modifié
license_activate
21 September 2026 02:56
Modifié
license_status
21 September 2026 02:56
Modifié
perdiem_report
21 September 2026 02:56
Modifié
trip_export
21 September 2026 02:56
Modifié
trip_delete
21 September 2026 02:56
Modifié
trip_list
21 September 2026 02:56
Modifié
trip_record
21 September 2026 02:56
Modifié
perdiem_calc
21 September 2026 02:56
Modifié
perdiem_rates
21 September 2026 02:56
Ajouté
license_activate
17 September 2026 12:52
Ajouté
license_status
17 September 2026 12:52
Ajouté
perdiem_report
17 September 2026 12:52
Ajouté
trip_export
17 September 2026 12:52
Ajouté
trip_delete
17 September 2026 12:52
Ajouté
trip_list
17 September 2026 12:52
Ajouté
trip_record
17 September 2026 12:52
Ajouté
perdiem_calc
17 September 2026 12:52
Ajouté
perdiem_rates
17 September 2026 12:52