The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Houki Nta MCP listing page.
税務の下調べで、国税庁(NTA)の通達と事例を LLM から引くための MCP サーバーです。国税庁公式サイトの 基本通達・改正通達・事務運営指針・文書回答事例・タックスアンサー・質疑応答事例 をローカル SQLite に取り込み、FTS5 で全文検索します。「法律で決まっている」と「通達でそうなっている」を混ぜずに、legal_status(通達は国民を拘束しない旨)と根拠条文への案内と鮮度を添えて返します。
法律本文(法・政令・省令)は別 MCP の @shuji-bonji/houki-egov-mcp が担当します。通達の応答からは next_actions で houki-egov-mcp の get_law へ戻れます。
🔗 4 つを併用したい方へ —
houki-egov-mcp(法令本文) とpdf-reader-mcp(添付 PDF 抽出) と組み合わせた install → 設定 → 実例 4 ユースケース をまとめた統合ガイドを用意しています。
経理・税務の担当者や、会計・税務のアプリを作る開発者が、国税庁の公式な解説と通達を根拠つきで確かめるための機能です。
legal_status を付け、「法律で決まっている」ことと「通達や解説でそうなっている」ことを区別できるようにしますhouki-egov-mcp で条文を読むための next_actions が付きます| 種類 | 件数 | 拘束力(legal_status) |
|---|---|---|
| 基本通達 4 種(消基通・所基通・法基通・相基通) | 3,456 項 | 税務署員を拘束する。国民・裁判所は拘束しない |
| 改正通達 | 118 件 | 同上 |
| 事務運営指針 | 32 件 | 同上 |
| 文書回答事例 | 487 件 | 個別の照会への国税庁の回答。一般的な法的拘束力はない |
| タックスアンサー | 746 件 | 国税庁の参考解説。法的拘束力はない |
| 質疑応答事例(9 税目) | 1,841 件 | 同上 |
件数は、2026-09-07〜09-24 JST に全種別を取り込んだ手元の DB の実数です。国税庁サイトの更新で増減します。
「会社員で、副業の所得が 20 万円以下なら確定申告はしなくてよいか」と尋ねると、LLM が nta_search_tax_answer(keyword="給与所得者で確定申告が必要な人") を呼び、タックスアンサーのコード 1900「給与所得者で確定申告が必要な人」と、1906「給与所得者がネットオークション等により副収入を得た場合」が返ります。応答の legal_status は、これらが国税庁の参考解説で法的拘束力を持たないことを示します。
根拠の条文(所得税法第 121 条第 1 項「確定所得申告を要しない場合」)は、houki-egov-mcp の get_law で読めます。解説と条文を並べると、給与の支払者の数や年末調整の有無のように、答えを分ける条件が分かります。個別の事案に当てはめた結論(「あなたは申告が不要です」)は返しません。理由は業法との関係に書いています。
claude_desktop_config.json に次の設定を足して、Claude Desktop を再起動します。
取り込みをしなくても、nta_get_tsutatsu・nta_get_tax_answer・nta_get_qa は国税庁サイトから直接取ります。検索ツール(nta_search_*)には取り込みが要ります。まず 1 本だけ入れるなら、次のコマンドで消費税法基本通達を約 3〜5 分で取り込めます。
全種別の取り込みと税目ごとの絞り込みは「初回セットアップ(bulk DL)」をご覧ください。
@shuji-bonji/houki-abbreviations)--health-check CLI で週次 canary 検証 + --check-baseline-drift で menu.htm を真の正典として世代移行 (sozoku2 / hyoka_new 等) を事前検知 + soft-404 (/error/404.htm 着地) を fetchNtaPage で自動 fail させる二重防御pdf-reader-mcp 呼び出し例つきhasPdf 検索フィルタ + nta_inspect_pdf_meta (v0.7.1): PDF 付きの重要文書だけを抽出 / PDF メタだけを軽量に返す軽量 API を提供comparison=新旧対照表 / attachment=別紙・別表 など。「新旧対応表」の表記ゆれにも対応)ごとに read_strategy(表として取る / 本文として読む / 先頭を見て決める)と layout_note(紙面の組み方)を付ける。save: true で PDF をサーバー側に保存して絶対パスを返す。next_actions に pdf-reader-mcp の呼び出し例(保存済みなら extract_tables / read_text に file_path、未保存なら read_url に url)と、他の PDF 読み取りツール向けの汎用の 1 件を置く。houki-nta-mcp 自身は PDF の本文を読まない。改正通達で「別紙 N」とだけ題した PDF は新旧対照表本体のことが多いので、comparison として返す (v0.20.0)freshness 付き: 利用者(LLM)が staleness を判定できるlegal_status フィールド(通達 = 税務署員のみ拘束、QA = 参考情報、等)国税庁 HP の 6 大コンテンツを bulk DL で SQLite cache に投入し、MCP tool はローカル DB を先に引いて応答します。DB に無かったときの動きは取得ツールごとに違うので、取得ツールが DB をどう使うかを参照してください。
| Tool | 用途 |
|---|---|
nta_get_tsutatsu | 通達本文を取得(DB → 無ければ国税庁サイト、4 通達対応) |
nta_search_tsutatsu | 通達を FTS5 全文検索(freshness 付き) |
nta_get_kaisei_tsutatsu | 改正通達を docId で取得(DB のみ。本文 + kind 分類付き PDF 表) |
nta_search_kaisei_tsutatsu | 改正通達を FTS5 検索(hasPdf フィルタ・freshness) |
nta_get_jimu_unei | 事務運営指針を取得(DB のみ) |
nta_search_jimu_unei | 事務運営指針を FTS5 検索(hasPdf フィルタ・freshness) |
nta_get_bunshokaitou | 文書回答事例を取得(DB のみ) |
nta_search_bunshokaitou | 文書回答事例を FTS5 検索(hasPdf フィルタ・freshness) |
nta_get_tax_answer | タックスアンサー本文を取得(DB → 無ければ国税庁サイト) |
nta_search_tax_answer | タックスアンサーを FTS5 全文検索(hasPdf フィルタ・freshness) |
nta_get_qa | 質疑応答事例の本文を取得(DB → 無ければ国税庁サイト) |
nta_search_qa | 質疑応答事例を FTS5 全文検索(topic で税目の絞り込み・freshness 付き) |
nta_inspect_pdf_meta | 指定文書の添付 PDF の一覧に kind と読み方(read_strategy / layout_note)を付けて返す。save: true で PDF を保存して絶対パスを返し、next_actions に pdf-reader-mcp の呼び出し例と汎用の 1 件を置く。本文は読まない (v0.7.1、v0.19.0 で読み手を固定しない形に) |
resolve_abbreviation | 略称→エントリ解決(houki-abbreviations 経由) |
取得ツール 6 つは、ローカル DB を先に引く点は同じですが、DB に無かったときの動きが 2 通りに分かれます(v0.16.0 / Issue #29)。
| ツール | DB を先に引く | DB に無いとき | DB へ書き戻す | 応答の source |
|---|---|---|---|---|
nta_get_tsutatsu | 引く | 国税庁サイトから取得 | 書き戻す | "db" / "live" |
nta_get_qa | 引く | 国税庁サイトから取得 | 書き戻す | "db" / "live" |
nta_get_tax_answer | 引く | 国税庁サイトから取得 | 書き戻す | "db" / "live" |
nta_get_kaisei_tsutatsu | 引く | DOC_NOT_FOUND を返す | — | 付かない |
nta_get_jimu_unei | 引く | DOC_NOT_FOUND を返す | — | 付かない |
nta_get_bunshokaitou | 引く | DOC_NOT_FOUND を返す | — | 付かない |
改正通達・事務運営指針・文書回答事例の 3 つは、docId から個別ページの URL を組み立てるのに税目フォルダの世代差(sozoku / sozoku2 など)を解く必要があるため、国税庁サイトへは取りに行きません。エラーには --bulk-download-* の案内が付きます。
nta_get_qa と nta_get_tax_answer が DB から返せるのは、structured_json を持つ行だけです。この列は v0.16.0 で増えたので、v0.15.x までに投入した行は持っていません。持っていない行は国税庁サイトから取得して書き戻すので、1 度引けば次からは DB から返ります。--bulk-download-qa / --bulk-download-tax-answer を実行しても埋まります(この 2 種別では、構造を持たない行は条件付き GET を使わずに取り直します)。
bulk download を再実行したときに、国税庁の索引から消えていた文書は DB から消しません。索引から外れても、過去の課税期間の判断では依然として意味を持つ通達があるためです。
代わりに document.orphaned_at に「索引から消えたことを最初に確認した日時」を入れ、応答で現行の文書と区別できるようにしています。
| 応答 | 付くもの |
|---|---|
nta_search_*(5 種別) | 各件に index_status: "removed_from_index" と orphaned_at、search_notes に「N 件のうち M 件は索引から外れています」の 1 行 |
nta_get_*(5 種別) | index_status / orphaned_at / notice(Markdown 形式では「索引の状態」の行と注記) |
検索結果から除外はしません。除外すると、過去の期間を調べたい利用者が引けなくなります。
印の付け外しは --bulk-download-* のときに行います。
sozoku → sozoku2 のような世代移行で doc_id が変わっただけの文書を、消えたと数えないため)| 通達 | 略称 | TOC スタイル | clause 番号体系 |
|---|---|---|---|
| 消費税法基本通達 | 消基通 | shohi | 3 階層 1-4-13の2 |
| 所得税基本通達 | 所基通 | shotoku | 2 階層 2-4の2 / 共通通達 183~193共-1 |
| 法人税基本通達 | 法基通 | hojin | 3 階層、節の2 を含む 1-3の2-N |
| 相続税法基本通達 | 相基通 | sozoku | flat 構造、ナカグロ複数条共通 1の3・1の4共-1 |
clause 番号は Normalize-everywhere で全角→半角統一されているため、ユーザーが半角・全角どちらで入力してもヒットします。全角英字(NISA → NISA、e-Tax → e-Tax)も v0.15.0 から半角に揃います。
v0.14.2 以前に作った DB は、v0.15.0 で最初にサーバーを起動したときに一度だけ入れ直されます。国税庁サイトへの再アクセスは発生しません。
全文検索は SQLite FTS5 の trigram tokenizer を使うため、3 文字未満の語は索引に乗りません。v0.10.0 までは「役員」「退職」のような 2 文字語がそのまま 0 件になり、通常の「該当なし」と区別できませんでした。v0.10.1 からは次のように扱います。
| 語の長さ | 扱い |
|---|---|
| 3 文字以上 | FTS5 で全文検索します(これまでどおり) |
| 2 文字 | 3 文字以上の語と一緒なら、FTS5 のヒットを「本文かタイトルにその 2 文字語を含むもの」に絞り込みます。2 文字語だけのときは、本文とタイトルの部分一致(LIKE)で検索します(FTS5 の rank は付かないため score は低めになります) |
| 1 文字 | 検索条件から外します |
2 文字語や 1 文字語を含むクエリでは、応答に search_notes(文字列の配列)が付き、どう扱ったかを文で示します。0 件のときも search_notes が付くので、LLM / Skill 層は「仕様上ヒットしなかった」のか「本当に該当がない」のかを判別できます。
文書系の検索 5 ツール(nta_search_qa / nta_search_tax_answer / nta_search_kaisei_tsutatsu / nta_search_jimu_unei / nta_search_bunshokaitou)は、結果が 0 件になった理由を分けて返します。v0.12.0 までは、どの場合も「--bulk-download-* で DB 投入済みか確認してください」という同じ hint だったため、文書が入っている DB でも投入をやり直すよう案内していました。
| DB の状態 | 応答 |
|---|---|
| その種別の文書が DB に 1 件も無い | エラー DOC_NOT_FOUND。「該当なし」という検索結果ではないことを応答の形で示します。hint に MCP サーバーが開いている DB ファイルのパスと投入コマンドを、next_actions に投入コマンドを入れます |
税目の絞り込み(topic / taxonomy)の範囲に文書が無い | results: []。hint で絞り込みを外すよう案内し、available_taxonomies にその種別の文書が持つ税目の一覧を入れます |
hasPdf の条件に合う文書が無い | results: []。hint で hasPdf を外すよう案内します(質疑応答事例は PDF を持たないため、hasPdf: true では常にこれになります) |
| 文書はあるが、キーワードに合わない | results: []。hint に「該当なし」と、検索した文書の件数を書きます。freshness で DB の取得時点を示します |
その種別の文書が 1 件も無くなるのは、主に次の場合です。
--bulk-download-everything の途中で、その種別だけ失敗した(失敗しても次の種別へ進みます)HOUKI_NTA_DB_PATH / XDG_CACHE_HOME が違い、サーバーが別の DB ファイルを開いている。hint の DB のパスで確かめられます基本通達を検索する nta_search_tsutatsu は、以前から同じ分け方をしています(DB に通達が無ければ TSUTATSU_NOT_FOUND)。
nta_search_qa の税目の絞り込みv0.13.0 から、nta_search_qa は topic(shotoku / gensen / joto / sozoku / hyoka / hojin / shohi / inshi / hotei。--qa-topic と同じ値)で税目を絞り込めます。v0.12.0 までの domain は分野(tax / labor など)の値を税目と比べていたため、指定すると必ず 0 件でした。質疑応答事例はすべて税務なので、domain: "tax" は絞り込まずに検索し、それ以外の値は 0 件と、topic を使うよう案内する hint を返します。
質疑応答事例は国税庁の参考資料で、法的拘束力はありません。根拠は、ページの【関係法令通達】欄にある法律の条文と通達で確かめます。v0.12.0 から、nta_get_qa(format: "json")はこの欄を次のように分けて返します。
| フィールド | 中身 | 例(shohi/02/19) |
|---|---|---|
related_laws | 法令の参照。law_name / article / paragraph / item(別表は appendix)と、元の要素 raw | { "law_name": "消費税法", "article": "2", "paragraph": 1, "item": 8 } |
related_tsutatsu | 通達の参照。name / clause / raw | { "name": "消費税法基本通達", "clause": "5-1-1" } |
next_actions | 法令は houki-egov-mcp の get_law、基本通達 4 種は nta_get_tsutatsu への案内。引数をそのまま渡せます | { "mcp": "houki-egov", "tool": "get_law", "law_name": "消費税法", "article": "2", "paragraph": 1, "item": 8 } |
qa.notice / qa.basisDate | ページ下部の「注記」(作成時点と、一般的な回答である旨の断り書き)と、その作成基準日 | "2025-08-01" |
qa.relatedLaws(欄の文字列そのまま)で確かめてくださいrelated_laws には入れますが next_actions では案内しませんitem: "12の8"(文字列)にし、next_actions にも入れます。get_law が文字列の item を受け付けるのは houki-egov-mcp v0.6.0 以上ですrelatedLaws(【関係法令通達】欄の無いページでは answer)に混ざっていました。v0.12.0 から qa.notice に分けています文書回答事例の taxonomy は URL の税目フォルダ名です。国税局のページは本庁と違うフォルダ名を使うことがあり、同じ税目が次のように分かれています。taxonomy にどちらを指定しても両方を検索し、応答の search_notes にその旨が入ります。DB の値は変えていないので、取り込み直しは要りません。
| 税目 | 本庁の表記 | 国税局の表記 |
|---|---|---|
| 相続税 | sozoku | souzoku |
| 源泉所得税 | gensen | gensenshotoku |
| 譲渡所得・山林所得 | joto-sanrin | joto_sanrin |
--bunsho-taxonomy は v0.14.2 からどちらの表記でも渡せます(国税局の表記は本庁の表記に直してから索引を絞り込みます)。絞り込むのは本庁の索引(/law/bunshokaito/01.htm)の節なので、--bunsho-taxonomy=sozoku でも souzoku でも、投入されるのは同じ 1 つの節の文書です。その節には国税局のページへのリンクも並んでいるため、DB には両方の表記が入ります(2026-09-12 に --bunsho-taxonomy=souzoku を実行し、18 件のうち sozoku 11 件・souzoku 7 件を確認)。
キーワードが略称辞書(houki-abbreviations)に載っている場合、検索は正式名でも行います。v0.11.1 から、略称と通称で扱いを分けました。
| キーワードの種類 | 例 | 扱い |
|---|---|---|
| 略称そのもの | 「消基通」→ 消費税法基本通達、「消法」→ 消費税法 | これまでどおり、元の語と正式名の両方で検索します |
| 通称 | 「インボイス」「軽減税率」「適格請求書発行事業者」→ 消費税法 | 元の語で 0 件のときだけ正式名で検索します |
通称の展開先(「消費税法」)は、通達・質疑応答事例の本文にほぼ必ず出てきます。v0.11.0 までは通称でも常に展開していたため、「消費税法」という語が出てくるだけの文書が結果に混ざり、キーワードを含む文書が limit から押し出されていました(「適格請求書発行事業者」を limit 30 で検索すると、含む条項 32 件のうち 9 件が外れ、含まない条項が 7 件入っていました)。
通称を 0 件のため展開したときは、応答の search_notes にその旨が入ります。展開した検索の結果には、「消費税法」という語が出てくるだけの文書も含まれます。
所基通などの一部の通達では、算式が GIF 画像で掲載されています。v0.10.0 までは画像の段落が丸ごと落ち、本文が途切れていることを応答から読み取れませんでした。v0.10.1 からは <img> を [画像: alt テキスト] のプレースホルダとして同じ位置の段落に残し(alt が無ければ [画像: ファイル名])、format: "json" では該当段落の images: [{ alt, src }] と、応答直下の content_notes でも画像の存在を示します。Markdown では本文末尾に > 注意: 本文に画像が N 箇所含まれています… の行が入ります。画像の内容そのものは取得しないので、算式の正確な内容は出典 URL で確認してください。
v0.10.0 以前に構築した DB には画像のプレースホルダが入っていません。houki-nta-mcp --bulk-download-all --refresh で通達を再投入してください(--refresh なしでは、国税庁サイトが 304 Not Modified を返す節は再解析されません)。
文書回答事例のページは、照会者・関係する法令条項等・回答年月日・回答者・回答内容が表(<table class="kaito">)に入り、照会の趣旨・事実関係・理由は「別紙」(同じディレクトリの another.htm)にあります。v0.10.2 までは <p> しか読んでいなかったため、fullText が「〔照会〕」「〔回答〕」の見出しだけになり、issuedAt も null でした。v0.10.3 からは表の各行を「見出し: 値」の形で取り込み、回答年月日を issuedAt にし、--bulk-download-bunshokaitou で別紙も取得して 【別紙】 として本文の末尾に連結します(文書あたり 1 リクエスト増えます)。
v0.10.2 以前に構築した DB の文書回答事例には本文が入っていません。v0.10.4 以降で houki-nta-mcp --bulk-download-bunshokaitou --refresh を実行して再投入してください(v0.10.3 までは --refresh が基本通達以外に効かず、文書回答事例は 304 Not Modified で再解析されませんでした)。
通達本体・改正通達・事務運営指針・文書回答事例・タックスアンサー・質疑応答事例を事前に bulk DL してローカル SQLite (FTS5) に投入します。1 度実行すれば DB から即時応答(fetch なし)。
全部入りは 6 種別で約 100 分かかります。初めて入れたときは、通達 1 本だけを入れて動くことを確かめてください。
終わると、その通達に対して nta_search_tsutatsu と nta_get_tsutatsu が使えます。別の通達にしたいときは --quickstart --tsutatsu=所得税基本通達 のように指定します。ほかの種別はあとから、必要なものだけ足せます(下の「個別実行」)。
DB が無い状態でも、nta_get_*(取得ツール)は国税庁サイトから直接取ります(約 700ms。結果は DB に書き戻します)。DB が要るのは nta_search_*(検索ツール)だけです。
bulk DL コマンドは利用形態に応じて以下の 3 形式があります。以降の例は A. グローバルインストール済み の形式で記載しています。B / C を使う場合は同様に置き換えてください。
| 利用形態 | コマンド形式 | 前提 |
|---|---|---|
| A. グローバル install 済み | houki-nta-mcp --bulk-download-everything | npm install -g @shuji-bonji/houki-nta-mcp 実行済み |
| B. npx 経由(都度実行) | npx -y @shuji-bonji/houki-nta-mcp --bulk-download-everything | Node.js / npm がインストール済みなら追加準備不要 |
| C. ローカルクローン | node /path/to/houki-nta-mcp/dist/index.js --bulk-download-everything | git clone + npm install + npm run build 実行済み |
[!TIP] Claude Desktop / Claude Code で MCP サーバとして登録する場合は別問題で、
mcp_servers設定のnpx -y @shuji-bonji/houki-nta-mcp(= 形式 B) を使います(後述「Claude Desktop / Claude Code への登録例」を参照)。bulk DL は MCP サーバ起動とは別プロセス で人間が実行するため、ここではどの形式でも構いません。
| コンテンツ | 件数の目安 | 投入時間 |
|---|---|---|
| 通達本体 (4 通達) | 約 2,800 clauses | 10-15 分 |
| 改正通達 | 約 125 docs | 5-10 分 |
| 事務運営指針 | 約 32 docs | 約 1 分 |
| 文書回答事例 | 数百〜2,000+ docs | 約 30 分超(絞り込み推奨) |
| タックスアンサー | 約 750 docs | 約 14 分 |
| 質疑応答事例 | 約 1,840 docs | 約 35 分 |
DB は ${XDG_CACHE_HOME:-~/.cache}/houki-nta-mcp/cache.db。詳細は docs/DATABASE.md。
nta_search_* がエラー DOC_NOT_FOUND(基本通達は TSUTATSU_NOT_FOUND)を返した場合、その種別は MCP サーバーが開いている DB に入っていません(v0.12.0 までは results: [] と「DB 投入済みか確認してください」のヒントでした)。投入の有無は以下で確認できます。
期待される doc_type 名 → 対応 bulk DL コマンド:
| doc_type | bulk DL コマンド | 備考 |
|---|---|---|
tsutatsu | --bulk-download-all | 通達本体 4 種を一括(消基通・所基通・法基通・相基通) |
kaisei | --bulk-download-kaisei | 改正通達 |
jimu-unei | --bulk-download-jimu-unei | 事務運営指針 |
bunshokaitou | --bulk-download-bunshokaitou [--bunsho-taxonomy=…] | 文書回答事例(taxonomy 指定で短縮) |
tax-answer | --bulk-download-tax-answer | タックスアンサー |
qa-jirei | --bulk-download-qa [--qa-topic=…] | 質疑応答事例(topic 指定で短縮) |
--bulk-download-everything は上記すべてを順番に実行する短絡コマンドです。
bunsho-taxonomy / tax-answer-taxonomy / qa-topic で範囲を絞らない場合、bunshokaitou と qa-jirei は数千件単位になるため、初回は taxonomy/topic を絞って投入することを推奨します。
税目に渡せる値は次のとおりです。v0.14.2 から、ここに無い値を渡すと、何も投入せずに使える値を表示して終了します(終了コード 1)。--help にも同じ一覧を載せています。
| フラグ | 使える値 |
|---|---|
--bunsho-taxonomy | shotoku / gensen / joto-sanrin / sozoku / zoyo / hyoka / hojin / shohi / shozei / sonota(国税局の表記 souzoku / gensenshotoku / joto_sanrin も可) |
--tax-answer-taxonomy | shotoku / gensen / joto / sozoku / hojin / shohi / inshi / osirase |
--qa-topic | shotoku / gensen / joto / sozoku / hyoka / hojin / shohi / inshi / hotei |
v0.14.1 までは値を見ずに受け取っていたため、税目を打ち間違えても投入が 0 件のまま正常終了していました。
スクレイピング主体のため、国税庁 HP の構造変更で bulk DL や parse が静かに壊れるリスクがあります。検知・可視化のため、以下を組み合わせて運用するのを推奨:
設計の要点: 重い bulk-download-everything は 月次、軽い health-check / check-baseline-drift は 週次で階層化。週次の 2 つは Lv-3a (soft-404) と Lv-3b (menu.htm drift) の二重防御で、canary が落ちる前に baseline 更新を促せます (詳細は docs/RESILIENCE.md §5.9-5.11)。
[!NOTE] 以下の表およびコマンド例は、前述「コマンドの呼び出し形式」の 形式 A (グローバル install 済み) を前提に記載しています。
B(npx) /C(ローカルクローン) を使う場合は同様に置き換えてください。
| 頻度 | コマンド | 用途 |
|---|---|---|
| 月 1 回 | houki-nta-mcp --bulk-download-everything | 4 パターン集計 + baseline 永続化 |
| 週 1 回 | houki-nta-mcp --health-check | 9 種別の代表 URL を canary fetch + parse |
| 週 1 回 | houki-nta-mcp --check-baseline-drift | menu.htm を正典として世代移行 (sozoku2 等) を事前検知 (v0.9.4+、canary より早期) |
| 週 1 回 (CI) | GitHub Actions cron | --health-check --strict で自動検知 + --check-baseline-drift で drift 警告 (別 job) |
cron 設定例:
[!TIP] cron は環境変数を継承しないので、
houki-nta-mcp/npx/nodeは 絶対パスで指定してください。which houki-nta-mcp/which npx/which nodeで確認できます。
レスポンスに freshness フィールドが付き、staleness (fresh/stale/outdated) で再 bulk DL の必要性を判断できます。設計詳細は docs/RESILIENCE.md。
通達は 行政内部文書 であり、国民・裁判所には直接的な法的拘束力を持ちません(最高裁 昭和43.12.24 墓地埋葬法事件)。ただし税務署員は職務命令として守る義務があり、実務上は事実上の規範 として機能します。
各レスポンスには legal_status フィールドが付与され、種別ごとの拘束力(binds_citizens / binds_courts / binds_tax_office)が明示されます。LLM はこの情報を尊重して回答を組み立てる前提です。
通達は国民・裁判所を拘束しないので、根拠は法律の条文で確かめる必要があります。v0.11.0 から、基本通達が解釈している法律・政令・省令と、その法律を houki-egov-mcp の get_law で読むための next_actions が応答に付きます。
nta_get_tsutatsu: base_laws(配列)nta_search_tsutatsu: base_laws_by_tsutatsu(検索結果に現れた通達 → 配列の対応表)。対応は通達単位の事実なので、hit ごとではなく応答に 1 回だけ置きます| 基本通達 | base_laws |
|---|---|
| 消費税法基本通達 | 消費税法、消費税法施行令、消費税法施行規則 |
| 所得税基本通達 | 所得税法、所得税法施行令、所得税法施行規則 |
| 法人税基本通達 | 法人税法、法人税法施行令、法人税法施行規則 |
| 相続税法基本通達 | 相続税法、相続税法施行令、相続税法施行規則 |
条番号は付けません。通達の項と法律の条の対応は一律ではなく、推測で付けると誤った引用につながるためです。
法律本文だけでは判断できないケースが多数あります。例えば消費税の軽減税率:
会計・経理・税務系プロダクトを開発する場合、通達レベルまで参照しないと正しい判定ができない ことが多く、houki-nta-mcp はその領域をカバーします。
法律本文と通達の両方を引けるよう、両方を併用することを推奨します。
npx -y @shuji-bonji/houki-nta-mcp --quickstart(通達 1 本、約 3〜5 分)、全部入りは --bulk-download-everything(6 種別、約 100 分)。pdf-reader-mcp を併用すると、改正通達の添付 PDF(新旧対照表など)も内容取得できます。v0.7.0 以降は kind 分類で「どの PDF を最優先で読むべきか」が Markdown 出力に明示され、v0.7.2 + pdf-reader-mcp v0.3.0 以降では comparison / attachment 系の PDF に対して extract_tables 呼び出し例を自動で出力します(表構造を保持したまま改正後/改正前を分離)。本 MCP のエラー応答は houki-hub family 共通契約に従います。code 文字列は family 全体で統一された語彙を使用するため、houki-egov-mcp / pdf-reader-mcp と併用しても LLM・Skill 層は一貫したロジックで解釈できます。
docs/ERROR-CODES.md — 共通エラーコード語彙の正典 (houki-research-skill)docs/ERROR-HANDLING.md — 解釈ポリシー / next_actions テンプレ実装は houki-egov-mcp の src/errors.ts をリファレンスとしつつ、本 MCP では共通パッケージ (houki-abbreviations 等) への依存を持たず独立して実装します。
v0.10.0 以降、tools/call の応答は次の 3 経路でも同じ形式になり、いずれも isError: true が付きます(houki-egov-mcp v0.5.3 と同じ)。
| 経路 | code | 内容 |
|---|---|---|
ツール名が tools/list にない | UNKNOWN_TOOL | hint に利用可能なツール名一覧 |
引数が tools/list の inputSchema に合わない(型・必須・enum・inputSchema に無い引数。v0.14.0 から未知の引数もエラー) | INVALID_ARGUMENT | detail.issues[] に path と message。handler は呼ばれません |
| handler が例外を投げた | INTERNAL_ERROR | retryable: true、detail.cause に例外メッセージ |
handler が LawServiceError(上の JSON 形式)を返した場合も isError: true が付きます。
取得系の nta_get_kaisei_tsutatsu / nta_get_jimu_unei / nta_get_bunshokaitou は、指定された docId が DB に無いとき、理由を 2 つに分けて返します。
| DB の状態 | 応答 |
|---|---|
| その種別の文書が 1 件もない | 「ローカル DB に◯◯が 1 件も無いため、docId=… を取得できません」。hint に DB のパスと環境変数、next_actions に投入コマンド(cli_bulk_download) |
| 文書はあるが、その docId が無い | 「◯◯ docId=… は見つかりません」。available_doc_ids(新しい順に 30 件)と、検索ツールへの next_actions |
v0.14.0 までは、どちらの場合も「DB に未投入です」と返して bulk download を案内していたため、docId を打ち間違えただけでも投入を勧めていました。
docs/HOUKI-FAMILY-INTEGRATION.md — houki-hub family 4 つを連携した統合利用ガイド (Claude Desktop / Claude Code 向け install→設定→実例 4 ユースケース)docs/DESIGN.md — 設計原則・houki-hub family 内の位置付け・ツール設計docs/DATABASE.md — SQLite + FTS5 スキーマ・テーブル仕様・マイグレーション履歴docs/DATA-SOURCES.md — 国税庁公開コンテンツの URL 構造・スクレイピング方針・ライセンスdocs/RESILIENCE.md — HP 構造変更検知の 5 層フレームワーク・運用フローdocs/PHASE4-PDF.md — Phase 4: PDF メタデータ強化と pdf-reader-mcp 連携の責務分離docs/PHASE4-PDF-FIXTURES.md — kind 別代表 PDF カタログ + Phase 4-3 実機テスト結果docs/PHASE6.md — Phase 6 計画書: 運用品質と発信の底上げ (v1.0.0 への道) — search relevance ranking / bulk DL 差分更新 / houki-hub-doc + llms.txt 公開llms.txt — LLM 向け summary(family routing / setup / legal positioning)DISCLAIMER.md — 通達の法的位置付け・利用範囲CONTRIBUTING.md — 貢献方法CHANGELOG.md — リリースノート本 MCP は 一次情報の取得・提示のみ を担います。分析は LLM、判断は利用者(または有資格者)の責任です。
業としての税務代理・税務書類作成・税務相談(税理士法 52 条)への利用は想定外 です。詳細は DISCLAIMER.md 参照。
MIT — 個人利用・学習用途のフォーク・改変・再配布を自由に許可します。
国税庁コンテンツの著作権は 国(国税庁) にあり、再配布・改変は政府標準利用規約(第 2.0 版)の範囲内で可能です。本 MCP は出典 URL を必ず付与する設計とし、利用者は元情報を確認できます。
| パッケージ | 役割 | 状態 |
|---|---|---|
@shuji-bonji/houki-abbreviations | 略称辞書(共有ライブラリ) | ✅ 公開済 |
@shuji-bonji/houki-egov-mcp | e-Gov 法令 API クライアント。法律・政令・省令・規則・告示の本文取得 | ✅ 公開済 |
@shuji-bonji/houki-nta-mcp | 国税庁の通達・改正通達・事務運営指針・文書回答事例・Q&A・タックスアンサー(このリポジトリ) | ✅ 公開済 |
@shuji-bonji/houki-mhlw-mcp | 厚労省の通達・通知・指針 | 📅 計画中 |
@shuji-bonji/houki-saiketsu-mcp | 裁決全般。初版は国税不服審判所 (kfs.go.jp、約 1,950 件)。将来的に公正取引委員会・特許庁審判部・各省庁不服審査会 等へ拡張 | 💭 構想中 |
@shuji-bonji/houki-court-mcp | 判例全般。初版は民事判決オープンデータ API。将来的に courts.go.jp の全公開判例(最高裁・高裁・地裁)へ拡張 | 💭 構想中 |
@shuji-bonji/houki-hub | meta-package(一括 install) | 📅 計画中 |
family 全体のドキュメントサイト(houki-hub.mikuro.net / 構築中)で各 MCP の詳細を順次公開予定です。
💡 houki-nta-mcp 単体ではなく
houki-egov-mcp+pdf-reader-mcpと連携させて使う方法 はdocs/HOUKI-FAMILY-INTEGRATION.mdにまとめてあります。Claude Desktop / Claude Code の設定例から、新旧対照表 PDF をextract_tablesで表構造のまま抽出する実例まで、一から順に追えるガイドです。
ただし、業としての使用(税理士法 52 条が定める独占業務) については想定外であり、作者は一切の責任を負いません。DISCLAIMER.md を必ずご確認ください。