Zovo Per Diem Calculator MCP
A community MCP server that calculates travel per diem rates based on GSA CONUS data for FY2026 and FY2027. It supports seasonal lodging by ZIP, city, or county, handles first/last day allowances, furnished-meal deductions, and multiple contiguous stops. Users can download expense worksheets in XLSX or CSV formats with source provenance.
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.
https://per-diem.zovo.one/mcpWhat you can do with it
- Calculate per diem rates for specific ZIP codes and dates
- Determine lodging maximums and meal deductions for travel
- Download expense worksheets in XLSX or CSV format
Source and maintenance
Protocol and capabilities
- Server
- per-diem 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"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.
Tools
2 advertised
calculate_per_diem — Calculate per diem
Calculates GSA CONUS lodging and M&IE allowances for one or more trips, applying first/last-day and furnished-meal deductions, and returns day-by-day results with XLSX/CSV worksheet downloads. Covers bundled GSA CONUS FY2026/FY2027 only; up to 10 trips, 10 contiguous stops per trip, 92 days between arrival and departure, and 400 day rows per call. Furnished government or registration meals reduce allowances; common-carrier meals and complimentary hotel breakfasts are not deductions. Same-day travel requires more than 12 hours; no times are taken. Coverage excludes OCONUS, lodging taxes, agency policies and FY2028.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trips"
],
"properties": {
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"stops"
],
"properties": {
"name": {
"type": "string",
"maxLength": 60,
"description": "Optional trip label, without personal details. Example: DC conference."
},
"stops": {
"type": "array",
"items": {
"type": "object",
"required": [
"location",
"arrive",
"depart"
],
"properties": {
"arrive": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "Arrival day, inclusive. Example: 2026-10-27."
},
"county": {
"type": "string",
"maxLength": 100,
"description": "County to resolve an ambiguous ZIP or city. Example: Hampden."
},
"depart": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "Departure day, inclusive for meals; no lodging. Example: 2026-10-29."
},
"location": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "Five-digit ZIP or City, ST. Example: 20001 or Austin, TX."
},
"nightly_lodging_cost": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Actual room cost before taxes in USD, at most two decimals. Example: 250.50; omit for the maximum."
}
}
},
"maxItems": 10,
"minItems": 1,
"description": "One to ten contiguous stops in date order. Example: [{location:\"20001\",arrive:\"2026-10-27\",depart:\"2026-10-29\"}]."
},
"meals_provided": {
"type": "array",
"items": {
"type": "object",
"required": [
"date"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "Day of furnished meals. Example: 2026-10-28."
},
"lunch": {
"type": "boolean",
"description": "Government or registration-fee lunch provided. Example: true."
},
"dinner": {
"type": "boolean",
"description": "Government or registration-fee dinner provided. Example: false."
},
"breakfast": {
"type": "boolean",
"description": "Government or registration-fee breakfast provided. Example: true."
}
}
},
"maxItems": 60,
"description": "Furnished meals; duplicate dates merge. Example: [{date:\"2026-10-28\",lunch:true}]."
}
}
},
"maxItems": 10,
"minItems": 1,
"description": "One to ten trips. Example: [{name:\"DC\",stops:[{location:\"20001\",arrive:\"2026-10-27\",depart:\"2026-10-29\"}]}]."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"source",
"errors",
"downloads",
"note"
],
"properties": {
"kind": {
"enum": [
"worksheet",
"rates"
],
"type": "string"
},
"note": {
"type": "string"
},
"rates": {
"type": "array",
"items": {
"type": "object",
"required": [
"location",
"destination",
"state",
"location_defined",
"fiscal_year",
"lodging",
"mie",
"breakfast",
"lunch",
"dinner",
"incidentals",
"first_last_day",
"matched_by",
"warning"
],
"properties": {
"mie": {
"type": "number"
},
"lunch": {
"type": "number"
},
"state": {
"type": "string"
},
"dinner": {
"type": "number"
},
"lodging": {
"type": "array",
"items": {
"type": "number"
}
},
"warning": {
"type": "string"
},
"location": {
"type": "string"
},
"breakfast": {
"type": "number"
},
"matched_by": {
"type": "string"
},
"destination": {
"type": "string"
},
"fiscal_year": {
"type": "number"
},
"incidentals": {
"type": "number"
},
"first_last_day": {
"type": "string"
},
"location_defined": {
"type": "string"
}
},
"additionalProperties": false
}
},
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"days",
"nights",
"totals",
"preview"
],
"properties": {
"days": {
"type": "number"
},
"name": {
"type": "string"
},
"nights": {
"type": "number"
},
"totals": {
"type": "object",
"required": [
"lodging_maximum",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"total": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": "string"
},
"lodging_maximum": {
"type": "string"
}
},
"additionalProperties": false
},
"preview": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"date",
"day_type",
"destination",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"date": {
"type": "string"
},
"total": {
"type": "string"
},
"day_type": {
"type": "string"
},
"destination": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "array",
"items": [
{
"type": "number"
},
{
"type": [
"number",
"null"
]
},
{
"type": "number"
}
],
"maxItems": 3,
"minItems": 3,
"additionalItems": false
}
]
}
},
"first_day": {
"type": "string"
}
},
"additionalProperties": false
}
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"item",
"name",
"message"
],
"properties": {
"item": {
"type": "number"
},
"name": {
"type": "string"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"source": {
"type": "string"
},
"totals": {
"type": "object",
"required": [
"lodging_maximum",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"total": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": "string"
},
"lodging_maximum": {
"type": "string"
}
},
"additionalProperties": false
},
"downloads": {
"type": "object",
"required": [
"xlsx",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"xlsx": {
"type": "string"
}
},
"additionalProperties": false
},
"fiscal_year": {
"type": "number"
},
"preview_columns": {
"type": "array",
"items": {
"type": "string"
}
},
"preview_destinations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": [
{
"type": "string"
}
],
"maxItems": 1,
"minItems": 1,
"additionalItems": false
},
{
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
],
"maxItems": 2,
"minItems": 2,
"additionalItems": false
}
]
}
}
},
"additionalProperties": false
}{
"title": "Calculate per diem",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_per_diem_rates — Find per diem rates
Looks up monthly GSA CONUS lodging and M&IE rates for up to 25 ZIP codes or City, ST locations in bundled FY2026/FY2027 tables, with XLSX and CSV files. The default fiscal year is today in America/New_York. Ambiguous ZIPs return an item error; calculate_per_diem accepts county for disambiguation. Coverage excludes OCONUS and FY2028.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"locations"
],
"properties": {
"locations": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "ZIP or City, ST. Example: 10001."
},
"maxItems": 25,
"minItems": 1,
"description": "One to 25 locations. Example: [\"10001\",\"Austin, TX\",\"Smalltown, KS\"]."
},
"fiscal_year": {
"anyOf": [
{
"type": "number",
"const": 2026
},
{
"type": "number",
"const": 2027
}
],
"description": "Federal fiscal year, defaulting to today in America/New_York. Example: 2027."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"source",
"errors",
"downloads",
"note"
],
"properties": {
"kind": {
"enum": [
"worksheet",
"rates"
],
"type": "string"
},
"note": {
"type": "string"
},
"rates": {
"type": "array",
"items": {
"type": "object",
"required": [
"location",
"destination",
"state",
"location_defined",
"fiscal_year",
"lodging",
"mie",
"breakfast",
"lunch",
"dinner",
"incidentals",
"first_last_day",
"matched_by",
"warning"
],
"properties": {
"mie": {
"type": "number"
},
"lunch": {
"type": "number"
},
"state": {
"type": "string"
},
"dinner": {
"type": "number"
},
"lodging": {
"type": "array",
"items": {
"type": "number"
}
},
"warning": {
"type": "string"
},
"location": {
"type": "string"
},
"breakfast": {
"type": "number"
},
"matched_by": {
"type": "string"
},
"destination": {
"type": "string"
},
"fiscal_year": {
"type": "number"
},
"incidentals": {
"type": "number"
},
"first_last_day": {
"type": "string"
},
"location_defined": {
"type": "string"
}
},
"additionalProperties": false
}
},
"trips": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"days",
"nights",
"totals",
"preview"
],
"properties": {
"days": {
"type": "number"
},
"name": {
"type": "string"
},
"nights": {
"type": "number"
},
"totals": {
"type": "object",
"required": [
"lodging_maximum",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"total": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": "string"
},
"lodging_maximum": {
"type": "string"
}
},
"additionalProperties": false
},
"preview": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"date",
"day_type",
"destination",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"date": {
"type": "string"
},
"total": {
"type": "string"
},
"day_type": {
"type": "string"
},
"destination": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "array",
"items": [
{
"type": "number"
},
{
"type": [
"number",
"null"
]
},
{
"type": "number"
}
],
"maxItems": 3,
"minItems": 3,
"additionalItems": false
}
]
}
},
"first_day": {
"type": "string"
}
},
"additionalProperties": false
}
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"item",
"name",
"message"
],
"properties": {
"item": {
"type": "number"
},
"name": {
"type": "string"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"source": {
"type": "string"
},
"totals": {
"type": "object",
"required": [
"lodging_maximum",
"lodging_allowed",
"mie_allowed",
"total"
],
"properties": {
"total": {
"type": "string"
},
"mie_allowed": {
"type": "string"
},
"lodging_allowed": {
"type": "string"
},
"lodging_maximum": {
"type": "string"
}
},
"additionalProperties": false
},
"downloads": {
"type": "object",
"required": [
"xlsx",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"xlsx": {
"type": "string"
}
},
"additionalProperties": false
},
"fiscal_year": {
"type": "number"
},
"preview_columns": {
"type": "array",
"items": {
"type": "string"
}
},
"preview_destinations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": [
{
"type": "string"
}
],
"maxItems": 1,
"minItems": 1,
"additionalItems": false
},
{
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
],
"maxItems": 2,
"minItems": 2,
"additionalItems": false
}
]
}
}
},
"additionalProperties": false
}{
"title": "Find per diem rates",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
per-diem-widget — Zovo Per Diem Calculator view
Interactive view for Zovo Per Diem Calculator.
ui://widget/per-diem-v6-1.0.0-91f759b0f3265ae0f9adb6fece57028827bc210729e8346d7106262a75340d43.htmlper-diem-widget-legacy — Zovo Per Diem Calculator view (previous versions)
ui://widget/per-diem-{version}.html30-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
- 847 ms
- 95th percentile latency
- 847 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 847 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-per-diem-calculator-mcp https://per-diem.zovo.one/mcpCodex
codex mcp add zovo-per-diem-calculator-mcp --url https://per-diem.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-per-diem-calculator-mcp": {
"url": "https://per-diem.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-per-diem-calculator-mcp": {
"type": "streamableHttp",
"url": "https://per-diem.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-per-diem-calculator-mcp": {
"type": "http",
"url": "https://per-diem.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-per-diem-calculator-mcp https://per-diem.zovo.one/mcpClaude Desktop
{
"mcpServers": {
"zovo-per-diem-calculator-mcp": {
"url": "https://per-diem.zovo.one/mcp"
}
}
}Windsurf
{
"mcpServers": {
"zovo-per-diem-calculator-mcp": {
"serverUrl": "https://per-diem.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Per Diem Calculator MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.