cronometer について
cronometerは、対応クライアントからCronometerの栄養データを参照・管理するためのMCPサーバーです。食事記録、栄養素、断食、生体情報、繰り返し食品に対応し、データのエクスポートも行えます。
主な機能
- 01食事記録と栄養素の読み取り
- 02日記項目と繰り返し食品の管理
- 03マクロ目標の参照と設定
- 04断食記録の確認と管理
- 05体重や血糖値などの記録
- 06CSV・JSONのエクスポートとMarkdown同期
活用シーン
- 01期間内の栄養摂取量の集計
- 02クライアント経由で食事日記を編集
- 03断食統計の確認や生体情報の更新
- 04栄養データのローカルファイルへの出力
MCP 対応
MCPクライアントに、Cronometerデータの読み取りや日記、断食、生体情報を管理するツールを提供します。stdioとstreamable HTTPに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx cronometer-mcpCRONOMETER_USERNAMEYour Cronometer account emailCRONOMETER_PASSWORDシークレットYour Cronometer account passwordCRONOMETER_DATA_DIRDirectory for sync output (defaults to ~/.local/share/cronometer-mcp/)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
27掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| end_date | any | いいえ | |
| start_date | any | いいえ |
詳細
cronometer-mcp
Cronometerの栄養データにアクセスできるMCP(Model Context Protocol)サーバーです。Claude、Cursor、その他のMCP対応クライアントから、詳細な食事記録や1日のマクロ・ミクロ栄養素の概要を取得したり、日記の記録、断食、生体データ、繰り返し食品を管理したりできます。
Cronometer Goldアカウントが必要です(または、ウェブログインに対応する有料プラン)。
機能
- 食事記録 — 個々の食品の記録と、マクロ栄養素・微量栄養素の詳細な内訳
- 1日の栄養 — 1日のカロリー、タンパク質、炭水化物、脂質、食物繊維の合計
- 微量栄養素 — 期間平均を含む、ビタミン・ミネラルの詳細な内訳
- 日記の管理 — 食品の記録の追加・削除、1日分のコピー、日の完了マーク
- 繰り返し食品 — 選択した曜日に自動記録される繰り返し項目の作成、一覧表示、削除
- マクロ目標 — 1日の目標の読み取り・書き込み、テンプレートの作成、週間スケジュールの設定
- 断食 — 履歴や統計の表示、断食のキャンセル・削除
- 生体データ — 体重、血糖値、心拍数、体脂肪の記録・削除
- 未加工のCSVエクスポート — 食事量、1日の概要、運動、生体データ、メモをエクスポート
- ディスクへの同期 — JSONエクスポートのダウンロードと、食事記録のMarkdown生成
クイックスタート
1. インストール
pip install cronometer-mcp
ソースからインストールする場合:
git clone https://github.com/cphoskins/cronometer-mcp.git
cd cronometer-mcp
pip install -e .
2. 認証情報を設定
export CRONOMETER_USERNAME="[email protected]"
export CRONOMETER_PASSWORD="your-password"
または、プロジェクトのルートにある.envファイルに追加します(MCPクライアントが対応している場合)。
3. MCPクライアントを設定
Claude Code(.mcp.json)
{
"mcpServers": {
"cronometer": {
"command": "cronometer-mcp",
"env": {
"CRONOMETER_USERNAME": "[email protected]",
"CRONOMETER_PASSWORD": "your-password"
}
}
}
}
Claude Desktop(claude_desktop_config.json)
{
"mcpServers": {
"cronometer": {
"command": "cronometer-mcp",
"env": {
"CRONOMETER_USERNAME": "[email protected]",
"CRONOMETER_PASSWORD": "your-password"
}
}
}
}
pip install -e .でソースからインストールした場合は、Pythonのフルパスも使用できます。
{
"command": "/path/to/venv/bin/python",
"args": ["-m", "cronometer_mcp.server"]
}
読み取り専用モード
サーバーのenvにCRONOMETER_READ_ONLY=1(trueまたはyesも可)を設定すると、読み取りツールのみが公開されます。Cronometerアカウントを変更する13個のツールは登録されないため、クライアントからは見えません。対象には、食品の記録の追加・削除、マクロ目標、スケジュールとテンプレート、断食、生体データ、1日分のコピー、日の完了マーク、繰り返し項目が含まれます。sync_cronometerは引き続き利用できます。このツールが書き込むのは、マシン上のファイルのみです。
この設定で制限されるのはサーバーが提供する機能であり、認証情報で可能な操作ではありません。Cronometerには読み取り専用ログインがないため、env内のパスワードは引き続きアカウントへのフルアクセス権を持ちます。
リモートアクセス(streamable HTTP)
デフォルトでは、サーバーは stdio 経由でクライアントと通信します。別のマシンやコンテナーで実行するには、CRONOMETER_TRANSPORT=streamable-http を設定します。すると、MCP エンドポイントが http://<host>:<port>/mcp で提供されます。
| 変数 | デフォルト | 意味 |
|---|---|---|
CRONOMETER_TRANSPORT | stdio | stdio または streamable-http |
CRONOMETER_HOST | 127.0.0.1 | バインドするインターフェースです。コンテナー内では 0.0.0.0 を使用してください。 |
CRONOMETER_PORT | 8000 | TCP ポート。1~65535 の範囲です。 |
CRONOMETER_ALLOWED_HOSTS | 未設定 | クライアントが使用できる Host ヘッダーの値を、host:port または host:* の形式でカンマ区切りで指定します。バインド先がループバックでない場合は、必ず設定してください。 |
Docker で公開済みのパッケージを使用し、ネットワーク上で your-server としてアクセスできる場合:
docker run --rm -p 8000:8000 \
-e [email protected] \
-e CRONOMETER_PASSWORD=your-password \
-e CRONOMETER_TRANSPORT=streamable-http \
-e CRONOMETER_HOST=0.0.0.0 \
-e CRONOMETER_ALLOWED_HOSTS=your-server:8000 \
python:3.12-slim sh -c "pip install -q cronometer-mcp && cronometer-mcp"
CRONOMETER_ALLOWED_HOSTS は重要です。MCP SDK は、ループバックにバインドされている場合に限り、Host ヘッダーと Origin ヘッダーを独自にチェックします。それ以外のアドレスにバインドすると、すべての Host を受け入れるため、同じネットワーク上でたまたま開いたウェブページから、DNS リバインディングを通じてサーバーにアクセスできてしまいます。許可リストを設定すると、Host または Origin が許可リストに含まれないリクエストは 421 または 403 で拒否されます。設定しない場合、サーバーは起動時に警告をログに記録し、そのまま実行されます。
次に、クライアントで URL を指定します。Claude Code(.mcp.json):
{
"mcpServers": {
"cronometer": {
"type": "http",
"url": "http://your-server:8000/mcp"
}
}
}
エンドポイントには認証がありません。ポートにアクセスできる人は誰でも、サーバーが認証情報を保持している Cronometer アカウントを閲覧・変更できます。127.0.0.1 にバインドするか、自分だけがアクセスできるネットワーク(VPN や Tailscale を使えば第三者はアクセスできませんが、上記の DNS リバインディングのケースは防げないため、許可リストも設定してください)に配置するか、認証機能を備えたリバースプロキシの背後に置いてください。CRONOMETER_READ_ONLY=1 を追加すると、リモートクライアントが実行できる操作を制限できますが、上記と同じ注意点があります。認証情報自体は引き続き完全なアクセス権を持ちます。
利用可能なツール
食事ログと栄養
| ツール | 説明 |
|---|---|
get_food_log | 指定した日付範囲の個々の食品記録とマクロ栄養素・微量栄養素 |
get_daily_nutrition | 1 日ごとのマクロ栄養素の合計(カロリー、タンパク質、炭水化物、脂質、食物繊維) |
get_micronutrients | 期間平均を含む、ビタミン・ミネラルの詳細な内訳 |
export_raw_csv | 任意のデータ種別(摂取量、運動、生体情報など)の未加工 CSV エクスポート |
食品の検索と食事記録の管理
| ツール | 説明 |
|---|---|
search_foods | Cronometer の食品データベースを検索 |
list_diary_groups | このアカウントの食事記録グループと、diary_group に指定できる値を一覧表示 |
get_food_details | 食品の完全な栄養情報と、1 食分の計量単位 ID を取得 |
add_food_entry | 食品記録を食事記録に追加 |
remove_food_entry | 食品記録を食事記録から削除 |
copy_day | ある日付のすべての食事記録を別の日付にコピー |
set_day_complete | 食事記録の日を完了または未完了に設定 |
繰り返し食品(リピート項目)
| ツール | 説明 |
|---|---|
get_repeated_items | すべての繰り返し食品記録を一覧表示 |
add_repeat_item | 選択した曜日に自動で記録される、繰り返し食品記録を追加 |
delete_repeat_item | 繰り返し食品記録を削除 |
マクロ栄養素の目標とテンプレート
| ツール | 説明 |
|---|---|
get_macro_targets | 1 日ごとのマクロ栄養素の目標を取得(または target_date="all" で週全体のスケジュールを取得) |
set_macro_targets | 1 日ごとのマクロ栄養素の目標を更新(一部のみの更新にも対応) |
list_macro_templates | 保存済みのマクロ栄養素目標テンプレートをすべて一覧表示 |
create_macro_template | 新しいマクロ栄養素目標テンプレートを作成して保存 |
set_weekly_macro_schedule | 曜日ごとにテンプレートを割り当て、繰り返し適用するデフォルトとして設定 |
断食
| ツール | 説明 |
|---|---|
get_fasting_history | すべての断食、または指定した日付範囲内の断食を表示 |
get_fasting_stats | 断食の統計情報を集計(合計時間、最長時間、平均時間) |
cancel_active_fast | 進行中の断食を取り消し、繰り返しスケジュールは保持 |
delete_fast | 断食記録を削除 |
生体情報
| ツール | 説明 |
|---|---|
get_recent_biometrics | 最近記録された生体情報を取得します |
add_biometric | 体重(lbs)、血糖値(mg/dL)、心拍数(bpm)、または体脂肪率(%)を記録します |
remove_biometric | 生体情報の記録を削除します |
同期
| ツール | 説明 |
|---|---|
sync_cronometer | JSON エクスポートをダウンロードし、food-log.md をディスクに生成します |
ツールのパラメーター
すべての日付パラメーターは YYYY-MM-DD 形式です。日付を省略した場合、ほとんどのツールでは今日または過去 7 日間がデフォルトになります。
主なパラメーターの形式:
diary_group— 日記グループの名前(大文字と小文字を区別しません)、または0 始まりのインデックスです。 Cronometer Gold では、すべてのアカウントに 8 個の日記グループ枠が用意されており、自由に名前を変更したり有効化したりできます。そのため、グループ名はアカウントごとに異なり、常に「朝食/昼食/夕食/軽食」とは限りません。自分のグループを確認するには、list_diary_groupsを呼び出してください。初期状態のアカウントでは、標準の 4 つの食事はインデックス1~4です(インデックス0は、最初から無効になっている枠です)。不明な名前、無効なグループ、範囲外のインデックスは、暗黙的にデフォルトへ置き換えられるのではなく拒否されます。Cronometer 自体は誤ったインデックスを警告なしで受け入れるため、登録した項目にアクセスできなくなります。days_of_week—"all"、"weekdays"、"weekends"、またはカンマ区切りの曜日番号(0=日曜日、6=土曜日)measure_id— 共通のグラム単位の計量を使用するには0を渡します(すべての食品ソースで機能します)target_date— 週全体のスケジュールを取得するには、get_macro_targetsに"all"を渡します
同期の出力
sync_cronometer ツールは、デフォルトでファイルを ~/.local/share/cronometer-mcp/ に保存します。CRONOMETER_DATA_DIR 環境変数で保存先を変更できます。
export CRONOMETER_DATA_DIR="/path/to/your/project/data/cronometer"
出力ファイル:
exports/servings_{start}_{end}.jsonexports/daily_summary_{start}_{end}.jsonexports/servings_latest.jsonexports/daily_summary_latest.jsonfood-log.md
仕組み
Cronometer には個人ユーザー向けのパブリック API がありません。このサーバーは、Cronometer のウェブアプリが内部で使用しているものと同じ GWT-RPC(Google Web Toolkit Remote Procedure Call)プロトコルを使用します。
- ログインページを取得し、CSRF 対策トークンを取得します
- 認証のために認証情報を POST します
- GWT-RPC の
authenticateを呼び出し、ユーザー ID を取得します - GWT-RPC の
generateAuthorizationTokenを呼び出し、有効期間の短いエクスポート用トークンを取得します - トークンを使用して CSV エクスポートをダウンロードします
- 日記の編集、断食、生体情報、マクロ栄養素の目標、繰り返し項目について、GWT-RPC メソッドを直接呼び出します
セッション Cookie は ~/.local/share/cronometer-mcp/.session_cookies に保存されるため、以降の実行では再認証せずにセッションを再利用できます(Cronometer ではログインのレート制限が厳しく設定されています)。
GWT のマジック値
GWT プロトコルでは、Cronometer のウェブアプリをデプロイするたびに組み込まれる順列ハッシュとヘッダー値を使用します。これらの値はクライアントにハードコードされており、Cronometer が新しいビルドを公開すると動作しなくなる可能性があります。
2026 年 2 月現在の値:
- 順列:
7B121DC5483BF272B1BC1916DA9FA963 - ヘッダー:
2D6A926E3729946302DC68073CB0D550
GWT エラーで認証に失敗し始めた場合、これらの値を更新する必要がある可能性があります。現在の値は、次の手順で確認できます。
- ブラウザーで Cronometer を開きます
- 開発者ツール → ネットワークタブを開きます
cronometer.com/cronometer/appへのリクエストを探しますx-gwt-permutationヘッダーとペイロードの構造を確認します
CronometerClient コンストラクターを使って、これらの値を上書きできます。
from cronometer_mcp import CronometerClient
client = CronometerClient(
gwt_permutation="NEW_PERMUTATION_HASH",
gwt_header="NEW_HEADER_VALUE",
)
Python API
Python からクライアントを直接使用することもできます。
from datetime import date, timedelta
from cronometer_mcp import CronometerClient
client = CronometerClient() # reads from env vars
# Get today's food log
foods = client.get_food_log()
# Get last 7 days of daily summaries
start = date.today() - timedelta(days=7)
summaries = client.get_daily_summary(start)
# Raw CSV export
csv_text = client.export_raw("exercises", start, date.today())
# Copy a day's diary entries
client.copy_day(date(2026, 3, 1), date(2026, 3, 8))
# Add a recurring food entry (every weekday)
client.add_repeat_item(
food_source_id=12345,
measure_id=0, # universal gram-based measure
quantity=200,
food_name="Oatmeal",
diary_group=1, # 0-based wire index; 1 == Breakfast on a default account
days_of_week=[1, 2, 3, 4, 5],
)
# Diary groups are user-configured - check what this account actually has
for g in client.diary_groups:
print(g["wire_index"], g["name"], g["enabled"])
# Log a biometric
client.add_biometric("weight", 218.5, date.today())
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。