mirror of
https://github.com/kuhyx/diet-guard.git
synced 2026-11-10 18:07:20 +01:00
Expose diet_guard's read surface and one gated write action as typed MCP tools (diet_guard._mcp) so Claude Code and its subagents can query today's intake and -- with explicit confirmation -- log a meal without shelling out to the interactive gate CLI. - _mcp.py: FastMCP stdio server. Read tools get_status, list_today, get_slots expose today's CONSUMED kcal/macros and the qualitative consumption band only -- never the raw daily budget, remaining number, body weight, or protein target (those would back out the deliberately hidden budget). Gated write log_meal previews unless confirm=True and degrades gracefully on write failure. Nutrition is grouped into a Macros model (kcal + optional protein/carbs/fat) to keep the tool under the arg-count limits with no lint suppression, mirroring the CLI's grouping. Logs to stderr; no secret (HMAC key / sync token) is ever returned. - .mcp.json + scripts/setup_mcp.sh: registration via a dedicated ~/.venvs/diet-guard-mcp interpreter; mcp is an optional-dep, kept out of the systemd/CLI system-python path. - 100% coverage of the new module; verified end-to-end over stdio. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LQGQj8Ne6TriBExv91nG8v
44 lines
1.6 KiB
Bash
Executable File
44 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ============================================================================
|
|
# Set up the dedicated virtualenv that hosts the diet_guard MCP server.
|
|
# Claude Code spawns this interpreter (see the repo-root .mcp.json) to run
|
|
# `python -m diet_guard._mcp` over stdio.
|
|
#
|
|
# The MCP SDK (`mcp`) lives ONLY in this venv -- it is an optional dependency,
|
|
# deliberately kept out of the system/CLI/systemd python path (see CLAUDE.md's
|
|
# "Production dependency installation" note: the gate service runs
|
|
# /usr/bin/python directly and must stay dependency-light). Both `mcp` and
|
|
# `diet_guard` must be importable by this one interpreter or the MCP server
|
|
# fails to start silently.
|
|
#
|
|
# Idempotent: safe to re-run to pick up dependency changes.
|
|
# ============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
readonly REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
readonly VENV_DIR="${HOME}/.venvs/diet-guard-mcp"
|
|
|
|
main() {
|
|
echo "== Setting up MCP venv at ${VENV_DIR} =="
|
|
|
|
if [[ ! -d "${VENV_DIR}" ]]; then
|
|
python3 -m venv "${VENV_DIR}"
|
|
fi
|
|
|
|
"${VENV_DIR}/bin/pip" install --quiet --upgrade pip
|
|
"${VENV_DIR}/bin/pip" install --quiet -e "${REPO_DIR}[mcp]"
|
|
|
|
echo "== Verifying imports =="
|
|
"${VENV_DIR}/bin/python" -c \
|
|
"import mcp, diet_guard; print('mcp + diet_guard import OK')"
|
|
|
|
echo
|
|
echo "Done. The server is registered via ${REPO_DIR}/.mcp.json"
|
|
echo "Restart Claude Code in this repo and approve the project MCP server prompt."
|
|
}
|
|
|
|
main "$@"
|