diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7dcfe91 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# Use a Python image with uv pre-installed +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv + +# Install the project into /app +WORKDIR /app + +# Enable bytecode compilation +ENV UV_COMPILE_BYTECODE=1 + +# Copy from the cache instead of linking since it's a mounted volume +ENV UV_LINK_MODE=copy + +# Install the project's dependencies using the lockfile and settings +COPY uv.lock pyproject.toml /app/ +RUN --mount=type=cache,target=/root/.cache/uv uv sync --frozen --no-install-project --no-dev --no-editable + +# Then, add the rest of the project source code and install it +# Installing separately from its dependencies allows optimal layer caching +ADD . /app +RUN --mount=type=cache,target=/root/.cache/uv uv sync --frozen --no-dev --no-editable + +# Final image +FROM python:3.12-slim-bookworm + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv --chown=app:app /app/.venv /app/.venv + +# Place executables in the environment at the front of the path +ENV PATH="/app/.venv/bin:$PATH" + +# When running the container, add your Oxylabs credentials as environment variables +ENTRYPOINT ["oxylabs_mcp"] \ No newline at end of file diff --git a/README.md b/README.md index 164661c..3a04057 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # MCP Server for Oxylabs Scraper +[![smithery badge](https://smithery.ai/badge/@oxylabs/oxylabs-mcp)](https://smithery.ai/server/@oxylabs/oxylabs-mcp) The scraper tool is an asynchronous utility that leverages the Oxylabs Web Scraper API to fetch and process content from a given URL. This tool is designed to handle various scraping scenarios efficiently, with flexible options for parsing and rendering web pages. @@ -26,6 +27,14 @@ https://docs.astral.sh/uv/getting-started/installation/#installation-methods ## Setup Intructions +### Installing via Smithery + +To install Oxylabs MCP server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@oxylabs/oxylabs-mcp): + +```bash +npx -y @smithery/cli install @oxylabs/oxylabs-mcp --client claude +``` + ### Setup with Claude Desktop ```json # claude_desktop_config.json @@ -99,4 +108,5 @@ Then access MCP Inspector at `http://localhost:5173`. You may need to add your u Usage with the MCP inspector is affected by an ongoing issue with the Python SDK for MCP, see: https://github.com/modelcontextprotocol/python-sdk/pull/85. For Claude, a forked version of the SDK is used as a temporary fix. ---- \ No newline at end of file +--- + diff --git a/smithery.yaml b/smithery.yaml new file mode 100644 index 0000000..300bf5d --- /dev/null +++ b/smithery.yaml @@ -0,0 +1,21 @@ +# Smithery configuration file: https://smithery.ai/docs/deployments + +startCommand: + type: stdio + configSchema: + # JSON Schema defining the configuration options for the MCP. + type: object + required: + - oxylabsUsername + - oxylabsPassword + properties: + oxylabsUsername: + type: string + description: The username for Oxylabs API authentication. + oxylabsPassword: + type: string + description: The password for Oxylabs API authentication. + commandFunction: + # A function that produces the CLI command to start the MCP on stdio. + |- + config => ({ command: 'oxylabs_mcp', env: { OXYLABS_USERNAME: config.oxylabsUsername, OXYLABS_PASSWORD: config.oxylabsPassword } }) \ No newline at end of file