Cronometer MCP server
Cronometer MCP server
Lee y escribe en tu diario de alimentos de Cronometer desde Claude.ai y Claude Code. Habla con mobile.cronometer.com, la misma API que usa la aplicación de Cronometer para Android, y pone un inicio de sesión OAuth 2.1 delante para que puedas añadirlo a Claude.ai como conector personalizado. Claude Code puede usar en su lugar un token simple. No necesitas una suscripción Gold, y no hay límite de diez exportaciones al día como ocurre con la exportación CSV.
Por qué no las otras opciones
Terra API envía tus datos de Cronometer a un webhook, pero solo puede leer, y tu registro de comidas pasa por los servidores de otra persona.
gocronometery herramientas de exportación similares solo pueden leer, y tienen límite de peticiones.Las herramientas que extraen del sitio web de Cronometer pueden escribir, pero dependen de códigos que cambian cada vez que Cronometer publica una actualización, y necesitan Gold.
Related MCP server: cronometer-api-mcp
Herramientas
Lectura
Herramienta | Qué obtienes |
| Todo lo que hay en el diario de un día. Cada alimento viene con su nombre, su origen, el tamaño de la ración, cuántas raciones y lo que ese alimento ha aportado a tus nutrientes. También obtienes calorías (objetivo, consumidas y restantes) y los totales de todos los nutrientes que controlas. |
| Totales de nutrientes de un día |
| Las puntuaciones nutricionales de Cronometer |
| Buscar en la base de datos de alimentos |
| Nutrientes completos y tamaños de ración de un alimento |
| Los objetivos de nutrientes que se muestran junto a tus totales diarios |
| Tus objetivos de proteínas, carbohidratos y grasas |
| Qué puedes medir y las unidades que acepta cada uno |
| Una medición a lo largo del tiempo |
| Ayunos entre dos fechas |
| Totales y promedios de ayuno |
| Todos los nutrientes que puedes configurar en un alimento personalizado, con sus unidades |
Escritura
Herramienta | Qué hace |
| Añadir un alimento a una comida |
| Cambiar cuánto has comido, o cuándo |
| Eliminar entradas de alimentos |
| Crear tu propio alimento, con hasta los 94 nutrientes |
| Retirar un alimento personalizado, o recuperarlo |
| Escribir una nota en un día |
| Reescribir una nota |
| Registrar una medición como el peso o el porcentaje de grasa corporal |
| Corregir una medición que te haya salido mal |
| Añadir un ejercicio |
| Cambiar cuánto duró un ejercicio, o cuánto quemó |
| Registrar un ayuno, terminado o todavía en curso |
| Cambiar los tiempos u objetivo de un ayuno, incluido terminar uno que sigue en curso |
| Eliminar un ayuno |
| Copiar el diario de un día a otro |
| Marcar un día como completado, o no |
Alimentos personalizados
add_custom_food recibe un diccionario de nombre de nutriente a cantidad, de modo que puedes pasarle desde un solo nutriente hasta el catálogo completo en una única llamada:
{
"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
}
}Las cantidades corresponden a una ración completa, cada una en la unidad propia de ese nutriente. Llama a list_nutrients para obtener los nombres aceptados, que provienen del catálogo de tu propia cuenta en lugar de una tabla fija aquí.
Un nutriente que omitas permanece en blanco en Cronometer. Pasar 0 en su lugar indica que el alimento no contiene nada de ese nutriente, y la aplicación trata ambas cosas de forma distinta, así que pasa solo lo que realmente sepas. Un nombre no reconocido es un error en lugar de descartarse silenciosamente, porque un alimento que ha perdido un nutriente sin avisar sigue pareciendo completo.
Dos ventajas que tiene la etiqueta del alimento y que el catálogo no: energy_kj se convierte a calorías, y salt_g a sodio. Pasa uno u otro, no ambos.
Cómo encaja todo
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.comEl servidor en sí no tiene ningún inicio de sesión propio y se niega a escuchar en cualquier dirección que no sea la máquina local. Así que cualquier cosa que llegue a él ya ha superado el inicio de sesión. Ese inicio de sesión acepta o bien un token OAuth, que es lo que Claude.ai configura por ti, o un token fijo, que es más rápido para Claude Code.
Instalación
git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
./install.shEl instalador configura Python y Node, pide tus credenciales de Cronometer y una contraseña para la página de inicio de sesión del conector, genera un token y escribe los archivos de servicio y el sitio de nginx con tu propio nombre de host y nombre de usuario rellenados.
Necesitas Node 18 o superior, Python 3.12 o superior y uv.
Poner el servidor en línea queda de tu parte, porque es donde las configuraciones más difieren, y una suposición equivocada aquí pondría tu diario de alimentos en el internet público. Apunta un túnel o un proxy a 127.0.0.1:8431. Con Cloudflare Tunnel:
ingress:
- hostname: cronometer-mcp.example.com
service: http://localhost:8431Tiene que ser HTTPS. OAuth no funcionará sobre HTTP sin cifrar.
Autoalojarlo manualmente
Si prefieres ver cada paso antes que ejecutar el instalador, esto es todo el proceso. El estado final son dos servicios en tu propia máquina, accesibles a través de HTTPS.
1. Obtén el código y sus dependencias
git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
npm install --omit=dev
uv venv && uv pip install -e .2. Guarda tus credenciales de Cronometer
./set-credentials.shTe pide tu correo electrónico, contraseña y zona horaria, y los escribe en ~/.config/cronometer-mcp/env con modo 0600. La contraseña nunca se muestra en pantalla y nunca llega al historial de tu shell. Hazlo manualmente si lo prefieres:
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/envComprueba que funciona antes de seguir. Esto inicia sesión y muestra tu diario:
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. Establece la contraseña del conector y un token
La contraseña es lo que escribes en la página de inicio de sesión al añadir el conector en Claude.ai. Solo se almacena su hash scrypt.
CONFIG_DIR=~/.config/cronometer-mcp node set-password.js 'your-password-here'El token es el atajo para Claude Code, que envía una cabecera y se salta el navegador por completo.
openssl rand -hex 32 > ~/.config/cronometer-mcp/token
chmod 600 ~/.config/cronometer-mcp/token4. Instala los dos servicios
systemd/ contiene los dos archivos de unidad. Sustituye YOUR_USER por tu nombre de usuario y cronometer-mcp.example.com por tu nombre de host, y entonces:
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 es el propio servidor en :8430, accesible solo desde la máquina en la que se ejecuta. cronometer-mcp-auth es la capa de inicio de sesión en :8432, y es lo único que se comunica con :8430.
Una trampa que merece la pena mencionar, porque el síntoma es confuso: no añadas IPAddressDeny=any a cronometer-mcp.service. Es una línea de endurecimiento razonable para un servidor que solo lee archivos locales, pero este tiene que alcanzar mobile.cronometer.com, y con ella activada, cada llamada de herramienta se cuelga hasta que agota el tiempo de espera mientras systemd sigue informando del servicio como activo. Tampoco se gana nada con ella, ya que el servidor ya se niega a escuchar más allá de la máquina local.
5. Pon nginx delante
sudo cp nginx/cronometer-mcp.conf /etc/nginx/sites-enabled/cronometer-mcp
sudo nginx -t && sudo systemctl reload nginxEscucha en 127.0.0.1:8431 y pasa todo a la capa de inicio de sesión. El tiempo de espera de lectura largo y proxy_buffering off importan: el MCP mantiene la conexión abierta y envía los datos a medida que avanza, y el almacenamiento en búfer lo detendría.
6. Dale una dirección HTTPS
Un túnel de Cloudflare evita tener que abrir un puerto del router. Cualquier proxy inverso HTTPS funciona igual de bien.
ingress:
- hostname: cronometer-mcp.example.com
service: http://localhost:8431cloudflared tunnel route dns YOUR_TUNNEL cronometer-mcp.example.com
sudo systemctl restart cloudflared7. Compruébalo desde fuera
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/mcpLa primera devuelve los datos de inicio de sesión. La segunda debe devolver 401: cualquier otra cosa significa que se está omitiendo la capa de inicio de sesión y tu diario está expuesto.
A continuación, conecta un cliente como se describe en Conectar.
Actualización
git pull
uv pip install -e . && npm install --omit=dev
sudo systemctl restart cronometer-mcp cronometer-mcp-authDespués de añadir o renombrar una herramienta, pulsa Reconectar en el conector de Claude.ai.
Eso actualiza la lista de herramientas dentro de una conversación que ya tengas abierta, y
tu inicio de sesión se conserva, porque los tokens residen en oauth.db en disco, no
en memoria.
Cuando algo va mal
journalctl -u cronometer-mcp -n 50 --no-pager
journalctl -u cronometer-mcp-auth -n 50 --no-pagerLo que ves | Lo que suele ser |
Las llamadas a herramientas se cuelgan, el servicio dice activo |
|
| El token no coincide, compara la cabecera con |
La página de inicio de sesión rechaza la contraseña | Aún no hay hash almacenado, ejecuta el paso 3 |
El inicio de sesión falla pidiendo un código 2FA | |
| La capa de inicio de sesión está caída, |
Conexión
Claude.ai. Ve a Configuración, Conectores, Añadir conector personalizado, e indícalo https://your-host/mcp. Deja el ID de cliente y el secreto vacíos. Inicia sesión con la contraseña que estableció el instalador. Hacer esto una vez cubre web, escritorio y móvil, porque los conectores pertenecen a tu cuenta, no a un dispositivo.
Claude Code, a través del navegador:
claude mcp add --transport http cronometer https://your-host/mcp --scope userLuego ejecuta /mcp para iniciar sesión.
Claude Code, con un token, sin navegador:
claude mcp add --transport http cronometer https://your-host/mcp \
--header "Authorization: Bearer $(cat ~/.config/cronometer-mcp/token)" \
--scope userUsarlo sin servidor
Si Claude se ejecuta en la misma máquina, omite el servidor web y el inicio de sesión por completo y deja que inicie el MCP directamente:
claude mcp add cronometer -- /path/to/cronometer-mcp/.venv/bin/cronometer-mcpLee tu inicio de sesión de ~/.config/cronometer-mcp/env o de un archivo .env.
Configuración
Variable | Para qué sirve |
| Tu correo de Cronometer |
| Tu contraseña de Cronometer |
| La zona horaria en la que se cuentan los días de tu diario |
| Tu secreto de autenticación de dos factores, solo si tienes activado el doble factor. Requiere el extra |
| La dirección pública del servidor |
| Puerto del servidor de inicio de sesión, 8432 por defecto |
| Dónde está el servidor MCP, |
| Dónde se guardan la contraseña, el token y la base de datos |
| Cuánto tiempo puede estar una llamada en silencio antes de cortarse, 120000 por defecto |
| Puerto del servidor MCP, 8430 por defecto |
| Dirección pública, utilizada para anunciar el icono a los clientes |
Todo lo secreto se guarda en ~/.config/cronometer-mcp/, legible solo por ti: env contiene tu inicio de sesión de Cronometer, password-hash la contraseña para la página de inicio de sesión del conector, token el token fijo y oauth.db las aplicaciones y tokens que el servidor de inicio de sesión ha emitido. Los tokens se almacenan codificados, por lo que una copia robada de la base de datos no le da a nadie una clave válida.
Tu sesión de Cronometer se guarda en ~/.cache/cronometer-mcp/session.json, de modo que reiniciar el servidor no inicia sesión una y otra vez ni alcanza el límite de Cronometer.
Si usas autenticación de dos factores
Un servidor que se deja ejecutando por su cuenta no puede escribir un código, así que necesita el secreto que hay detrás del código:
uv pip install -e '.[totp]'Luego establece CRONOMETER_TOTP_SECRET con el secreto de tu aplicación de autenticación. Sin él, una cuenta con la autenticación de dos factores activada no podrá iniciar sesión y te lo dirá exactamente.
Trabajar en el código
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/Créditos
El cliente de Cronometer comenzó siendo una copia de rwestergren/cronometer-api-mcp. La capa de inicio de sesión proviene de 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