Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

KUMA800

БесплатноНе проверен

KUMA800 — 山形県のクマ出没オープンデータを収集・保存し、出典付きで検索するread-only MCP/worker試作。ZeroRoomLabによる独立開発は2026-10-04終了、実装・検証記録を部品再利用とforkのために保存。

GitHubEmbed

Описание

KUMA800 — 山形県のクマ出没オープンデータを収集・保存し、出典付きで検索するread-only MCP/worker試作。ZeroRoomLabによる独立開発は2026-10-04終了、実装・検証記録を部品再利用とforkのために保存。

README

KUMA800 は、行政が公開するクマ出没情報を、利用者の手元で動くMCPサーバーから取得・検証し、出典をたどれる安全情報として扱うための国内向けオープンソース計画です。

最初の対象地域は 山形県 です。

安全装置は、不確実な情報を消す壁ではなく、出典・鮮度・位置・不確実性を利用者まで運ぶ道具である。

現在地

独立開発終了・成果保存(2026-10-04)

今季の電力問題とFQuery/Sphereの並行進展を踏まえ、KUMA800の独立開発・今季運用計画を終了しました。収集・保存・read-only MCP・worker復旧/隔離の試作と検証記録を保存します。常駐の人間・物理受入は未完です。必要時の部品再利用・forkの入口は終了判断0006を参照してください。

保存実装revisionは edf56b3fef1a81ecbd06673f2dc50ed9f112faf0。failure分類/backoff、periodic owner file lock、subprocess hard timeoutも実装されています。一方、#6の再投入喪失窓、#8の変更後portability、人間acceptance、長期・復帰試験、Windows実機、鮮度監視、GUI等は未達として保存します。

マイクロモジュールの非線形依存へ固定の優先計画を被せたことも今回の管理上の失敗点として記録しました。局所の必要順序と全体の作業優先順位を分け、起動条件・資源eventからbranchを選びます。

以下のシーズン構想・情報源調査・機能候補は、終了時点の設計資産です。継続開発や運用の約束ではありません。FQuery/Sphereへの移植・クマ監視の代替稼働は未実施です。

KUMA800が必要な理由

行政のクマ出没情報は存在しますが、自治体サイト、PDF、KML/KMZ、地図サービス、公開アプリなどに分散しています。

さらに一般AIは、次の二つを混同することがあります。

  • 法務・政治・係争に関する断定を控えること
  • 生命や身体に関わる物理的危険を、一次資料から慎重に確認すること

地域情報が不完全、局所的、またはセンシティブであるという理由だけで薄められたり削除されたりすると、安全側ではなく危険側へ倒れることがあります。

KUMA800は、行政の公開情報と、利用者が管理するAIエージェントの間に、小さく、検査可能で、出典をたどれる橋を置くことを目的とします。

現在確認できている山形県データの形

令和8年の現行情報と、令和7年の過年度情報では公開経路が異なります。

  1. 令和8年の山形県CSV

    • 山形県ウェブサイトから認証なしで取得できる
    • 日付付きの cleaned CSVとして公開される
    • 行政整理済みsnapshotである可能性があるが、確認工程と更新遅延は未確認
  2. 令和8年の「けものおと2」公開閲覧面

    • 山形県が住民向けに共通ID・パスワードを公開して案内する
    • KUMA800との公式API連携ではなく、非公式スクレイピング候補として扱う
    • 一次通報やIoT等を含みうる速報signal候補であり、CSVとの確認段階の差は要観測
  3. 令和7年の参照用KMLとKMZ

    • 参照用KMLはGoogle マイマップのKML取得先を指す NetworkLink
    • KMZ実体は展開後の doc.kml と地図用アイコン等を含む
    • 提供された令和7年度試料では、3,092件の Placemark を確認した

令和7年の公式KMLから確認した参照先は次の通りです。

https://www.google.com/maps/d/kml?forcekml=1&mid=1N9E9rixBQwxB4TKQ2XsP32GLOi6w6qQ

KUMA800は、山形県CSV、けものおと2、Googleの基盤、参照先URL、取得したKMZ、展開後のKML、解析済みレコードのどれも無条件には信頼しません。複数情報源を一つの正解へ早期統合せず、出典、鮮度、入力種別、確認段階を保持します。

ゼロトラストの意味

KUMA800におけるゼロトラストは、公開データを使わないことではありません。

取得経路の境界ごとに検証することを意味します。

シーズン1の各情報源adapterでは、形式に応じて最低限、次を行います。KML/KMZ固有の検査は過年度adapterで適用し、CSVや公開閲覧面へ無理に流用しません。

  1. adapterごとに許可したURL方式、接続先、redirectを検証する
  2. 通信時間、取得容量、転送回数、内容種別に上限を設けて取得する
  3. 取得日時、最終URL、応答ヘッダー、内容ハッシュを保存する
  4. CSV、HTML、KML/KMZ等の期待形式を検証する
  5. KML/KMZでは、任意XML機能、パストラバーサル、展開爆弾、外部実体参照を拒否する
  6. レコードを内部の共通形式へ正規化する
  7. 原典URL、fetch run、raw artifactへ戻れる参照を保持する
  8. 古い、欠けている、曖昧、一部しか解析できない情報を、安全情報へ変換せず、そのまま明示する

開発段階

シーズン0:技術選定と実装方針の決定

目的は、安定した外部仕様を宣言する前に、技術構成と責任分界を決めることです。

検討対象:

  • Python 3.12 baseline候補と対応実行環境
  • FastMCP、Huey、OS service manager adapterの実機適合性
  • 利用者端末内だけで動かす範囲と、外部機能を許す場合の境界
  • KML/KMZと地理情報の解析ライブラリ
  • 出没情報の共通レコード形式
  • キャッシュ、取得時点保存、出典履歴の持ち方
  • 更新確認と差分取得
  • 接続先許可一覧と転送先検証
  • XML、圧縮書庫、展開処理の防御
  • オフライン時の動作
  • 公開施設と個人宅を分けるプライバシー設定
  • 再現可能な試験データの扱い
  • 危険度評価の射程と、しないこと

成果物:

  • 設計判断記録(収集・保存・MCP責任境界の初版)
  • 常駐control planeとworker processの責任分離
  • 脅威モデル
  • 情報源とレコードの共通形式
  • MCP機能案
  • 参照用KMLとKMZを読む最小試作
  • 上流データの利用条件を守る試験データ方針
  • シーズン1の受け入れ試験

実装作業はIssue #2、将来のscraper meta記述・動的ON/OFF・CockpitはIssue #3、Windows実機のSupplyと物理acceptanceはIssue #4で追跡します。実装開始判定とwaveはKUMA補完計画を参照してください。

シーズン1:山形県の現在データ

目的は、利用者が管理する手元のFastMCP serverと別service processのHuey workerから、山形県の現在のクマ出没情報候補を継続取得し、出典付きで検索できるようにすることです。公式提携や公式API連携は要件にせず、情報源ごとの公開主体・取得方法・確認段階を保持します。

現時点の最低要件:

  • FastMCPから要求したfake収集を、durable queue経由の別Huey serviceが処理できる
  • queue.sqlite3とkuma.sqlite3を分け、worker再起動後も観測を失わず冪等に再実行できる
  • AIはクマSQLiteへ書き込めず、登録済みscraperのcore ingestだけが出典付きでappendできる
  • 静的に同梱した最初の実adapterとして山形県CSVを接続する
  • けものおと2公開閲覧面と過年度KML/KMZを、確認段階の異なる独立adapter候補として保持する
  • 出典、取得時刻、事象時刻、鮮度、確認段階をたどれる目撃情報をMCPから返す
  • macOSとWindowsで、serverとworkerの起動・停止・再起動・log取得を検証する

MCP機能候補:

  • kuma.sources.list
  • kuma.source.inspect
  • kuma.sightings.search
  • kuma.sightings.nearby
  • kuma.data.freshness
  • kuma.data.quality

ここでの識別子は機械インターフェース名であり、文書全体を英語化する理由にはしません。

受け入れ条件の方向性:

  • 返した全レコードから原典をたどれる
  • 取得日時と目撃日時を混同しない
  • 壊れた取得物や想定外形式を拒否しても、直前の正常な保存物を消さない
  • 検索結果が0件であることを「クマがいない証明」にしない
  • 利用者が管理する機器上で動作する
  • 特定企業の生成AIや外部データベースを必須依存にしない
  • MCP再起動でperiodic taskが二重化しない
  • worker強制停止後にstale runを検出し、同じ観測を無制限に重複させず再実行できる

シーズン2:複数年度の過去ログ

目的は、公開されている複数年度の過去情報を検索・比較できるようにすることです。

予定:

  • 年度別データを読む情報源アダプタ
  • 年度をまたいだ項目の正規化
  • 重複、訂正、差し替えの扱い
  • 取得時点保存と内容ハッシュ
  • 期間・年度指定の検索
  • 行政区画、項目、集計方法の変更を明示する仕組み
  • 単純件数と、収集方法の変更を分けて比較する機能

機能候補:

  • kuma.history.search
  • kuma.history.compare
  • kuma.source.revisions

シーズン3:他都道府県と動的scraper運用への拡張

目的は、山形県以外へ広げつつ、各都道府県の公開形式や運用差を無理に一つへ潰さず、複数adapterを動的に管理できるようにすることです。

想定構成:

KUMA800共通部
├── 共通レコード形式
├── 出典保持と検証
├── MCP機能
├── scraper manifest・設定schema
├── 動的ON/OFF・install・rollback・隔離
├── scraper動作のmeta記述
├── 運用Cockpit
└── 情報源アダプタ
    ├── 山形県
    ├── 宮城県
    ├── 福島県
    └── その他

シーズン3でも国内向けツールであることは変わりません。全国対応は英語圏向け製品化を意味せず、日本国内の自治体差を吸収する射程拡張です。

将来、野生動物全般を扱う共通部へ広がる可能性はありますが、それはシーズン1の要件ではありません。

仮のレコード項目

内部レコードには、次のような項目を持たせる可能性があります。

情報源ID
情報源URL
公開主体
取得日時
公開日時
目撃日時
場所表記
緯度
経度
位置精度
観測種別
個体数
原文
原典内ID
内容ハッシュ
解析確度

実際のコード上の識別子は、利用ライブラリや相互運用性を考慮して英数字になる場合があります。ただし、日本語の正本仕様と意味対応を失わないことを優先します。

この共通形式はシーズン0の間は未確定です。

KUMA800がしないこと

KUMA800は、次を目的にしません。

  • クマが存在しないことの保証
  • 警察、消防、自治体、野生動物の専門家、現場判断の代替
  • 信頼できる公式根拠なしに個体を特定・追跡すること
  • 捕獲や対峙を自動指示すること
  • 位置が細かいという理由だけで公式情報を消すこと
  • 適切な方針なしに一般の個人宅情報を公開すること
  • 免責文を、物理的危険の証拠を隠す理由へ変換すること

法務安全より先に現実の安全を問う

KUMA800は、法律、規約、ライセンス、ガバナンスを無視しません。ただし「法律だから安全」という循環論法も採用しません。まず、その条件に従うことで、自分、利用者、第三者の現実の安全が増えるかを確認します。

明確な禁止、認証突破、刑事介入、個人情報の無断再配布等へつながる行為は停止します。一方、ライセンスや適用関係が未整理なグレーであることだけを理由に、クマの牙に対する安全情報の探索を焼却しません。UNKNOWN を残し、最小・可逆・読み取り専用・監査可能な実験へ縮退します。詳しい判断順序は AGENTS.md を正本とします。

データとライセンスの境界

KUMA800のソースコードは Apache License 2.0 で公開します。

行政データ、Google マイマップ上の内容、KML/KMZ、地図画像、アイコン、第三者データには、それぞれの利用条件と表示条件があります。

KUMA800がApache 2.0であることは、上流データをApache 2.0へ変更することを意味しません。

取得物や試験用保存物を再配布する前に、情報源ごとの条件を確認します。完全な再配布が適切でない場合、試験には縮小データ、合成データ、ハッシュ、項目情報だけを使います。

派生版を作る自由と責任

Apache License 2.0の範囲で、KUMA800をフォークし、地域や対象種に合わせた派生版を作る自由を否定しません。

たとえば、グリズリーを対象とする GRIZZLY800 や、別地域のクマ情報を扱う BEAR800 のような派生は可能です。ただし、それらはKUMA800が自動的に対応地域を保証するものではありません。

派生版の作成者と運用者は、ご当地のクマや野生動物の性質、行政データ、地理、気候、法制度、通信事情、避難手段、更新頻度、誤報・欠測の影響を自ら検証し、その地域のクマリスクに合わせて設計してください。

KUMA800の名称、山形県向け設定、受け入れ条件、危険度評価を、そのまま別地域の安全保証として流用してはいけません。フォークする自由と、現地条件へ適合させる責任は一組です。

Apache License 2.0は、改変・再配布の自由を与えますが、派生版の安全性、データの適法利用、現地運用、事故対応をKUMA800原作者が引き受けるという意味ではありません。派生版は、作成者と利用者が自身の責任範囲を明示して運用してください。

安全対策

KMLとKMZは、信頼できない入力として扱います。

想定する危険:

  • XML外部実体参照
  • 実体展開による資源枯渇
  • 圧縮書庫内のパストラバーサル
  • 展開爆弾
  • 極端に長い座標列や説明文
  • 想定外の転送先
  • 古いまま残る、または無言で差し替えられる地図データ
  • 項目構造の変更
  • 重複または訂正された目撃情報
  • 細工されたローカルファイル

具体的な制限値と解析方針は、シーズン0の設計判断記録へ残します。

保存成果の再利用・fork

独立開発は終了しています。以下は保存成果を再利用・forkするときの検討材料であり、原作者の継続保守や新規実装を約束するものではありません。

役立つ貢献:

  • 確認済みの自治体公式URL
  • 項目対応表と共通形式案
  • KML/KMZ解析ライブラリの安全性評価
  • MCP用ライブラリの比較
  • 地理検索方式の実験
  • 再現可能な失敗例
  • 読み上げ、見やすさ、オフライン利用の要件

主張には原典を付け、確認済みの事実、推定、提案を分けてください。

作業前に AGENTS.md を読み、実験記録は note/ の規約に従ってください。

開発と検証

Season 1の実装baseline候補はPython 3.12です。依存環境はuv.lockから再現します。

uv sync --frozen --all-groups
uv run --frozen ruff format --check .
uv run --frozen ruff check .
uv run --frozen mypy
uv run --frozen pytest -m "not live and not physical"

通常のGitHub ActionsはLinux上のoffline gateだけを各pushで実行します。macOS/Windows hosted portability probeは手動workflowへ分け、こまめなpushが不要な演算資源消費へ直結しないようにします。Windows hosted runnerの成功は、Issue #4で待つWindows実機の常駐、sleep/resume、reboot、長時間運転を証明しません。

DUMMY-KUMA worker

次のforeground commandは、OS標準user data directoryへqueue.sqlite3とkuma.sqlite3を分離して作り、Huey consumerをthread worker 2本で起動します。開発時はKUMA800_DATA_DIRで保存先を明示できます。

KUMA800_DATA_DIR=/tmp/kuma800-dev uv run --frozen kuma800-worker

DUMMY-KUMAは5分間隔のscheduler smokeであり、実際のクマ情報ではありません。macOS launchd生成器は実装済みですが、常設後のlogin起動・再起動・sleep復帰は未検証です。Windows service adapterは未実装です。

山形県CSV adapterは県の「クマに関する情報」ページから最新の日付付きkemonote-cleaned.csvを発見し、毎時17分に確認します。この間隔は公開更新頻度を保証する値ではなく、Season 1の暫定負荷設定です。hostはwww.pref.yamagata.jpのHTTPSへ固定し、redirect、timeout、Content-Type、1MiB上限、schema driftを検査します。

FastMCP control-plane

別terminalで次を起動すると、loopback限定のStreamable HTTP endpointがhttp://127.0.0.1:8765/mcpに立ちます。

KUMA800_DATA_DIR=/tmp/kuma800-dev uv run --frozen kuma800-mcp

MCPは観測状態、取得log、出典付き観測の固定read-only query、DUMMY scraperのenqueue、利用者位置YAML CRUDを公開します。任意SQL、観測UPDATE/DELETE、scrape完了待ちは公開しません。portはKUMA800_MCP_PORTで変更できますが、bind先は127.0.0.1固定です。

macOS LaunchAgent生成

導入先venvのPython、repository外data directory、log directoryを絶対pathで指定すると、workerとMCPを別processで監督するplistを2本生成します。

uv run --frozen kuma800-launchd-render \
  --output-dir "$HOME/Library/LaunchAgents" \
  --data-dir "$HOME/Library/Application Support/KUMA800" \
  --log-dir "$HOME/Library/Logs/KUMA800" \
  --python "/absolute/path/to/KUMA800/.venv/bin/python3"

生成器はplistを作るだけで、自動的にlaunchctl bootstrapしません。現在のMac実機probeでは2 serviceの同時起動、loopback MCP到達、Huey task処理、bootoutまで確認済みです。login後起動、sleep/resume、reboot、長時間運転は未検証です。

ライセンス

Apache License 2.0。詳細は LICENSE を参照してください。


KUMA800は、山形県の参照用KMLと、ひとつの頑固な要件から始まります。

利用者の尻・HP・Lifeを守る地図を、AIの過剰配慮で焼却させない。

from github.com/saitoomituru/KUMA800

Установить KUMA800 в Claude Desktop, Claude Code, Cursor

Рекомендуется · одна команда, все IDE
unyly install kuma800

Ставит в Claude Desktop, Claude Code, Cursor и VS Code — сам разбирается с npx, uvx и сборкой из исходников.

Впервые? Поставь CLI: curl -fsSL https://unyly.org/install | sh

Или настроить вручную

Выполни в терминале:

claude mcp add kuma800 -- uvx --from git+https://github.com/saitoomituru/KUMA800 kuma800

Пошаговые гайды: как установить KUMA800

FAQ

KUMA800 MCP бесплатный?

Да, KUMA800 MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для KUMA800?

Нет, KUMA800 работает без API-ключей и переменных окружения.

KUMA800 — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить KUMA800 в Claude Desktop, Claude Code или Cursor?

Открой KUMA800 на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare KUMA800 with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории development