Koskamo

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.

Zovo Per Diem Calculator MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://per-diem.zovo.one/mcp
Vendor documentation

What 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

Community listingRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

The server calculates US travel allowances from bundled GSA CONUS FY2026 and FY2027 tables, with day-by-day XLSX and CSV files. calculate_per_diem returns trip allowances; find_per_diem_rates returns monthly rates. Results include per-item errors alongside successful items. Meals on common carriers and complimentary hotel breakfasts are not deductions. Covers GSA CONUS rates for FY2026 and FY2027 (2025-10-01 to 2027-09-30), the 48 contiguous states and DC. Not Alaska, Hawaii, territories, foreign travel, or FY2028. Unlisted cities use the standard rate; ZIP lookup checks whether a listed county rate applies. Federal Travel Regulation maximums; agency or contract policy may differ. Excludes lodging taxes, conference lodging rates, actual-expense approvals, extended-TDY reductions and the same-day 12-hour test. Not tax or legal advice.

Tools

2 advertised

calculate_per_diem — Calculate per diem
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

calculate_per_diem input schema
{
  "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\"}]}]."
    }
  }
}
calculate_per_diem output schema
{
  "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
}
calculate_per_diem annotations
{
  "title": "Calculate per diem",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_per_diem_rates — Find per diem rates
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_per_diem_rates input schema
{
  "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."
    }
  }
}
find_per_diem_rates output schema
{
  "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
}
find_per_diem_rates annotations
{
  "title": "Find per diem rates",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

per-diem-widget — Zovo Per Diem Calculator view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Per Diem Calculator.

per-diem-widget URI
ui://widget/per-diem-v6-1.0.0-91f759b0f3265ae0f9adb6fece57028827bc210729e8346d7106262a75340d43.html

MIME type: text/html;profile=mcp-app

per-diem-widget-legacy — Zovo Per Diem Calculator view (previous versions)

Advertised by the server during the last successful anonymous check.

per-diem-widget-legacy URI template
ui://widget/per-diem-{version}.html

MIME type: text/html;profile=mcp-app

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
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.

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 zovo-per-diem-calculator-mcp https://per-diem.zovo.one/mcp

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 zovo-per-diem-calculator-mcp --url https://per-diem.zovo.one/mcp

Cursor

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

Cline

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

VS Code

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

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 zovo-per-diem-calculator-mcp https://per-diem.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "zovo-per-diem-calculator-mcp": {
      "url": "https://per-diem.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.