FYI MCP について
FYI MCP は、Alaveteli 系サービス向けのプライバシー重視型情報公開請求管理ツールの MCP サーバーです。Rust 製コマンドラインツールと連携し、複数の管轄地域での請求追跡とアーカイブに対応します。データはローカルに保存でき、暗号化も選択できます。
主な機能
- 01情報公開請求ワークフローの管理
- 02Alaveteli インスタンスへの対応
- 03請求の更新監視
- 04通信記録と添付ファイルの保管
- 05JSON、CSV、HTML への出力
- 06ローカル機密データの暗号化
活用シーン
- 01複数地域にまたがる請求の追跡
- 02情報公開請求の進捗確認
- 03請求の通信記録と添付ファイルの保管
- 04報告用の請求記録の出力
MCP 対応
Rust 製の `fyi-mcp` サーバーが、AI アシスタント向けに FYI の請求管理機能を MCP インターフェースで提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
FYI CLI
Alaveteli ベースのプラットフォーム向けの、複数の管轄区域に対応した情報公開請求(FOI)クライアント — ニュージーランド、オーストラリア、英国、その他あらゆる Alaveteli の導入環境(foi-repository、WhatDoTheyKnow、FragDenStaat など)で、プライバシーを重視した単一の CLI から、公式な情報公開請求を追跡、提出、保存できます。
プロジェクトの中核はRust ワークスペース(fyi-core、fyi-cli、fyi-mcp)です。レガシーの Python パッケージ(fyi_system)はリファレンス実装として引き続き利用できますが、今後拡張されることはありません。
fyi-cli / fyi-mcp の掲載先
| レジストリ/カタログ | パッケージ/サーバー | ステータス | リンク |
|---|---|---|---|
| 公式 MCP レジストリ | io.github.edithatogo/fyi-mcp @ 0.1.2 | 公開中 | registry.modelcontextprotocol.io · server.json |
| OpenAI プラグインディレクトリ(Codex) | fyi-mcp プラグインパケット | アセット準備完了 — 外部への提出待ち | packaging/ai-plugins/codex/ |
| Anthropic Claude Connectors | fyi-mcp コネクターパケット | アセット準備完了 — ホスト型 HTTPS デプロイと外部への提出待ち | packaging/ai-plugins/anthropic/ |
| Glama | edithatogo/fyi-cli(fyi-mcp) | 公開中 | glama.ai/mcp/servers/edithatogo/fyi-cli · スコア |
| Smithery | edithatogo/fyi-mcp | 公開中(スコア待ち) | smithery.ai/server/@edithatogo/fyi-mcp |
| PyPI | fyi-cli(レガシー Python パッケージ) | 公開中 | pypi.org/project/fyi-cli |
| Crates.io | fyi-cli/ワークスペースのクレート | 公開済み/リリースフロー | crates.io/crates/fyi-cli |
| GitHub Releases | CLI + MCPB アセット | 公開中 | リリース |
| Awesome-MCP-Servers | Legal セクションのエントリー | PR 提出済み | PR #9693 |
GitHub curated MCP(github.com/mcp) | — | 外部要因により保留(手動オンボーディング) | #32 で追跡中 |
下書き/未提出: Scoop、WinGet、Homebrew、Chocolatey、GHCR マルチアーキテクチャワークフロー、PulseMCP、mcp.so、Docker MCP Catalog、mcp-get、OpenTools、AUR、nixpkgs、Snap、Flatpak、asdf/mise、Debian/PPA、Fedora/COPR。
cargo-binstall はすでにアセット準備完了で、リポジトリ内に組み込まれていますが、配布経路として公開済みと見なすには、GitHub Release の対応アセットが必要です。Codex および Anthropic のパケットもアセット準備完了ですが、外部への提出が必要です。
計画中の配布先を含むステータス一覧:docs/registry-distribution-matrix.md。
🚀 クイックスタート
# Install (Rust workspace, recommended)
cargo install --path crates/fyi-cli
# or: cargo install fyi-cli (once published to crates.io)
# Initialize
fyi-cli init-db
# Create your first request
fyi-cli register-request ministry-of-justice "OIA Request" "Request body..." --status draft
# Track and manage requests
fyi-cli list-requests
詳しいガイド: QUICKSTART.md
✨ 機能
- 🌐 複数の管轄区域に対応:foi-repository(NZ)、WhatDoTheyKnow(UK)、FragDenStaat(Germany)、righttoknow.org.au(Australia)など、あらゆる Alaveteli のデプロイ環境で動作します。管轄区域に応じたメタデータとローカライズにも対応予定です
- 🔒 プライバシー優先:すべてのデータをローカルに保存し、暗号化を任意で設定できます。Tor にも対応しています
- 📊 請求を追跡:情報公開請求を作成から完了まで監視します
- 🤖 自動監視:インスタンスの更新を自動で監視します
- 📈 レポートと分析:ダッシュボード、対応が必要な項目のレポート、引き継ぎ資料を作成します
- 🔐 安全なストレージ:認証情報を暗号化し、OS のキーリングと統合します
- 💻 CLI + MCP:コマンドラインツールと、AI アシスタント向けの MCP サーバー
- 📦 エクスポートオプション:JSON、CSV、HTML 形式でエクスポートできます
- 🗄️ 忠実なアーカイブ:請求、やり取り、添付ファイルを WARC/WACZ 形式で取得します
📦 インストール
完全ガイド(Rust を優先し、すべての配布経路を網羅): INSTALL.md · バージョン 0.1.2 · ホームページ github.com/edithatogo/fyi-cli
| 経路 | コマンド/場所 | 備考 |
|---|---|---|
| Cargo(クローン) | cargo install --path crates/fyi-cli | 推奨 |
| Cargo(crates.io) | cargo install fyi-cli | 公開後 |
| cargo-binstall | cargo binstall fyi-cli | アセットの準備完了 — 一致するリリースアセットが必要です |
| GitHub Releases | リリース | ビルド済み CLI/MCPB。タグごとのアセット名を確認してください |
| PyPI(旧版) | pip install fyi-cli | Python の fyi_system。拡張されていません |
| MCP バイナリ | cargo install --path crates/fyi-mcp | または Releases から MCPB を入手 |
| MCP レジストリ | Official / Glama / Smithery | 公開中 — 上の表を参照してください |
| コンテナー | ghcr.io/edithatogo/fyi-mcp | アセットの準備完了 — docs/containers.md |
| Scoop、WinGet、Homebrew、Chocolatey、AUR、nix、Snap、Flatpak、Debian、Fedora、asdf、mise | packaging/ 配下のドラフト | 公開中とは表明していません — docs/installation-package-managers.md |
git clone https://github.com/edithatogo/fyi-cli.git
cd fyi-cli
cargo install --path crates/fyi-cli --locked
fyi-cli --help
公開中のリストとドラフトの状況:fyi-cli / fyi-mcp の掲載先 · 完全な一覧:docs/registry-distribution-matrix.md · MCP カタログのチェックリスト:packaging/mcp-catalogs/SUBMISSION_CHECKLIST.md。
📖 ドキュメント
| ドキュメント | 説明 |
|---|---|
| ドキュメントサイト | ドキュメント全文(Astro + Starlight) |
| docs/cli-entrypoints-audit.md | Python CLI、Rust CLI、Rust MCP の各インターフェースを網羅した正式な相互参照 |
| docs/upstream-relations.md | Alaveteli/インスタンス運用者のエチケットと連絡記録 |
| docs/registry-distribution-matrix.md | MCP カタログ、パッケージマネージャー、コンテナーの状況 |
| docs/external-registry-followups.md | Smithery スコアと GitHub MCP 導入手順 |
| docs/installation-package-managers.md | パッケージマネージャーによるインストールの草稿(Scoop、WinGet、brew、…) |
| docs/containers.md | fyi-mcp コンテナー/GHCR |
| QUICKSTART.md | 5 分で始めるガイド |
| USER_GUIDE.md | 詳細なユーザードキュメント |
| INSTALL.md | インストールガイド(Rust を優先、すべての配布方法) |
| API_KEY_SETUP.md | API キーの取得と設定方法 |
| CONFIGURATION.md | 設定リファレンス |
| TROUBLESHOOTING.md | トラブルシューティングガイド |
| FAQ.md | よくある質問 |
| CHANGELOG.md | バージョン履歴 |
| CONTRIBUTING.md | 貢献方法 |
| CITATION.cff | リリースの引用メタデータ |
| .zenodo.json | Zenodo リリースメタデータのソース |
📚 引用と Zenodo
リリースメタデータは CITATION.cff、.zenodo.json、および
artifacts/release/zenodo-mirror-manifest.json でバージョン管理されています。DOI フィールドは、タグ付きリリースに対応する Zenodo の公開レコードが確認されるまで未設定のままです。
🛡️ セキュリティ
脆弱性の報告
セキュリティ脆弱性を公開 GitHub イシューで報告しないでください。
GitHub の非公開の脆弱性報告機能を利用してください: https://github.com/edithatogo/fyi-cli/security/advisories/new
セキュリティポリシー: SECURITY.md
セキュリティ機能
- ✅ 機密データを AES-256-GCM で暗号化
- ✅ PBKDF2-HMAC-SHA256 による鍵導出
- ✅ 認証情報の保存に OS のキーリングを統合
- ✅ 改ざんを検知できる監査ログ
- ✅ 安全なセッション管理
- ✅ 入力の検証とサニタイズ
- ✅ セキュリティヘッダー(CSP、HSTS、X-Frame-Options)
- ✅ セキュリティの自動スキャン(CodeQL、pip-audit、bandit)
🧪 テスト
# Rust release checks used by this repository
cargo +stable-x86_64-pc-windows-gnu fmt --all -- --check
cargo +stable-x86_64-pc-windows-gnu clippy --workspace --all-targets --all-features -- -D warnings
cargo +stable-x86_64-pc-windows-gnu test --workspace --all-features
# Python legacy/support checks
.\.venv\Scripts\python.exe -m pytest tests/test_release_readiness.py
# Opt-in live smoke test
FYI_LIVE_SMOKE=1 .\.venv\Scripts\python.exe -m pytest -m smoke tests/test_discovery_smoke.py
テストカバレッジ: Rust ワークスペースのチェックをリリースのゲートとしています。従来のドキュメントとアーカイブ用ツールでは、Python のサポートテストも引き続き利用できます。
🤝 貢献
貢献を歓迎します!ガイドラインについては CONTRIBUTING.md をご覧ください。
コントリビューター向けクイックスタート
# Fork and clone
git clone https://github.com/YOUR_USERNAME/fyi-cli.git
cd fyi-cli
# Build & test the Rust workspace
cargo build --workspace --all-features
cargo test --workspace --all-features
# Make your changes, then submit a PR
git commit -m "feat: Add awesome feature"
git push origin feature/awesome-feature
従来の Python fyi_system パッケージを含む開発環境の完全なセットアップについては、CONTRIBUTING.md をご覧ください。
行動規範
このプロジェクトにはコントリビューター行動規範が適用されます。このプロジェクトに参加することで、その規約に従うことに同意したものとみなされます。
📊 プロジェクトの状況
GitHub Projects
このリポジトリのプロジェクトボードは
fyi-cli Conductor ロードマップです。
ローカルの.conductor/tracks.mdレジストリを反映し、完了したConductorの作業、リリース準備項目、外部MCPレジストリに関するフォローアップを追跡します。
包括プロジェクトの
Aotearoaのオープンな情報公開に関する希少な洞察
は、項目単位で同期されています。GitHub Projectsはプロジェクトのネストに対応していないため、同期は
scripts/sync_github_projects.pyと、手動/スケジュール実行のproject-syncワークフローで処理します。
# Preview synchronization without changing either project
.\.venv\Scripts\python.exe scripts\sync_github_projects.py --dry-run
# Apply synchronization from fyi-cli project 6 into RIOPA project 4
.\.venv\Scripts\python.exe scripts\sync_github_projects.py
このワークフローでは、ユーザーレベルのProjectsV2への書き込みに必要なGitHub Projectsアクセス権を持つ、PROJECT_SYNC_TOKENという名前のリポジトリシークレットが必要です。同期は慎重に行われます。RIOPAに不足しているfyi-cliのIssue/PR項目を追加し、共通のステータス値をコピーし、fyi-cliにオプションがない場合はRIOPAのミラー元をotherに設定します。また、包括ボードの項目は削除しません。
プロジェクトのステータス
このプロジェクトは、ニュージーランド専用ツールから、Rustワークスペースを基盤とする複数の管轄区域に対応したFOI/Alaveteliプラットフォームへと、積極的に進化しています。現在の作業は.conductor/tracks.mdにあるConductorのトラックで追跡し、GitHubのエピックIssue(#37~#46)とそのサブIssueにも反映しています。最新のステータスは以下のプロジェクトボードを、リリース済みバージョンについてはCHANGELOG.mdをご覧ください。
🔗 互換性のあるプラットフォーム
FYI CLIは、Alaveteliをベースとするあらゆるプラットフォームで動作します。現在、組み込みの管轄区域カタログには以下が含まれています。
| プラットフォーム | 地域 | URL |
|---|---|---|
| foi-repository | ニュージーランド | foi-repository |
| RightToKnow | オーストラリア | https://www.righttoknow.org.au |
| WhatDoTheyKnow | イギリス | https://www.whatdotheyknow.com |
| MyRightToKnow | アイルランド | https://www.myrightrtoknow.org |
| Ma Da Da (CADA) | フランス | https://www.madada.fr |
| Tu Derecho a Saber | スペイン | https://www.tuderechoasaber.es |
| FragDenStaat | ドイツ | https://fragdenstaat.de |
| Alaveteli | 任意 | セルフホスト型インスタンス |
追加インスタンスと英語以外のローカライズを対象とする展開計画については、.conductor/tracks/jurisdiction-*をご覧ください。
📋 CLI コマンド
アーカイブの探索
アーカイブ関連のコマンドは読み取り専用で、APIキーは必要ありません。
# Import the official FYI authority list into the local SQLite database
fyi import-authorities
# Walk the public search feed for a date window and save discovered requests
fyi discover --date-from 2024-01-01 --date-to 2024-02-01 \
--checkpoint data/_state/discovery-2024-01.json \
--output data/_state/discovered-2024-01.jsonl
# Probe a numeric request ID range for gaps
fyi discover --backfill-ids --id-from 1 --id-to 5000 \
--output data/_state/backfill-1-5000.jsonl
# Compare feed discovery against the ID backfill
fyi discover-reconcile \
--feed data/_state/discovered-2024-01.jsonl \
--backfill data/_state/backfill-1-5000.jsonl \
--output data/_state/discovery-reconciliation.json
読み取り専用の機関情報の検出
discover-bodies では、--base-url はインスタンス/取得先のURLとして維持されます。機関CSVが明示的な別のURLでホストされている場合に限り、別個の --catalog-url オプションを使用してください。
fyi discover-bodies --base-url https://www.righttoknow.org.au \
--catalog-url https://catalog.example/au-authorities.csv \
--rate-limit-name archive-discovery-au-rtk --format jsonl --output bodies.jsonl
--format jsonl では、各出力行には下流との安定した契約フィールドである url_name、name、tags[] のみが含まれます。デフォルトのJSON形式には、監査記録用の取得来歴も含まれます。どちらのモードも読み取り専用で、robotsに対応し、設定済みの共有リミッターを使用します。
JSON出力には、有効なカタログURL、デフォルトと上書きのどちらが使用されたか、取得時刻、HTTPステータス、行数、生のCSVペイロードのSHA-256が含まれます。上書きは読み取り専用であり、引き続きカタログホストのrobotsポリシー、連絡可能なUser-Agent、リトライ時のバックオフ、共有レートリミッターを使用します。上書きURLは信頼できる設定として扱ってください。検出先を別の機関セットに切り替える可能性があるため、アーカイブの来歴と合わせて確認し、記録する必要があります。
検出では連絡可能なUser-Agentを使用し、robots.txtを確認して、一時的な429/5xx応答時にはバックオフします。実際の実行では適切な負荷に保ち、小さな日付範囲を使い、チェックポイントから再開し、アーカイブ作業は、同じ階層にあるfyi-archiveリポジトリのdocs/ethics-and-compliance.mdに記載された倫理ガイダンスに沿って調整してください。
Rustのfyi-coreネットワーク経路が、リソースを考慮した主要な実装です。RateLimit-*/Retry-Afterを解析し、ペースを調整し、リクエスト数/バイト数/時間のガードレールを適用し、負荷のメモリを永続化し、安全なGETをキャッシュして、シークレットを除去したJSONLトレースを出力できます。Pythonは意図的に互換性を保った検出/取得経路であり、同じ識別およびリトライのエチケットに従います。
並行ワーカーを使用する場合は、discoverとbackfillを同じSQLiteデータベースに向け、--dbを指定してください。これにより、プロセス間でリクエスト枠を1つにまとめて予約し、通常の予約と一時的な失敗時のバックオフイベントの両方を記録する、共有のクロスワーカーリミッターが有効になります。fyi rate-limit-status --db fyi_system.dbで現在の状態を確認できます。
CLIとMCPのインターフェース
コマンドとサーバーの完全な相互参照は、docs/cli-entrypoints-audit.mdで管理されています。Python CLIのエントリーポイント(fyi、fyi-cli、fyi-system)、Rust CLIバイナリ(fyi-cli)、公開されているレジストリページを含むRust MCPサーバー(fyi-mcp)を網羅しています。
オプトインの実環境スモークテスト:
FYI_LIVE_SMOKE=1 pytest -m smoke tests/test_discovery_smoke.py
AU RightToKnowのスモークテストは、検出ページ1ページ、リクエスト取得5件以内に制限されています。一時テストディレクトリにのみ書き込み、FYI_LIVE_SMOKE=1が明示的に設定されている場合を除き、無効のままです。
現在の実環境での検証では、制限されたJSON検索リクエストに対してRightToKnowがHTTP 403を返したため、スモークテストでは外部要因による利用不可として明示的にスキップを記録し、取得を試みません。この動作によって、デフォルトのオフラインCIの挙動が変わったり、拒否されたリクエストを積極的に再試行したりすることはありません。
忠実なアーカイブ取得
fyi captureは、公開リクエストのJSON、レンダリング済みHTML、添付ファイルをWARCレコードとして保存し、添付ファイルのバイト列をSHA-256で重複排除し、下流のデータセットツール用に派生リクエストビューを維持します。
fyi capture 12345 \
--data-dir data \
--dist-dir dist \
--max-bytes 500000000 \
--max-runtime-minutes 30
取得データの構成:
data/
warc/<runid>-<request>.warc.gz
attachments/<sha-prefix>/<sha256>
raw/requests/<authority>/<request_id>/
request.json
page.html
attachments.json
snapshot_meta.json
dist/
site_snapshots/<YYYYMMDD>.wacz
各日次WACZには追記できます。後続の取得では、archive/の下に別のWARCセグメントを追加し、datapackage.jsonのリソースメタデータを統合します。WACZ/WARCに対応するリプレイツールでは、dist/site_snapshots/からパッケージを開けます。低レベルの調査には、パッケージを展開し、warcioでWARCセグメントを読み取ってください。
# Database
fyi init-db # Initialize database
fyi config show # Show configuration
# Requests
fyi register-request ... # Create new request
fyi list-requests # List all requests
fyi request-detail <id> # View request details
fyi set-status <id> <status> # Update status
# Submission
fyi build-prefilled-url <id> # Generate submission URL
# Monitoring
fyi ingest-feed <url> # Ingest RSS/Atom feed
fyi scheduler <url> # Run continuous monitoring
fyi discover # Discover public FYI requests
fyi discover-reconcile # Compare discovery JSONL outputs
# Reports
fyi dashboard --output ... # Generate dashboard
fyi attention-report # Generate attention report
fyi handover --output ... # Generate handover document
# Export
fyi export-requests # Export all requests
fyi export-bundle <id> # Export request bundle
# Security
fyi privacy-audit # Privacy compliance check
fyi health-check # System health verification
CLIの完全なリファレンス: fyi --helpまたはUSER_GUIDE.mdを参照してください。
🏗️ アーキテクチャ
┌───────────────────────────────────────────────────────────────┐
│ fyi-cli workspace │
├───────────────────┬───────────────────────┬───────────────────┤
│ fyi-cli (bin) │ fyi-mcp (MCP server) │ legacy fyi_system │
│ CLI commands, │ JSON-RPC over stdio, │ (Python, reference │
│ TUI dashboard │ tools for AI assistants│ implementation) │
├───────────────────┴───────────────────────┴───────────────────┤
│ fyi-core (lib) │
│ Alaveteli API client · Tor client · encryption/keyring · │
│ sync engine · jurisdiction/instance registry (in progress) │
├─────────────────────────────────────────────────────────────────┤
│ SQLite database │
│ (requests, correspondence, authorities, sync_metadata) │
├─────────────────────────────────────────────────────────────────┤
│ Alaveteli instances: foi-repository · WhatDoTheyKnow · │
│ FragDenStaat · righttoknow.org.au · any self-hosted deploy │
└─────────────────────────────────────────────────────────────────┘
📜 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細はLICENSEファイルを参照してください。
🙏 謝辞
- mySocietyのAlaveteliプラットフォームを基盤として構築されています
- foi-repositoryの透明性向上への取り組みに着想を得ています
- 暗号化にcryptographyを使用しています
📞 サポート
- ドキュメント: https://edithatogo.github.io/fyi-cli/
- 問題: https://github.com/edithatogo/fyi-cli/issues
- ディスカッション: https://github.com/edithatogo/fyi-cli/discussions
透明性とプライバシーを大切にして作られています ❤️
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。