gsa-perdiem-mcp
MCP server for the GSA Per Diem Rates API. Federal travel lodging and M&IE rates for IGCEs and travel cost estimation.
Works without configuration using DEMO_KEY. Optional free API key for higher rate limits. Standalone MCP use is an advanced, self-supported path; packaged agents are the maintained beginner path.
Tested and hardened through seven rounds of integration testing against the live GSA Per Diem API, including a round-7 independent re-audit with live verification. 437 regression tests covering 1 P0 path-traversal bug, 23 P1 silent-wrong-data bugs, 21 P2 validation gaps, and 14 round-7 findings fixed. See testing.md for the full testing record.
What it does
Exposes the GSA Per Diem API as 6 MCP tools:
Core lookups
lookup_city_perdiem- Rates by city/state (auto-selects best NSA match)lookup_zip_perdiem- Rates by ZIP codelookup_state_rates- All NSA rates for a stateget_mie_breakdown- M&IE tier table (meal components)
Workflow
estimate_travel_cost- Calculate trip per diem (lodging + M&IE with first/last day at 75%)compare_locations- Compare rates across multiple cities
Get your own API key (strongly recommended)
This server hits api.gsa.gov, which uses api.data.gov for rate limiting.
- Without a key: falls back to the shared
DEMO_KEYwhich is capped at ~10 requests per hour across everyone using it. A couple real prompts will blow through that limit and you'll start seeing 429 errors. - With a personal key: 1,000 requests per hour, yours alone.
Get a free key (takes 30 seconds):
- Go to api.data.gov/signup
- Enter your name and email: no approval, no wait
- Copy the key from the confirmation page
- Paste it into your client config as
PERDIEM_API_KEY(see below)
The same key works for every api.data.gov-backed API (GSA Per Diem, NASA, FEC, FCC, etc.).
Installation
uvx gsa-perdiem-mcp
Configuration
MCP is an open standard, and compatible clients can run this server. The maintained 1102tools Agent Setup Guide covers packaged agents in Codex and Claude Code, not standalone server configuration. Use the block below as the server definition and adapt its placement to your client.
Recommended (with your own key):
{
"mcpServers": {
"gsa-perdiem": {
"command": "uvx",
"args": ["--refresh-package", "gsa-perdiem-mcp", "--from", "gsa-perdiem-mcp", "gsa-perdiem-mcp"],
"env": {
"PERDIEM_API_KEY": "paste-your-api-data-gov-key-here",
"FEDERAL_API_MIN_INTERVAL_SECONDS": "4"
}
}
}
}
The server defaults FEDERAL_API_MIN_INTERVAL_SECONDS to 4 for personal-key
and DEMO_KEY requests. The explicit value above documents the intended policy
and can be changed when you have a documented reason. Per Diem and
Regulations.gov processes using the same api.data.gov key share the gate.
Without a key (works for a handful of calls per hour, then 429s until the hour rolls over):
{
"mcpServers": {
"gsa-perdiem": {
"command": "uvx",
"args": ["--refresh-package", "gsa-perdiem-mcp", "--from", "gsa-perdiem-mcp", "gsa-perdiem-mcp"]
}
}
}
The --refresh-package flag tells uv to check PyPI for a newer release each time your client launches the server, so fixes arrive automatically; without it, uv keeps serving whatever version it first cached. It adds a moment of network time at startup, so raise your platform's MCP startup timeout if it enforces a short one.
Restart the client and the tools appear.
Example prompts
- "What's the per diem rate for Washington DC in FY2026?"
- "Estimate travel costs for 4 nights in Boston in March."
- "Compare per diem rates for DC, New York, and San Francisco."
- "What are all the NSA per diem locations in Virginia?"
- "Show me the M&IE meal breakdown for the $92 tier."
- "Build a travel estimate: 3 trips to Seattle (4 nights each) and 2 trips to DC (3 nights each)."
Important: maximum reimbursement, not actual prices
Per diem rates are federal reimbursement ceilings per 41 CFR 301-11. They are not actual hotel prices. CONUS only. Non-foreign OCONUS rates (Alaska, Hawaii, territories) are set by DoD (DTMO); foreign rates by the State Department. Lodging taxes generally not included. First/last travel day M&IE at 75%.
Companion tools
Use alongside bls-oews-mcp (wage data) and gsa-calc-mcp (ceiling rates) for complete IGCE development. Per diem covers the travel component; BLS and CALC+ cover labor.
Request pacing
Every request, including DEMO_KEY traffic, uses a provisional 4-second
cross-process anti-burst interval by default. Per Diem and Regulations.gov
share a local api.data.gov bucket when they use the same key. This does not
increase provider quota or coordinate the key on another computer. Override
with FEDERAL_API_MIN_INTERVAL_SECONDS, use 0 to deliberately disable it,
and use FEDERAL_API_PACING_DIR to relocate local pacing state.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gsa_perdiem_mcp-1.0.7.tar.gz.
File metadata
- Download URL: gsa_perdiem_mcp-1.0.7.tar.gz
- Upload date:
- Size: 107.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b47587855e1963e02fbf03882aaa285cb0a4127b2ed0e91db556c706f9937e7a
|
|
| MD5 |
dcce680a6b640f3d232fcd7ffebb86fc
|
|
| BLAKE2b-256 |
9b65bdeb3f3d78b3dd019de30c36b1227c6c0adf580039f93eb4b01b4aaa88e8
|
Provenance
The following attestation bundles were made for gsa_perdiem_mcp-1.0.7.tar.gz:
Publisher:
publish-pypi.yml on 1102tools-dev/federal-contracting-mcps
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsa_perdiem_mcp-1.0.7.tar.gz -
Subject digest:
b47587855e1963e02fbf03882aaa285cb0a4127b2ed0e91db556c706f9937e7a - Sigstore transparency entry: 2579892500
- Sigstore integration time:
-
Permalink:
1102tools-dev/federal-contracting-mcps@574f02b38d98eb321cf020ac18d0d6e46874c323 -
Branch / Tag:
refs/tags/v1.0.15 - Owner: https://github.com/1102tools-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@574f02b38d98eb321cf020ac18d0d6e46874c323 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gsa_perdiem_mcp-1.0.7-py3-none-any.whl.
File metadata
- Download URL: gsa_perdiem_mcp-1.0.7-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91aa0e14a53b6e301f5a293bf2eebd70f8031c3e9c51c35bbd005c7a46786275
|
|
| MD5 |
0938c1d0594bce6dc8472393cf70ca4c
|
|
| BLAKE2b-256 |
2787e97be1334467bad0763730fc14a02eaa289019454f739215338bf3c19184
|
Provenance
The following attestation bundles were made for gsa_perdiem_mcp-1.0.7-py3-none-any.whl:
Publisher:
publish-pypi.yml on 1102tools-dev/federal-contracting-mcps
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsa_perdiem_mcp-1.0.7-py3-none-any.whl -
Subject digest:
91aa0e14a53b6e301f5a293bf2eebd70f8031c3e9c51c35bbd005c7a46786275 - Sigstore transparency entry: 2579892506
- Sigstore integration time:
-
Permalink:
1102tools-dev/federal-contracting-mcps@574f02b38d98eb321cf020ac18d0d6e46874c323 -
Branch / Tag:
refs/tags/v1.0.15 - Owner: https://github.com/1102tools-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@574f02b38d98eb321cf020ac18d0d6e46874c323 -
Trigger Event:
push
-
Statement type: