From e93eb9d302fa8c8e089fbfd7a7790918242feddf Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sun, 25 May 2025 11:46:41 +0200 Subject: [PATCH 1/4] fix: Configure logging --- Dockerfile | 6 +----- nextcloud_mcp_server/client.py | 3 --- nextcloud_mcp_server/config.py | 5 +---- nextcloud_mcp_server/server.py | 10 ++++------ 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index b5e3fc8..df3e2d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,4 @@ COPY . . RUN uv sync --locked -ENV VIRTUAL_ENV=/app/.venv -ENV PATH="$VIRTUAL_ENV/bin:$PATH" -ENV FASTMCP_LOG_LEVEL=DEBUG - -CMD ["mcp", "run", "--transport", "sse", "nextcloud_mcp_server/server.py:mcp"] +CMD ["uv", "run", "mcp", "run", "--transport", "sse", "nextcloud_mcp_server/server.py:mcp"] diff --git a/nextcloud_mcp_server/client.py b/nextcloud_mcp_server/client.py index d891a31..916ac2f 100644 --- a/nextcloud_mcp_server/client.py +++ b/nextcloud_mcp_server/client.py @@ -1,12 +1,9 @@ import os -import time # Import time for sleep import mimetypes -from io import BytesIO from httpx import ( Client, Auth, BasicAuth, - Headers, Request, Response, HTTPStatusError, diff --git a/nextcloud_mcp_server/config.py b/nextcloud_mcp_server/config.py index 44e5ce1..5f5e978 100644 --- a/nextcloud_mcp_server/config.py +++ b/nextcloud_mcp_server/config.py @@ -4,11 +4,8 @@ LOGGING_CONFIG = { "version": 1, "handlers": { "default": { - "class": "logging.FileHandler", + "class": "logging.StreamHandler", "formatter": "http", - # "stream": "ext://sys.stderr" - "filename": "/tmp/nextcloud-mcp-server.log", - "mode": "a", } }, "formatters": { diff --git a/nextcloud_mcp_server/server.py b/nextcloud_mcp_server/server.py index 1f0457c..abbc4ae 100644 --- a/nextcloud_mcp_server/server.py +++ b/nextcloud_mcp_server/server.py @@ -11,8 +11,6 @@ import asyncio # Import asyncio setup_logging() -logger = logging.getLogger(__name__) - @dataclass class AppContext: @@ -23,11 +21,9 @@ class AppContext: async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]: """Manage application lifecycle with type-safe context""" # Initialize on startup - logger.info("Creating Nextcloud client") + logging.info("Creating Nextcloud client") client = NextcloudClient.from_env() - # Add a small delay to allow client initialization to complete - logger.info("Waiting 2 seconds for client initialization...") - logger.info("Client initialization wait complete.") + logging.info("Client initialization wait complete.") try: yield AppContext(client=client) finally: @@ -38,6 +34,8 @@ async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]: # Create an MCP server mcp = FastMCP("Nextcloud MCP", lifespan=app_lifespan) +logger = logging.getLogger(__name__) + @mcp.resource("nc://capabilities") def nc_get_capabilities(): From 9a05b171aecb604316f68c39bc877f446d3646fc Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sun, 25 May 2025 11:55:21 +0200 Subject: [PATCH 2/4] ci: Install uv using curl --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4243e03..2d482a3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,8 +19,7 @@ jobs: - name: Install dependencies run: | - sudo apt update -y && sudo apt install -y pipx - pipx install uv + curl -LsSf https://astral.sh/uv/install.sh | sh uv sync --locked env: DEBIAN_FRONTEND: "noninteractive" From b332c54330560d78a5734a256519fca2e5b48f42 Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sun, 25 May 2025 12:02:57 +0200 Subject: [PATCH 3/4] ci: Setup uv using action, make sure uv runs tests without updating --- .github/workflows/test.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2d482a3..51cae39 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,13 +16,8 @@ jobs: uses: hoverkraft-tech/compose-action@8be2d741e891ac9b8ac20825e6f3904149599925 # v2.2.0 with: compose-file: "./docker-compose.yml" - - - name: Install dependencies - run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - uv sync --locked - env: - DEBIAN_FRONTEND: "noninteractive" + - name: Install the latest version of uv + uses: astral-sh/setup-uv@v6 - name: Wait for service to be ready run: | @@ -47,4 +42,4 @@ jobs: NEXTCLOUD_USERNAME: "admin" NEXTCLOUD_PASSWORD: "admin" run: | - uv run python -m pytest + uv run --frozen python -m pytest From 96d5789200bd228dad03f81a7ec8d6b02b4e5c39 Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Sun, 25 May 2025 12:26:01 +0200 Subject: [PATCH 4/4] fix: Do not update dependencies when running in Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index df3e2d0..161b277 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,4 +6,4 @@ COPY . . RUN uv sync --locked -CMD ["uv", "run", "mcp", "run", "--transport", "sse", "nextcloud_mcp_server/server.py:mcp"] +CMD ["uv", "run", "--locked", "mcp", "run", "--transport", "sse", "nextcloud_mcp_server/server.py:mcp"]