when-free について
when-freeは、会議調整向けのローカル空き時間ツールです。カレンダーフィードやICSファイルを読み取り、指定日時の空き枠を示し、貼り付けたメッセージからの日時抽出にも対応します。
主な機能
- 01Google、Outlook、iCloudの予定表を読み取り
- 02複数の予定表を統合
- 03メッセージから日付と時間帯を抽出
- 04時間の長さとタイムゾーンで枠を絞り込み
- 05CLI、MCP、HTTPで利用
活用シーン
- 01会議依頼への返信に空き時間を提示
- 02仕事用と個人用予定表を横断して候補を検索
- 03スクリプト向けに空き時間をJSONで出力
- 04別のタイムゾーンで空き時間を確認
MCP 対応
MCPサーバーは、設定済みカレンダーを使って空き時間と読み取り状況を返す`free_slots`および`check_calendars`をクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx when-freeWHENFREE_CALENDARSシークレットPrivate iCal addresses of your calendars, comma-separated. Optional if you saved them with `whenfree add`.WHENFREE_TZTime zone for answers, like Europe/London. Default: the computer's.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | string | いいえ | 期間の最終日、YYYY-MM-DD。 |
| days | string | いいえ | 特定の日付をカンマ区切りで指定します。ISO 日付が最も確実です:"2026-10-05, 2026-10-06"。次の形式も認識されます:"Thu 1 Oct, Fri 2 Oct"、"tomorrow"、"next week"。 |
| from | string | いいえ | 期間の初日、YYYY-MM-DD。デフォルト:今日。 |
| hours | string | いいえ | 提示する時間帯。形式は HH:MM-HH:MM(例:"10:00-16:00")、または "morning"、"afternoon"、"evening"。デフォルト:ユーザーが設定した時間帯。 |
| message | string | いいえ | 候補日の日時を読み取るテキスト(例:空き時間を尋ねるメール)。明示的な日付を読み取り、ない場合は今日を基準とした表現("tomorrow"、"Thursday"、"next Tuesday"、"next week"、"any afternoon")を読み取ります。 |
| timezone | string | いいえ | 回答に使用するタイムゾーン(例:"Europe/London")。デフォルト:ユーザーのタイムゾーン。 |
| weekends | boolean | いいえ | 期間に土曜日と日曜日を含めます。デフォルト:false。 |
| min_minutes | integer | いいえ | 返す時間枠の最短時間(分)。会議の長さに設定します。デフォルト:ユーザーの設定(通常は 60)。 |
| all_day_busy | boolean | いいえ | 終日イベントを予定ありとして扱います。デフォルト:false。 |
| include_busy | boolean | いいえ | 各日の予定をふさいでいるイベントとタイトルも返します。タイトルはプライベート情報です。ユーザーが表示を希望する場合にのみ尋ねてください。デフォルト:false。 |
| buffer_minutes | integer | いいえ | 各イベントの前後に確保する時間。デフォルト:ユーザーの設定(通常は 15)。 |
詳細
when-free
空いている時間を聞かれたときに、カレンダーを読み取って、すぐに貼り付けられる回答を返します。

- メッセージを貼り付けると、空き時間がわかります。「来週の火曜日か水曜日、午前10時から午後4時」と読み取り、その日時だけを対象に回答します。
- Google、Outlook、iCloud のカレンダー、または任意の
.icsファイルで使えます。複数のカレンダーを同時に利用できます。 - **プライベートです。**コンピューター上で動作し、アカウントや API キーは不要で、カレンダーを変更することもありません。
- **AI ツールからも使えます。**Claude、Cursor、その他の MCP クライアント、Open WebUI、n8n、Shortcuts、スクリプトに対応しています。
- **ほかのデバイスでも使えます。**スマートフォン、タブレット、スマートウォッチ、Home Assistant(Alexa、Google Home、Siri からも利用できます)、macOS、Linux、Windows のメニューバーやステータスバーに対応しています。
目次
1 分で試す · カレンダーを追加する · 日常的な使い方 · メッセージを読み取る · ほかのツールから使う · ほかのデバイス · プライバシー · 設定 · 予定ありと見なされる条件 · 制限 · 問題が発生した場合 · 掲載先
1 分で試す
uv があれば、事前のインストールは不要です。
uvx when-free demo
インストールして使い続ける場合(Python 3.11 以降が必要です):
uv tool install when-free # or: pipx install when-free
whenfree demo
Claude Desktop をお使いですか?以下をすべて省略できます。ワンクリック拡張機能をインストールしてください。
whenfree demo は来週の架空のカレンダーを作成し、それを使って採用担当者のメッセージに回答します。データは一切読み取らず、何も保存しません。
> Hi! Thanks for applying. Could you share a few times on Tuesday, Wednesday or Thursday next week,
> between 10am and 4pm? The interview takes about an hour.
Free between 10:00 and 16:00 (Europe/London), slots of 60+ minutes, 15-minute buffer around events:
- Tue 13 Oct: 11:45–12:45, 14:15–16:00
- Wed 14 Oct: 12:15–14:15
- Thu 15 Oct: 13:15–14:45
カレンダーを追加する
-
カレンダーの非公開アドレスをコピーします。
.icsで終わるリンクです。カレンダー 確認場所 Google Calendar 設定 → 左側でカレンダーをクリック → カレンダーの統合 → iCal 形式の非公開アドレス Outlook 設定 → カレンダー → 共有カレンダー → カレンダーを公開 → ICS リンク iCloud カレンダー → カレンダーの横にある共有アイコン → 公開カレンダー( webcal://リンクでも問題ありません)その他 任意の .icsリンク、またはエクスポートした.icsファイル -
whenfree addを実行して貼り付けます。 貼り付け中にアドレスは表示されません。まず確認が行われ、使える場合にのみ保存されます。$ whenfree add Paste the address and press Enter (it is not shown): Added 'personal': 412 events, 9 block time in the next 14 days. Saved in /Users/you/.config/when-free/config.toml, readable only by you. Now run: whenfree -
whenfreeを実行します。 直近の営業日の空き時間が表示されます。
Mac では、pbpaste | whenfree add を実行すると、クリップボードからアドレスを直接渡せます。
アドレスは秘密にしてください。 パスワードのようなもので、持っている人は誰でもそのカレンダーを読めます。
whenfree add以外には渡さないでください。チャットやシェルコマンド、リポジトリに渡さないようにしてください。漏えいした場合は、カレンダーの設定でリセットしてください。
Google Calendar の手順
スマートフォンアプリにはアドレスが表示されないため、ブラウザーで操作してください。
- Google Calendar の設定を開きます。歯車アイコンをクリックし、設定を選択します。
- 左側の列のマイカレンダーの設定で、追加したいカレンダーをクリックします。自分の名前が付いたカレンダーには、招待が届きます。
- 下にスクロールしてカレンダーの統合を開き、iCal 形式の非公開アドレスをコピーします。末尾は
basic.icsです。カレンダーを公開している場合にしか使えない「iCal 形式の公開アドレス」は使用しないでください。 whenfree addを実行し、求められたらアドレスを貼り付けます。
「非公開アドレス」が見つかりませんか?職場や学校のアカウントでは、この設定が無効になっている場合があります。その場合は、カレンダーをエクスポートします(設定 → インポートとエクスポート → エクスポート)。ファイルを解凍し、whenfree add ~/calendars/work.ics を実行します。エクスポートはその時点のスナップショットなので、カレンダーを変更したら再度エクスポートしてください。
複数のカレンダー
追加したすべてのカレンダーで空いている場合にのみ、その時間帯は空きとして扱われます。
whenfree add --name work # a second calendar: asks for its address
whenfree add ~/calendars/family.ics # an exported file instead of an address
whenfree check # can every calendar be read?
カレンダーは ~/.config/when-free/config.toml に保存されます。各カレンダーには name と url または path を含む [[calendar]] ブロックが設定されます。このファイルは手動で編集できます。whenfree init を実行すると、空のファイルが作成されます。
日常的な使い方
| やりたいこと | 実行するコマンド |
|---|---|
| 直近の営業日の空き時間を確認する | whenfree |
| メッセージで尋ねられた日時を確認する | pbpaste | whenfree --message -(Mac のクリップボード)または whenfree --message invite.txt |
| 来週の午後を確認する | whenfree --days "next week" --hours afternoon |
| 特定の日を確認する | whenfree --days "Thu 15 Oct, Fri 16 Oct" |
| 日付の範囲を指定する | whenfree --from 2026-10-12 --to 2026-10-16 |
| 90 分の会議が入る長さの時間帯だけを確認する | whenfree --min 90 |
| 各日の予定を確認する | whenfree --busy |
| 別のタイムゾーンで結果を確認する | whenfree --tz America/New_York |
| スクリプト用の JSON を出力する | whenfree --format json |
| 結果をコピーする | whenfree ... | pbcopy(時間帯の行だけがコピーされます) |
標準出力に出力されるのは時間帯の行だけです。補足情報は標準エラー出力に送られるため、| pbcopy を使うと、返信に貼り付ける内容だけをコピーできます。
メッセージを読み取る
--message は通常のテキストから曜日と時間を見つけます。次のような表現を理解します。
- さまざまな一般的な書き方の日付:
Thu 1 Oct·Thursday the 1st of October·Monday, October 5th·5 October·2026-10-05·Wednesday 30th - 時間:
between 10:00am and 4:00pm·10:00–16:00·9-5pm·2 to 4 pm - 日付がない場合の語句(今日が10月1日木曜日の場合):
| 書かれた表現 | 読み取られる内容 |
|---|---|
today · tomorrow · the day after tomorrow | 10月1日(木) · 2日(金) · 3日(土) |
Thursday or Friday | これから来る日(今日を含む):10月1日(木)、2日(金) |
this Tuesday · next Tuesday | 今週の火曜日(すでに過ぎているため除外して明記) · 来週の火曜日、10月6日(火) |
next week · this week · the week after next | その週の稼働日。今日以降 |
Tuesday or Wednesday next week | 10月6日(火)、7日(水) |
any afternoon · Friday morning · evening | 12:00~17:00 · 09:00~12:00 · 17:00~20:00。ただし、時間が指定されている場合を除く |
日付をどう読み取ったかは必ず表示されるので、メッセージと照らし合わせて確認できます。推測を避けるため、いくつかのルールがあります。
- 明示された日付が優先されます。「Wednesday 30th, Thursday 1st」の上に「Next week:」という見出しがあっても、丸々1週間追加されることはありません。
- 「Good morning」は挨拶であり、時刻ではありません。
- すでに過ぎた曜日は除外され、必ず明記されます。「Wednesday 30th」は、最も近い30日の水曜日を意味するため、先週のメッセージなら先週の日付として読み取られます。
- 日付のない語句は今日を基準にします。「tomorrow」と書かれた古いメッセージの場合は、
--daysを使って日付を自分で指定してください。
when-free がメールボックスに接続することはありません。メッセージを貼り付けるか、パイプで渡すか、ファイルに保存してください。
独自の言語モデルにメッセージを読み取らせる
自分でモデルを実行している場合は、代わりにそのモデルに読み取らせることができます。設定ファイルに次の内容を追加してください。
[extract]
command = ["ollama", "run", "llama3.2"] # the prompt is sent on standard input
# command = ["my-cli", "ask", "{prompt}"] # or placed where {prompt} is
コマンドはメッセージを受け取り、JSON を出力する必要があります:{"days": ["2026-10-05"], "hours": "10:00-16:00", "minutes": 60}。失敗した場合は、代わりにパターンマッチングが使われます。設定しない限り実行されず、1回の実行でスキップするには --no-extract を指定します。メッセージはそのコマンドの接続先に送信されるため、プライベートなテキストにはローカルモデルを使用してください。
他のツールから使う
どの方法でも同じ結果が得られ、読み取り専用で、明示的に指定しない限りイベントのタイトルは含まれません。
| ツール | 使用方法 | セットアップ |
|---|---|---|
| Claude Desktop | ワンクリック拡張機能 | ダブルクリック |
| Claude Code(使うタイミングを把握するスキル付き) | プラグイン | 2つのコマンド |
| Claude Code、Cursor、VS Code、任意の MCP クライアント | MCP サーバー | 1行 |
| Raycast、メッセージの右クリック(macOS) | レシピ | 数分 |
| Open WebUI、n8n、Shortcuts、Raycast、URL を呼び出すものなら何でも | ローカル HTTP サーバー | whenfree serve |
| 関数呼び出しを使う独自のエージェント | スキーマと呼び出し | 2つのコマンド |
| Python | ライブラリ | import whenfree |
Claude Code プラグイン
このプラグインには MCP サーバーと、Claude に使うタイミングを指示するスキルが含まれています。空き状況について尋ねたとき、いつ会えるかを尋ねるメッセージを貼り付けたとき、または時間を提案する前に使用します。
/plugin marketplace add YauhenBichel/when-free
/plugin install when-free@when-free
次に、まだ追加していない場合は、カレンダーを一度追加してください:uvx when-free add。
MCP:Claude、Cursor などのアシスタント
claude mcp add when-free -- uvx when-free mcp # Claude Code
Cursor やその他の MCP クライアントでは、サーバーリストにこれを追加します。初回は uvx が when-free を取得するため、インストールは不要です。
{
"mcpServers": {
"when-free": { "command": "uvx", "args": ["when-free", "mcp"] }
}
}
uv tool install でインストールした場合は、代わりに "command": "whenfree", "args": ["mcp"] を使用してください。MCP レジストリでは io.github.YauhenBichel/when-free として、mcprushおよびM8ven Trust Indexにも掲載されています。
あとは、*「採用担当者からのメッセージです。この時間帯のうち、どれなら空いていますか?」*と尋ねるだけです。アシスタントは free_slots を呼び出し、実際のカレンダーに基づいて回答します。
| ツール | 機能 |
|---|---|
free_slots | 日ごとの空き時間です。days、または from と to、または message に加えて、hours、min_minutes、buffer_minutes、timezone、weekends、all_day_busy、include_busy を指定します |
check_calendars | 各カレンダーを読み取れるかどうかと、イベント数を確認します。詳細や住所は含まれません |
ツールが処理を完了できない場合、アシスタントは推測せず、読み取れるエラー(「カレンダー 'work' を読み取れませんでした」)を受け取ります。
HTTP:Open WebUI、n8n、Shortcuts、スクリプト
whenfree serve # http://127.0.0.1:8765, only reachable from this computer
curl -H "Authorization: Bearer $(cat ~/.config/when-free/token)" \
'http://127.0.0.1:8765/free_slots?days=next%20week&hours=afternoon'
- JSON ボディを指定して
POST /free_slotsを送信するか、クエリ文字列を指定してGETを送信します。/check_calendarsも同様です。 - 応答は
{"ok": true, "text": "...", "data": {...}}または、ステータスコード 400 の{"ok": false, "error": "..."}です。 /openapi.jsonに OpenAPI の説明があります。Open WebUI、n8n、Shortcuts の設定については、レシピを参照してください。- トークンは初回実行時に作成され、
~/.config/when-free/tokenに保存されます。このファイルを読み取れるのはあなただけです。または、WHENFREE_TOKENで独自のトークンを設定できます。すべてのツール呼び出しにトークンが必要です。 - このコンピューター以外のホスト宛てのリクエストは拒否されます。Web ページから呼び出せるのは、許可したオリジンからのみです:
whenfree serve --allow-origin http://localhost:3000。--host 0.0.0.0を指定するとネットワークからアクセスできるようになります。トークンだけで保護されるため、信頼できるネットワークでのみ使用してください。
関数呼び出しハーネス
whenfree schema # the tool definitions: name, description, inputSchema
whenfree schema --format openai # the same, as {"type": "function", "function": {...}}
whenfree call free_slots --args '{"days": "next week", "hours": "10:00-16:00"}'
whenfree call は {"ok": true, "text": "...", "data": {...}} または、終了コード 1 の {"ok": false, "error": "..."} を出力します。引数は標準入力から渡すこともできます。
Python
from whenfree import api
result = api.find_free(api.Query(days="next week", hours="10:00-16:00", min_minutes=45))
for day in result["days"]:
print(day["label"], day["free"]) # for example: Mon 12 Oct [['10:00', '11:45'], ['13:15', '16:00']]
find_free は、json.dumps ですぐに使える通常の辞書とリストを返し、安全に表示できるメッセージを含む api.Problem を送出します。カレンダーのテキストを取得する代わりに自分で渡すには、reader= を指定します。
ほかのデバイスで使う
| デバイス | まず実行するコマンド | ガイド |
|---|---|---|
| iPhone、iPad、Android、時計 | whenfree serve --lan を実行してから、whenfree devices add "My phone" を実行し、QR コードをスキャンします | スマートフォンとタブレット |
| Home Assistant、Alexa、Google Home、Siri、空き状況ライト | whenfree mqtt --broker mqtt://homeassistant.local | スマートホームと音声操作 |
| macOS メニューバー、Waybar、i3blocks、Polybar、GNOME、Windows トレイ | whenfree now --format xbar(または waybar、i3blocks、…) | デスクトップステータスバー |
$ whenfree now
Busy until 15:30 · next free 15:45–17:00
デバイスに表示されるのは、空いているかどうかと空き時間だけで、イベントのタイトルは表示されません。各スマートフォンには個別のトークンがあり、取り消すことができます。読み取れないカレンダーは「不明」と表示され、「空き」とは表示されません。
プライバシー
- コンピューター上で動作します。 カレンダーフィードを取得するだけで、それ以外の情報は取得しません。カレンダーへの書き込みやメッセージの送信は一切行いません。
- カレンダーのアドレスは秘密のままです。 表示されることはなく、貼り付けている間も画面に表示されません。また、あなたしか読み取れないファイルに保存されます。エラーにはカレンダーのアドレスではなく、カレンダー名(「personal」など)が表示されます。
- アシスタントに表示されるのは空き時間であり、予定ではありません。 アシスタントが
include_busyを指定して要求しない限り、予定のタイトルは含まれません。また、そのオプションの説明では、タイトルが非公開であることをモデルに伝えます。予定の追加、変更、削除ができるツールはありません。また、カレンダーのアドレスを受け取るツールもありません。アドレスは、あなたからwhenfree addにのみ渡されます。
設定
カレンダー以外はすべて任意です。設定は ~/.config/when-free/config.toml に保存され、コマンドラインフラグはファイルの設定より優先されます。
| 設定 | デフォルト | フラグ | 意味 |
|---|---|---|---|
timezone | システムのタイムゾーン | --tz | 回答に使用するタイムゾーン。例:Europe/London |
hours | 09:00-18:00 | --hours | 空き時間として提示する時間帯。morning、afternoon、evening も指定できます |
min_minutes | 60 | --min | 提示する時間枠の最短時間 |
buffer_minutes | 15 | --buffer | 各予定の前後に確保する空き時間 |
weekends | false | --weekends | 日付範囲に土曜日と日曜日を含めます |
all_day_busy | false | --all-day-busy | 終日予定がある日は、1日を通して予定ありとして扱います |
days_ahead | 7 | 日付を指定しない場合に表示する、今後の営業日数 | |
me | [] | 辞退した招待が予定ありとして扱われないようにするための、あなたのメールアドレス | |
[[calendar]] | --calendar | name と url または path。カレンダーごとに1つのブロックを指定します。whenfree add がこれらを書き込みます | |
[extract] command | なし | --no-extract | あなた自身のモデルでメッセージを読み取るコマンド |
環境変数
スクリプト、コンテナー、MCP クライアントの設定で使用します。すべて任意です。
| 変数 | 意味 |
|---|---|
WHENFREE_CALENDARS | カンマ区切りのカレンダーアドレスまたはパス。ファイル内のリストを置き換えます。機密情報:下記を参照 |
WHENFREE_CONFIG | 設定ファイルのパス |
XDG_CONFIG_HOME | WHENFREE_CONFIG が設定されていない場合に、設定ファイルを探す場所:$XDG_CONFIG_HOME/when-free/config.toml。設定されていない場合は ~/.config/when-free/config.toml |
WHENFREE_TZ | 回答に使用するタイムゾーン。ファイル内の timezone より優先されます |
TZ | 上記のいずれでもタイムゾーンが指定されていない場合に使用する、システムのタイムゾーン |
WHENFREE_TOKEN | トークンファイルの代わりに使用する、whenfree serve 用のトークン。機密情報 |
WHENFREE_NOW | 実行を再現できるようにするための、「現在」として使用する ISO 形式の日付と時刻 |
WHENFREE_CALENDARS にはパスワードが含まれます。 非公開カレンダーのアドレスを知っている人は、誰でもそのカレンダーを閲覧できます。この変数は API キーと同様に扱ってください。共有シェルプロファイル、コミットする MCP 設定、CI ログ、スクリーンショットには含めないでください。whenfree add が書き込む設定ファイルはあなたしか読み取れないため、可能な場合はこちらを使用してください。
予定ありとして扱われるもの
| カレンダー内の項目 | 時間をブロックしますか? |
|---|---|
| 通常の予定 | はい。前後の空き時間もブロックします |
| 空きとマークされた予定 | いいえ |
| キャンセルされた予定 | いいえ |
辞退した招待(me にあなたのアドレスが含まれている場合) | いいえ |
| 終日予定 | いいえ。ただし、all_day_busy = true の場合は、空きとマークされていない限り、はい |
| 繰り返しの予定 | 各回が対象です。スキップされた日付は除外され、移動された予定は移動先の日付で扱われます |
空き時間を差し引いた後の時間枠が min_minutes より短い場合、その時間枠は提示されません。今日については、過去の時刻ではなく、次の15分単位の時刻から開始します。
制限事項
- 読み取り専用です。予約はしません。 カレンダーへの書き込みやメッセージの送信は行いません。
- フィードの更新状況に依存します。 Google がシークレットアドレスを更新するまでには時間がかかるため、1 分前に追加された予定が表示されない場合があります。
whenfree --busyを実行すると、読み取った内容を確認できます。 - すべてのカレンダーを読み取れる場合のみ表示します。 1 つでも読み取れないカレンダーがあると、予定のない時間に見えてしまうため、空き時間枠は表示されません。
- 繰り返しの予定。 日次、週次、月次(日付指定、または「第 1 月曜日」「最終金曜日」)および年次のルールは、間隔、終了日、回数、スキップした日付、変更された回を含めて展開します。まれなルール(
BYSETPOS、週番号)には対応していません。その場合は最初の日付を予定ありとして扱い、その旨を注記します。 - タイムゾーン は予定から取得します。タイムゾーンデータベースが認識しないタイムゾーン名(Outlook のエクスポートの一部など)は、お使いのタイムゾーンで読み取ります。
動作しない場合
| 表示される内容 | 対処方法 |
|---|---|
No calendar is configured | whenfree add を実行してください。手動でファイルを編集した場合は、url 行が空のままか、ファイルが保存されていません。メッセージにファイル名が表示されます |
could not read the calendar 'personal' (...) | アドレスが不完全か、シークレットアドレスではありません。判別できる場合は、メッセージにその旨が表示されます。コピー ボタンでもう一度コピーしてください |
returned a web page, not a calendar または did not return iCalendar data | そのリンクはカレンダーフィードではありません。.ics で終わる必要があります |
Nothing was saved | whenfree add がカレンダーを読み取れなかったため、変更は保存されていません。アドレスを修正して、もう一度実行してください |
| Google の設定に「シークレットアドレス」がない | 組織によって無効にされています。代わりにカレンダーをエクスポートしてください。Google Calendar の手順をご覧ください |
| 追加したばかりの予定が表示されない | フィードの更新には時間がかかります。制限事項をご覧ください |
| 会議が予定ありとして扱われない | whenfree --busy を実行すると、読み取った内容を確認できます。辞退した招待、「空き時間」としてマークされた予定、終日の予定は予定ありとして扱われません。予定ありとして扱われる条件をご覧ください |
whenfree check | すべてのカレンダーがいつでも読み取れるかどうかを示します |
掲載先
- 公式の MCP registry(
io.github.YauhenBichel/when-freeとして掲載) - PyPI(
when-freeとして掲載) - MCP サーバーをインデックス化している Glama、MCP Servers Live、MCP Changefeed
どこかで利用したり、紹介記事を書いたりした場合は、Issue を作成してください。ここに掲載します。
開発
uv run --with pytest pytest -q # a few seconds; no network
テストでは、tests/data/sample.ics の小規模なカレンダーと固定クロック(WHENFREE_NOW)を使用します。コードはコンポーネントごとにまとめられています。
| コンポーネント | 内容 | 使用可能なもの |
|---|---|---|
core/ | ical、slots、status、render、errors:予定、予定の入っている時間、空き時間枠、現在の状況、文面。入力も出力もありません | なし |
messages/ | dates、extract:メッセージから読み取った日付と時刻 | core |
settings/ | config:設定ファイルと環境変数 | なし |
calendars/ | sources:アドレスから取得したカレンダー、またはファイルから読み込んだカレンダー | core、settings |
api.py | find_free、status、check_calendars:すべてのフロントエンドの唯一のエントリーポイント | 上記の4つ |
agents/ | tools、mcp:AI エージェントに提供するツールと MCP サーバー | api、core |
web/ | server:ツールとスマートフォン向けの HTTP フロントエンド | api、agents、devices、calendars、core、settings |
devices/ | widgets、pairing、feed、qr、mobile/:ステータスバー、スマートフォンとのペアリング、カレンダーフィード、スマートフォン用ページ | api、core、settings |
smarthome/ | mqtt、homeassistant:Home Assistant のディスカバリー機能を使った MQTT の公開 | api、core |
cli/ | main、demo:whenfree コマンド | すべて |
tests/test_structure.py は、使用が許可されていないコンポーネントを別のコンポーネントがインポートすると失敗するため、ドメイン層をフロントエンドから独立させています。
CONTRIBUTING.md を参照してください。
ライセンス
Apache-2.0。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。