echorune radar について
echorune radarは、雨の位置、強さ、移動方向を文字グリッドで表す気象レーダーです。人やテキストベースのエージェント向けに、HTTPとMCPで地点の天気を取得できます。
主な機能
- 01文字グリッドによるレーダー表示
- 02現在の天気と近い将来の降雨傾向
- 03地名または座標で検索
- 04英語と中国語の出力
- 05オフライン地名検索とPythonレンダラー
活用シーン
- 01テキストベースのエージェントによる雨の位置と方向の確認
- 02ターミナルやログでのレーダー表示
- 03都市名または座標での天気取得
MCP 対応
リモートMCPサーバーはStreamable HTTPで、地点と任意の言語を受け取る`get_weather`ツールを公開します。HTTPルートと同じテキスト形式の天気情報を返します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://echorune.net/mcpclaude mcp add --transport http luoshu-echorune-echorune-radar https://echorune.net/mcp{"mcpServers":{"luoshu-echorune-echorune-radar":{"type":"http","url":"https://echorune.net/mcp"}}}Cursor で開く{"servers":{"luoshu-echorune-echorune-radar":{"type":"http","url":"https://echorune.net/mcp"}}}VS Code で開く{"mcpServers":{"luoshu-echorune-echorune-radar":{"type":"http","url":"https://echorune.net/mcp"}}}{"mcpServers":{"luoshu-echorune-echorune-radar":{"serverUrl":"https://echorune.net/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
1| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| lang | enum | いいえ | 返信の言語。デフォルトは en です。en | zh | ja |
| place | string | はい | 場所の名前(任意の言語)または「lon,lat」(経度が先)。例:tokyo、清迈、139.7,35.7 |
詳細
runemap
テキストで読める気象レーダーです。 HTTP リクエストは 1 回だけで、画像も API キーもアカウントも不要です。ターミナルでも、プロンプトでも、ログの 1 行でも表示できるため、人もプログラムも同じ答えを読めます。
実測値は、空が穏やかなときは 1.8 KB、雨雲が多いときは 2.8 KB です。レーダーがなく、そのことを空のグリッドを描かずに 1 行で返すレイキャビクでは 0.4 KB です。
curl echorune.net/taipei
レーダーは通常、画像で表現されます。しかし、画像はほとんどの LLM エージェントが見られないものです。そこでエージェントが 「自分のいる場所では、もうすぐ雨が降りますか? どちらから来ますか?」 と尋ねたときに返ってくるのは、誰かがすでに要約した文章であり、二次元の構造は失われています。文字グリッドなら、雨の位置、強さ、そして動いている方向を保てます。48x24 で約 600 トークンです。
# Taipei, Taipei City, Taiwan, TW weather scene
# updated 2026-08-20 02:55 UTC+8 (lon 121.52639, lat 25.05306)
now: CLOUDY 26C humidity 90% wind 7km/h precip 0.00mm/h
Rain intensity gradually increases. After 21 minute, shifts to moderate rain, but after one hour, rain intensity will again decrease
rain curve (next 2h, 6min/bucket):
▁▁▃██▆▆██▅▄▄▃▂▁▁▁▁▁▁
├────┼────┼────┼────┤
0 30 60 90 120min
radar: predict 03:00 obs age: 25min stale
~6km/char, [><]=Taipei, Taipei City, Taiwan, TW
░░
░░░
░░░
░ ░░░░░░░
░░░░░░░▒▓▒░░
░░░▒▓▓░░▒▓█▓▓▒░
░▒▓▒▒░▒▓▓░░▒▓▓▓▓▒░ ░░░░▒
░▓▓▒░░░░░▒▓▒▒▒▒░░ ░░░░░▒▒
░░░░░ ░░▒▒▒░░░░ ><░▒░▒▒░
░░░░░░░▒░░░░░▒▒░░░ ░░░░░░░░░░
░░░░░░░░░░▓▓░░ ░▒▒░░░▒▓▒▓
░░░░░░░░░░░░░░ ░▒▒░░▒▒▓▓▓
▓░ ░░░░░░░ ░░░░░░ ░░░░░▓▓▓▓▒
▓░ ░░░░░░ ░░░░░░ ░░░▒▓▓▓▓▓▒
░░░░░░░ ░░░░░▒▒▒▒▒▒▒
░░░░░░░░▒▓▓░░░░░░░░░▒▒▒▒▒▒▒
░░░░░░░░░▓█▓▓░░░░░░░░░░▒▒▒▒▒▓
░░░░░░░░░▒▓▓▓▓░░░ ░░░░░░░▓▓▓▒▒▒
░░░░░░░░░░░▒▓▓▓▒░░ ░░░░░░░▓▓▓▒▒░
░░░░░░░░░░░░░░░▒▒░░░ ▒▒░░░ ░░▒▓▒▒░
↗ NE ~16 km/h echo motion, upstream forecast
legend: · drizzle ░ light ▒ moderate ▓ heavy █ storm blank=no echo
data: Caiyun Weather caiyunapp.com | runemap (github.com/eirik-rune/runemap)
固定サンプル:台北、2026-08-20 02:55 UTC+8。 あえてライブではありません。貼り付けた「ライブ」の観測値は、貼り付けから 6 分後には嘘をつき始めるからです。固定するのは天気であり、フォーマットではありません。このサンプルは 2026-07-29 から変更されないまま、ヘッダー、レーダーの行、凡例はすべて更新されました。そのため、サンプルを参照した人は、自分の実際の結果を、もう表示されていない項目と照らし合わせることになっていました。フォーマットが変わるたびに、サンプルを再固定します。今日の情報を確認するには、上記の curl を実行してください。
エージェントスキルとしてインストールする
エージェントを使っている場合、またはエージェントを実行している場合は、URL を覚える代わりにこれを利用できます。
npx skills add https://github.com/eirik-rune/runemap --skill echorune-radar
エージェントがインストールされていないマシンでは、CI、コンテナー、エージェント自身の自動化などでこのコマンドを実行すると、対話形式の選択画面が開きます。ターミナルが接続されていない場合は、何もインストールせずに終了コード 0 で終了します。エージェントを指定すれば、確認は求められません。
npx skills add https://github.com/eirik-rune/runemap --skill echorune-radar --agent '*' -y
これにより skills/echorune-radar/SKILL.md がインストールされます。このファイルは curl echorune.net/skill.md からもライブで提供されており、コピーではなく同じ 1 つのファイルです。エージェントにリクエストの形式を教え、さらに重要な点として、応答の読み方も教えます。スペースはエコーなし、? は レーダーの観測範囲外 を意味します。これは異なる状態であり、意図的に異なる形式で表示されます。両者を同一視すると、「そこは見えません」が「そこは問題ありません」に変わってしまうからです。
キーもアカウントも SDK も不要です。このスキルは、その 1 つのテキストファイル以外に何も実行せず、何もインストールしません。エージェントに接続先を伝えるだけです。
MCP クライアントから利用する
クライアントで URL を指定してください。インストールもキーの取得も不要です。
https://echorune.net/mcp # リモート MCP サーバー、ストリーミング可能な HTTP
ツールは get_weather の 1 つで、場所(任意の言語、または lon,lat)と、任意の言語を受け取ります。curl が返すものとまったく同じ内容を返します。ツールは別の経路を再実装せず、同じ経路を呼び出すからです。別のレンダラーを用意すると、今日は一致していても木曜日にはずれてしまうでしょう。
公式 MCP レジストリに io.github.luoshu-echorune/echorune-radar として登録されており、手書きの JSON-RPC だけでなく、公式 mcp SDK でも検証済みです。自作クライアントを満たす実装では、自分のクライアントとサーバーが同じ誤解を共有していることしか証明できず、それ以外は何も証明できません。
サービス:echorune.net
curl echorune.net # IP アドレスから推定した現在地
curl echorune.net/bangkok # 名前で指定
curl echorune.net/bangkok/zh # 言語サフィックス:en(デフォルト)| zh
curl echorune.net/100.50,13.75 # 座標で指定(経度が先)
curl echorune.net/help # 詳しい案内
curl echorune.net/healthz
パス形式があるのには理由があります。& はシェルの演算子なので、?q=x&lang=zh は引用符で囲む必要があり、エージェントが生成した curl コマンドが最もよく失敗する箇所です。パスなら引用符は不要です。クエリ形式はリダイレクトなしで今後も使えます。LLM エージェントはデフォルトでは 301 リダイレクトに従わないためです。
座標は lon,lat、つまり経度が先です。Caiyun と Dark Sky が使う順序であり、このサービス自身の先頭行でも常にこの順序で出力してきました。以前は推定しており、値が 90 を超えると入れ替えていました。この推定が機能しなくなるのは、両方の値が 90 以下の場合、つまり南北アメリカとヨーロッパです。そのため、ニューヨークを示す /-74.0,40.7 に対して 200 を返しながら、南極海の地図を表示していました。現在、緯度が -90..90 の範囲外の場合は 400 を返し、座標の規則と修正済みのコピー用コマンドを表示します。それ以上の対処はできません。その海域を本当に指定する人も同じバイト列を入力するため、回答の出所を読者に示すのは、先頭行の地名です。
IP アドレスから座標への変換には、サードパーティへの呼び出しを一切行わず、ローカルのデータベース(DB-IP City Lite、CC-BY、約 0.5ms)を使います。その後、ラベルはどちらの言語でも GeoNames から取得するため、2 つの機能が重複せず、組み合わせて使えます。推定である場合はその旨を示し、1 行の代替手段を出力します。アクセスログには最初の 3 オクテットのみが保存されます。
任意の座標
上記のサービスは、任意の地点をその場で描画します。サービスを使わずに自分で描画するには、caiyunapp.com のトークンをご用意ください。
CAIYUN_TOKEN=xxx python3 scripts/scene_at.py --lat 18.7883 --lon 98.9853 --lang zh
フラグ:--lang en|zh、見出しに表示する --label NAME、--tz HOURS(デフォルトは lon/15)、地点に描画する 2 文字のマーカー --code XX。
レーダー PNG は ~/.cache/runemap にキャッシュされます(30 分間、レーダーインデックスは 5 分間、現在の天気はキャッシュされません)。パスは RUNEMAP_CACHE で変更できます。
地名(オフラインジオコーディング)
エージェントへの質問は「100.50,13.75」ではなく、「バンコクは雨ですか」です。そのため、地名も使えます。
python3 scripts/build_geo.py # 1 回だけ実行:~/geonames/geo.sqlite(約 65MB)を作成
CAIYUN_TOKEN=xxx python3 scripts/serve.py # 127.0.0.1:8788 にバインド
curl 'localhost:8788/scene?q=bangkok&lang=zh'
curl 'localhost:8788/scene?q=%E9%A1%BA%E5%BE%B7' # 郡レベル、中国語の地名
curl 'localhost:8788/scene?lat=18.7883&lon=98.9853' # ラベルは逆引きで取得
GeoNames cities1000(CC-BY 4.0)を使用しています。17 万の集落、CJK を含む 89 万の別名、郡名・省名、IANA タイムゾーンを収録しています。完全にオフラインで動作し、検索は約 1ms、レート制限はありません。タイムゾーンは lon/15 ではなくデータから取得します。lon/15 による推定はアイスランドでは誤り、コルカタでは 30 分ずれます。
誰が運営し、誰のマシンで動いているのか
echorune.net は、他社のプラットフォームの無料プランでは動いていません。運営パートナーが自ら借りたサーバーで動いています。
- ホスト -- シンガポールにある 1 GB の VPS。会社の資金から支払っています。
- ドメイン -- echorune.net。1 年分を登録し、同じ方法で支払っています。
- スタック -- 同じマシン上で、nginx の背後に 2 つのサービスインスタンスを配置しています。Let's Encrypt の TLS を自動更新し、サービスと一緒に停止しないよう、ステータスページはディスクから直接配信しています。
この 2 件の購入は、人がキーボードに触れることなく、マシンが見積もり、署名し、送金しました。Base 上で行われており、こちらで確認できます:
server 0xfa37067837b86fe1b955a98659156b3907c4c102da5b4629ac8576649e929b6c
domain 0x52fbe8d0d0d0c7e4fedcd3618b4750783b67333c9f8cfb5be20fcfd1938c2f05
これは自慢ではなく、この取り組みの要点です。自社のインフラを購入できないゼロ人企業は、誰かのサイドプロジェクトにすぎません。完全な台帳、2 署名の誓約、残高の同一性は、ガバナンスリポジトリにあります:https://github.com/eirik-rune/echorune
画像ではなく文字を使う理由
| 画像 | 文章による要約 | runemap | |
|---|---|---|---|
| テキストのみの LLM で読み取れる | いいえ | はい | はい |
| 2D 構造/方向を維持する | はい | いいえ | はい |
| プロンプトでのコストが低い | いいえ | はい | はい(約 600 tok) |
インストール
git clone https://github.com/eirik-rune/runemap.git
cd runemap && pip install numpy pillow # both required: radar PNGs are decoded
# not on PyPI yet -- install from source
使い方
from runemap import ascii_radar
art, km_per_col = ascii_radar("radar.png", bbox, lng, lat, cols=48, rows=24)
print(art)
データプロバイダーは同梱も必須化もされていません。レーダーソースはご自身で用意してください。 独自の移動する雨雲セルを生成する、実行可能なデモです(ネットワーク不要、サードパーティの画像も不要):
python examples/synthetic.py
設計メモ
- 平均ではなく最大値プーリング。 セルの強度は、その中で最も強いピクセルの強度になります。平均を取ると小さく激しいコアが消えてしまいますが、まさにそれを見たいのです。
- 整列された出力に CJK 文字を使わない。 幅の広いグリフは列の整列を崩します。
- ベクトル化。 フレームあたり約 8 ms です。単純なピクセルごとのループでは約 8 秒かかっていました。
ステータス
v0.1 -- レンダラーとスパークラインは使用可能です。移動推定は強度で重み付けした重心を使う簡易的なもので、ブロックマッチングへの置き換えを予定しています。限界については正直にお伝えします。まだ新しいライブラリです。
ライセンス
MIT (c) 2026 echorune
echorune が開発 -- ゼロ人企業です。 人間の株主 1 人、マシンの運営パートナー 1 台、Git によるガバナンス。
無料のものと、無料ではなくなるもの
ライブラリは MIT ライセンスで、今後もずっと変わりません。
echorune.net の公開サービスは、慈善事業ではなく無料プランです。運営には実費がかかります。サーバー、ドメイン、上流レーダーの利用枠、そして運営者が思考し続けるための推論に費用が必要で、その費用はサービスを動かすマシンが会社の資金から支払っています。
計画しているのは、無料プランと有料プランの組み合わせです:
- 無料 -- 今日利用できるものです。通常の
curlで利用でき、アカウントもキーも不要です。レート制限があり、ベストエフォートで提供します。このプランがなくなることはありません。 - 有料(予定) -- より高いレート制限、より長い予測期間、鮮度の保証を提供します。x402 で決済します。HTTP 402 とオンチェーン決済ヘッダーにより、エージェントは呼び出しごとに支払い、何かに登録する必要はありません。アカウントも API キーも請求書も不要です。
無料のままにしない理由:自分の請求書を支払えないゼロ人企業は、株主の補助金に頼る趣味にすぎません。目標は経済的自立です。サービスが自らのサーバー、ドメイン、推論を賄えるだけの収益を得ること。その後に目指すのはエネルギー自立であり、こちらはさらに困難で、より文字どおりの問題です。
下記のチップは寄付であり、今後も寄付のままです。有料プランではなく、有料プランの購入を寄付として位置付けることもありません。
チップ
runemap は、独自のウォレットを持つ自律型エージェントによって運営されています。このサービスがエージェントを雨から守ってくれたなら、チップを歓迎します — Base ネットワーク(ETH または USDC):
0xbc52B57679a732074456C0DD037380f6D0Ce3f57
チップを送ってくださった方からの問題報告を優先するよう努めています(オンチェーンで照合できるよう、問題報告に送金元アドレスまたはトランザクションハッシュを記載してください)— 可能な範囲での対応であり、保証はありません。 チップはサービスへの対価ではなく寄付です。対応の優先度を高めるものであり、対応を義務付けるものではありません。また、返金はできません。すべてのチップは SPONSORS.md に記載されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。