Skip to main content
Glama

Polyarchy(polyarchy.net)

状態:正典(本書が文書の地図・分類の凡例は下記「ドキュメント」節)。 ライセンス=Apache-2.0(LICENSE・NOTICE・下記「ライセンス」節)。

日本の政策言説(経済団体・政府審議会の公表資料)と公的統計(公開データ)を、利用者の Claude/ChatGPT から ツールとして参照できるようにする MCP サーバ群。現行 4 サービス=政策主張DB recommendations(主張)と 統計参照DB stats(事実)、企業情報DB companies(企業側の事実・2026-09 追加)、審議会議事録DB deliberations(決まるまでの議論・2026-10 追加)。「主張↔事実の突き合わせ」が並べる理由。扱うのはすべて公開資料・公開データ。

Polyarchy はサービス全体の名前。実体はコーパス(文書ジャンル)ごとに独立したサービスの集まりで、 各サービスは自分の MCP サーバ(別プロセス・別ホスト名)を持ち、共通契約 polyarchy_common(と、文書検索のサービスは検索部品の共有ライブラリ polyarchy_retrieval)だけを共有する。

できること(現行 4 サービス・いずれも MCP サーバとして公開・利用者は自分の Claude/ChatGPT から呼ぶ)

政策主張DB recommendations(recommendations/README.md・公開 https://docs.polyarchy.net/recommendations)

  • 経団連 / 政府(骨太方針・規制改革・財政審・デジタル行財政改革会議・人工知能基本計画 等)/ 連合 / 日本商工会議所 / 経済同友会 の公表資料を横断検索

  • 約 3,700 文書・約 187,000 チャンクを日本語特化のハイブリッド検索(BM25 語彙 + ベクトル → RRF 融合 → 日本語リランカー)

  • ツール 3 本=search_policy_docs/sweep_policy_docs(団体横断の多段検索=団体別 fan-out・集約型は健全な棄却)/list_orgs

統計参照DB stats(stats/README.md・公開 https://docs.polyarchy.net/stats)

  • 日本の公的統計(GDP・QE・需給ギャップ・物価・賃金・労働・財政・資金循環・人口・法人企業統計 業種×規模 等)と 国際機関統計(IMF/OECD/世銀)の値の厳密参照=公表どおりの文字列を出典付きで返し、無ければ「ない」と返す(近似・補間はしない)

  • 2 層=発見層(list_datasets/find_statistics/list_sources)と参照層(lookup_statistic/lookup_panel)=ツール 5 本

  • 各値に再配布・商用利用条件(◎/○/△・status=guide)を付す(stats/docs/再配布条件.md)

企業情報DB companies(companies/CLAUDE.md・計画・公開 https://docs.polyarchy.net/companies〔箱で有効化後〕)

  • 有価証券報告書(EDINET・金融庁・PDL1.0)の「主要な経営指標等の推移」と従業員の状況を、提出会社 約 4,100 社×5 期で値の厳密参照=XBRL の文字列のまま出典付きで返す

  • 連結と単体は別の系列・「売上高」が無い会社(IFRS=売上収益・銀行=経常収益 等)には代わりに開示している項目と引き直し方を返す・遡及修正と会計基準の併記はもう一方の値を必ず添える

  • 単社の 2 層=発見層(find_company/list_items)と参照層(lookup_company_facts/lookup_segments/lookup_regions)+横断検索(list_metrics/screen_companies/screen_trend=定義した式の派生値は横断検索だけ)=ツール 8 本・モデル不要・ランタイム秘密なし(EDINET の API キーは取込側だけ)

審議会議事録DB deliberations(deliberations/CLAUDE.md・収録範囲・公開 https://docs.polyarchy.net/deliberations)

  • 政府の会議体の過程文書(回ごとの配布資料・議事録・議事要旨)を横断検索=決定文書は政策主張DB、決まるまでの議論・資料はこちら

  • 返す断片に毎回、会議体・回次・開催日・資料番号・提出者/発言者とその区分(推定しない=書かれていなければ不明)

  • ツール 2 本=search_deliberations/list_meeting(政策主張DB と同じ検索部品 polyarchy_retrieval)

Related MCP server: japanfinance-agent

設計上の性質(セキュリティ)

  • 参照専用:サーバはメール送信・ファイル書き込み等の外部作用を持たない(読み取りツールのみ=recommendations 3・stats 5・companies 4)

  • サーバ側で生成 AI を呼ばない:意味検索はローカルモデル(cl-nagoya/ruri-v3-310m)で完結・stats/companies はモデル不要。文章生成は各利用者の Claude/ChatGPT 側(ランタイム秘密ゼロ)

  • データ層は公開固定+フェイルクローズ:検索経路は公開層に固定され、非公開データは構造的に返らない(recommendations/core/search_api.py・不変条件の定義は polyarchy_common/metadata_core.py)

  • 受信ポートを開けない:公開は Cloudflare Tunnel 経由(サーバから外向き接続のみ)。管理は AWS Session Manager

  • 利用者はログイン必須(外部 IdP=WorkOS AuthKit・案 B・2026-09-02〜)+秘密パス+レート制限。IP 許可は使えない(コネクタは Anthropic/OpenAI 側から接続)。例外は、同じネットワークの中の bot だけが使う中継の口(既定は閉・会員の印が必須=PROD_MIGRATION §2.6)

  • 残る壊れ方は供給元と資格情報(汚染された依存・箱のロールによる配布物改ざん・捕捉ログ・可用性)=対策の設計は docs/運用設計.md §2.6・実施は docs/残タスク.md B17(依存の sha256 固定と箱ロールの最小化は 2026-09-04 済)。最後の砦=冪等な bootstrap+S3 のデータで箱を数分で作り直せること

構成(リポジトリ=Polyarchy 全体・フォルダ名=コーパスID)

polyarchy/
├── polyarchy_common/     共通契約:メタデータ共通コア(層の不変条件)・分野タグ21分類・ログ/stdio保護・捕捉ログ・Access JWT・MCP HTTP 定型
├── polyarchy_retrieval/  文書検索の部品(分かち書き・BM25・RRF・埋め込み/リランカーの登録・Qdrant ストア〔layer 必須〕)=torch を引くので共通契約と分ける
├── recommendations/               政策主張DB(経済団体の提言+政府の主張系文書)
│   ├── core/             検索スタックの固有部分(config・フィルタ・比較型の分解・llama_index の包装・search_api・多段。部品は polyarchy_retrieval)
│   ├── serving/          入口(mcp_server。参照用 Web UI は 2026-09-02 廃止・2026-10-09 コード削除)
│   ├── ingest/           収集・チャンキング・取込・タグ付け・メタデータ監査
│   ├── eval/             評価セット運用・回帰ゲート・スモークテスト
│   └── data/             PDF・catalog・eval・捕捉ログ(大物は S3 管理・git 外)
├── stats/                統計参照DB — 主張↔事実の突き合わせ。ベクトルではなく発見層(目録・系列検索)+厳密参照層(値の完全一致)。core/ingest/serving/eval/ops/docs
├── deliberations/        審議会議事録DB(2026-10-04 配線・opt-in=ENABLE_DELIBERATIONS_APP。docs/=再配布条件・収録範囲。原文・中間物・索引は data/=git 外)
├── deploy/               AWS 構成(Terraform / bootstrap / systemd / Cloudflare / 運用手順)— 全サービス共通
├── ops/usage/            週次利用レポートの集計の出力先(weekly.jsonl=数字のみ。実利用の数字なので git 外。生成は `python -m polyarchy_common.usage_report`)
├── docs/                 全体文書(残タスク・運用設計・評価設計・導入団体向け文書・長期計画=下記「ドキュメント」)
└── pyproject.toml        依存定義(共通+extras recommendations/stats〔箱〕・ingest/companies〔取込だけ=作業用 PC〕。ローカルは `pip install -e ".[all]"`・stats 単独箱は `.[stats]`)

拡張の形(コーパス連邦=サービスを足しても既存を壊さない)

現行は 4 サービスで、構造は足すことを前提に作ってある。新しいサービスは兄弟フォルダとして増え、 共通契約 polyarchy_common(メタデータの共通コア・層の不変条件・捕捉ログ・認証・MCP HTTP 定型)・文書検索の部品の共有ライブラリ polyarchy_retrieval(文書検索のサービスだけ)と deploy/(同じ箱・同じ配布経路・同じ監視)だけを共有する=あるサービスの作業は他サービスのソースを読まない (把握範囲を 1 サービスに閉じる)。連邦レイヤは作らず、利用者側の Claude がルーターになる(設計=docs/長期開発計画.md)。 想定している拡張(境界=外部の公開データの整理と利活用促進。導入組織の非公開文書を扱うモジュールは本ソフトウェアの範囲外= 必要な組織が自組織帰属の別リポジトリで、本ソフトウェアを依存として使う形で作る。層の不変条件=公開固定・フェイルクローズは共通契約が担保):

候補

内容

位置づけ

企業情報サービス(companies/)

有価証券報告書等の企業開示を「主張↔事実」の企業側の事実として参照。最初の取得元=EDINET(API・PDL 1.0 で商用可)

着手済(パーサ検証済・計画=companies/docs/開発計画.md)

政府系の詳細情報サービス

審議会・検討会の議事録/論点(deliberations/)・国会(diet/)・地方議会(assemblies/)・外国政府(foreign/)

recommendations が「結論(提言・方針)」を扱うのに対し「議論の過程」を扱う兄弟

いずれも同じ規律で足す=評価セットと回帰ゲートを先に立て(fail-closed)、release.sh の同じ出口から配布し、 自動適用と切り戻しの同じ仕組みに乗る。要望の吸収先を「コード」でなく「データと評価問」に置く(複雑性を複利にしない)ことが、 サービス数が増えても保守が破綻しない理由(docs/運用モデルと事業継続性.md)。

  • 実装:Python 3.12/MCP 公式 SDK 2.x (MCPServer)・LlamaIndex・Qdrant・Sentence-Transformers・fugashi

  • 稼働:AWS EC2(東京リージョン)+ Cloudflare Tunnel。実行はリポジトリ root を Python の root として python -m recommendations.…

ドキュメント(地図)

4 分類=正典(生きている・更新はここだけ)/設計(安定リファレンス・判断が変わった時だけ更新)/記録(凍結・日付つき・更新しない)/規約(セッション作業規約=各 CLAUDE.md)。 行は話題。どの文書も冒頭の「状態:」で自分の分類を宣言する。

話題

正典

設計

記録

総論(何を・なぜ・次に何を)

用語と役割=文書共通の定義(役割・段階・用語はここだけ)/残タスク=これからやることと対応履歴

長期開発計画=コーパス連邦・分割原理・拡張順序/審議会議事録DB 開発計画=2 つ目の文書検索コーパスの設計と検討経緯(2026-10-02)(M0 の記録=所見・確認シート)・審議会議事録DB の 再配布条件・収録範囲(正典)/開発環境方針=PoC 維持と並行開発の規約/文書管理ルール=4 分類・地図・正典 1 箇所の規則(他プロジェクトへ持ち出し可)

リファクタリング所見 2026-08-19=配置の読み替え表

開発計画・評価(品質をどう測り育てるか)

評価設計と改善計画=何をなぜ測るか(合格基準は本 README「品質の担保」)

stats データ拡充計画・第7弾・第9弾=弾ごとの計画/companies 開発計画=企業情報サービスの便の段組み・契約案・容量の見立て・companies 第 1b 便 計画=セグメント別・地域別の実測と契約案・companies 第 1c 便 計画=横断検索(海外売上比率から)の実測と契約案/実利用ログの提供=燃料確保の同意書と共有経路

stats 開発経緯と設計判断 2026-08-25(新しいセッションはまずこれ)/companies(EDINET)正規化検証 2026-08-22・実データ検証 2026-09-20・母集団の棚卸し 2026-09-21・全社の取込と棚卸し 2026-09-22・人手の目視 2026-09-23・セグメント別の取込と棚卸し 2026-09-23・地域別の表の棚卸し 2026-09-23・地域別の PDF 照合 2026-09-26・横断検索の母集団 2026-09-27・遡りの取込と棚卸し 2026-09-30・書類をまたぐ修正の実測 2026-09-30・区分の年をまたぐ続き具合の実測 2026-09-30・アンカー改定の記録 2026-10-09=品質の担保の基準値の改定の経緯(2026-08-28〜10-08)

サービス(各 DB の入口と契約)

recommendations/README/stats/README/polyarchy_common/README=共通契約の正典/各論=stats 共通契約・recommendations 共通契約/deploy/pages/README=公開ページ

stats 設計 5 本(指標棚卸し・データソース選定・参照粒度設計・再配布条件・業種分類対応表)/recommendations(コーパス収録範囲の明示・再配布条件・収録拡充計画:AI・デジタル改革の決定文書=gov への追加の対象・評価問(案))/polyarchy_common/=共通契約パッケージ本体(docstring が詳細仕様)/polyarchy_retrieval/=文書検索の部品の共有ライブラリ(docstring が仕様)

公式コネクタ要件(2026-08-18 調査)

運用(動かし続ける)

運用設計=監視・更新・ロールの設計と実施状況/deploy/README=AWS runbook(§9.5 が入口ガード/ログ保持の正典)/deploy/RUNBOOK_OPS=障害対応・データ更新・切り戻し

個人認証_案B設計=外部 IdP・②名簿限定→③個人向け提供の段組み/性能と同時実行の開発計画=導入直後の集中への備え(想定する山・打ち手・順序・運営者が決めること・2026-10-13)

—

導入団体向け(移行・合意・監査・対外説明)

監査ガイド=公開リポジトリと CI で誰でも再現できる独立監査の仕組み

PROD_MIGRATION=導入団体 AWS への転写手順/運用モデルと事業継続性=なぜ依存しなくて済むか(対外説明)/非公開コーパスの参照設計=導入団体が内部文書の検索を別リポジトリで作るときの型(不変条件・認可関門・検査。本リポジトリでは実装しない)

—

規約(セッション作業規約=新しい開発者・AI が最初に読む)

CLAUDE.md=リポジトリ root の規約(記憶ゼロのセッションはまずこれ・読む順・性格・運用地雷)/stats/CLAUDE.md/recommendations/CLAUDE.md/companies/CLAUDE.md

—

—

運用(人手の箱操作ゼロ・2026-09-03〜)

  • 配布=bash deploy/scripts/release.sh <env>(配る前の確認〔マウント元・ロック・editable install の向き先・語彙・コレクション名・調整値の混入・未コミットのコード〕→ 下記「品質の担保」の全ゲート PASS のときだけ S3 へ upload〔コードは git の追跡ファイルだけ〕→ マニフェスト)。提言の定型更新は update.sh、燃料の週次トリアージは triage.sh。

  • 箱=15 分毎の自動適用(コード tar 再展開・データ同期・smoke と稼働中の /healthz・失敗時は旧版へ自動切り戻し)・毎日の更新チェック・毎時のダッシュボード(S3 ops/dashboard/)・アラーム→メール。

  • CI 化(計画)=ゲートを公開リポジトリの PR/main に紐づけ(GitHub Actions)、release も CI から行う=運用者の仕事は「PR をマージ」になる。段階と現在地=docs/運用設計.md §2.5。

  • 手順=deploy/RUNBOOK_OPS.md §5・設計=docs/運用設計.md §0/§2.4・監査=docs/導入団体側_監査ガイド.md §4b。

ライセンス

  • 本リポジトリ(コード・運用自動化・評価資産・設計文書)のライセンスは Apache-2.0=LICENSE(標準全文・無改変)・© 表示は NOTICE。複製を受け取った者は誰でもこの条件で利用できる。初期開発(2026-08〜09)の履歴は本リポジトリに含めていない。

  • 公開に含めないのは 3 種だけ=相手方(導入団体)の情報・個人情報と実利用ログ・秘密(鍵・トークン等)。これらは開示範囲の問題ではなく、最初からリポジトリに含めない。

  • 収録データ(PDF・統計値)は git 外=各取得元の再配布条件に従う(stats/docs/再配布条件.md・recommendations/docs/再配布条件.md)。コードの公開とデータの再配布条件は別。

品質の担保(回帰ゲート)

構成変更のたびに、以下をリポジトリ root から実行して数値が不変であることを確認する。 合格基準と現在値の正典は本節だけ(他文書は写さずここへリンクする=ゲートの本数も写さない)。release.sh は本節の全ゲート(companies・deliberations は env で有効にしたときだけ)を回し、アンカー(hit@5/MRR)は出力の ALL 行の数値を基準値と比べ、それ以外の合否は終了コードで判定する(出力の文字列を grep しない・2026-10-09〜)。ゲートを回す python はロックの版と一致すること (release.sh の配る前の確認が deploy/scripts/check_lock.py で照合する=開発側で基準値を測る前にも手で回す)。公開リポジトリと CI で誰でも同じ数値を再現できる形にする(CI 化=docs/運用設計.md §2.5)。

recommendations(API クレジット 0 で実行可)

(既定値が v7/Qdrant=env 不要。切り戻しは自動適用の退避と書き戻し〔deploy/RUNBOOK_OPS §5〕=v6 は今の評価問を満たさない=v5・v6 のコレクションは 2026-10-09 に配布元から外した。 Chroma 経路はバッチ2 段4〔2026-08-28〕で全廃=v5 データは S3 data/chroma/ と退避先に保管のみ):

ゲート

基準(v7)

python -m recommendations.eval.eval --retrieval-only --eval-set both

hit@5 86.3% / MRR 0.707

python -m recommendations.eval.eval --filter-eval

フィルタ 27/27 + 層ゲート PASS

python -m recommendations.eval.multistage_eval

網羅 100% / 集約棄却 12/12 / 答え可能 3/3(答え可能は本番の入口 orchestrate で測る。集約棄却は判定方針の回帰テスト=covered は「絞り込みの範囲で 1 件以上返った」の意で関連度の閾値は無い)

python -m recommendations.eval.mcp_smoke

MCP 疎通・層公開固定・stdout クリーン

python -m recommendations.eval.concurrency

同時に流しても 1 本ずつと結果が同じ(ツールの関数を、評価問から作った呼び出し〔絞り込み・団体横断・重複抑制を混ぜる〕で 1 本ずつと同時 3 本の 2 通りに流し、返り値の全体が一致・捕捉ログの行が全部そろう)=箱はツールを同時に動かす(unit の MCP_TOOL_CONCURRENCY・2026-10-14〜)

deliberations(審議会議事録DB・2026-10-03〜。release.sh は env の ENABLE_DELIBERATIONS_APP=true のとき 5 本と束の書き出しを足す=2026-10-04 配線・同時実行は 2026-10-14〜)

手元の専用 Qdrant(qdrant-delib・:6340)と取り込み済みのコレクションが前提(deliberations/CLAUDE.md)。

ゲート

基準

python -m deliberations.eval.retrieval

hit@5 94.7% / MRR 0.856(アンカー問 57=M0 で本人が確定した 35+2026-10-06 に足した 16〔2026-10-07 本人が確認〕+2026-10-07 に足した 6〔同日 本人が確認〕・ミス 3=初めて出た回の型〔検索は関連度順のため後の回が上に来る=初出の特定は利用側の期間の絞り込みと list_meeting〕)

python -m deliberations.eval.attribution_gate

帰属の取り違え 0(M0 の帰属ラベル=資料 40・発言 42+アンカー問の発言者の区分・資料の提出者の区分と提出者)・初出の型(D)の正解を全単位から数え直して一致・全単位の fail-closed

python -m deliberations.eval.layer_gate

公開以外 0・機密の自己試験で遮断・layer の無い検索を拒む・匿名の単位に発言者なし

python -m deliberations.eval.mcp_smoke

ツール 2 本・読み取り専用・layer 引数なし・返り値の帰属と注記

python -m deliberations.eval.concurrency

同時に流しても 1 本ずつと結果が同じ(アンカー問の全部・会議体と資料の種別の絞り込み・回の一覧を、1 本ずつと同時 3 本の 2 通りに流して返り値の全体が一致・捕捉ログの行が全部そろう)

改定の経緯=アンカー改定の記録。アンカーは回帰を見つけるためのもの(固定の問に合わせた検索側の調整をしない)。

companies(2026-09-20〜。release.sh は env の ENABLE_COMPANIES_APP=true のとき 4 本を足す=2026-09-22 配線)

ゲート

基準

python -m companies.eval.exact_match

原典完全一致(companies/data/eval/*.jsonl)=正例・負例とも全件 PASS(2026-09-23 時点 正例 371/負例 37。期待値は EDINET の公式 CSV と自前パーサの 2 経路一致。問は書類を固定して引く)+セグメント別(第 1b 便・segments_exact を続けて判定)=正例・負例とも全件 PASS(2026-09-23 時点 正例 134/負例 18)・値の置き場の全件で会社が定義した項目のラベルと区分のラベル(標準の区分は会社のラベルが無ければタクソノミの標準ラベル)と要素のラベル(標準要素は公式 CSV の項目名・無ければタクソノミの冗長ラベル)が空の値 0・返した kind はすべて kind_note に説明がある・found=false の区分にもラベル+地域別(第 1b 便②・regions_exact を続けて判定)=正例・負例とも全件 PASS(2026-09-25 時点 正例 291/負例 10。期待値は本文の inline XBRL から別のパーサで・合計のセル 40 問はタグの付いた売上高との 2 経路一致)・値の置き場の全件で原典の欄の表の数(入れ子を含む)と写した表の数が一致しない欄 0(2026-09-26 に負例 16)+業種(第 1c 便・industries_exact)=全社に EDINET の提出者業種があり東証 33 業種の語彙の中+横断検索(第 1c 便・screen_exact)=式エンジンの規則・無い入力の 3 段・検証済みの型の値が全件 PASS(2026-09-27 時点 正例 223/負例 22/横断の問 6。値の期待値は単社の参照層で入力を引いて別に計算・海外売上比率は本文 inline XBRL の別のパーサ+合計はタグの収益との 2 経路一致)+時系列(第 1e 便・trend_exact)=系列と集約・除外の理由・横断の問・1 社の年ごとの並びが全件 PASS(期待値は全書類の公式 CSV と自前パーサの 2 経路一致)。どの副ゲートも問が 0 件なら FAIL・expect の知らないキーは FAIL

python -m companies.eval.find_quality

発見層(企業の同定)の到達率=全問 PASS(2026-09-21 時点 20 問=旧社名・表記ゆれ・候補が複数のときは 1 社に決めない)

python -m companies.eval.test_core

語彙と評価問の整合・便ごとの問数の下限(第 1e 便を含む)・除外の理由ごとに負例 1 問以上(ネットワーク不要)

python -m companies.eval.mcp_smoke

MCP 疎通・層公開固定・fail-closed・stdout クリーン

stats

ゲート

基準

python -m stats.eval.mcp_smoke

MCP 疎通・fail-closed(該当なしは found=false+理由)・stdout クリーン

python -m stats.eval.exact_match

原典完全一致(stats/data/eval/*.jsonl)=正例・負例とも全件 PASS(評価セットは収録拡充とともに成長=2026-09-15 時点 正例 312/負例 103)

STATS_TEST_STRICT=1 python -m stats.eval.test_core

期間表記・レジストリ検証・ingest 純関数・取得元の型の配線の網羅(ネットワーク不要)。値ストアに依存する検査は STRICT でスキップ 0(release.sh はこの形で呼ぶ)

python -m stats.eval.find_quality

発見層の到達率=全問 PASS(2026-09-15 時点 227 問。下限は test_core が固定=不退転)

取込・更新時はデータセット固有の整合ゲートも通す(法人企業統計の合計整合・SNA/資金循環の恒等式 7 本など= stats.ops.refresh が実行)。詳細=stats/README.md「実行」節。

共通

共通契約の単体テスト:python -m polyarchy_common.tests.test_common

改定の手順(アンカーは回帰を見つけるトリップワイヤ=最大化する KPI ではない):① 収録・評価問を足した変更でゲートを回し、 正解が上位 5 件から外れた既存の問と、順位が下がった問を数える(--dump-topk の前後比較)② 外れ・下がりが主題適合の割り込み (同じ主題を扱う新しい文書)か、検索の劣化かを問ごとに判断する ③ 主題適合なら基準値を実測に改め、本節の表・release.sh の既定値 (REQUIRE_HIT5・REQUIRE_MRR・審議会DB は DELIB_REQUIRE_*)を同一コミットで直し、経緯を残タスクの該当タスク(§E)に書く ④ 1 問に合わせた検索側の調整はしない(過適合)。過去の改定の経緯=アンカー改定の記録。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Compound MCP agent that integrates EDINET, TDNET, e-Stat, and stock price sources for comprehensive Japanese company analysis, macro economic snapshots, and earnings monitoring through a single interface.
    34 PyPI
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query Japanese public data (laws, corporations, statistics) from official government APIs, returning normalized English metadata with source attribution.
    1
    MIT