gsa-perdiem-mcp
Бесплатный MCP-сервер с открытым исходным кодом для GSA Per Diem Rates API. Ставки федеральных суточных на проживание и M&IE для расчётов IGCE и оценки транспортных расходов.
Обзор, демонстрационное видео и размещённая версия: https://1102tools.com/mcp/gsa-per-diem
Запросы по ZIP-коду, штату и M&IE для FY2021 и более поздних лет работают без ключа и сетевых обращений: ответы формируются на основе опубликованных GSA файлов со ставками, ZIP-кодами и M&IE, включённых в пакет. Для лет, данные по которым включены в пакет, запросы по городам, оценка поездок и сравнение с указанным county также работают без ключа и сетевых обращений. Запросы по названию города без указания округа обрабатываются на основе включённых в пакет данных Census о населённых пунктах и данных GSA об округах, если это позволяет однозначно определить зону ставок. Для остальных названий городов и запросов за годы, данные по которым не включены в пакет, используется GSA Per Diem API — для этого нужен бесплатный ключ api.data.gov, указанный в PERDIEM_API_KEY. Размещённая версия не требует ключа ни для одного запроса. См. раздел «Локальная или размещённая версия».
Перед выпуском запускаются регрессионные тесты, а реалистичные запросы о поездках подрядчиков проверяются по опубликованным ставкам GSA. Подробнее: testing.md.
Локальная или размещённая версия
| Локальная (на компьютере) | Claude (размещённая) | ChatGPT (размещённая) |
|---|---|---|
| Локальная настройка | Установить | Установить |
-
Локальная версия работает на вашем компьютере — в настольном приложении Claude или ChatGPT либо в другом AI-приложении. Она использует весь доступный вам лимит запросов и обращается только к государственному сервису. Запросы по ZIP-кодам, штатам, M&IE и сочетанию города с округом, если данные включены в пакет, не требуют ключа. Ключ api.data.gov нужен только для запросов к API. Локальная версия не обновляется автоматически, поэтому попросите AI обновить её. Настраивать сервер вручную не обязательно: отправьте AI ссылку на эту страницу и попросите выполнить настройку или провести вас через неё.
-
Размещённая версия всегда актуальна, не требует настройки или ключей и доступна в Claude и ChatGPT из любой точки мира.
Сравнить локальную и размещённую версии · Примеры запросов
Возможности
Предоставляет ставки суточных GSA через 7 инструментов MCP:
Основные запросы
-
lookup_city_perdiem— ставки по городу и штату. Если город относится к одной зоне ставок, используются данные Census и об округах, включённые в пакет; в остальных случаях выполняется запрос к GSA API. Параметрcountyпозволяет выбрать конкретный округ. -
lookup_zip_perdiem— ставки по ZIP-коду на основе файла GSA с ZIP-кодами. Параметрcountyуказывается по желанию. -
lookup_state_rates— все ставки NSA и стандартная ставка для штата. -
get_mie_breakdown— таблица уровней M&IE с разбивкой по компонентам питания. -
get_data_status— финансовые годы, данные по которым включены в пакет, исходные файлы GSA и сведения о том, какие инструменты обращаются к API.
Рабочие сценарии
-
estimate_travel_cost— расчёт суточных за поездку: проживание и M&IE, причём для первого и последнего дня применяется ставка 75%. -
compare_locations— сравнение ставок для нескольких городов.
Зоны ставок никогда не определяются предположительно. GSA устанавливает ставки для округов или отдельных населённых пунктов. Если ZIP-код или город охватывает несколько зон с разными ставками, результат получает статус status: "ambiguous" и содержит все возможные варианты. Указать нужный вариант можно с помощью параметра county. Зона ставок для города определяется по данным GSA об округах с использованием записей Census 2020 о соответствии населённых пунктов округам. Если Census не содержит такого названия, запрос направляется в GSA. Если название не распознаёт и GSA, результат получает статус unresolved, а стандартная ставка не подставляется. Если GSA указывает для города несколько зон ставок, неоднозначность разрешается по записям Census 2020 о соответствии населённых пунктов округам — но только когда эти записи относят город ровно к одной из указанных зон. В каждом результате указано его source: включённый в пакет файл GSA с SHA-256 или конечная точка API.
Данные в пакете. Каталог src/gsa_perdiem_mcp/data/ содержит данные начиная с FY2021. Они формируются скриптом scripts/build_snapshot.py на основе страницы GSA с файлами суточных и файлов Census 2020 с кодами населённых пунктов и округов. В data/manifest.json записаны URL источников и SHA-256 каждого файла. Сборка завершается с ошибкой, если изменилась схема данных, если ставки в файлах GSA со ставками и ZIP-кодами не совпадают или если встречается описание населённого пункта, для обработки которого нет соответствующей логики. Для FY2020 и финансовых лет, данные по которым ещё не включены в пакет, используется API.
Ключ API (только для запросов к API)
Запросы по ZIP-кодам, штатам и M&IE за финансовые годы, данные по которым включены в пакет, выполняются без ключа. То же относится к lookup_city_perdiem, estimate_travel_cost и compare_locations, если для года, данные по которому включены в пакет, указан округ. Например, можно запросить Boston, MA, в округе Suffolk или добавить county: "Suffolk" для каждого Boston в сравнении.
Запросы по названиям городов, которые не удаётся обработать на основе включённых в пакет данных Census и данных об округах, а также запросы за годы, данные по которым не включены в пакет, обращаются к api.gsa.gov и требуют ключ api.data.gov. Ключ предоставляет лимит в 1 000 запросов в час, доступный только вам. Если PERDIEM_API_KEY не задан, такие запросы возвращают инструкции по настройке. Чтобы выполнить запрос по городу или оценить стоимость поездки за год, данные по которому включены в пакет, не настраивая ключ, можно указать округ, в котором находится место работы.
Получите бесплатный ключ — это займёт 30 секунд:
-
Перейдите на страницу api.data.gov/signup
-
Укажите имя и адрес электронной почты: подтверждение не требуется, ждать не нужно
-
Скопируйте ключ со страницы подтверждения
-
Вставьте его в конфигурацию клиента как
PERDIEM_API_KEY(см. ниже)
Один и тот же ключ подходит для всех API на основе api.data.gov (GSA Per Diem, NASA, FEC, FCC и других).
Установка
uvx --refresh-package gsa-perdiem-mcp --from gsa-perdiem-mcp gsa-perdiem-mcp
Настройка
Используйте приведённую ниже конфигурацию как описание сервера и разместите её в соответствии с требованиями совместимого клиента MCP. Примеры практических запросов к этому источнику приведены в библиотеке промптов.
С ключом:
{
"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"
}
}
}
}
По умолчанию сервер задаёт для запросов с ключом значение FEDERAL_API_MIN_INTERVAL_SECONDS равное 0.6 и ограничивает их количество до 950 в час. В примере выше указано большее значение — 4; подойдут оба варианта. Запросы Per Diem и Regulations.gov, использующие один ключ api.data.gov, используют общий механизм ограничения частоты запросов.
Настройка без ключа (доступны запросы по ZIP-кодам, штатам, M&IE и сочетанию города с округом, а также расчёты и сравнения, если данные включены в пакет):
{
"mcpServers": {
"gsa-perdiem": {
"command": "uvx",
"args": ["--refresh-package", "gsa-perdiem-mcp", "--from", "gsa-perdiem-mcp", "gsa-perdiem-mcp"]
}
}
}
Флаг --refresh-package указывает uv проверять наличие новой версии на PyPI при каждом запуске сервера клиентом. Благодаря этому исправления устанавливаются автоматически. Без этого флага uv продолжит использовать версию, которую сохранил в кэше при первом запуске. Проверка добавляет небольшую сетевую задержку при запуске. Если платформа ограничивает время запуска MCP, увеличьте установленный на ней тайм-аут.
Перезапустите клиент — инструменты появятся.
Примеры запросов
-
«Какая ставка суточных установлена для Washington DC в FY2026?»
-
«Оцени расходы на поездку с четырьмя ночёвками в Boston в марте».
-
«Сравни ставки суточных для DC, New York и San Francisco».
-
«Какие населённые пункты NSA указаны для Virginia?»
-
«Покажи разбивку M&IE по компонентам питания для уровня $92».
-
«Рассчитай расходы на поездки: 3 поездки в Seattle по 4 ночи и 2 поездки в DC по 3 ночи».
Важно: предельная сумма возмещения, а не фактические цены
Ставки суточных — это предельные суммы возмещения федеральных расходов, установленные в соответствии с 41 CFR 301-11. Они не отражают фактические цены на гостиницы. Данные охватывают только CONUS. Ставки для территорий США, не относящихся к зарубежным территориям (Аляска, Гавайи и другие территории), устанавливает DoD (DTMO); для зарубежных территорий — Государственный департамент. Налоги на проживание, как правило, не включены. В первый и последний дни поездки на M&IE начисляется 75% ставки.
Дополнительные инструменты
Для подготовки полного IGCE используйте этот сервер вместе с bls-oews-mcp (данные о заработной плате) и gsa-calc-mcp (предельные ставки). Суточные покрывают расходы на поездки, а BLS и CALC+ — затраты на оплату труда.
Лицензия
MIT
Поездки, пересекающие границы месяцев или финансовых лет. Складывайте lodging_total за каждый месяц, используя ставку соответствующего финансового года. M&IE рассчитывайте один раз за фактическое количество дней поездки: 75% ставки — в день отправления и в день возвращения, 100% — в остальные дни. Не складывайте отдельные значения mie_total или grand_total за каждый месяц, поскольку каждый расчёт предполагает собственные дни отправления и возвращения. Например, за четыре ночёвки при дневной ставке M&IE $92 расходы на M&IE составят $414 за пять дней поездки. Если разделить поездку на два независимых расчёта по две ночёвки, сумма M&IE составит $460.