FYI MCP

io.github.edithatogo由 GitHub 帳號 edithatogo 發布v0.1.2更新於 Oct 25, 2026

FYI request management with tools for requests, authorities, correspondence, sync, and health.

概覽

AI 產生的概覽

一個本機 MCP 伺服器,用來在 Alaveteli 平台上管理資訊公開(FOI)請求,提供請求、機關、往來函件、同步與健康檢查等工具。

可以做什麼
登記、列出、檢視並更新本機資料庫中 FOI/OIA 請求的狀態,並為其產生預填的提交連結。從 Alaveteli 實例匯入與探索公開機關及請求,並核對探索結果。擷取資訊來源、執行排程監控,並為追蹤中的請求同步往來函件。產生儀表板、待關注事項報告與交接文件,並匯出請求或請求包。對本機儲存執行健康檢查與隱私檢查。
適用情境
適合在 WhatDoTheyKnow、RightToKnow、FragDenStaat 等 Alaveteli 網站提交或追蹤資訊公開請求的人,希望借助助理在本機資料庫中整理、監控並彙報這些請求。若只需一次性網頁查詢,則幫助不大。
執行需求
以本機程序在使用者電腦上執行(僅桌面端),可從發行套件安裝,或以 Cargo 從 Rust 工作區建置。需先初始化本機 SQLite 資料庫。探索、資訊來源擷取、同步與擷取 Alaveteli 實例需要網路存取;封存探索指令為唯讀,不需 API 金鑰。
安裝前請注意
請求、往來函件與憑證都儲存在本機,需保護好資料庫及加密或金鑰環設定。同步、資訊來源擷取與擷取會連線第三方 Alaveteli 網站並寫入資料,應保持禮貌並遵守其速率限制。README 指出,覆寫用的目錄 URL 應視為可信設定,因為它可能把探索導向另一組機關。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 FYI MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

FYI CLI

A multi-jurisdiction Freedom-of-Information (FOI) client for Alaveteli-based platforms — track, submit, and archive official information requests across New Zealand, Australia, the UK, and any other Alaveteli deployment (foi-repository, WhatDoTheyKnow, FragDenStaat, and more), from a single privacy-focused CLI.

[PyPI version] [Crates.io] [License: MIT] [CI] [Codecov] [smithery badge] [Glama] [MCP Registry]

The project's core is a Rust workspace (fyi-core, fyi-cli, fyi-mcp); a legacy Python package (fyi_system) remains available as a reference implementation but is no longer extended.

Where fyi-cli / fyi-mcp is listed

Registry / catalogPackage / serverStatusLink
Official MCP Registryio.github.edithatogo/fyi-mcp @ 0.1.2Liveregistry.modelcontextprotocol.io · server.json
OpenAI plugin directory (Codex)fyi-mcp plugin packetAssets ready — external submission pendingpackaging/ai-plugins/codex/
Anthropic Claude Connectorsfyi-mcp connector packetAssets ready — hosted HTTPS deployment and external submission pendingpackaging/ai-plugins/anthropic/
Glamaedithatogo/fyi-cli (fyi-mcp)Liveglama.ai/mcp/servers/edithatogo/fyi-cli · scores
Smitheryedithatogo/fyi-mcpLive (score pending)smithery.ai/server/@edithatogo/fyi-mcp
PyPIfyi-cli (legacy Python package)Livepypi.org/project/fyi-cli
Crates.iofyi-cli / workspace cratesPublished / release flowcrates.io/crates/fyi-cli
GitHub ReleasesCLI + MCPB assetsLiveReleases
Awesome-MCP-ServersLegal section entryPR submittedPR #9693
GitHub curated MCP (github.com/mcp)—Blocked external (manual onboarding)Tracked in #32

Draft / not yet submitted: Scoop, WinGet, Homebrew, Chocolatey, GHCR multi-arch workflow, PulseMCP, mcp.so, Docker MCP Catalog, mcp-get, OpenTools, AUR, nixpkgs, Snap, Flatpak, asdf/mise, Debian/PPA, Fedora/COPR.

cargo-binstall is already assets-ready and wired in-repo, but still depends on matching GitHub Release assets before it can be treated as a live distribution path. Codex and Anthropic packets are assets-ready but still require external submission.

Full status matrix (including planned channels): docs/registry-distribution-matrix.md.


🚀 Quick Start

bash
# Install (Rust workspace, recommended)cargo install --path crates/fyi-cli# or: cargo install fyi-cli   (once published to crates.io)
# Initializefyi-cli init-db
# Create your first requestfyi-cli register-request ministry-of-justice "OIA Request" "Request body..." --status draft
# Track and manage requestsfyi-cli list-requests

Full guide: QUICKSTART.md


✨ Features

  • 🌐 Multi-Jurisdiction: Works with any Alaveteli deployment — foi-repository (NZ), WhatDoTheyKnow (UK), FragDenStaat (Germany), righttoknow.org.au (Australia), and more, with jurisdiction-aware metadata and localization on the way
  • 🔒 Privacy-First: All data stored locally, optional encryption, Tor support
  • 📊 Track Requests: Monitor FOI/OIA requests from creation to completion
  • 🤖 Automated Monitoring: Watch instances for updates automatically
  • 📈 Reports & Analytics: Generate dashboards, attention reports, handover docs
  • 🔐 Secure Storage: Encrypted credentials, OS keyring integration
  • 💻 CLI + MCP: Command-line tool and an MCP server for AI assistants
  • 📦 Export Options: JSON, CSV, HTML export capabilities
  • 🗄️ Faithful Archiving: WARC/WACZ capture of requests, correspondence, and attachments

📦 Installation

Full guide (Rust-first, all channels): INSTALL.md · version 0.1.2 · homepage github.com/edithatogo/fyi-cli

PathCommand / locationNotes
Cargo (clone)cargo install --path crates/fyi-cliRecommended
Cargo (crates.io)cargo install fyi-cliWhen published
cargo-binstallcargo binstall fyi-cliassets-ready — needs matching release assets
GitHub ReleasesReleasesPrebuilt CLI / MCPB; check asset names per tag
PyPI (legacy)pip install fyi-cliPython fyi_system; not extended
MCP binarycargo install --path crates/fyi-mcpOr MCPB from Releases
MCP registriesOfficial / Glama / Smitherylive — see table above
Containersghcr.io/edithatogo/fyi-mcpassets-ready — docs/containers.md
Scoop, WinGet, Homebrew, Chocolatey, AUR, nix, Snap, Flatpak, Debian, Fedora, asdf, miseDrafts under packaging/Not claimed live — docs/installation-package-managers.md
bash
git clone https://github.com/edithatogo/fyi-cli.gitcd fyi-clicargo install --path crates/fyi-cli --lockedfyi-cli --help

Live listings and draft status: Where fyi-cli / fyi-mcp is listed · full matrix: docs/registry-distribution-matrix.md · MCP catalog checklist: packaging/mcp-catalogs/SUBMISSION_CHECKLIST.md.


📖 Documentation

DocumentDescription
Docs siteFull documentation (Astro + Starlight)
docs/cli-entrypoints-audit.mdCanonical cross-reference for Python CLI, Rust CLI, and Rust MCP surfaces
docs/upstream-relations.mdAlaveteli/instance operator etiquette and outreach log
docs/registry-distribution-matrix.mdMCP catalogs, package managers, containers status
docs/external-registry-followups.mdSmithery score + GitHub MCP onboarding playbook
docs/installation-package-managers.mdDraft package-manager install notes (Scoop, WinGet, brew, …)
docs/containers.mdfyi-mcp container / GHCR
QUICKSTART.md5-minute getting started guide
USER_GUIDE.mdComprehensive user documentation
INSTALL.mdInstallation guide (Rust-first; all channels)
API_KEY_SETUP.mdHow to get and configure API key
CONFIGURATION.mdConfiguration reference
TROUBLESHOOTING.mdTroubleshooting guide
FAQ.mdFrequently asked questions
CHANGELOG.mdVersion history
CONTRIBUTING.mdHow to contribute
CITATION.cffCitation metadata for releases
.zenodo.jsonZenodo release metadata source

📚 Citation and Zenodo

Release metadata is versioned in CITATION.cff, .zenodo.json, and artifacts/release/zenodo-mirror-manifest.json. DOI fields remain unset until the live Zenodo record is verified for the tagged release.


🛡️ Security

Reporting a Vulnerability

Please do NOT report security vulnerabilities through public GitHub issues.

Use GitHub's private vulnerability reporting: https://github.com/edithatogo/fyi-cli/security/advisories/new

Security Policy: SECURITY.md

Security Features

  • ✅ AES-256-GCM encryption for sensitive data
  • ✅ PBKDF2-HMAC-SHA256 key derivation
  • ✅ OS keyring integration for credential storage
  • ✅ Tamper-evident audit logging
  • ✅ Secure session management
  • ✅ Input validation and sanitization
  • ✅ Security headers (CSP, HSTS, X-Frame-Options)
  • ✅ Automated security scanning (CodeQL, pip-audit, bandit)

🧪 Testing

bash
# Rust release checks used by this repositorycargo +stable-x86_64-pc-windows-gnu fmt --all -- --checkcargo +stable-x86_64-pc-windows-gnu clippy --workspace --all-targets --all-features -- -D warningscargo +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 testFYI_LIVE_SMOKE=1 .\.venv\Scripts\python.exe -m pytest -m smoke tests/test_discovery_smoke.py

Test Coverage: Rust workspace checks are the release gate. Python support tests remain available for legacy docs and archive tooling.


🤝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Quick Start for Contributors

bash
# Fork and clonegit clone https://github.com/YOUR_USERNAME/fyi-cli.gitcd fyi-cli
# Build & test the Rust workspacecargo build --workspace --all-featurescargo test --workspace --all-features
# Make your changes, then submit a PRgit commit -m "feat: Add awesome feature"git push origin feature/awesome-feature

See CONTRIBUTING.md for the full development setup, including the legacy Python fyi_system package.

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.


📊 Project Status

GitHub Projects

The project board for this repository is fyi-cli Conductor Roadmap. It mirrors the local .conductor/tracks.md registry and tracks completed Conductor work, release-readiness items, and external MCP registry follow-ups.

The umbrella Rare Insights on Open Policy from Aotearoa project is synchronized at the item level. GitHub Projects does not support nested projects, so synchronization is handled by scripts/sync_github_projects.py and the manual/scheduled project-sync workflow.

bash
# 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

The workflow requires a repository secret named PROJECT_SYNC_TOKEN with GitHub Projects access for user-level ProjectsV2 writes. The sync is conservative: it adds missing fyi-cli issue/PR items to RIOPA, copies shared status values, sets the RIOPA mirror source to other unless a fyi-cli option exists, and never deletes umbrella-board items.

Project Status

This project is actively evolving from an NZ-only tool into a multi-jurisdiction FOI/Alaveteli platform built on the Rust workspace. Current work is tracked as Conductor tracks under .conductor/tracks.md, mirrored to GitHub epic issues (#37-#46) and their sub-issues. See the project board below for live status, and CHANGELOG.md for released versions.


🔗 Compatible Platforms

FYI CLI works with any Alaveteli-based platform. The embedded jurisdiction catalog currently includes:

PlatformRegionURL
foi-repositoryNew Zealandfoi-repository
RightToKnowAustraliahttps://www.righttoknow.org.au
WhatDoTheyKnowUnited Kingdomhttps://www.whatdotheyknow.com
MyRightToKnowIrelandhttps://www.myrighttoknow.org
Ma Da Da (CADA)Francehttps://www.madada.fr
Tu Derecho a SaberSpainhttps://www.tuderechoasaber.es
FragDenStaatGermanyhttps://fragdenstaat.de
AlaveteliAnySelf-hosted instances

See .conductor/tracks/jurisdiction-* for the rollout plan covering additional instances and non-English localization.


📋 CLI Commands

Archive Discovery

The archive commands are read-only and do not require an API key.

bash
# Import the official FYI authority list into the local SQLite databasefyi import-authorities
# Walk the public search feed for a date window and save discovered requestsfyi 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 gapsfyi discover --backfill-ids --id-from 1 --id-to 5000 \  --output data/_state/backfill-1-5000.jsonl
# Compare feed discovery against the ID backfillfyi discover-reconcile \  --feed data/_state/discovered-2024-01.jsonl \  --backfill data/_state/backfill-1-5000.jsonl \  --output data/_state/discovery-reconciliation.json

Read-only authority discovery

discover-bodies keeps --base-url as the instance/capture URL. Use the separate --catalog-url option only when the authority CSV is hosted at an explicit alternate URL:

bash
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

With --format jsonl, each output line contains only the stable downstream contract fields url_name, name, and tags[]. The default JSON format also includes retrieval provenance for audit records. Both modes are read-only, robots-aware, and use the configured shared limiter.

The JSON output includes the effective catalog URL, whether the default or an override was used, retrieval time, HTTP status, row count, and a SHA-256 of the raw CSV payload. The override is read-only and still uses the catalog host's robots policy, contactable User-Agent, retry backoff, and shared rate limiter. Treat an override URL as trusted configuration: it can redirect discovery to a different authority set and should be reviewed and recorded alongside archive provenance.

Discovery uses a contactable User-Agent, checks robots.txt, and backs off on transient 429/5xx responses. Keep live runs polite: use small date windows, resume with checkpoints, and coordinate archive work with the ethics guidance in the sibling fyi-archive repo at docs/ethics-and-compliance.md.

The Rust fyi-core network path is the primary resource-aware implementation: it parses RateLimit-*/Retry-After, adapts pacing, enforces request/bytes/time guardrails, persists load memory, caches safe GETs, and can emit secret-redacted JSONL traces. Python remains a deliberately compatible discovery/capture path and follows the same identity and retry etiquette.

For concurrent workers, point discover and backfill at the same SQLite database with --db. That enables the shared cross-worker limiter, which reserves one aggregate request slot across processes and records both normal reservations and transient-failure backoff events. Inspect the current state with fyi rate-limit-status --db fyi_system.db.

CLI and MCP surfaces

The full command and server cross-reference is maintained in docs/cli-entrypoints-audit.md. It covers the Python CLI entrypoints (fyi, fyi-cli, fyi-system), the Rust CLI binary (fyi-cli), and the Rust MCP server (fyi-mcp) with its published registry pages.

Opt-in live smoke test:

bash
FYI_LIVE_SMOKE=1 pytest -m smoke tests/test_discovery_smoke.py

The AU RightToKnow smoke is bounded to one discovery page and at most five request captures. It writes only to temporary test directories and remains disabled unless FYI_LIVE_SMOKE=1 is explicitly set.

In the current live verification, RightToKnow returned HTTP 403 for the bounded JSON search request, so the smoke records an explicit external availability skip and does not attempt capture. This does not change default offline CI behavior or retry the denied request aggressively.

Faithful Archive Capture

fyi capture stores the public request JSON, rendered HTML, and attachments as WARC records, deduplicates attachment bytes by SHA-256, and maintains a derived request view for downstream dataset tooling.

bash
fyi capture 12345 \  --data-dir data \  --dist-dir dist \  --max-bytes 500000000 \  --max-runtime-minutes 30

Capture layout:

text
data/  warc/<runid>-<request>.warc.gz  attachments/<sha-prefix>/<sha256>  raw/requests/<authority>/<request_id>/    request.json    page.html    attachments.json    snapshot_meta.jsondist/  site_snapshots/<YYYYMMDD>.wacz

Each daily WACZ is appendable: subsequent captures add another WARC segment under archive/ and merge the resource metadata in datapackage.json. Replay tooling that supports WACZ/WARC can open the package from dist/site_snapshots/; for low-level inspection, unzip it and read the WARC segments with warcio.

bash
# Databasefyi init-db                    # Initialize databasefyi config show                # Show configuration
# Requestsfyi register-request ...       # Create new requestfyi list-requests              # List all requestsfyi request-detail <id>        # View request detailsfyi set-status <id> <status>   # Update status
# Submissionfyi build-prefilled-url <id>   # Generate submission URL
# Monitoringfyi ingest-feed <url>          # Ingest RSS/Atom feedfyi scheduler <url>            # Run continuous monitoringfyi discover                   # Discover public FYI requestsfyi discover-reconcile         # Compare discovery JSONL outputs
# Reportsfyi dashboard --output ...     # Generate dashboardfyi attention-report           # Generate attention reportfyi handover --output ...      # Generate handover document
# Exportfyi export-requests            # Export all requestsfyi export-bundle <id>         # Export request bundle
# Securityfyi privacy-audit              # Privacy compliance checkfyi health-check               # System health verification

Full CLI reference: See fyi --help or USER_GUIDE.md


🏗️ Architecture

┌───────────────────────────────────────────────────────────────┐│                         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  │└─────────────────────────────────────────────────────────────────┘

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments

  • Built on the Alaveteli platform by mySociety
  • Inspired by the transparency work of foi-repository
  • Uses cryptography for encryption

📞 Support


Made with ❤️ for transparency and privacy

來源:README.md,提交 2adfa97

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.2最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分