tax-research:税務リサーチの基本フロー
INFO
houki-research Skill v0.21.1 の skills/houki-research/workflows/tax-research.md から自動生成しました(ステップ 10 件・2026-10-14)。手で編集しないでください。再生成は node scripts/generate-reference.mjs specs です。
このページは、houki-research Skill の workflow(問いの形ごとの手順)「税務リサーチの基本フロー」の説明です。Skill を読み込んだ LLM は、この順で MCP のツールを呼びます。「関連ページ」の前までは、workflow の本文を言い換えずに写しています。
houki-research-skill が想定する 税務リサーチの典型ワークフロー。「制度の概観 + 法的根拠 + 通達による解釈 + 改正履歴 + 添付 PDF (新旧対照表)」を縦串で引用する。
このワークフローを使う場面
この手順を選ぶ問いと、選ばない問いです。
- 税制の概要を 法的根拠から 引きたい
- 改正点を 改正前 / 改正後 で正確に整理したい
- 通達による行政解釈を 法律本文と紐づけて 引きたい
該当しないケース:
- 略称の意味だけ知りたい → houki-abbreviations の
resolve_abbreviationだけで十分 - 個別事案の判断 →
docs/BUSINESS-LAW.mdの境界 ② を参照し有資格者へ案内
フロー全体像
Skill を読み込んだ LLM が、どの MCP のどのツールをどの順に呼ぶかを示します。
各ステップの詳細
各ステップで呼ぶツールと引数、応答の読み方です。見出しを開くと、呼び出し例を読めます。
ステップ ①: 業法独占判定
詳細
ユーザーの問いを読み、docs/BUSINESS-LAW.md の §2「3 つの境界」のどこに該当するかを判定する。
| 境界 | 行動 |
|---|---|
| ✅ 制度の概観・条文の引用 | そのまま進める |
| ⚠️ 個別事案への適用 | 注意喚起テンプレートを 回答冒頭 に入れて進める |
| ❌ 業として行う場面 | このワークフロー自体を実施しない |
ステップ ②: 略称解決
詳細
ユーザーが「消基通」「インボイス」のような略称を使った場合、houki-nta-mcp の resolve_abbreviation を呼ぶ:
{
"tool": "resolve_abbreviation",
"args": { "abbr": "消基通" }
}
// → { formal: "消費税法基本通達", source_mcp_hint: "houki-nta", ... }resolved.source_mcp_hint が "houki-egov" なら houki-egov-mcp を、"houki-nta" なら houki-nta-mcp を主軸にする。
houki-nta-mcp v0.23.0 以上では、houki-egov の管轄のエントリ(in_scope: false)に next_actions の delegate_to_mcp(example: { mcp: "houki-egov" })が付くので、それに従って houki-egov-mcp で引く。houki-hub family にまだ MCP の無い管轄では next_actions は付かず、hint が「対応する MCP サーバーはまだありません」になる。
ステップ ③: 法律本文を取得
詳細
法的根拠 (国会制定の法律) を houki-egov-mcp で取得:
// 条番号が分かっているとき
{
"tool": "get_law",
"args": { "law_name": "消費税法", "article": "57の2" }
}
// 法令名は分かるが条が不明なとき → 目次
{
"tool": "get_toc",
"args": { "law_name": "消費税法" }
}
// 法令名を探すとき(タイトル一致。条の見出しや本文の語では当たらない)
{
"tool": "search_law",
"args": { "keyword": "適格請求書" }
}
// → query.resolved: "消費税法"(略称辞書の alias で解決)。"適格請求書発行事業者の登録" のような条の見出しを渡すと total_count: 0
// どの法令の何条か自体が不明なとき → 条文本文の横断検索(ローカル DB が必要)
{
"tool": "search_fulltext",
"args": { "keyword": "消費税法 適格請求書発行事業者の登録" }
}
// → hits[0]: 消費税法 57の2「(適格請求書発行事業者の登録等)」(score_reasons に article_caption_match)
// hits[1]: 消費税法 附則(137) 44「(適格請求書発行事業者の登録等に関する経過措置)」
// 実測: houki-egov-mcp v0.15.1(2026-09-21)get_law の応答は条文本文と meta(law_id / title / law_num / retrieved_at / url。houki-egov-mcp v0.17.0 以上では at も常にあり、時点を渡さなかったときは null)で、legal_status は付かない。法律が国民を拘束すること(binds_citizens: true)は explain_law_type { "name": "法律" } の応答を根拠にする(houki-egov-mcp v0.15.1、2026-09-21 実測。binds_courts は返さない)。
search_fulltext の応答で source が "api-fallback" なら本文検索は行われていない(search_law の結果が fallback に入っている)。ローカル DB が無い・開けないときのほか、houki-egov-mcp v0.19.0 以上では DB の版が合わないとき(v0.18.x 以前に作った古い版、新しい版、版を読めない DB)もこうなる。その場合は note の案内をユーザーに伝え(next_actions に bulk_download_everything があればその example.command。v0.20.0 以上では npx -y @shuji-bonji/houki-egov-mcp@latest --bulk-download-everything の形。無ければ note の続きの文が案内する houki-egov-mcp の更新や DB のパスの確認)、回答には「法令名の一致で探した」と書く。note の先頭の文ごとの DB の状態と、投入したはずのときに DB の場所を確かめる手順は docs/ERROR-HANDLING.md の「search_fulltext の api-fallback」にある。
これが citation の 「法律 (法的根拠)」 セクションになる。
ステップ ④: 通達による解釈を取得
詳細
{
"tool": "nta_get_tsutatsu",
"args": { "name": "消基通", "clause": "1-7-2" }
}
// → 本文 + legal_status (binds_tax_office=true / binds_citizens=false)これが citation の 「行政解釈 (通達)」 セクションになる。legal_status の binds_citizens=false を 必ず 注釈する。
houki-nta-mcp v0.11.0 以上では、応答に解釈の対象になる法律と、houki-egov-mcp への戻り方が入る:
// nta_get_tsutatsu (format: "json") の応答の末尾
{
"base_laws": ["消費税法", "消費税法施行令", "消費税法施行規則"],
"next_actions": [
{
"action": "delegate_to_mcp",
"reason": "通達は国民・裁判所を拘束しない。根拠は法律本文で確認する",
"example": { "mcp": "houki-egov", "tool": "get_law", "law_name": "消費税法" }
}
]
}
// nta_search_tsutatsu では base_laws の代わりに
// "base_laws_by_tsutatsu": { "消費税法基本通達": ["消費税法", "消費税法施行令", "消費税法施行規則"] }
// が 1 回だけ入り、next_actions は結果に現れた通達ごとに 1 件ステップ ④': 通達から法律本文へ戻る
詳細
ステップ ③ を飛ばして通達から入った場合や、③ で引いた条と通達が参照している条が違う場合は、ここで法律本文へ戻る。
next_actions[].exampleからmcpとtoolを除いた残り (法律名だけが入っている) を houki-egov-mcp のget_lawに渡す。mcpとtoolはどの MCP のどの tool を呼ぶかを示すもので引数ではなく、そのまま渡すと houki-egov-mcp v0.6.0 以上ではINVALID_ARGUMENT(mcp, tool: inputSchema に無い引数です) になる- 条番号は応答に入っていないので、通達の本文の参照 (例: 消基通 1-7-2 の「法第57条の2第4項」) を読み、
article/paragraphを足して引き直す。基本通達の本文では「法」は法律、「令」は施行令、「規則」は施行規則を指すのが通例
// 消基通 1-7-2 の本文「法第57条の2第4項」→ base_laws の先頭 (消費税法) の 57 条の 2 第 4 項
{
"tool": "get_law",
"args": { "law_name": "消費税法", "article": "57の2", "paragraph": 4 }
}
// 所基通 49-39 の本文「令第138条」→ base_laws の 2 番目 (所得税法施行令) の 138 条
{
"tool": "get_law",
"args": { "law_name": "所得税法施行令", "article": "138" }
}引いた条文は citation の「法律 (法的根拠)」「政令 / 省令」に置く。
ステップ ④'': 質疑応答事例から法律本文と通達へ戻る
詳細
質疑応答事例 (nta_search_qa → nta_get_qa) から入った場合は、【関係法令通達】欄に挙がっている法律と通達へ戻る。質疑応答事例は国税庁の参考資料で、税務署員も拘束しない (legal_status の binds_* がすべて false)。
nta_get_qaはformat: "json"を指定する (既定の markdown にはrelated_lawsなどが出ない)next_actions[].exampleからmcpとtoolを除いた残りを渡す。通達と違い、条・項・号まで入っている。nta_get_tsutatsuへの案内のexampleはnameとclauseだけなので、そのまま渡せるnext_actionsが付かない参照 (租税条約・「旧」「改正前」の条文・条番号の無い法令・基本通達 4 種以外の通達) は、related_laws/related_tsutatsuのrawを読んでSKILL.md鉄則 3 の表のとおり扱う
houki-nta-mcp v0.12.0 の応答の抜粋 (2026-09-11、{ "topic": "shohi", "category": "02", "id": "19", "format": "json" }):
{
"qa": {
"title": "個人事業者が所有するゴルフ会員権の譲渡",
"relatedLaws": ["消費税法第2条第1項第8号、消費税法基本通達5-1-1"],
"notice": "令和7年8月1日現在の法令・通達等に基づいて作成しています。…",
"basisDate": "2025-08-01"
},
"related_laws": [
{ "law_name": "消費税法", "article": "2", "paragraph": 1, "item": 8, "raw": "消費税法第2条第1項第8号" }
],
"related_tsutatsu": [
{ "name": "消費税法基本通達", "clause": "5-1-1", "raw": "消費税法基本通達5-1-1" }
],
"next_actions": [
{ "action": "delegate_to_mcp", "example": { "mcp": "houki-egov", "tool": "get_law", "law_name": "消費税法", "article": "2", "paragraph": 1, "item": 8 } },
{ "action": "nta_get_tsutatsu", "example": { "name": "消費税法基本通達", "clause": "5-1-1" } }
]
}枝番号の号 (「法人税法第2条第12号の8」) は、houki-nta-mcp v0.14.0 以上で item: "12の8" の文字列になる。get_law が文字列の item を受け付けるのは houki-egov-mcp v0.6.0 以上。項が 1 つだけの条 (法人税法 2 条など) は paragraph なしの item でも引ける (houki-egov-mcp v0.6.0 以上)。
citation では、引いた条文を「法律 (法的根拠)」、通達を「行政解釈」、質疑応答事例を「参考情報 (拘束力なし)」に置き、qa.basisDate と qa.notice の趣旨を注に書く (docs/CITATION.md)。
タックスアンサー (nta_get_tax_answer) には構造化された根拠法令が無い。本文の「根拠法令等」の節を読み、挙がっている法令を get_law で引く。
8xxx 帯(災害関係)の docId も、houki-nta-mcp v0.24.0 以上では nta_get_tax_answer で取れる。nta_search_tax_answer の next_actions が 8xxx の nta_get_tax_answer を案内したら、そのまま従ってよい。v0.23.x 以前は 8xxx を INVALID_ARGUMENT で断るので、その案内には従わず、results[].sourceUrl を案内する。
ステップ ⑤: 改正履歴を検索
詳細
{
"tool": "nta_search_kaisei_tsutatsu",
"args": { "keyword": "インボイス", "hasPdf": true, "limit": 5 }
}
// → 改正通達一覧hasPdf: true で 添付 PDF (新旧対照表) を持つもの だけに絞る。
ステップ ⑥: 添付 PDF の読み方を取得
詳細
{
"tool": "nta_inspect_pdf_meta",
"args": { "docType": "kaisei", "docId": "0025004-026", "kind": "comparison", "save": true }
}
// → attachedPdfs[] (kind / read_strategy / layout_note)
// + saved[] (url / path / bytes / cached / error?)
// + next_actions[] (pdf-reader-mcp の呼び出し例 + 汎用の read_pdf)改正点だけが要るので kind: "comparison" で新旧対照表に絞る。0025004-026 では「【参考】…新旧対応表」(章の構成の対応表)と「別紙1」「別紙2」(本文の新旧対照表)の 3 件が返る(houki-nta-mcp v0.20.0 以上。v0.19.x は別紙が attachment になるので kind を付けずに全件を見る)。表として取るには save: true が要る(pdf-reader-mcp の extract_tables は file_path しか受け取らない)。
ステップ ⑦: PDF を読み、改正点を取り出す
詳細
saved[].error が付いた PDF(HTTP 404 など)は保存できていないので、next_actions の read_url { url, split_columns: 2 } で URL のまま読む。
ステップ ⑧: 階層を明示した citation 付き回答
詳細
docs/CITATION.md のフォーマットに従って、本文の末尾に ## Sources セクションを置く。
この手順で使うツール
上のステップに出てくる houki-hub family のツールと、そのツールのページ・仕様のページです。houki-hub の外のツール(pdf-reader-mcp など)は載せていません。
| ツール | MCP サーバー | ツールのページ | 仕様 |
|---|---|---|---|
resolve_abbreviation | houki-egov-mcp | resolve_abbreviation | resolve_abbreviation の仕様 |
resolve_abbreviation | houki-nta-mcp | resolve_abbreviation | resolve_abbreviation の仕様 |
get_law | houki-egov-mcp | get_law | get_law の仕様 |
get_toc | houki-egov-mcp | get_toc | get_toc の仕様 |
search_law | houki-egov-mcp | search_law | search_law の仕様 |
search_fulltext | houki-egov-mcp | search_fulltext | search_fulltext の仕様 |
nta_get_tsutatsu | houki-nta-mcp | nta_get_tsutatsu | nta_get_tsutatsu の仕様 |
nta_search_qa | houki-nta-mcp | nta_search_qa | nta_search_qa の仕様 |
nta_get_qa | houki-nta-mcp | nta_get_qa | nta_get_qa の仕様 |
nta_get_tax_answer | houki-nta-mcp | nta_get_tax_answer | nta_get_tax_answer の仕様 |
nta_search_tax_answer | houki-nta-mcp | nta_search_tax_answer | nta_search_tax_answer の仕様 |
nta_search_kaisei_tsutatsu | houki-nta-mcp | nta_search_kaisei_tsutatsu | nta_search_kaisei_tsutatsu の仕様 |
nta_inspect_pdf_meta | houki-nta-mcp | nta_inspect_pdf_meta | nta_inspect_pdf_meta の仕様 |
例
実際のやり取りの例です。
具体的な session 例は ../examples/invoice-registration.md を参照。
アンチパターン
この手順でしてはいけない呼び方と、その理由です。
- ❌ 法律本文を確認せずに通達だけ引用する → 通達は内部文書なので、法的根拠が抜ける
- ❌ 通達の応答の
next_actions(delegate_to_mcp→ houki-egov-mcp のget_law) を読まずに回答を終える → 同上。成功時の応答にも付くので、エラーのときだけ見るのでは足りない - ❌
next_actions[].exampleをmcpとtoolごとget_lawに渡す → egov v0.6.0 以上は inputSchema に無い引数をINVALID_ARGUMENTで返す。mcpとtoolを除いてから渡す - ❌ 質疑応答事例の回答だけで答える → 参考資料で誰も拘束しない。
next_actionsで法律本文と通達へ戻る - ❌
nta_get_qaをformatの既定 (markdown) のまま呼んで、根拠の条文を本文から探す →format: "json"のrelated_lawsとnext_actionsを使う - ❌
qa.noticeを落とす → 作成時点 (basisDate) と「個別の取引では異なる課税関係が生じうる」という断り書きが citation から消える - ❌
nta_search_*のDOC_NOT_FOUNDを「該当なし」と答える → その種別の文書がローカル DB に無いだけ。next_actionsの投入コマンドを案内する (houki-nta-mcp v0.13.0 以上) - ❌ 改正前後の差分を
read_text/read_urlでsplit_columns無しに読む → カラムが交互連結し改正点が判別不能。extract_tables { file_path }またはsplit_columns: 2を使う - ❌
nta_inspect_pdf_metaのurlをextract_tablesに渡す →extract_tablesはfile_pathしか受け取らない。save: trueで呼び直してsaved[].pathを渡す - ❌ 新旧対照表の左右を見出し行で確かめずに「左が改正後」と決める → 多くはそうだが、決め打ちすると改正前後が逆になる
- ❌ pdf-reader-mcp が無いからと PDF を読まずに終える →
saved[].pathかurlを手元の PDF 読み取りツールに渡し、layout_noteのとおりに読む - ❌
legal_statusの引用を省略する → 通達と法律を同列に扱う citation になる - ❌ 「あなたの確定申告では…」と個別判断を返す → 業法独占規定 (税理士法 52 条) に抵触するおそれ
関連ページ
このページの元になった文書と、あわせて読むページです。