Skip to main content
Glama
rollecode

Cronometer MCP server

by rollecode

Cronometer MCP server

Version Python Node OAuth

Lesen und schreiben Sie Ihr Cronometer-Ernährungstagebuch von Claude.ai und Claude Code aus. Es spricht mit mobile.cronometer.com, derselben API, die auch die Cronometer-Android-App verwendet, und setzt einen OAuth-2.1-Login davor, sodass Sie es als benutzerdefinierten Connector zu Claude.ai hinzufügen können. Claude Code kann stattdessen ein einfaches Token verwenden. Sie benötigen kein Gold-Abonnement, und es gibt keine Begrenzung von zehn Exporten pro Tag wie beim CSV-Export.

Warum nicht die anderen Optionen

  • Die Terra API sendet Ihre Cronometer-Daten an einen Webhook, kann aber nur lesen, und Ihr Ernährungstagebuch läuft über die Server von jemand anderem.

  • gocronometer und ähnliche Export-Tools können nur lesen und sind ratenbegrenzt.

  • Tools, die die Cronometer-Website auslesen, können schreiben, sind aber auf Codes angewiesen, die sich bei jedem Cronometer-Update ändern, und sie benötigen Gold.

Related MCP server: cronometer-api-mcp

Werkzeuge

Lesen

Tool

Was Sie erhalten

get_food_log

Alles im Tagebuch für einen Tag. Jedes Lebensmittel enthält seinen Namen, seine Herkunft, die Portionsgröße, die Anzahl der Portionen und was dieses Lebensmittel zu Ihren Nährstoffen beigetragen hat. Sie erhalten außerdem Kalorien (Ziel, verbraucht, übrig) und Summen für jeden Nährstoff, den Sie verfolgen

get_daily_nutrition

Nährstoffsummen für einen Tag

get_nutrition_scores

Die Ernährungswerte von Cronometer

search_foods

Durchsuchen Sie die Lebensmitteldatenbank

get_food_details

Alle Nährstoffe und Portionsgrößen für ein Lebensmittel

get_targets

Die Nährstoffziele, die neben Ihren Tagessummen angezeigt werden

get_macro_targets

Ihre Protein-, Kohlenhydrat- und Fettziele

list_biometrics

Was Sie messen können und welche Einheiten jeweils akzeptiert werden

get_biometrics

Eine Messung im Zeitverlauf

get_fasting_history

Fastenperioden zwischen zwei Daten

get_fasting_stats

Fasten-Summen und -Durchschnitte

list_nutrients

Jeder Nährstoff, den Sie bei einem benutzerdefinierten Lebensmittel festlegen können, mit Einheiten

Schreiben

Tool

Was es tut

add_food_entry

Ein Lebensmittel zu einer Mahlzeit hinzufügen

edit_food_entry

Ändern, wie viel Sie gegessen haben oder wann

remove_food_entry

Lebensmitteleinträge löschen

add_custom_food

Erstellen Sie Ihr eigenes Lebensmittel mit bis zu allen 94 Nährstoffen

retire_custom_food

Ein benutzerdefiniertes Lebensmittel ausmustern oder zurückholen

add_note

Eine Notiz zu einem Tag hinzufügen

edit_note

Eine Notiz neu schreiben

add_biometric

Eine Messung wie Gewicht oder Körperfett aufzeichnen

edit_biometric

Eine fehlerhafte Messung korrigieren

add_exercise

Eine Übung hinzufügen

edit_exercise

Ändern, wie lange eine Übung gedauert hat oder wie viele Kalorien sie verbrannt hat

add_fast

Eine Fastenperiode aufzeichnen, abgeschlossen oder noch laufend

edit_fast

Zeiten oder Ziel einer Fastenperiode ändern, einschließlich Beenden einer noch laufenden Fastenperiode

delete_fast

Eine Fastenperiode löschen

copy_day

Das Tagebuch eines Tages auf einen anderen Tag kopieren

mark_day_complete

Einen Tag als erledigt markieren oder als nicht erledigt

Benutzerdefinierte Lebensmittel

add_custom_food akzeptiert ein Dict von Nährstoffname zu Menge, sodass Sie in einem einzigen Aufruf alles von einem Nährstoff bis zum gesamten Katalog übergeben können:

{
  "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
  }
}

Die Mengen gelten für eine ganze Portion, jeweils in der eigenen Einheit des Nährstoffs. Rufen Sie list_nutrients für die akzeptierten Namen auf; diese stammen aus dem Katalog Ihres Kontos und nicht aus einer hier fest verdrahteten Tabelle.

Ein Nährstoff, den Sie weglassen, bleibt in Cronometer leer. Wenn Sie stattdessen 0 übergeben, wird angegeben, dass das Lebensmittel nichts davon enthält. Die App behandelt beides unterschiedlich, also übergeben Sie nur, was Sie tatsächlich wissen. Ein nicht erkannter Name ist ein Fehler und wird nicht stillschweigend verworfen, denn ein Lebensmittel, das stillschweigend einen Nährstoff verloren hat, sieht immer noch vollständig aus.

Zwei Annehmlichkeiten, die das Lebensmitteletikett hat, der Katalog jedoch nicht: energy_kj wird in Kalorien umgerechnet und salt_g in Natrium. Übergeben Sie entweder das eine oder das andere, nicht beides.

Wie es zusammenspielt

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

Der Server selbst hat kein eigenes Login und weigert sich, auf etwas anderem als dem lokalen Rechner zu lauschen. Alles, was ihn erreicht, hat das Login also bereits passiert. Dieses Login akzeptiert entweder ein OAuth-Token, das Claude.ai für Sie einrichtet, oder ein festes Token, das für Claude Code schneller ist.

Installation

git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
./install.sh

Der Installer richtet Python und Node ein, fragt nach Ihrem Cronometer-Login und einem Passwort für die Login-Seite des Connectors, erstellt ein Token und schreibt die Dienstdateien und die nginx-Site mit Ihrem eigenen Hostnamen und Benutzernamen.

Sie benötigen Node 18 oder neuer, Python 3.12 oder neuer und uv.

Den Server online zu bringen, bleibt Ihnen überlassen, denn genau hier unterscheiden sich die Setups am stärksten, und eine falsche Annahme würde Ihr Ernährungstagebuch ins öffentliche Internet stellen. Richten Sie einen Tunnel oder einen Proxy auf 127.0.0.1:8431. Mit Cloudflare Tunnel:

ingress:
  - hostname: cronometer-mcp.example.com
    service: http://localhost:8431

Es muss HTTPS sein. OAuth funktioniert nicht über einfaches HTTP.

Selbsthosting von Hand

Wenn Sie lieber jeden Schritt sehen möchten, statt den Installer auszuführen, hier ist alles. Das Endergebnis sind zwei Dienste auf Ihrem eigenen Rechner, die über HTTPS erreichbar sind.

1. Code und Abhängigkeiten beschaffen

git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
npm install --omit=dev
uv venv && uv pip install -e .

2. Ihren Cronometer-Login speichern

./set-credentials.sh

Er fragt nach Ihrer E-Mail, Ihrem Passwort und Ihrer Zeitzone und schreibt sie in ~/.config/cronometer-mcp/env mit Modus 0600. Das Passwort wird nie angezeigt und gelangt nie in Ihre Shell-Historie. Falls Sie es lieber von Hand machen:

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

Prüfen Sie, ob es funktioniert, bevor Sie fortfahren. Dies meldet sich an und gibt Ihr Tagebuch aus:

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. Connector-Passwort und Token festlegen

Das Passwort ist das, was Sie auf der Anmeldeseite eingeben, wenn Sie den Connector in Claude.ai hinzufügen. Nur sein scrypt-Hash wird gespeichert.

CONFIG_DIR=~/.config/cronometer-mcp node set-password.js 'your-password-here'

Das Token ist die Abkürzung für Claude Code, das einen Header sendet und den Browser vollständig überspringt.

openssl rand -hex 32 > ~/.config/cronometer-mcp/token
chmod 600 ~/.config/cronometer-mcp/token

4. Die zwei Dienste installieren

systemd/ enthält beide Unit-Dateien. Ersetzen Sie YOUR_USER durch Ihren Benutzernamen und cronometer-mcp.example.com durch Ihren Hostnamen, dann:

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-auth

cronometer-mcp ist der Server selbst auf :8430, nur von dem Rechner aus erreichbar, auf dem er läuft. cronometer-mcp-auth ist die Login-Ebene auf :8432 und das Einzige, was mit :8430 spricht.

Eine Falle, die eine Erwähnung verdient, weil das Symptom verwirrend ist: Fügen Sie IPAddressDeny=any nicht zu cronometer-mcp.service hinzu. Es ist eine sinnvolle Härtungszeile für einen Server, der nur lokale Dateien liest, aber dieser muss mobile.cronometer.com erreichen. Mit dieser Einstellung hängt jeder Tool-Aufruf, bis er eine Zeitüberschreitung hat, während systemd den Dienst weiterhin als aktiv meldet. Es wird auch nichts dadurch gewonnen, da der Server sich ohnehin weigert, über den lokalen Rechner hinaus zu lauschen.

5. nginx davorstellen

sudo cp nginx/cronometer-mcp.conf /etc/nginx/sites-enabled/cronometer-mcp
sudo nginx -t && sudo systemctl reload nginx

Er lauscht auf 127.0.0.1:8431 und leitet alles an die Login-Ebene weiter. Das lange Lese-Timeout und proxy_buffering off sind wichtig: Der MCP hält die Verbindung offen und sendet nach und nach, und Buffering würde ihn zum Stillstand bringen.

6. Eine HTTPS-Adresse vergeben

Ein Cloudflare Tunnel vermeidet das Öffnen eines Router-Ports. Jeder HTTPS-Reverse-Proxy funktioniert genauso gut.

ingress:
  - hostname: cronometer-mcp.example.com
    service: http://localhost:8431
cloudflared tunnel route dns YOUR_TUNNEL cronometer-mcp.example.com
sudo systemctl restart cloudflared

7. Von außen prüfen

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

Die erste gibt die Login-Details zurück. Die zweite muss 401 zurückgeben: Alles andere bedeutet, dass die Login-Ebene umgangen wird und Ihr Tagebuch exponiert ist.

Verbinden Sie dann einen Client wie unter Verbinden beschrieben.

Aktualisieren

git pull
uv pip install -e . && npm install --omit=dev
sudo systemctl restart cronometer-mcp cronometer-mcp-auth

Nachdem Sie ein Tool hinzugefügt oder umbenannt haben, klicken Sie am Connector in Claude.ai auf Reconnect. Dadurch wird die Tool-Liste in einem bereits geöffneten Gespräch aktualisiert, und Ihre Anmeldung übersteht dies, da die Tokens in oauth.db auf der Festplatte und nicht im Speicher liegen.

Wenn etwas nicht stimmt

journalctl -u cronometer-mcp -n 50 --no-pager
journalctl -u cronometer-mcp-auth -n 50 --no-pager

Was Sie sehen

Was es normalerweise ist

Tool-Aufrufe hängen, Dienst meldet aktiv

IPAddressDeny auf der MCP-Einheit, siehe Schritt 4

401 bei jedem Aufruf von Claude Code

Token stimmt nicht überein, vergleichen Sie den Header mit ~/.config/cronometer-mcp/token

Anmeldeseite lehnt das Passwort ab

Noch kein Hash gespeichert, führen Sie Schritt 3 aus

Anmeldung schlägt fehl und fragt nach einem 2FA-Code

Siehe Wenn Sie Zwei-Faktor-Authentifizierung verwenden

502 von nginx

Die Anmeldeschicht ist nicht verfügbar, systemctl status cronometer-mcp-auth

Verbinden

Claude.ai. Gehen Sie zu Einstellungen, Connectors, Benutzerdefinierten Connector hinzufügen, und geben Sie https://your-host/mcp an. Lassen Sie Client-ID und Geheimnis leer. Melden Sie sich mit dem Passwort an, das der Installer festgelegt hat. Dies einmal zu tun, deckt Web, Desktop und Mobil ab, da Connectors zu Ihrem Konto gehören und nicht zu einem Gerät.

Claude Code, über den Browser:

claude mcp add --transport http cronometer https://your-host/mcp --scope user

Führen Sie dann /mcp aus, um sich anzumelden.

Claude Code, mit einem Token, ohne Browser:

claude mcp add --transport http cronometer https://your-host/mcp \
  --header "Authorization: Bearer $(cat ~/.config/cronometer-mcp/token)" \
  --scope user

Verwendung ganz ohne Server

Wenn Claude auf demselben Rechner läuft, überspringen Sie den Webserver und die Anmeldung vollständig und lassen Sie es das MCP direkt starten:

claude mcp add cronometer -- /path/to/cronometer-mcp/.venv/bin/cronometer-mcp

Es liest Ihre Anmeldedaten aus ~/.config/cronometer-mcp/env oder aus einer .env-Datei.

Einstellungen

Variable

Zweck

CRONOMETER_USERNAME

Ihre Cronometer-E-Mail

CRONOMETER_PASSWORD

Ihr Cronometer-Passwort

CRONOMETER_ACCOUNT_TZ

Die Zeitzone, in der Ihre Tagebuch-Tage gezählt werden

CRONOMETER_TOTP_SECRET

Ihr Zwei-Faktor-Geheimnis, nur wenn Sie Zwei-Faktor-Authentifizierung aktiviert haben. Benötigt das totp-Extra

ISSUER

Die öffentliche Adresse des Servers

PORT

Anmeldeserver-Port, standardmäßig 8432

UPSTREAM

Wo der MCP-Server ist, standardmäßig http://127.0.0.1:8430

CONFIG_DIR

Wo Passwort, Token und Datenbank aufbewahrt werden

CALL_TIMEOUT_MS

Wie lange ein Aufruf ruhig bleiben darf, bevor er abgebrochen wird, standardmäßig 120000

MCP_PORT

MCP-Server-Port, standardmäßig 8430

MCP_PUBLIC_URL

Öffentliche Adresse, mit der das Symbol gegenüber Clients beworben wird

Alle geheimen Daten liegen in ~/.config/cronometer-mcp/, nur für Sie lesbar: env enthält Ihren Cronometer-Login, password-hash das Passwort für die Anmeldeseite des Connectors, token das feste Token und oauth.db die Apps und Tokens, die der Anmeldeserver ausgegeben hat. Tokens werden verschlüsselt gespeichert, daher gibt eine gestohlene Kopie der Datenbank niemandem einen funktionierenden Schlüssel.

Ihre Cronometer-Sitzung wird in ~/.cache/cronometer-mcp/session.json gespeichert, sodass ein Neustart des Servers nicht dazu führt, dass er sich wieder und wieder anmeldet und Cronometers Limit erreicht.

Wenn Sie Zwei-Faktor-Authentifizierung verwenden

Ein Server, der allein weiterläuft, kann keinen Code eingeben, also benötigt er stattdessen das Geheimnis hinter dem Code:

uv pip install -e '.[totp]'

Setzen Sie dann CRONOMETER_TOTP_SECRET auf das Geheimnis aus Ihrer Authenticator-App. Ohne dieses Geheimnis schlägt die Anmeldung bei einem Konto mit aktivierter Zwei-Faktor-Authentifizierung fehl und genau das wird Ihnen mitgeteilt.

Am Code arbeiten

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/

Danksagungen

Der Cronometer-Client entstand als Kopie von rwestergren/cronometer-api-mcp. Die Anmeldeschicht stammt von rollecode/obsidian-remote-mcp.

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
7Releases (12mo)
Commit activity

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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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