Cronometer MCP server
Cronometer MCP server
Claude.ai と Claude Code から Cronometer の食事記録を読み書きします。これは Cronometer Android アプリが使用するのと同じ API mobile.cronometer.com と通信し、その前に OAuth 2.1 ログインを配置するため、Claude.ai にカスタムコネクタとして追加できます。Claude Code は代わりにプレーンなトークンを使用できます。Gold サブスクリプションは不要で、CSV エクスポートのように 1 日 10 件のエクスポート制限もありません。
他の選択肢ではだめな理由
Terra API は Cronometer のデータを webhook に送信しますが、読み取り専用であり、食事ログは他人のサーバーを経由します。
gocronometerや同様のエクスポートツールは読み取り専用で、レート制限があります。Cronometer のウェブサイトをスクレイピングするツールは書き込みができますが、Cronometer がアップデートをリリースするたびに変わるコードに依存しており、Gold が必要です。
Related MCP server: cronometer-api-mcp
ツール
読み取り
ツール | 取得内容 |
| 1 日分の食事記録のすべて。各食品には、名前、出典、分量、摂取回数、およびその食品が栄養素に追加した量が含まれます。また、カロリー(目標、摂取済み、残り)と、追跡しているすべての栄養素の合計も取得できます。 |
| 1 日分の栄養素の合計 |
| Cronometer の栄養スコア |
| 食品データベースを検索 |
| 1 つの食品の完全な栄養素と分量 |
| 毎日の合計の横に表示される栄養素の目標 |
| タンパク質、炭水化物、脂質の目標 |
| 測定できる項目と、各項目が受け付ける単位 |
| 時系列での 1 つの測定値 |
| 2 つの日付の間の断食 |
| 断食の合計と平均 |
| カスタム食品に設定できるすべての栄養素とその単位 |
書き込み
ツール | 機能 |
| 食事に食品を追加 |
| 摂取量または摂取日時を変更 |
| 食品エントリを削除 |
| 最大 94 種類すべての栄養素を含む独自の食品を作成 |
| カスタム食品を廃止する、または復活させる |
| 日にノートを書く |
| ノートを書き直す |
| 体重や体脂肪などの測定値を記録 |
| 間違った測定値を修正 |
| エクササイズを追加 |
| エクササイズの時間や消費カロリーを変更 |
| 完了した断食または進行中の断食を記録 |
| 断食の時間や目標を変更(進行中の断食を終了する場合も含む) |
| 断食を削除 |
| ある日の食事記録を別の日にコピー |
| 日を完了にする、または完了しない |
カスタム食品
add_custom_food は栄養素名から量への dict を受け取るため、1 つの栄養素からカタログ全体までを 1 回の呼び出しで指定できます:
{
"name": "Vaasan Ruispalat",
"serving_name": "1 slice",
"serving_grams": 33,
"nutrients": {
"energy": 79, "protein": 3.1, "carbs": 12.5, "fiber": 3.4,
"fat": 0.8, "saturated": 0.2, "salt_g": 0.36,
"iron": 0.9, "magnesium": 26, "b1_thiamine": 0.09, "folate": 11
}
}量は 1 回分全体に対するもので、それぞれがその栄養素独自の単位です。受け付けられる名前は、ここに組み込まれたテーブルではなく、アカウント自身のカタログから取得されるため、list_nutrients を呼び出してください。
省略した栄養素は Cronometer では空白のままになります。代わりに 0 を渡すと、その食品にはその栄養素が含まれていないことを示し、アプリはこの 2 つを区別して扱うため、実際に分かっているものだけを渡してください。認識されない名前は黙って無視されるのではなくエラーになります。なぜなら、栄養素が静かに失われた食品でも完全に見えるからです。
食品ラベルにはあるがカタログにはない 2 つの便利な機能があります。energy_kj はカロリーに変換され、salt_g はナトリウムに変換されます。両方ではなく、どちらか一方を渡してください。
仕組み
サーバー自体には独自のログインはなく、ローカルマシン以外ではリッスンしません。そのため、サーバーに到達するものはすべて、すでにログインを通過しています。そのログインは、Claude.ai が設定する OAuth トークンか、Claude Code にとってより迅速な固定トークンのいずれかを受け入れます。
Claude.ai / Claude Code
| HTTPS
Cloudflare Tunnel, or any proxy that gives you HTTPS
|
nginx 127.0.0.1:8431
|
auth-server.js :8432 handles the login and the tokens
|
cronometer-mcp :8430 the server itself, local only
|
mobile.cronometer.comインストール
インストーラーは Python と Node をセットアップし、Cronometer のログイン情報とコネクタのログインページのパスワードを尋ね、トークンを作成し、サービスファイルと nginx サイトを自分のホスト名とユーザー名で埋めて書き込みます。
git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
./install.shNode 18 以降、Python 3.12 以降、および uv が必要です。
サーバーをオンラインにすることはあなたに委ねられています。なぜなら、ここがセットアップが最も異なる部分であり、ここで間違った推測をすると、食事記録が公開インターネットにさらされることになるからです。トンネルまたはプロキシを 127.0.0.1:8431 に向けてください。Cloudflare Tunnel の場合:
ingress:
- hostname: cronometer-mcp.example.com
service: http://localhost:8431HTTPS である必要があります。OAuth は平文 HTTP では機能しません。
手動でのセルフホスティング
インストーラーを実行するよりもすべての手順を確認したい場合は、これがすべてです。最終状態は、HTTPS 経由で到達可能な自分のマシン上の 2 つのサービスです。
1. コードとその依存関係を取得
git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
npm install --omit=dev
uv venv && uv pip install -e .2. Cronometer のログイン情報を保存
./set-credentials.shメールアドレス、パスワード、タイムゾーンを尋ね、それらをモード 0600 で ~/.config/cronometer-mcp/env に書き込みます。パスワードはエコーバックされず、シェル履歴にも残りません。必要に応じて手動で行うこともできます:
mkdir -p ~/.config/cronometer-mcp && chmod 700 ~/.config/cronometer-mcp
cat > ~/.config/cronometer-mcp/env <<'EOF'
CRONOMETER_USERNAME=you@example.com
CRONOMETER_PASSWORD=your-password
CRONOMETER_ACCOUNT_TZ=Europe/Helsinki
EOF
chmod 600 ~/.config/cronometer-mcp/env先に進む前に動作を確認してください。これはログインして食事記録を表示します:
set -a && . ~/.config/cronometer-mcp/env && set +a
.venv/bin/python -c "from cronometer_mcp import CronometerClient; c=CronometerClient(); print(c.get_diary()['summary'])"3. コネクタのパスワードとトークンを設定
パスワードは、Claude.ai でコネクタを追加するときにサインインページで入力するものです。保存されるのは scrypt ハッシュのみです。
CONFIG_DIR=~/.config/cronometer-mcp node set-password.js 'your-password-here'トークンは Claude Code 用のショートカットで、ヘッダーを送信してブラウザーを完全にスキップします。
openssl rand -hex 32 > ~/.config/cronometer-mcp/token
chmod 600 ~/.config/cronometer-mcp/token4. 2 つのサービスをインストール
systemd/ には両方のユニットファイルが含まれています。YOUR_USER を自分のユーザー名に、cronometer-mcp.example.com を自分のホスト名に置き換えてから:
mkdir -p ~/.cache/cronometer-mcp
sudo cp systemd/cronometer-mcp.service systemd/cronometer-mcp-auth.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now cronometer-mcp cronometer-mcp-auth
systemctl status cronometer-mcp cronometer-mcp-authcronometer-mcp は :8430 で実行されるサーバー自体で、実行中のマシンからのみ到達可能です。cronometer-mcp-auth は :8432 のログインレイヤーであり、:8430 と通信するのはこれだけです。
症状が紛らわしいため、名前を挙げる価値がある落とし穴が 1 つあります。cronometer-mcp.service に IPAddressDeny=any を追加しないでください。これはローカルファイルのみを読み取るサーバーにとっては賢明な強化策ですが、このサーバーは mobile.cronometer.com に到達する必要があり、これを設定すると、systemd がサービスをアクティブと報告している間も、すべてのツール呼び出しがタイムアウトするまでハングします。また、サーバーはすでにローカルマシン以外でのリッスンを拒否しているため、これによって得られるものもありません。
5. nginx を前面に配置
sudo cp nginx/cronometer-mcp.conf /etc/nginx/sites-enabled/cronometer-mcp
sudo nginx -t && sudo systemctl reload nginxこれは 127.0.0.1:8431 でリッスンし、すべてをログインレイヤーに渡します。長い読み取りタイムアウトと proxy_buffering off が重要です。MCP は接続を開いたままにして送信するため、バッファリングがあると停止するからです。
6. HTTPS アドレスを割り当てる
Cloudflare Tunnel を使用すると、ルーターのポートを開く必要がありません。どの HTTPS リバースプロキシでも同様に機能します。
ingress:
- hostname: cronometer-mcp.example.com
service: http://localhost:8431cloudflared tunnel route dns YOUR_TUNNEL cronometer-mcp.example.com
sudo systemctl restart cloudflared7. 外部から確認
curl https://cronometer-mcp.example.com/.well-known/oauth-authorization-server
curl -o /dev/null -w '%{http_code}\n' -X POST https://cronometer-mcp.example.com/mcp最初のコマンドはログイン詳細を返します。2 番目のコマンドは 401 を返す必要があります。それ以外はログインレイヤーがバイパスされて食事記録が公開されていることを意味します。
次に、接続 で説明されているようにクライアントを接続します。
更新
git pull
uv pip install -e . && npm install --omit=dev
sudo systemctl restart cronometer-mcp cronometer-mcp-authツールを追加または名前変更した後、Claude.ai のコネクタで再接続を押してください。これにより、すでに開いている会話内のツールリストが更新されます。トークンはメモリ内ではなくディスク上の oauth.db に保存されるため、サインインは維持されます。
問題が発生した場合
journalctl -u cronometer-mcp -n 50 --no-pager
journalctl -u cronometer-mcp-auth -n 50 --no-pager表示内容 | 通常の原因 |
ツール呼び出しがハングし、サービスはアクティブと表示 | MCPユニット上の |
Claude Code からのすべての呼び出しで | トークンの不一致。ヘッダーを |
サインインページがパスワードを拒否 | ハッシュがまだ保存されていません。手順3を実行 |
2FAコードを求められてログインが失敗 | 2要素認証を使用する場合 を参照 |
nginx からの | ログインレイヤーが停止しています。 |
接続
Claude.ai。 設定、コネクタ、カスタムコネクタの追加の順に移動し、https://your-host/mcp を指定します。クライアントIDとシークレットは空のままにします。インストーラーが設定したパスワードでサインインします。これを一度行うと、ウェブ、デスクトップ、モバイルのすべてで有効です。コネクタは1つのデバイスではなくアカウントに属しているためです。
Claude Code(ブラウザ経由):
claude mcp add --transport http cronometer https://your-host/mcp --scope user次に /mcp を実行してサインインします。
Claude Code(トークン使用、ブラウザなし):
claude mcp add --transport http cronometer https://your-host/mcp \
--header "Authorization: Bearer $(cat ~/.config/cronometer-mcp/token)" \
--scope userサーバーを使わずに利用する
Claude が同じマシンで動作している場合は、ウェブサーバーとログインを完全にスキップして、Claude に MCP を直接起動させてください:
claude mcp add cronometer -- /path/to/cronometer-mcp/.venv/bin/cronometer-mcpログイン情報は ~/.config/cronometer-mcp/env または .env ファイルから読み取られます。
設定
変数 | 説明 |
| あなたのCronometerメール |
| あなたのCronometerパスワード |
| 日記の日付が計上されるタイムゾーン |
| 2要素認証のシークレット。2要素認証を有効にしている場合のみ。 |
| サーバーの公開アドレス |
| ログインサーバーのポート。デフォルトは8432 |
| MCPサーバーの場所。デフォルトは |
| パスワード、トークン、データベースが保存される場所 |
| 呼び出しが無音のまま切断されるまでの時間。デフォルトは120000 |
| MCPサーバーのポート。デフォルトは8430 |
| 公開アドレス。クライアントにアイコンを通知するために使用 |
機密情報はすべて ~/.config/cronometer-mcp/ に保存され、あなただけが読み取れます:env はCronometerのログイン情報、password-hash はコネクタのログインページ用パスワード、token は固定トークン、oauth.db はログインサーバーが発行したアプリとトークンを保持します。トークンはスクランブルされて保存されるため、データベースを盗まれても誰も有効なキーを取得できません。
Cronometerのセッションは ~/.cache/cronometer-mcp/session.json に保存されるため、サーバーを再起動しても何度もログインし直してCronometerの制限に達することはありません。
2要素認証を使用する場合
サーバーを単独で稼働させたままにするとコードを入力できないため、コードの代わりにその背後にあるシークレットが必要です:
uv pip install -e '.[totp]'次に、CRONOMETER_TOTP_SECRET を認証アプリのシークレットに設定します。これがないと、2要素認証が有効なアカウントはログインに失敗し、その旨が正確に表示されます。
コードの開発
uv venv && uv pip install -e . && uv pip install pytest ruff
.venv/bin/python -m pytest tests -q
.venv/bin/python -m ruff check src/ tests/クレジット
Cronometerクライアントは、rwestergren/cronometer-api-mcp のコピーとして始まりました。ログインレイヤーは rollecode/obsidian-remote-mcp に由来します。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables AI assistants to read and write MyFitnessPal data, including food diary, exercises, body measurements, nutrition goals, and water intake.MIT
- AlicenseAqualityBmaintenanceEnables nutrition tracking with Cronometer, including food logging, food search, diary management, and nutrition data retrieval via natural language.13MIT
- Alicense-qualityAmaintenanceConnect MyFitnessPal to Claude or any MCP client. Log meals, search food database with macros, track trends, and export nutrition history against your real MyFitnessPal diary.6MIT
- Alicense-qualityCmaintenanceEnables Claude.ai to read your MacroFactor nutrition data and log food back into MacroFactor.MIT
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rollecode/cronometer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server