jp-payroll-mcp
jp-payroll-mcp
日本の給与計算・社会保険・労働法を、調べるのではなく計算します。47都道府県すべての保険料、源泉徴収、標準報酬の決定と改定、休業免除、最低賃金——それぞれの回答が依拠する法令または省令とともに。
公開されている表とセル単位で照合済み: 変更のたびに 3,638件のアサーション。
2つの利用方法
MCPサーバーとして、AIアシスタントを通じて質問するためのもの。17のツール、無料、キー不要:
claude mcp add jp-payroll -- npx -y jp-payroll-mcpHTTP APIとして、ソフトウェアに組み込むためのもの。36のエンドポイント、OpenAPI 3.0、バッチ対応:
curl "https://japan-payroll-api.tsumugi.workers.dev/v1/payroll?prefecture=Tokyo&monthly_salary=350000&birth_date=1986-04-01"MCPサーバーはAPIの薄いラッパーなので、どちらも同じ回答を返します。どちらを使うかは、質問するのが人かプログラムかによります。
ライブAPI:
https://japan-payroll-api.tsumugi.workers.devOpenAPI仕様:
/openapi.json
Related MCP server: taiwan-payroll
関連ツール
日本の法令系MCPサーバーはほとんどが取得型です。法律の条文を渡して、解釈はあなたに任せます。これは計算型で、依拠した規定を返します。競合ではなく補完関係にあります:
法律は何と言っているか? | では、いくら払うのか? | |
労働・社会保険法45件、厚労省・JAISH通知 | — | |
税法24件、国税庁通達17件、裁決例 | — | |
e-Gov経由の任意の日本法 | — | |
jp-payroll-mcp | 引用する28の規定を全文で | 保険料、源泉徴収、等級改定、免除 |
すでにそのいずれかを実行しているなら、これも併用してください。両方を持つアシスタントは、質問ごとに適切な方を選びます。
なぜこれを作ったか
統合されたAPIは存在しない。 開発者はこれを協会けんぽ、厚生労働省、各都道府県労働局から個別に組み立てる必要がある。
ルールは細かい。 保険料は実際の給与ではなく標準報酬月額(50等級のステップ関数)で計算される。ただし雇用保険は実際の給与を使う。厚生年金は等級32で上限。介護保険は40〜64歳のみ。被保険者負担分は半数以下切り捨て(0.50円以下は切り捨て)。これを一つでも間違えると、もっともらしく見えて実際は間違った数字になる。
MCPサーバー
ソースはmcp/にあり、専用のREADME・日本語があります。npm run mcp:testでテストできます。実際のstdioトランスポートと実際のMCPクライアントを使って動作確認します。ハンドラが壊れていてもツールの一覧には正しく表示され、呼び出されたときだけ失敗するからです。
MCPサーバーは無料で、今後も無料です。これは収益チャネルではなく配布チャネルです。npmは無料で、MCP自体にも課金はありません。これは意図的です。問題は課金(RapidAPIがすでに扱っている)ではなく、発見可能性であり、日本の法令データのトラフィックはMCPに実際にあるからです。
エンドポイント
エンドポイント | 説明 |
| API情報とエンドポイント一覧 |
給与と保険 | |
| JISコード付きの全47都道府県 |
| 健康保険、介護保険、厚生年金、子ども支援の料率 |
| 月額に対する等級の検索 |
| 全50等級の表 |
| 雇用保険料率 |
| 控除の全内訳 |
最低賃金 | |
| 指定日の適用料率 |
| 2002年度以降の全履歴 |
カレンダー | |
| 祝日(または |
| 祝日・週末・営業日のフラグ |
| 範囲内の営業日数を数える |
| N営業日を前後に移動 |
税 | |
| 適用中の税率(任意で金額に適用) |
| 1989年以降のすべての税率変更 |
識別子 | |
| 法人番号のチェックディジット(Peppol ICD 0188) |
| 12桁の基本番号に対するチェックディジット |
| 適格請求書登録番号 |
源泉徴収 | |
| 月額の源泉所得税(月額表) |
| 日額表(日額表)、丙欄を含む |
| 同じく、計算式による方法(電算機計算の特例) |
賞与 | |
| 賞与に対する源泉徴収(賞与の算出率表) |
| 賞与に対する社会保険、両方の上限付き |
標準報酬の決定 | |
| 4月〜6月の定時決定(算定基礎) |
| 随時改定(月額変更)が必要か? |
| 休業からの復帰時の改定 |
| 季節労働のための年間平均による保険者算定 |
資格と休業 | |
| 加入月・脱退月に保険料は発生するか? |
| 産前産後・育児休業が免除される月 |
| 40歳、65歳、70歳、75歳に達する時期と、その時点での変更点 |
バッチ | |
| 1回の呼び出しで最大500件の給与明細、実行合計付き |
法令 | |
| このAPIが引用する規定の全文 |
| 利用可能なすべての規定とその法律 |
| 任意のエンドポイントに追加して、引用した内容のテキストを添付 |
メタ | |
| 受け入れ可能なすべての列挙値とエラーコード |
| 各データセットの対象範囲と次回の更新時期 |
prefectureは英語名(Tokyo、大文字小文字を区別しない)、日本語(東京または東京都)、またはJISコード(13)を受け付けます。
最も重要な1回の呼び出し
1人の従業員の給与計算は、1回のリクエストで完了します:
curl "https://japan-payroll-api.tsumugi.workers.dev/v1/payroll?prefecture=Tokyo&monthly_salary=350000&age=40&dependants=2"gross 350,000
social insurance -55,750
----------
after social insurance 294,250 <- the base withholding tax is charged on
withholding income tax -4,480
----------
net pay 289,770That middle line is the point. Income tax is charged on pay after social insurance, not on gross pay, and deriving it by hand is the mistake this endpoint exists to stop. The response also carries the grade that was resolved, every premium split into employee and employer shares, and which bracket produced the tax — so the arithmetic can be audited rather than trusted.
この中間の行が要点です。所得税は総支給額ではなく、社会保険料控除後の給与に課されます。これを手計算で求めることが、このエンドポイントが防ぐために存在する誤りです。レスポンスには、判定された等級、各保険料の被保険者負担分と事業主負担分への按分、税額を生じさせた税率区分も含まれるため、計算結果を鵜呑みにせず検証できます。
Resident tax (住民税) is assessed by the municipality and notified to the employer; no API
can compute it. Pass resident_tax= and it will be subtracted from net pay.
住民税は市区町村が賦課し、事業主に通知されるものであり、APIで計算することはできません。resident_tax= を渡すと、手取り額から差し引かれます。
Pass income_tax=false to get social insurance only.
income_tax=false を渡すと、社会保険料のみが算出されます。
Before you integrate
導入前に
GET /v1/enumslists every accepted value —business_type,column,calendar— and every error code, so they can be read at build time instead of discovered from a 400.Errors carry a stable
code.invalid_requestandmissing_parametermean fix the call;out_of_coveragemeans the input was valid but falls outside what is published, which needs a different branch. Do not match on the English prose — it will change.GET /v1/data-freshnesstells you how current each dataset is.GET /v1/enumsは、受け入れ可能なすべての値(business_type、column、calendar)とすべてのエラーコードを列挙するため、400エラーで初めて知るのではなく、ビルド時に読み取ることができます。エラーには安定した
codeが付与されます。invalid_requestとmissing_parameterは呼び出し側の修正が必要であることを意味し、out_of_coverageは入力は有効だが公開範囲外であることを意味するため、別の分岐が必要です。英語の説明文に依存しないでください。変更される可能性があります。GET /v1/data-freshnessは、各データセットの最新性を教えてくれます。
Data
データ
Dataset | Coverage | Source |
Social insurance rates | 47 prefectures, FY2026 (令和8年度), effective 2026-03 | |
Standard remuneration table | 50 health grades / 32 pension grades | same |
Employment insurance | 3 business types, FY2026, effective 2026-04-01 | |
Minimum wage | 47 prefectures × 24 years (FY2002–FY2025) | |
Public holidays | 1,067 days, 1955–2027 | |
Consumption tax | 4 rate periods since 1989, with reduced rate | |
Corporate number check digit | algorithm, no dataset | |
Withholding tax (monthly) | 231 brackets + 9 high-income anchors, 令和8年分 | |
Withholding tax (formula) | 4 statutory tables, 令和8年分以降 |
データセット | 対象範囲 | 出典 |
社会保険料率 | 47都道府県、令和8年度、2026年3月施行 | |
標準報酬月額表 | 健康保険50等級 / 厚生年金32等級 | 同上 |
雇用保険 | 3事業区分、令和8年度、2026年4月1日施行 | |
最低賃金 | 47都道府県 × 24年分(平成14年度〜令和7年度) | |
国民の祝日 | 1,067日、1955年〜2027年 | |
消費税 | 1989年以降の4つの税率期間、軽減税率を含む | |
法人番号チェックデジット | アルゴリズムのみ、データセットなし | |
源泉徴収税額(月額表) | 231区分 + 高所得者向け9つのアンカー、令和8年分 | |
源泉徴収税額(計算式) | 法定表4種、令和8年分以降 |
All figures are extracted programmatically from the official spreadsheets — not
transcribed by hand. See scripts/ for the extractors.
すべての数値は公式スプレッドシートからプログラム的に抽出されたものであり、手作業による転記ではありません。抽出スクリプトは scripts/ を参照してください。
Why not the statute
法令ではなく税額表を用いる理由
Income tax figures come from the National Tax Agency's published tables rather than from 所得税法 via the e-Gov law API, because the statutory version omits the 2.1% reconstruction surtax. At 105,000–107,000 yen the 乙 column is 3,700 yen in 別表第二 and 3,800 yen in practice; below 105,000 yen it is 3% rather than 3.063%. The statute is the wrong source for payroll.
所得税の数値は、e-Gov法令API経由の所得税法ではなく、国税庁が公表する税額表から取得しています。法定上の計算式では2.1%の復興特別所得税が省略されているためです。105,000円〜107,000円の範囲では、乙欄は別表第二では3,700円ですが、実際には3,800円です。105,000円未満では3.063%ではなく3%です。給与計算の源泉としては、法令は不適切です。
Above 740,000 yen the table stops being a table: it becomes anchor points with a marginal rate. Those anchors are not collinear — rounding is baked into each — so the published anchor values are carried rather than recomputed. The 乙 column has only two anchors (740,000 and 1,710,000) where 甲 has nine, and measuring the 乙 excess from a 甲 anchor silently under-charges. That was a real bug here, caught by the cell-by-cell comparison.
740,000円を超えると、この表は表ではなくなり、限界税率付きのアンカーポイントになります。これらのアンカーは同一線上にありません(各アンカーに丸めが組み込まれているため)。したがって、公表されているアンカー値を再計算せずにそのまま使用しています。乙欄にはアンカーが2つ(740,000円と1,710,000円)しかなく、甲欄には9つあります。甲欄のアンカーから乙欄の超過分を計算すると、黙って過少徴収になります。これは実際に発生したバグであり、セル単位の比較によって発見されました。
Citations resolve to text
引用は条文本文に解決される
Naming a statute and leaving the reader to find it is half an answer. Every provision
this API cites is bundled, so 健康保険法第43条 can be turned into its actual words in
the same round trip:
法令名を挙げて読者に探させるのは、答えの半分にすぎません。このAPIが引用するすべての条文は同梱されているため、健康保険法第43条 を同じ往復で実際の条文本文に変換できます。
curl 'https://japan-payroll-api.tsumugi.workers.dev/v1/statute?ref=健康保険法第43条'
curl '…/v1/standard-remuneration/revision?…&include=statute_text'Citations are written many ways in practice and all of them resolve — 健保法43条,
厚年法81条の2, 徴収法11条, a missing 第, paragraph-level references, full-width
digits. The e-Gov abbreviations are not the ones practitioners use (e-Gov calls it
厚生年金法; everyone writes 厚年法), so both are accepted.
実際の引用の書き方は多様ですが、すべて解決されます — 健保法43条、厚年法81条の2、徴収法11条、第の欠落、項レベルの参照、全角数字など。e-Govの略称は実務者が使うものとは異なるため(e-Govは厚生年金法と呼びますが、実務では誰もが厚年法と書きます)、両方を受け付けています。
Text comes from the e-Gov 法令API at build time rather than at request time: calling out to e-Gov on every request would mean this API goes down when theirs does.
条文テキストはリクエスト時ではなくビルド時にe-Gov法令APIから取得しています。毎リクエストでe-Govに問い合わせると、e-Govが停止したときにこのAPIも停止してしまうためです。
scripts/extract-statutes.py holds the one list of provisions, and the test suite
checks that every citation the code emits resolves — a citation added without a
provision to back it fails the build rather than silently returning nothing.
scripts/extract-statutes.py には条文の一覧が1つだけ保持されており、テストスイートはコードが出力するすべての引用が解決されることを検証します。裏付けとなる条文のない引用を追加すると、黙って空を返すのではなく、ビルドが失敗します。
Known gaps
既知の制限事項
The year-end adjustment tables are not included. 令和8年分's 「給与所得控除後の給与等の金額の表」 was not yet published as of 2026-08; the Tax Agency releases it around September. 令和8年度税制改正 also raises the minimum employment income deduction to 740,000 yen with effect from 2026-12-01, so that table changes too.
年末調整の表は含まれていません。 令和8年分の「給与所得控除後の給与等の金額の表」は2026年8月時点でまだ公表されておらず、国税庁は9月頃に公表します。また、令和8年度税制改正により給与所得控除の最低額が2026年12月1日から740,000円に引き上げられるため、この表も変更されます。
FY2026 minimum wage is not included. As of 2026-08, revisions were still being issued prefecture by prefecture and take effect from October 2026. The API serves FY2025, which is the rate currently in force. This must be refreshed once all 47 prefectures publish.
令和8年度の最低賃金は含まれていません。 2026年8月時点では、改定は都道府県ごとに順次発表されており、2026年10月から施行されます。APIは現在施行中の令和7年度の金額を提供しています。47都道府県すべてが公表した時点で更新が必要です。
Employment insurance history is FY2026 only. Earlier years were not verified against a primary source, so they are omitted rather than guessed.
雇用保険の履歴は令和8年度のみです。 それ以前の年度は一次資料で検証されていないため、推測ではなく省略されています。
Resident tax is out of scope. It depends on the previous year's income and on the municipality, and it is levied by the municipality rather than computed by the employer, so
/v1/payrolldeducts whatever figure you pass and never derives one.住民税は対象外です。 住民税は前年の所得と市区町村に依存し、事業主が計算するのではなく市区町村が賦課するため、
/v1/payrollは渡された金額を差し引くだけで、独自に算出することはありません。The judgement endpoints decide whether a filing is due; they are not the filing. Several rules turn on facts an API cannot see — whether a seasonal swing is 「業務の性質上例年発生することが見込まれる」, whether an allowance is 実費弁償, whether the employee consented. Those are declared inputs, echoed back in the response, and the insurer can still reach a different conclusion under 保険者算定.
判定エンドポイントは届出が必要かどうかを判断するものであり、届出そのものではありません。 いくつかのルールはAPIでは確認できない事実に依存します — 季節的変動が「業務の性質上例年発生することが見込まれる」かどうか、手当が実費弁償かどうか、従業員が同意したかどうかなど。これらは宣言された入力値としてレスポンスにエコーバックされますが、保険者算定では保険者が異なる結論に至る可能性があります。
Not every standard-remuneration route is covered. 資格取得時決定 returns how long the decision stays in force but does not compute the initial 報酬月額 (健保法42条1項 has four methods, three of which need figures about other employees). 二以上事業所 勤務 — where remuneration from several employers is summed and the premium split between them — is not implemented at all. Neither is the re-anchoring that happens when fixed pay changes twice inside the three-month window.
標準報酬のすべての経路がカバーされているわけではありません。 資格取得時決定は決定の有効期間を返しますが、初期の報酬月額は計算しません(健保法42条1項には4つの方法があり、うち3つは他の従業員に関する数値が必要です)。複数の事業所からの報酬を合算し保険料を按分する二以上事業所勤務は、まったく実装されていません。また、3ヶ月の期間内に固定給が2回変更された場合に発生する再アンカーリングも実装されていません。
A few practice points could not be sourced to a primary document and are listed as
guidance.fixed_pay.unverifiedin the response rather than being asserted: whether 家族手当 counts as fixed pay, how paid leave is counted toward 支払基礎日数, and how 年俸制 is treated. Secondary sources agree on all three; the ministries do not appear to say so in writing.いくつかの実務上の論点は一次資料に裏付けられず、断定ではなくレスポンスの
guidance.fixed_pay.unverifiedとして記載されています:家族手当が固定給に含まれるかどうか、有給休暇が支払基礎日数にどのように算入されるか、年俸制がどのように扱われるか。3つの論点すべてについて二次資料は一致していますが、省庁が文書で明言している形跡はありません。
Verification
検証
test/verify.mjs runs 3,638 assertions against a live server. The core of it compares the
API's computed premiums to the amounts printed in the official 協会けんぽ workbook for
250 prefecture × grade combinations — the published half-share figures, not a
reimplementation of the formula. It also checks:
test/verify.mjs は稼働中のサーバーに対して3,638件のアサーションを実行します。その中核は、APIが計算した保険料を、250の都道府県 × 等級の組み合わせについて公式の協会けんぽワークブックに記載された金額と比較するものです — これは公表されている折半額の数値であり、計算式の再実装ではありません。また、以下も検証します:
grade boundary contiguity, and that a boundary yen value belongs to the upper grade
pension clamping at grades 1 and 32
long-term care switching on at 40 and off at 65
employment insurance charged on actual salary while other premiums use the grade
point-in-time minimum wage (including the day before an effective date)
prefecture resolution across all four input forms
all 47 prefectures returning a valid payroll response
business-day counts against an independently computed reference
the 2026-09-22 国民の休日 (a holiday only because it sits between two others)
one-off imperial holidays: 大喪の礼, 即位礼正殿の儀, 結婚の儀
the corporate-number check digit against the worked example in the NTA PDF, and that every other check digit is rejected for the same base
every published cell of the withholding tax table — 231 brackets x 8 甲 columns plus the 乙 column, 2,079 figures, compared against the National Tax Agency's own workbook
that a passing invoice check digit is not attributed to a corporation: sole proprietors satisfy the same rule, so the holder cannot be inferred from the number
all eight single-grade 随時改定 cases 日本年金機構 publishes — four for health, four for pension — each landing on the standard remuneration the table names, on both the real grade and the extended scale the implementation uses
that health and pension are judged independently: a raise above the pension ceiling moves six health grades and no pension grade at all
the 15-day 定時決定 fallback firing for 短時間就労者 and not for anyone else, and not in 随時改定 at any time
that every closed set of values appears in
/v1/enums, so a new enum cannot ship without reaching the endpoint integrators generate their types from等級境界の連続性、および境界の円単位の値が上位等級に属すること
厚生年金の等級1と32でのクランプ
介護保険が40歳で開始し65歳で終了すること
雇用保険が実際の給与に課される一方、他の保険料は等級を使用すること
時点別の最低賃金(施行日の前日を含む)
4つの入力形式すべてでの都道府県の解決
47都道府県すべてが有効な給与レスポンスを返すこと
独立に計算された参照値との営業日数の比較
2026-09-22の国民の休日(他の2つの祝日に挟まれているためだけに休日となる日)
一代限りの皇室行事:大喪の礼、即位礼正殿の儀、結婚の儀
法人番号チェックデジットが国税庁PDFの計算例と一致すること、および同じ基番号に対して他のすべてのチェックデジットが拒否されること
源泉徴収税額表の公表されたすべてのセル — 231区分 × 甲欄8列に加えて乙欄、合計2,079の数値を国税庁自身のワークブックと比較
適格なインボイスのチェックデジットが法人に帰属されないこと:個人事業主も同じ規則を満たすため、番号から保有者を推測できないこと
日本年金機構が公表する8つの単一等級の随時改定ケースすべて — 健康保険4件、厚生年金4件 — それぞれが表に記載された標準報酬に一致すること、実等級と実装が使用する拡張スケールの両方で
健康保険と厚生年金が独立に判定されること:厚生年金の上限を超える昇給で健康保険の等級が6つ上がり、厚生年金の等級はまったく動かないこと
15日ルールの定時決定フォールバックが短時間就労者にのみ発動し、他の誰にも発動しないこと、また随時改定では一切発動しないこと
すべての閉じた値の集合が
/v1/enumsに存在すること。これにより、インテグレーターが型を生成するエンドポイントに到達せずに新しいenumを出荷することはできない
npx wrangler dev --port 8799
node test/verify.mjs
# or against production
BASE=https://japan-payroll-api.tsumugi.workers.dev node test/verify.mjsDevelop / deploy
開発 / デプロイ
npm install
npx wrangler dev
npx wrangler deployData is embedded in the bundle (~40 KB gzipped), so there is no database, no KV, and no cold start.
データはバンドルに埋め込まれているため(gzip圧縮で約40KB)、データベースもKVもなく、コールドスタートもありません。
Responses carry Cache-Control: public, max-age=3600, stale-while-revalidate=86400.
An hour rather than a day, because rates change on known dates and a correction should
reach callers the same day; stale-while-revalidate keeps responses instant while the
refresh happens behind it. Note that workers.dev responses are not cached at
Cloudflare's own edge — every request invokes the Worker. A custom domain would enable
edge caching if that becomes worth doing.
レスポンスには Cache-Control: public, max-age=3600, stale-while-revalidate=86400 が付与されます。料率は既知の日付で変更され、修正が同じ日に呼び出し元に届くべきであるため、1日ではなく1時間です。stale-while-revalidate により、背後で更新が行われる間もレスポンスは即座に返されます。workers.dev のレスポンスはCloudflare自身のエッジではキャッシュされないことに注意してください — すべてのリクエストがWorkerを起動します。カスタムドメインを使用すれば、価値がある場合にエッジキャッシュを有効にできます。
Measured from Japan against the deployed Worker: median 65 ms, max 83 ms round trip; gzip takes the 50-grade table from 6,841 to 1,041 bytes.
日本からデプロイ済みのWorkerに対して測定した結果:往復の中央値65ms、最大83ms。gzipにより50等級の表が6,841バイトから1,041バイトになります。
Maintenance
メンテナンス
Statutory figures change on fixed dates, and an API that misses a revision keeps answering — with numbers that stopped being true. Two mechanisms guard against that.
法定の数値は決まった日付で変更されます。改定を見逃したAPIは、もはや正しくない数値で応答し続けます。これに対する防御策は2つあります。
The API reports its own staleness. GET /v1/data-freshness states what each dataset
covers and when it is next due to change, and the main data responses carry a freshness
marker. A caller can see a stale figure even if our monitoring failed.
APIは自身の陳腐化を報告します。 GET /v1/data-freshness は各データセットの対象範囲と次回の変更予定日を示し、主要なデータレスポンスには freshness マーカーが含まれます。モニタリングが失敗した場合でも、呼び出し元は古い数値を認識できます。
A weekly job watches the sources.
毎週のジョブがソースを監視します。
npm run watch # fingerprints each source, alerts Discord on change
npm run watch:dry # same, without notifyingIt checks two independent things, because either alone leaves a gap: the source file's
hash and Last-Modified (catches a silent re-issue), and the calendar (catches the case
where a ministry publishes the revision at a new URL and leaves the old one untouched).
どちらか一方だけでは隙間が生じるため、2つの独立した項目をチェックします:ソースファイルのハッシュと Last-Modified(黙っての再発行を検出)、およびカレンダー(省庁が改定を新しいURLで公開し、古いURLをそのままにしておくケースを検出)。
An alert carries the exact commands for that dataset rather than pointing back here. The alert is read months later, usually by someone who has forgotten the layout of this repo.
アラートには、このリポジトリを参照するのではなく、そのデータセットに対する正確なコマンドが含まれます。アラートは数ヶ月後に読まれることが多く、通常はこのリポジトリの構成を忘れている人が読みます。
Rehearse an extractor before you need it. The minimum wage extractor takes --check,
which runs the full extraction and compares it to the data currently shipped instead of
writing anything:
必要になる前に抽出スクリプトをリハーサルしてください。 最低賃金の抽出スクリプトは --check を受け付けます。これは完全な抽出を実行し、何も書き込まずに現在出荷されているデータと比較します:
curl -L -A "Mozilla/5.0" -o mw.xlsx https://www.mhlw.go.jp/content/11200000/001571219.xlsx
python scripts/extract-minimum-wage.py --checkIt should say the output matches. If it does not while the fiscal year is unchanged, the extractor and the shipped data have drifted apart — which is worth knowing in August rather than discovering on the day the new figures land, when the temptation is to ship whatever the script produces.
出力が一致すると表示されるはずです。会計年度が変わっていないのに一致しない場合、抽出スクリプトと出荷済みデータが乖離していることを意味します — これは、新しい数値が届いた日にスクリプトが生成したものをそのまま出荷したくなる状況で発見するのではなく、8月に知っておく価値があります。
Register it to run weekly:
毎週実行するように登録します:
powershell -ExecutionPolicy Bypass -File scripts
egister_watch_task.ps1Verifying the paid path
有料プランの検証
The test suite cannot check that RapidAPI's paid plans get full-size batches: doing so needs the proxy secret RapidAPI issues, and a secret that lives in a test is not a secret. It checks the half that matters for revenue — that a caller without the secret cannot claim a paid plan by setting a header.
テストスイートは、RapidAPIの有料プランがフルサイズのバッチを取得できることを検証できません。それにはRapidAPIが発行するプロキシシークレットが必要であり、テストに存在するシークレットはシークレットではありません。収益に関わる半分、つまりシークレットを持たない呼び出し元がヘッダーを設定して有料プランを主張できないことを検証します。
エンタイトルメントを変更した後、ログからもう半分を確認してください:
npx wrangler tail --format jsonRapidAPI プレイグラウンドから任意のエンドポイントを呼び出し、リクエスト行を確認してください。そこには サブスクリプション名が含まれているはずです:
{"channel":"rapidapi","path":"/","status":200,"plan":"BASIC"}plan が存在すればプロキシシークレットが一致しています。rapidapi リクエストで plan: null の場合は
一致していません — つまり、有料顧客全員が課金されながら無料枠の制限を受けていることになります。
この障害は外部からは見えないため、苦情を待つのではなく、意図的に確認する価値があります。
重要な日付
時期 | 変更内容 |
3月 | 協会けんぽ都道府県別保険料率、3月給与月から適用 |
4月 | 雇用保険料率、税額表 |
8月下旬〜10月 | 最低賃金、都道府県ごとに公示、10月から適用 |
2月 | 内閣府が翌年の祝日を公表 |
データセットを更新した後は、src/data/freshness.json を更新し、
npm run rapidapi:prepare を実行して、ライブ API が再検証され、OpenAPI 仕様が再生成されるようにしてください。
公開パイプライン
各 API は recipes/<slug>/recipe.py のレシピです — エンドポイントはそこに一度だけ宣言され、
OpenAPI 仕様と RapidAPI リスティングテキストの両方がそこから生成されます。
npm run rapidapi:prepareそのコマンドは、各レシピについて:
レシピを検証し、
ライブ API 上の宣言されたすべてのエンドポイントにアクセスし、解析可能な JSON を伴う 200 を 要求します — また、必須パラメータを持つエンドポイントについては、省略された場合に 400 を要求します。 これが
recipe.pyとsrc/index.tsの間の乖離を検出する仕組みです。build/openapi/<slug>.openapi.jsonを書き出し、リスティング URL、仕様パス、貼り付ける正確な値を含む Discord 通知を送信します。
リスティング自体は手動です。https://rapidapi.com/provider/<id>/new の Add-API フォームは
reCAPTCHA v3 で保護されているため、最終送信は人が行います — 3 つのフィールドで、
「Specify using: OpenAPI」を選択し、生成された仕様をアップロードします。API あたり約 2 分で、
週 1〜2 件のペースではボトルネックになりません。
通知が実際に届くようにするには、.env に DISCORD_WEBHOOK_URL を設定してください
(.env.example を参照)。これがない場合、メッセージはコンソールにのみ出力されます。
ブラウザセッション
npm run rapidapi:login は実際の Chrome ウィンドウを開き、手動でサインインします —
スクリプトがパスワードを見ることはありません。セッションは rapidapi_profile/(gitignore 対象)に保持されます。
セッションの有効期限が切れたら再実行してください。
運用上の安全性
state/pipeline.halt.jsonは、人間が削除するまで全てを停止します。set_halt()は セッションが失われたときに呼び出され、clear_halt()は再ログイン成功時に呼び出されます。pipeline/rapidapi/config.pyのMAX_PUBLISH_PER_DAY/MIN_SECONDS_BETWEEN_PUBLISHは、 ペースを人間らしいものに保ちます。
ライセンスと帰属
基盤となるデータは、公共データ利用規約(第1.0版)
に基づく日本政府のオープンデータであり、帰属表示付きの商用利用と再配布が許可されています。
すべてのレスポンスには、出典を示す attribution ブロックが含まれます。
本サービスは、いかなる日本政府機関の承認も受けていません。 法定提出書類に利用する前に、 公式ソースで確認してください。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides access to Japanese labor and social insurance laws and administrative circulars from sources like the e-Gov API and the Ministry of Health, Labour and Welfare. It enables users to search for and retrieve legal texts and notices to ensure accuracy in labor-related inquiries.61,00861MIT
- AlicenseAqualityAmaintenanceTaiwan statutory payroll calculation — labor & health insurance, labor pension, 2nd-gen NHI supplementary premium, income-tax withholding, and old-age benefits. Sourced from official gazettes, verified against official sample data.91MIT
- AlicenseNot gradedqualityCmaintenanceProvides Japanese tax and invoice utilities such as consumption tax calculation, withholding tax, invoice number validation, and tax rate summarization, enabling AI assistants to perform these operations locally without external APIs.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to perform Japanese invoice and tax calculations, including consumption tax, withholding tax, invoice number validation, and invoice data generation, all locally without external APIs.MIT
Related MCP Connectors
Machine-readable Japanese crypto-asset tax rules for AI agents: rules-as-code with citations, x402.
Raw Japanese regulatory data for AI agents: pension, gazette, gBizINFO. x402-metered (USDC).
Open-source AI accounting skills verified by licensed accountants (tax, VAT, payroll).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kishida-devil/jp-payroll-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server