行政手続データ(administrative-procedures-mcp)と Quarto の統合
概要
administrative-procedures-mcp は、デジタル庁が公表する行政手続等の棚卸調査結果(約 75,000 件)を検索・集計できる MCP サーバーです。MCP 対応チャット(Claude Desktop など)から自然言語で利用できるほか、LLM 不要の専用 CLI apcli も同梱されています。
Quarto(quarto-dsh)と組み合わせることで、データ取得・集計(MCP / apcli) と 分析・可視化・レポート生成(Quarto) を分担し、データ更新からレポート公開までを自動化できます。
本リポジトリは技術検証を目的としたサンプルコードです(MIT License)。
- 動作の安定性・継続的な保守・搭載データの正確性は保証されません。
- 出力は政府の公式見解ではありません。データ利用時は原典資料を併せて確認してください。
- 本ページの内容は検証時点の仕様に基づくもので、将来変更される可能性があります。
準備
git clone https://github.com/digital-go-jp/administrative-procedures-mcp.git
cd administrative-procedures-mcp
./setup.shsetup.sh が依存のインストール・データ取得・接続方法の案内まで行います。手動で行う場合は次のとおりです。
uv sync --extra excel # 依存インストール(uv を使う場合・推奨)
apcli fetch procedures-survey-r6 # 調査結果データを配布元から取得し Parquet に変換- 調査結果データはリポジトリに同梱されていません。
apcli fetchがデジタル庁の配布ページから最新版を取得し、datasets/procedures-survey-r6/data.parquetに変換します。 apcli fetchは同梱または内容を確認済みのdataset.yamlに対してのみ実行してください。- MCP 対応チャットから使う場合は、クローンしたディレクトリで Claude Code を起動すると
.mcp.jsonにより自動接続されます(Claude Desktop はapcli install desktopで登録)。
活用シナリオ例
MCP サーバーでデータ提供 → Quarto でレポート作成
このシナリオでは 2 つのリポジトリを使います。次のような配置を想定し、以後のパスはこれに従います。
work/
├── administrative-procedures-mcp/ # apcli 本体(fetch で Parquet 生成)
│ └── datasets/procedures-survey-r6/data.parquet
└── my-report/ # Quarto プロジェクト(レポート本体)
└── report.qmd
ローカルでは各々 git clone して、レポートの *.qmd からは ../administrative-procedures-mcp/datasets/... の相対パスで Parquet を読み込みます(CI では admin-procedures/ に配置されるため、*.qmd 内のパスは CI の構成に合わせて調整してください)。
administrative-procedures-mcpをローカルまたはコンテナで起動し、行政手続データを HTTP/MCP エンドポイントで公開する。
# HTTP transport モード(既定は 127.0.0.1 のみにバインド)
fastmcp run -m admin_procedures --transport streamable-http --port 8000apcliのquery/summarizeコマンドで必要な集計結果やレコードを取得し、スクリプト(Python/R)で整形してdata/フォルダに保存する。
apcli query procedures-survey-r6 -q 相続 --limit 5 # データ検索
apcli summarize procedures-survey-r6 -g 所管府省庁 -m count # 集計(短縮形)
apcli summarize procedures-survey-r6 -o result.html # 自己完結型 HTML として保存quarto-dsh(Quarto プロジェクト)内で*.qmdファイルを書き、fetchで生成された Parquet を読み込んでデータフレーム化する。
#| label: load-data
#| echo: false
import polars as pl
df = pl.read_parquet("../administrative-procedures-mcp/datasets/procedures-survey-r6/data.parquet")- Quarto のコードチャンクで
polarsやpandasを使って追加分析・可視化を行い、表やグラフを文書に埋め込む。
#| label: visualize
import polars as pl
import altair as alt
top = (
df.group_by("所管府省庁")
.len()
.sort("len", descending=True)
.head(10)
)
alt.Chart(top.to_pandas()).mark_bar().encode(
x=alt.X("所管府省庁", sort="-y"),
y="len",
).properties(title="所管府省庁ごとの手続件数(上位)")コードチャンクを実行する場合は、polars と altair(および pandas)を環境にインストールしてください。
pip install polars pandas altairapcli fetch が生成する Parquet は polars / pandas で直接読み込めるため、CSV へ変換せずに Quarto へ渡すのが推奨です(pl.read_parquet() / pd.read_parquet())。apcli 自体は HTML 出力(--html / -o)と標準出力を提供しており、CSV は入力側(apcli add --csv / prepare_dataset.py --csv)の形式です。
自動化パイプライン
GitHub Actions で apcli fetch → quarto render → Pages デプロイまでを自動化するジョブを作成できます。
ここでは 2 つのリポジトリを扱います。Quarto プロジェクト(レポート本体、以下「レポートリポジトリ」)と、apcli を含む administrative-procedures-mcp のクローンです。ワークフローでは後者を admin-procedures/ サブディレクトリに取得します。
name: data-report
on:
schedule:
- cron: "0 3 * * 1" # 毎週月曜 03:00 UTC
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: true
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Clone administrative-procedures-mcp
uses: actions/checkout@v4
with:
repository: digital-go-jp/administrative-procedures-mcp
path: admin-procedures
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install apcli
working-directory: admin-procedures
run: |
pip install uv
uv sync --extra excel --frozen
- name: Fetch latest data
working-directory: admin-procedures
env:
ADMIN_PROCEDURES_DATA_DIR: ${{ github.workspace }}/admin-procedures
run: apcli fetch procedures-survey-r6
- name: Setup Quarto
uses: quarto-dev/quarto-actions/setup@v2
- name: Render report
run: quarto render
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: _site
- id: deployment
uses: actions/deploy-pages@v4- 成果物は
_site/(本サイトのoutput-dir)に出力され、upload-pages-artifact→deploy-pagesで GitHub Pages へ公開されます。デプロイ手順は CI デプロイ と同じ構成です。 - 社内サーバへ配布する場合は、レンダリング後に同じジョブで
rsync -avz _site/ user@host:/path/to/webrootを実行しても構いません。 - レポートが読む Parquet のパスは、
admin-procedures/datasets/procedures-survey-r6/data.parquetを指すよう*.qmd側を調整してください(後述のディレクトリ配置を参照)。
apcli は datasets/ の位置を環境変数 ADMIN_PROCEDURES_DATA_DIR で指定できます(未設定時はリポジトリルートを自動検出)。上の例では取得先を明示しています。
インタラクティブ UI
apcli preview で起動した MCP Apps UI をブラウザで確認しつつ、Quarto の quarto preview でドキュメントのライブプレビューを同時に行えます。
apcli preview # ブラウザが開く(既定: http://127.0.0.1:8765/)
apcli preview --no-open # ポートだけ公開(ブラウザを自動で開かない)
quarto preview # Quarto ドキュメントのライブプレビュー- 必要に応じて
apcli preview --no-open(または--port <PORT>)でポートだけ公開し、Quarto のカスタムテンプレートに埋め込んだ iframe で MCP Apps を表示させることも可能です。 apcli previewは Chrome(138 以降)の内蔵 AI(Gemini Nano)で動作確認するためのlocalhost 専用です。複数条件の組み合わせなど複雑なクエリは、CLI またはフル機能の LLM を使うのが確実です。
apcli preview は既定で 127.0.0.1 のみにバインドされ、外部公開は想定していません。--unsafe-expose で非 loopback に公開できますが、隔離された検証環境に限定してください。
再利用性と拡張
新しいデータセット(例: 別の府県の手続き調査)は、datasets/ に YAML 定義と Parquet を置くだけで、MCP サーバー側のコード変更なしで自動的に認識されます。
# CSV から YAML テンプレートと Parquet を生成
python -m admin_procedures.prepare_dataset my-dataset \
--csv path/to/data.csv生成後、datasets/my-dataset/dataset.yaml の desc / codelist / notes / computed_measures を項目説明資料に基づいて補完し、Parquet を再生成します。
apcli list -q 手続 # データセット一覧をキーワードで絞り込み
apcli query my-dataset --limit 5 # 追加したデータセットを検索Quarto 側は同じテンプレートを流用でき、*.qmd 内のデータセット ID と分析ロジックだけ差し替えれば、別データセット向けのレポートを作成できます。
まとめ
- MCP サーバーは CLI(
apcli)と HTTP でデータアクセスを統一し、データ取得・集計の中心とする。 - Quarto(
quarto-dsh)は分析・可視化・レポート生成のフロントエンドとして利用し、HTML / PDF / Word など多様な出力形式でステークホルダーに提供できる。 - GitHub Actions で
apcliとquartoを組み合わせれば、データ更新からレポート公開までの完全自動化パイプラインが構築できる。