
Travel Allowance
io.github.theluckystrike由 GitHub 账号 theluckystrike 发布v0.22.5更新于 Oct 24, 2026
Work out the travel allowance for a trip on official Polish, UK and US rate tables.
发布方自己的服务:travel.art
概览
本地 MCP 服务器,依据内置的波兰、英国和美国费率表计算商务旅行每日津贴,含餐费扣减与行程保存。
- 可以做什么
- 按方案、国家或城市查询内置每日津贴费率,并附上主管机构、来源和生效日期。为单次行程计价:每日津贴与总额,并显示不足整日的折算比例和餐费扣减。保存、列出和删除具名行程,并生成按方案和按月的汇总。将已保存行程导出为费用记录工具所需的参数,每种货币一份。离线查询或激活 Pro 许可证。
- 适用场景
- 适合按波兰、英国或美国规则计算或记录某次行程的每日津贴,或为报销保留已计价行程的清单。不适用于内置费率表之外的地区或方案,例如英国海外费率或美国非标准地区。
- 运行要求
- 作为桌面本地进程运行,通过 .mcpb 安装包或客户端配置项安装。无需账户、API 密钥或网络访问;费率表和行程数据均为本地文件。MCP_LICENSE_KEY 中的 Pro 许可证密钥为可选项,可解锁不限量保存行程、导出和报表。
安装
在 SourceWeft 中
- 打开 控制台中的 Travel Allowance,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
mcp-per-diem
Work out the daily travel allowance for a business trip on the rate tables the tax authorities actually publish, and keep the trips you priced. You give it where you went, when you left and when you got back, and which meals somebody else paid for; it gives you the amount per day and the total, in the scheme's own currency, with the partial-day rule and every meal deduction shown next to the number that produced it. Three schemes ship with it: the Polish delegation regulation (domestic and per country), the HMRC benchmark scale rates for travel inside the UK, and the US GSA CONUS standard M&IE and lodging. The tables are bundled files, not a live feed, so the same trip priced twice gives the same answer, and every rate carries the regulation, the source URL and the date it took effect. Nothing leaves your machine.
Built by theluckystrike.
In the official MCP Registry (io.github.theluckystrike/per-diem).
Install
One-click (.mcpb): download per-diem.mcpb from the latest release and double-click it in Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
Hosted, no install: point a URL-based client at https://mcp.zovo.one/mcp/per-diem. GET https://mcp.zovo.one/mcp/connect mints a token and prints a ready URL.
npm publish for @theluckystrike/mcp-per-diem is pending, so the npx line below returns 404 today.
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
Claude Code:
Cursor (~/.cursor/mcp.json or .cursor/mcp.json): the same entry as Claude Desktop.
Tools
Free vs Pro
Get Pro: $19 one-time, or $39 for the bundle.
What is in the tables, and what is deliberately not
Every table under src/tables/ carries a header with the authority, the instrument, the source URL, the date the rates took effect and the date they were read. perdiem_rates returns that header with the rates, so the provenance travels with the number.
The rule for what is in them: a value that could not be stated with confidence from the public regulation text was left out, not guessed. A per diem figure ends up on a tax return. A wrong one that looks authoritative is worse than an absent one, because an absent one is refused by name and you go and look it up.
Rates change. Check the effective_date in any answer before you rely on it, and read the source_url if the trip is recent.
Rules the calculator applies
- Start and end are instants, not wall clocks. Pass ISO 8601 with an offset (
2026-03-28T22:00:00+01:00) or a local datetime plus an IANAtimezone. Elapsed hours are an epoch difference, so a trip across a clock change is 23 or 25 hours, not 24. - Poland counts 24-hour periods from departure. Under 24 hours domestically: nothing under 8 hours, half the diet from 8 to 12, the whole diet above 12. Over 24 hours: a whole diet per period, then half for a remainder up to 8 hours and a whole one above. Abroad the ladder is a third up to 8 hours, half over 8 and up to 12, whole above. Free meals take 25/50/25 percent off a domestic day and 15/30/30 off a foreign one.
- The UK pays by band: 5.00 GBP from 5 hours away, 10.00 GBP from 10, 25.00 GBP from 15 when the journey is ongoing at 8pm, nothing under 5. A provided meal removes its share of the band, pro rata. HMRC states the principle ("the rate is not payable for a meal that was provided"); the pro-rata arithmetic is this server's reading of it, and it says so in the answer.
- The US counts calendar days in the destination zone, at 75 percent of M&IE on the first and last day. A provided meal is deducted at its own published amount, and the 5.00 USD of incidentals is never deducted. Lodging is a cap on receipted reimbursement, not an allowance that is paid out; the answer says so every time.
- Currencies are never added together. There is no exchange rate in this server, so a PLN diet and a EUR one stay two figures.
Exporting to the expense tracker
trip_export returns the exact expense_add arguments for the expense-tracker server, one payload per currency, and writes nothing itself. That is deliberate: expense-tracker publishes no library entry point, and its id counter, its category rules, its VAT split and its currency defaults all live inside its own expense_add handler under its own lock. Appending a row to its data.json directly would produce an expense with none of those applied: one that looks native and is not. Handing back the arguments is the same contract kanban uses for time-tracker's timer_start.
No vat_rate is set on the payload. A statutory per diem is an allowance, not a purchase, so there is no input VAT to reclaim on it.
A measured insight
Substring matching a country name is how a per diem gets quietly priced at another country's rate.
The first build resolved a destination by exact name, then ISO code, then country.includes(destination). A trip to Oman came back priced, in EUR, with no warning: "romania".includes("oman") is true, so it took Romania's 42.00 EUR diet. Oman is not one of the 34 countries this build bundles, so the correct answer was a refusal naming the gap. Instead the caller got a confident number, in the wrong currency, from a country 3,000 km away.
The fix is one line, the fallback is a prefix match of four characters or more, and it is asserted in test/adversarial.test.mjs. The general form is worth more than the fix: a fuzzy match is safe when a miss is cheap and expensive when a miss is silent. Here a miss produces a tax figure, so the fallback has to fail closed. The table being deliberately partial is exactly what makes the substring fallback dangerous: with a complete table the wrong row is a near miss, and with a partial one it is a row that should never have matched at all.
Privacy
Everything stays on your machine. Trips are JSON under ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/per-diem/. The rate tables are files inside the package. There is no network call anywhere in this server, no account and no API key. License keys are verified offline.
License
MIT. Support: [email protected]
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:
- Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-per-diem
来源:servers/per-diem/README.md,提交 1bd9d69
工具
0版本历史
2- v0.22.5最新Oct 14, 2026
- v0.21.0Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Travel 集成

travel.art
art.travel官方发布者
travel.art 的只读 MCP 服务器,让助手查询艺术活动、博物馆参观指南、转机短途行程和城市艺术之旅建议。

OlaChill Vietnam — Travel and Private Transport
由 GitHub 账号 dang13021993 发布
只读的越南出行目录,让助手查询包车大巴与私人用车车型,并说明如何申请报价。

Mono eSIM — Travel Connectivity for AI Agents
由 GitHub 账号 Andrii-Tiurin 发布
搜索旅行eSIM套餐、检查设备,并创建由客户付款的安全结账链接。AI 翻译

Alibaba Travel
由 GitHub 账号 sepehr071 发布
非官方只读 MCP 服务器,让助手搜索 Alibaba(alibaba.ir)伊朗出行信息:火车、巴士、航班、酒店、别墅和旅游套餐及价格。

Travel Tracker
由 GitHub 账号 changzhiai 发布
六张地图上的9种语言旅行清单:世界、美国、美国国家公园、欧洲、中国、印度。AI 翻译