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 내보내기와 같은 하루 10회 내보내기 제한도 없습니다.
다른 옵션을 쓰지 않는 이유
Terra API는 Cronometer 데이터를 웹훅으로 보내지만 읽기만 가능하며, 음식 일기가 다른 사람의 서버를 거치게 됩니다.
gocronometer및 유사한 내보내기 도구는 읽기만 가능하고 속도 제한이 있습니다.Cronometer 웹사이트를 스크래핑하는 도구는 쓰기가 가능하지만, Cronometer가 업데이트를 배포할 때마다 변경되는 코드에 의존하며 Gold가 필요합니다.
Related MCP server: cronometer-api-mcp
도구
읽기
도구 | 제공되는 정보 |
| 하루 동안의 일기에 있는 모든 항목. 각 음식에는 이름, 출처, 제공량, 제공 횟수, 그리고 해당 음식이 영양소에 추가한 양이 포함됩니다. 또한 칼로리(목표, 섭취, 남음)와 추적하는 모든 영양소의 총계를 얻을 수 있습니다. |
| 하루 동안의 영양소 총계 |
| Cronometer의 영양 점수 |
| 식품 데이터베이스 검색 |
| 하나의 음식에 대한 전체 영양소와 제공량 |
| 일일 총계 옆에 표시되는 영양소 목표 |
| 단백질, 탄수화물, 지방 목표 |
| 측정할 수 있는 항목과 각 항목이 허용하는 단위 |
| 시간에 따른 단일 측정값 |
| 두 날짜 사이의 단식 기록 |
| 단식 총계와 평균 |
| 사용자 지정 음식에 설정할 수 있는 모든 영양소와 단위 |
쓰기
도구 | 기능 |
| 식사에 음식 추가 |
| 섭취량 또는 섭취 시간 변경 |
| 음식 항목 삭제 |
| 최대 94개 영양소를 포함한 나만의 음식 만들기 |
| 사용자 지정 음식 폐기 또는 복원 |
| 특정 날짜에 메모 작성 |
| 메모 다시 쓰기 |
| 체중 또는 체지방 같은 측정값 기록 |
| 잘못된 측정값 수정 |
| 운동 추가 |
| 운동 시간 또는 소모 칼로리 변경 |
| 완료되었거나 진행 중인 단식 기록 |
| 단식 시간 또는 목표 변경, 진행 중인 단식 종료 포함 |
| 단식 삭제 |
| 한 날의 일기를 다른 날로 복사 |
| 하루를 완료로 표시하거나 완료 해제 |
사용자 지정 음식
add_custom_food는 영양소 이름과 양을 매핑한 dict를 받으므로, 한 번의 호출로 단일 영양소부터 전체 카탈로그까지 전달할 수 있습니다:
{
"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을 전달하면 해당 음식에 그 영양소가 전혀 없다는 뜻이며, 앱은 이 둘을 다르게 취급하므로 실제로 아는 것만 전달하세요. 인식할 수 없는 이름은 조용히 무시되지 않고 오류로 처리됩니다. 영양소가 조용히 누락된 음식도 여전히 완전해 보이기 때문입니다.
식품 라벨에는 있지만 카탈로그에는 없는 두 가지 편의 기능이 있습니다: energy_kj는 칼로리로, salt_g는 나트륨으로 변환됩니다. 둘 다 전달하지 말고 하나만 전달하세요.
동작 방식
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서버 자체에는 자체 로그인이 없으며 로컬 머신에서만 수신 대기합니다. 따라서 서버에 도달하는 모든 것은 이미 로그인을 통과한 상태입니다. 이 로그인은 Claude.ai가 설정해 주는 OAuth 토큰 또는 Claude Code에 더 빠른 고정 토큰을 허용합니다.
설치
git clone https://github.com/rollecode/cronometer-mcp.git
cd cronometer-mcp
./install.sh설치 프로그램은 Python과 Node를 설정하고, Cronometer 로그인 정보와 커넥터 로그인 페이지의 비밀번호를 요청한 다음, 토큰을 만들고, 사용자 호스트 이름과 사용자 이름이 채워진 서비스 파일과 nginx 사이트를 작성합니다.
Node 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로 접근 가능한 사용자 머신의 두 서비스입니다.
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이메일, 비밀번호, 시간대를 입력받아 ~/.config/cronometer-mcp/env에 0600 모드로 저장합니다. 비밀번호는 화면에 표시되지 않으며 셸 기록에도 남지 않습니다. 원한다면 직접 수동으로도 할 수 있습니다:
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. 두 서비스 설치
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과 통신하는 유일한 구성 요소입니다.
증상이 혼란스럽기 때문에 이름을 밝힐 만한 함정이 하나 있습니다: 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 nginx127.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첫 번째는 로그인 세부 정보를 반환합니다. 두 번째는 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 코드 요청 | |
nginx에서 | 로그인 계층이 다운됨, |
연결
Claude.ai. 설정, 커넥터, 사용자 지정 커넥터 추가로 이동하여 https://your-host/mcp를 입력합니다. 클라이언트 ID와 시크릿은 비워 둡니다. 설치 프로그램이 설정한 비밀번호로 로그인합니다. 이 작업을 한 번만 하면 웹, 데스크톱, 모바일에서 모두 사용할 수 있습니다. 커넥터는 특정 기기가 아니라 계정에 속하기 때문입니다.
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가 같은 머신에서 실행된다면 웹 서버와 로그인을 완전히 건너뛰고 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