Koskamo

theluckystrike MCP Per Diem

Calculates statutory travel allowances using bundled Polish, HMRC, and GSA rate tables. Supports partial day calculations, meal deductions, trip recording, and monthly reporting for expense tracking.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

theluckystrike MCP Per Diem logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by theluckystrike
You need:Free tier needs no keyFree tokens allow 600 calls an houra Pro key 6000a token lasts 30 days from last use
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/per-diem
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

9 of 9 have a description · 9 of 9 declare behavior hints · 8 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Calculate daily travel allowance for a specific trip with partial-day rules
  • List bundled daily allowance rates with source authority and effective date
  • Total saved trips per month by scheme and currency
  • Export expense arguments for subsistence and lodging to an expense tracker

Source and maintenance

Community listingRegistry 0.23.0
Maintenance checked

Protocol and capabilities

Server
mcp-per-diem 0.22.6
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Travel per diem allowances. It covers bundled daily allowance rates with their authority, source and effective date, a trip's allowance with partial days and meal deductions, saved trips with the traveller taken from the shared business profile, and saved trips turned into expense entries for the expense tracker. Saved trips are stored per user account on McpStamp's hosted service. Rate lookups and calculations are free and unlimited; the free tier saves 5 trips a month, and expense export and monthly totals need Pro. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.per-diem

Tools

9 advertised

perdiem_rates — List the bundled per diem rates
Advertised by the server during the last successful anonymous check.

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.

perdiem_rates input schema
{
  "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_rates annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
perdiem_calc — Calculate a travel allowance
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

perdiem_calc input schema
{
  "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_calc annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
trip_record — Save a calculated trip
Advertised by the server during the last successful anonymous check.

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.

trip_record input schema
{
  "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
}
trip_record annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
trip_list — List saved trips
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

trip_list input schema
{
  "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_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
trip_delete — Delete a saved trip
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

trip_delete input schema
{
  "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_delete annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
trip_export — Export a trip as expenses
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

trip_export input schema
{
  "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_export annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
perdiem_report — Totals per scheme and month
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

perdiem_report input schema
{
  "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
}
perdiem_report annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_status — License status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

license_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_activate — Activate license
Advertised by the server during the last successful anonymous check.

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.

license_activate input schema
{
  "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_activate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

2 advertised

upgrade_to_pro — Explain the upgrade

Advertised by the server during the last successful anonymous check.

Explain what Pro on the per-diem server costs and exactly what the user has to do, without leaving the conversation.

feature
The capped feature that prompted this, if there was one
claim_trip — Turn a trip into a per diem claim

Advertised by the server during the last successful anonymous check.

Work out the allowance for a trip, save it, and produce the expense lines for it.

No arguments advertised.

Resources

2 advertised

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

What per-diem costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.

pricing URI
pricing://per-diem

MIME type: application/json

schemes — Bundled per diem schemes

Advertised by the server during the last successful anonymous check.

Every bundled table with its authority, source URL, effective date and coverage, as JSON.

schemes URI
perdiem://schemes

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1535 ms
95th percentile latency
1535 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1535 ms · metadata changed · 9 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mcp-per-diem https://mcp.zovo.one/mcp/per-diem

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mcp-per-diem --url https://mcp.zovo.one/mcp/per-diem

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mcp-per-diem in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mcp-per-diem": {
      "url": "https://mcp.zovo.one/mcp/per-diem"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mcp-per-diem": {
      "type": "streamableHttp",
      "url": "https://mcp.zovo.one/mcp/per-diem",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mcp-per-diem and inspect its tools.
VS Code configuration
{
  "servers": {
    "mcp-per-diem": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/per-diem"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mcp-per-diem https://mcp.zovo.one/mcp/per-diem

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.zovo.one/mcp/per-diem

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mcp-per-diem": {
      "serverUrl": "https://mcp.zovo.one/mcp/per-diem"
    }
  }
}

Let your agent find its tools

Find servers like theluckystrike MCP Per Diem from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.