cronometer-api-mcp 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ # Exclude noise from the build context
2
+ .git
3
+ .gitignore
4
+ __pycache__
5
+ *.pyc
6
+ .venv
7
+ venv
8
+ .pytest_cache
9
+ .ruff_cache
10
+ dist
11
+ build
12
+ *.egg-info
13
+ flows
14
+ *.md
15
+ !README.md
16
+ Procfile
17
+ opencode.json
18
+ server.json
19
+ skills-lock.json
20
+ session-*.md
21
+ Dockerfile
22
+ .dockerignore
@@ -0,0 +1,66 @@
1
+ name: Build Docker image
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ release:
7
+ types: [published]
8
+
9
+ concurrency:
10
+ group: docker-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ build:
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ contents: read
18
+ packages: write
19
+ # Required for build provenance attestation
20
+ id-token: write
21
+ attestations: write
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - name: Set up QEMU
27
+ uses: docker/setup-qemu-action@v3
28
+
29
+ - name: Set up Docker Buildx
30
+ uses: docker/setup-buildx-action@v3
31
+
32
+ - name: Log in to GHCR
33
+ uses: docker/login-action@v3
34
+ with:
35
+ registry: ghcr.io
36
+ username: ${{ github.actor }}
37
+ password: ${{ secrets.GITHUB_TOKEN }}
38
+
39
+ - name: Compute image metadata
40
+ id: meta
41
+ uses: docker/metadata-action@v5
42
+ with:
43
+ images: ghcr.io/${{ github.repository }}
44
+ tags: |
45
+ type=semver,pattern={{version}}
46
+ type=semver,pattern={{major}}.{{minor}}
47
+ type=raw,value=latest,enable={{is_default_branch}}
48
+
49
+ - name: Build and push
50
+ id: build
51
+ uses: docker/build-push-action@v5
52
+ with:
53
+ context: .
54
+ platforms: linux/amd64,linux/arm64
55
+ push: true
56
+ tags: ${{ steps.meta.outputs.tags }}
57
+ labels: ${{ steps.meta.outputs.labels }}
58
+ cache-from: type=gha
59
+ cache-to: type=gha,mode=max
60
+
61
+ - name: Generate build provenance attestation
62
+ uses: actions/attest-build-provenance@v1
63
+ with:
64
+ subject-name: ghcr.io/${{ github.repository }}
65
+ subject-digest: ${{ steps.build.outputs.digest }}
66
+ push-to-registry: true
@@ -0,0 +1,51 @@
1
+ # Cronometer MCP image, wrapped with supergateway.
2
+ #
3
+ # Contract (same for every MCP hosted by this gateway):
4
+ # - Exposes MCP streamable-HTTP on 0.0.0.0:$PORT at /mcp
5
+ # - Health endpoint at /healthz
6
+ # - stdio-speaking MCP process is spawned by supergateway as a child;
7
+ # supergateway handles protocol translation, session binding, and
8
+ # server->client SSE notifications.
9
+ #
10
+ # The gateway reverse-proxies HTTP into this container. No stdio, Docker
11
+ # attach, or EOF games are required anywhere.
12
+ #
13
+ # Base image: supercorp/supergateway:uvx (Alpine + Node 20 + uv).
14
+ # We install Python 3.14 via uv (cronometer-api-mcp requires >=3.14).
15
+
16
+ FROM supercorp/supergateway:uvx
17
+
18
+ ENV PYTHONDONTWRITEBYTECODE=1 \
19
+ PYTHONUNBUFFERED=1 \
20
+ UV_LINK_MODE=copy \
21
+ UV_PYTHON_INSTALL_DIR=/opt/uv-python \
22
+ UV_TOOL_DIR=/opt/uv-tools \
23
+ UV_TOOL_BIN_DIR=/usr/local/bin \
24
+ PORT=8080
25
+
26
+ WORKDIR /app
27
+
28
+ # Copy the package source. Uses the .dockerignore alongside this file.
29
+ COPY pyproject.toml README.md ./
30
+ COPY src ./src
31
+
32
+ # Pre-install Python 3.14 into a deterministic location, then install the MCP
33
+ # as a uv tool so its console entry point (`cronometer-api-mcp`) lands in
34
+ # /usr/local/bin on $PATH.
35
+ RUN uv python install 3.14 \
36
+ && uv tool install --python 3.14 . \
37
+ && cronometer-api-mcp --help >/dev/null 2>&1 || true
38
+
39
+ # supergateway wraps the stdio MCP; Nomad (or docker run -p) remaps $PORT.
40
+ # --stateful enables Mcp-Session-Id semantics per the MCP streamable-HTTP spec.
41
+ # --sessionTimeout is unused here because gateway owns reaping via Nomad;
42
+ # we still set a generous value so a forgotten session eventually self-heals.
43
+ ENTRYPOINT ["/bin/sh", "-c", "exec supergateway \
44
+ --stdio 'cronometer-api-mcp' \
45
+ --outputTransport streamableHttp \
46
+ --stateful \
47
+ --streamableHttpPath /mcp \
48
+ --healthEndpoint /healthz \
49
+ --port \"${PORT}\" \
50
+ --sessionTimeout 3600000 \
51
+ --logLevel info"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cronometer-api-mcp
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: MCP server for Cronometer nutrition data using the mobile REST API
5
5
  Author: Randy
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cronometer-api-mcp"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "MCP server for Cronometer nutrition data using the mobile REST API"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/rwestergren/cronometer-api-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.2",
9
+ "version": "0.1.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "pypi",
13
13
  "identifier": "cronometer-api-mcp",
14
- "version": "0.1.2",
14
+ "version": "0.1.3",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },