Good Earth について
Good Earthは、特定の区画に合わせた季節情報を提供する、栽培者向けの気候分析MCPサーバーです。保存した区画ごとに条件を計算し、全体の値と区画内のばらつきを示します。
主な機能
- 01ポリゴンまたは半径指定で区画を保存
- 02霜の時期と地温の予測
- 03栽培時期と作物の進捗
- 04害虫・病害・野生動物のツール
- 05地形に基づく区画内の差の推定
活用シーン
- 01農場内の畝ごとの霜条件を比較
- 02地温が栽培基準に達する時期を推定
- 03積算温度をもとに作物の生育を追跡
- 04周辺種と季節ごとの害虫リスクを確認
MCP 対応
Good Earthは、ストリーミングHTTP対応のリモートサーバーを通じて、区画・季節・害虫・野生動物・計画のツールをMCPクライアントに提供します。一部のツールは無料で、その他の呼び出しはTollbooth DPYCのマイクロペイメントで利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://goodearth-mcp.fastmcp.app/mcpclaude mcp add --transport http lonniev-goodearth https://goodearth-mcp.fastmcp.app/mcp{"mcpServers":{"lonniev-goodearth":{"type":"http","url":"https://goodearth-mcp.fastmcp.app/mcp"}}}Cursor で開く{"servers":{"lonniev-goodearth":{"type":"http","url":"https://goodearth-mcp.fastmcp.app/mcp"}}}VS Code で開く{"mcpServers":{"lonniev-goodearth":{"type":"http","url":"https://goodearth-mcp.fastmcp.app/mcp"}}}{"mcpServers":{"lonniev-goodearth":{"serverUrl":"https://goodearth-mcp.fastmcp.app/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
85| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| npub | string | はい | 残高を確認する Nostr 公開鍵(npub1...)。 |
| dpop_token | string | はい | 呼び出し元が npub を保持していることを証明するもの:receive_npub_proof からの許可エンベロープ、または npub で署名された kind-27235 Nostr イベントの生 JSON(`u` タグがこのツール名になっているもの)。 |
詳細
Good Earth
小規模な特産作物農家や花農家向けの地域限定型気候分析サービスです。 Tollbooth DPYC™ Bitcoin Lightning のマイクロペイメントで収益化しています。
Good Brew ストアの姉妹サービスです。
- 栽培者向け: ウェブアプリは https://goodearth.tollbooth-dpyc.com です
- AI エージェント向け: MCP サーバーは
https://goodearth-mcp.fastmcp.app/mcp(ストリーミング可能な HTTP)です。ウェブアプリが呼び出すツールと同じものを利用します。
AI エージェントを接続する
リモートサーバーの URL を指定できる MCP クライアントなら接続できます。アカウントも API キーも必要ありません。
| クライアント | 方法 |
|---|---|
| Claude.ai / Claude Desktop | Customize → Connectors → Add custom connector → https://goodearth-mcp.fastmcp.app/mcp(OAuth フィールドは空欄のままにしてください) |
| Claude Code | claude mcp add --transport http goodearth https://goodearth-mcp.fastmcp.app/mcp を実行するか、プロジェクトの .mcp.json に次を記述します:{"mcpServers": {"goodearth": {"type": "http", "url": "https://goodearth-mcp.fastmcp.app/mcp"}}} |
| Cursor | .cursor/mcp.json:{"mcpServers": {"goodearth": {"url": "https://goodearth-mcp.fastmcp.app/mcp"}}} |
| VS Code | .vscode/mcp.json:{"servers": {"goodearth": {"type": "http", "url": "https://goodearth-mcp.fastmcp.app/mcp"}}} |
リポジトリのルートにある server.json は、公式の
MCP Registry に
io.github.lonniev/goodearth-mcp として登録するためのエントリです。これは DPYC の他のサービスが登録されている名前空間です。.github/workflows/publish-mcp-registry.yml は、すべての v* タグでこれを公開します。GitHub OIDC でログインし、タグからバージョンを取得するため、保持しておくキーはありません。コミット済みの version が pyproject.toml と一致することをテストで確認します。
初回接続の手順
- 栽培者に Nostr npub を尋ねます。nsec を尋ねてはいけません。
goodearth_request_npub_proof(patron_npub=…)を呼び出して DM を送信します。栽培者は Nostr クライアントから返信します。その後、リクエストで返された nonce を使ってgoodearth_receive_npub_proof(patron_npub=…, nonce=…)を 1 回だけ 呼び出します。以降、接続には npub が保持されるため、有料の呼び出しではnpubだけを渡します。goodearth_check_balanceを呼び出します。goodearth_purchase_credits(栽培者が支払う Lightning インボイス)とgoodearth_check_paymentでチャージします。goodearth_block_listを呼び出します。保存済みの土地、または出発点として使える実例が表示されます。
証明なしで無料で使えるのは、goodearth_service_status と goodearth_oracle_* ツールです。goodearth_check_price では料金を事前に確認できます。コールドスタートで接続するエージェント向けに、サーバー独自の instructions にもこれらの手順がすべて記載されています。
アイデア
農場は一点ではありません。 同じ農地にある畝とくぼ地でも霜が降りる日は異なります。一方、無料の天気計算ツールはどれも、指定した地点の情報しか返しません。
Good Earth が回答するのは、土地についてです。栽培者は goodearth_block_save を使って区画を ブロック として一度保存します。名前とともに、GeoJSON ポリゴンまたは {lat, lon, radius_m} 形式の地点を登録できます。それ以外のすべてのツールでは、ブロックの ID、名前、別名、またはそのブロックだけに一致する名前の一部を指定します。各ツールはブロック内の地形をサンプリングし、集計値に加えて、ブロック内のばらつきも返します。このばらつきこそが、このサービスの価値です。栽培者は、ブロック全体で同じ植え付け日を使えるかどうかを判断できます。
ブロックは重なったり、入れ子になったりしてもかまいません。畑の中のベッドも、それ自体が独立したブロックです。栽培者が育てているもの、注意していること、実際に確認したことは goodearth_block_item_save でブロックごとに記録するため、シーズン関連のツールを使うときにリストを渡す必要はありません。
YOU (operator, human in the loop)
│ │
│ set & tune prices │ drive credential intake
▼ ▼
┌───────────────┐ ┌──────────────────────────────────────────────┐
│ Pricing Studio│ prices │ Good Earth — OPERATOR MCP │
│ (iOS) ├───────▶│ FastMCP · deployed on Horizon │
└───────────────┘ Neon │ ┌────────────────────────────────────────┐ │
│ │ region · sources · gdd · season │ │
Patron (Citizen) │ │ @runtime.paid_tool(FROZEN_UUID) tools │ │
+ MCP client ─────────▶│ ├────────────────────────────────────────┤ │
(Claude, the SPA) npub │ │ tollbooth-dpyc SDK (the wheel) │ │
+sats │ │ ledger · vault (AES-256-GCM) · pricing │ │
│ │ ConstraintGate · Secure Courier·audit │ │
│ └────────────────────────────────────────┘ │
└───┬─────────┬──────────┬───────────┬─────────┘
▼ ▼ ▼ ▼
Neon Postgres BTCPay▶ Sponsor Nostr relays
(your schema) Lightning Authority proofs·courier
ledger+pricing invoices certify + DMs·audit
provision │
Open-Meteo archive ◀── domain │ ▼
forecast · elevation calls └──▶ DPYC Oracle +
dpyc-community
ばらつきが実際にどのように生み出されるか
これは製品全体の基盤となる設計上の決定なので、埋もれさせず明確に述べます。
無料のグリッド化された気温データフィードの解像度は、最良でも約 2 km(アーカイブされた高解像度モデルの実行結果)、ERA5 再解析では 9 km です。同じ農場の 2 つのサンプル地点が同じセルに入り、バイト単位で同一の数値を返すことがあります。それを「地域内のばらつき」として報告するのは、データを装った嘘です。一方、地形の解像度は 90 m であり、農場内で変化するのは地形です。
そのため Good Earth は、グリッド化されたデータフィードから地域の傾向を読み取り、標高から地域内のばらつきを導き出します。
| 影響 | 対象 | 理由 |
|---|---|---|
| 気温減率(1000 フィートあたり 3.57 °F) | 最高気温と最低気温 | 標高が高いほど気温が低い |
| 冷気の流出(上限 6 °F) | 最低気温のみ | 霜が発生する、風が弱く晴れた夜には、密度の高い冷気がくぼ地にたまる |
すべての応答には、使用した各データフィードの本来の解像度が含まれるため、栽培者にデータが持たない精度を売り込むことはありません。
ツール
以下の各ツールは、特記がない限り保存済みの block を受け取ります。
| ツール | 回答する内容 |
|---|---|
| 土地 | |
goodearth_block_save | 区画(ポリゴンまたはピン)を名前と別名を付けて保存します。1 回の呼び出しで複数の畝を保存できます |
goodearth_block_list | 保存済みの区画とその境界を表示します。まだ何も保存されていない場合は、実例を表示します |
goodearth_block_transform | 区画内の畝の配置案を提示します。データは書き込みません |
goodearth_block_item_save、goodearth_block_item_list | 区画で育てているもの、監視対象、見つかったもの、種として保管しているもの |
goodearth_forget_my_ground | すべての区画と、そこに記録されたすべての情報を削除します(無料) |
| 季節 | |
goodearth_gdd_season_curve | 今季これまでの積算温度を過去 10 シーズンと比較します |
goodearth_frost_window | この土地で通常霜が降りる時期と、今週霜が降りそうかどうか |
goodearth_soil_temp_projection | 地温が植え付けの基準温度に達する時期 |
goodearth_planting_window | 種まきを始める時期、苗を植え付ける時期、収穫までに間に合う最終日 |
goodearth_crop_gdd_status | それぞれの植え付けの進み具合と、霜が降りる前に収穫できるかどうか |
goodearth_crop_suitability | この土地で収穫まで育つ作物と、収穫までの余裕 |
goodearth_almanac | この土地の空の記録。平年の状況、実際の状況、これからの見通し |
goodearth_drying_window | 朝露が乾く時刻、これからの晴天日、次の雨 |
goodearth_sunlight | 月ごとの区画内の直射日光の時間数と、太陽光パネルの発電量 |
| 害虫、病気、野生動物 | |
goodearth_pest_catalog、goodearth_pest_threshold | ここでモデル化されている害虫のステージと、積算温度による各ステージの進行状況 |
goodearth_disease_risk | 葉面濡れ時間と、それを踏まえた病害モデルの評価 |
goodearth_nearby_species | この土地の近くで記録されたものを、1 ページずつ表示します |
goodearth_wildlife_catalog、goodearth_wildlife_calendar | この土地の周辺で記録された動物と、その到来時期 |
| 樹木とコンパニオンプランツ | |
goodearth_tree_suitability | この土地で樹木が生育できるか、必要な低温遭遇時間を満たせるかどうか |
goodearth_tree_year | この土地に春が訪れた時期と、樹液の動き |
goodearth_companions | 1 つの植え付けに適したコンパニオンプランツ。引用された科のルール(iNaturalist の分類体系)に基づく相性、または栽培者自身が選んだ花の色、高さ、開花時期に基づくデザイン |
| 計画 | |
goodearth_plan_the_season | ワークフローとして進める、季節計画のための対話(block は不要) |
goodearth_review_roster | この土地の記録に照らして作付けリストを監査します |
goodearth_calibration | 区画独自の現地報告を、モデルの補正値に変換します |
goodearth_task_save、goodearth_task_list、goodearth_task_set_done、goodearth_task_delete | 農場のタスクリスト |
| カレンダーフィード | |
goodearth_calendar_dataset | 区画の日付入り季節データを計算し、カレンダーフィードとして公開できるよう保存します |
goodearth_calendar_fetch、goodearth_calendar_list、goodearth_calendar_revoke | フィードの読み取り、一覧表示、公開停止を行います(無料) |
標準の DPYC ツール(check_balance、purchase_credits、Secure Courier、
Oracle、料金、制約)は register_standard_tools を通じて wheel から提供されます。これらはここでは再実装されていません。
データソース
すべて公開データです。すべて無料で、キーが必要なのは EIA フィードだけです。任意の
eia_api_key を運営者が Secure Courier で受け取り、Sun ページでその地域の 1 kWh の販売価格を
表示できます。
| ソース | 役割 | ネイティブ解像度 |
|---|---|---|
| Open-Meteo のアーカイブ済みモデル実行 | 観測された日ごとの最高/最低気温、進行中のシーズン | 約 2 km |
| Open-Meteo アーカイブ(ERA5) | 日ごとの記録の代替データ、日照用の時間ごとの放射量 | 約 9 km |
| Daymet v4(NASA ORNL) | 平年値用の北米の長期的な日ごとの履歴 | 1 km |
| Open-Meteo 予報 | 7 日間の延長予報 | モデルにより約 2〜11 km |
| Open-Meteo 標高(SRTM) | 地形のダウンスケーリング | 約 90 m |
| Copernicus GLO-30 DEM、Meta/WRI の樹冠高、CGLS の土地被覆 | 日照用の地形、樹木、日陰 | 30 m、1 m、100 m |
| iNaturalist、GBIF、USA National Phenology Network | 近隣で記録された種、Companions 用の科と属、フェノロジー | — |
| EIA の小売電力料金、DOE の太陽光発電コスト基準、Nominatim | 州ごとの 1 kWh の販売価格と 1 kW のコスト | — |
地域全体のシーズン情報の取得に必要な上流リクエストは、サンプル数にかかわらず3 回です。サンプル地点をアーカイブ独自のグリッドに対応させるため、個別のセルは一度だけ取得されます。また、10 シーズン分の平年値の範囲は、10 回に分けて呼び出すのではなく、1 回の範囲指定リクエストで取得し、ローカルで切り分けます。
導入ロードマップ
- Nostr キーペア — 1 つ生成します(
nak key generate)。サーバーに必要な環境変数は 1 つだけです(TOLLBOOTH_NOSTR_OPERATOR_NSEC)。 - Sponsor Authority — 登録すると、Neon データベースがプロビジョニングされます。
- Secure Courier —
goodearth_request_credential_channelを使って、btcpay_host、btcpay_api_key、btcpay_store_id(および任意でeia_api_key)を受け渡します。環境変数やコードには決して保存しないでください。 - Pricing Studio で価格を設定 — 新しいツールには初期価格が設定されていないため、価格未設定のツールは誰も呼び出せません。
- Horizon にデプロイ —
fastmcp.jsonはすでに設定済みです。
Pricing Studio (iOS)を入手してください。 Neon の料金モデルをリアルタイムで読み書きするため、価格をコードに保存する必要はありません。価格の急騰、ハッピーアワー、ロイヤルティ割引、無料トライアルは、固定料金のペイウォールでは決して実現できない仕組みです。
SPA
frontend/ には Good Earth アプリが含まれています(taxsort-mcp のパターンで、1 つのリポジトリに React アプリを含めています)。サインインと Nostr プロフィールパネルには、フリート共通の @tollbooth-dpyc/web パッケージを使用しています。アカウントはありません。栽培者は npub です。
栽培者の区画、その区画に記録された内容、タスク、公開カレンダーフィードは、npub に紐付けて運営者の Neon データベースに保存されます。区画の名前、別名、境界は SDK のボルト暗号化方式で暗号化されます。区画に記録された項目(作物名、種、圃場レポート)は、並べ替えや検索ができるよう、暗号化せずに保存されます。goodearth_forget_my_ground を実行すると、それらすべてが削除されます。栽培者の残高と購入履歴は、パトロンに紐付けたまま保持されます。
開発
uv venv --python python3.12 # coincurve has no 3.14 wheel
uv pip install -e ".[dev]"
ruff check .
pytest -v
python -m goodearth_mcp.server # runs the validate_operator_tools guard
cd frontend && npm install && npm run build
ライセンス
Apache-2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。