mcp-email-server 0.0.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.
Files changed (39) hide show
  1. mcp_email_server-0.0.3/.editorconfig +5 -0
  2. mcp_email_server-0.0.3/.github/actions/setup-python-env/action.yml +30 -0
  3. mcp_email_server-0.0.3/.github/workflows/main.yml +63 -0
  4. mcp_email_server-0.0.3/.github/workflows/on-release-main.yml +110 -0
  5. mcp_email_server-0.0.3/.github/workflows/validate-codecov-config.yml +15 -0
  6. mcp_email_server-0.0.3/.gitignore +142 -0
  7. mcp_email_server-0.0.3/.pre-commit-config.yaml +22 -0
  8. mcp_email_server-0.0.3/.vscode/settings.json +3 -0
  9. mcp_email_server-0.0.3/CONTRIBUTING.md +126 -0
  10. mcp_email_server-0.0.3/Dockerfile +29 -0
  11. mcp_email_server-0.0.3/LICENSE +28 -0
  12. mcp_email_server-0.0.3/Makefile +57 -0
  13. mcp_email_server-0.0.3/PKG-INFO +92 -0
  14. mcp_email_server-0.0.3/README.md +61 -0
  15. mcp_email_server-0.0.3/codecov.yaml +9 -0
  16. mcp_email_server-0.0.3/dev/claude_desktop_config.json +8 -0
  17. mcp_email_server-0.0.3/dev/install_claude_desktop.py +60 -0
  18. mcp_email_server-0.0.3/docs/index.md +8 -0
  19. mcp_email_server-0.0.3/docs/modules.md +1 -0
  20. mcp_email_server-0.0.3/mcp_email_server/__init__.py +0 -0
  21. mcp_email_server-0.0.3/mcp_email_server/app.py +54 -0
  22. mcp_email_server-0.0.3/mcp_email_server/cli.py +38 -0
  23. mcp_email_server-0.0.3/mcp_email_server/config.py +229 -0
  24. mcp_email_server-0.0.3/mcp_email_server/emails/__init__.py +27 -0
  25. mcp_email_server-0.0.3/mcp_email_server/emails/classic.py +253 -0
  26. mcp_email_server-0.0.3/mcp_email_server/emails/dispatcher.py +18 -0
  27. mcp_email_server-0.0.3/mcp_email_server/emails/models.py +32 -0
  28. mcp_email_server-0.0.3/mcp_email_server/emails/provider/__init__.py +0 -0
  29. mcp_email_server-0.0.3/mcp_email_server/log.py +9 -0
  30. mcp_email_server-0.0.3/mcp_email_server/tools/__init__.py +0 -0
  31. mcp_email_server-0.0.3/mcp_email_server/tools/claude_desktop_config.json +8 -0
  32. mcp_email_server-0.0.3/mcp_email_server/tools/installer.py +155 -0
  33. mcp_email_server-0.0.3/mcp_email_server/ui.py +455 -0
  34. mcp_email_server-0.0.3/mkdocs.yml +52 -0
  35. mcp_email_server-0.0.3/pyproject.toml +122 -0
  36. mcp_email_server-0.0.3/tests/conftest.py +19 -0
  37. mcp_email_server-0.0.3/tests/test_config.py +63 -0
  38. mcp_email_server-0.0.3/tox.ini +17 -0
  39. mcp_email_server-0.0.3/uv.lock +1952 -0
@@ -0,0 +1,5 @@
1
+ max_line_length = 120
2
+
3
+ [*.json]
4
+ indent_style = space
5
+ indent_size = 4
@@ -0,0 +1,30 @@
1
+ name: "Setup Python Environment"
2
+ description: "Set up Python environment for the given Python version"
3
+
4
+ inputs:
5
+ python-version:
6
+ description: "Python version to use"
7
+ required: true
8
+ default: "3.12"
9
+ uv-version:
10
+ description: "uv version to use"
11
+ required: true
12
+ default: "0.6.2"
13
+
14
+ runs:
15
+ using: "composite"
16
+ steps:
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ inputs.python-version }}
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v2
23
+ with:
24
+ version: ${{ inputs.uv-version }}
25
+ enable-cache: "true"
26
+ cache-suffix: ${{ matrix.python-version }}
27
+
28
+ - name: Install Python dependencies
29
+ run: uv sync --frozen
30
+ shell: bash
@@ -0,0 +1,63 @@
1
+ name: Main
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ types: [opened, synchronize, reopened, ready_for_review]
9
+
10
+ jobs:
11
+ quality:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Check out
15
+ uses: actions/checkout@v4
16
+
17
+ - uses: actions/cache@v4
18
+ with:
19
+ path: ~/.cache/pre-commit
20
+ key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
21
+
22
+ - name: Set up the environment
23
+ uses: ./.github/actions/setup-python-env
24
+
25
+ - name: Run checks
26
+ run: make check
27
+
28
+ tests-and-type-check:
29
+ runs-on: ubuntu-latest
30
+ strategy:
31
+ matrix:
32
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
33
+ fail-fast: false
34
+ defaults:
35
+ run:
36
+ shell: bash
37
+ steps:
38
+ - name: Check out
39
+ uses: actions/checkout@v4
40
+
41
+ - name: Set up the environment
42
+ uses: ./.github/actions/setup-python-env
43
+ with:
44
+ python-version: ${{ matrix.python-version }}
45
+
46
+ - name: Run tests
47
+ run: uv run python -m pytest tests --cov --cov-config=pyproject.toml --cov-report=xml
48
+
49
+ - name: Upload coverage reports to Codecov with GitHub Action on Python 3.11
50
+ uses: codecov/codecov-action@v4
51
+ if: ${{ matrix.python-version == '3.11' }}
52
+
53
+ check-docs:
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - name: Check out
57
+ uses: actions/checkout@v4
58
+
59
+ - name: Set up the environment
60
+ uses: ./.github/actions/setup-python-env
61
+
62
+ - name: Check if documentation can be built
63
+ run: uv run mkdocs build -s
@@ -0,0 +1,110 @@
1
+ name: release-main
2
+
3
+ permissions:
4
+ contents: write
5
+ packages: write
6
+
7
+ on:
8
+ release:
9
+ types: [published]
10
+
11
+ jobs:
12
+ set-version:
13
+ runs-on: ubuntu-24.04
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Export tag
18
+ id: vars
19
+ run: echo tag=${GITHUB_REF#refs/*/} >> $GITHUB_OUTPUT
20
+ if: ${{ github.event_name == 'release' }}
21
+
22
+ - name: Update project version
23
+ run: |
24
+ sed -i "s/^version = \".*\"/version = \"$RELEASE_VERSION\"/" pyproject.toml
25
+ env:
26
+ RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
27
+ if: ${{ github.event_name == 'release' }}
28
+
29
+ - name: Upload updated pyproject.toml
30
+ uses: actions/upload-artifact@v4
31
+ with:
32
+ name: pyproject-toml
33
+ path: pyproject.toml
34
+
35
+ publish:
36
+ runs-on: ubuntu-latest
37
+ needs: [set-version]
38
+ steps:
39
+ - name: Check out
40
+ uses: actions/checkout@v4
41
+
42
+ - name: Set up the environment
43
+ uses: ./.github/actions/setup-python-env
44
+
45
+ - name: Download updated pyproject.toml
46
+ uses: actions/download-artifact@v4
47
+ with:
48
+ name: pyproject-toml
49
+
50
+ - name: Build package
51
+ run: uv build
52
+
53
+ - name: Publish package
54
+ run: uv publish
55
+ env:
56
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
57
+
58
+ - name: Upload dists to release
59
+ uses: svenstaro/upload-release-action@v2
60
+ with:
61
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
62
+ file: dist/*
63
+ file_glob: true
64
+ tag: ${{ github.ref }}
65
+ overwrite: true
66
+
67
+ push-image:
68
+ runs-on: ubuntu-latest
69
+ needs: [set-version]
70
+ steps:
71
+ - name: Export tag
72
+ id: vars
73
+ run: echo tag=${GITHUB_REF#refs/*/} >> $GITHUB_OUTPUT
74
+ if: ${{ github.event_name == 'release' }}
75
+ - name: Set up QEMU
76
+ uses: docker/setup-qemu-action@v3
77
+ - name: Set up Docker Buildx
78
+ uses: docker/setup-buildx-action@v3
79
+ - name: Login to Github Container Registry
80
+ uses: docker/login-action@v3
81
+ with:
82
+ registry: ghcr.io
83
+ username: ai-zerolab
84
+ password: ${{ secrets.GITHUB_TOKEN }}
85
+ - name: Build and push image
86
+ id: docker_build_publish
87
+ uses: docker/build-push-action@v5
88
+ with:
89
+ context: .
90
+ platforms: linux/amd64,linux/arm64/v8
91
+ cache-from: type=gha
92
+ cache-to: type=gha,mode=max
93
+ file: ./Dockerfile
94
+ push: true
95
+ tags: |
96
+ ghcr.io/ai-zerolab/mcp-email-server:${{ steps.vars.outputs.tag }}
97
+ ghcr.io/ai-zerolab/mcp-email-server:latest
98
+
99
+ deploy-docs:
100
+ needs: publish
101
+ runs-on: ubuntu-latest
102
+ steps:
103
+ - name: Check out
104
+ uses: actions/checkout@v4
105
+
106
+ - name: Set up the environment
107
+ uses: ./.github/actions/setup-python-env
108
+
109
+ - name: Deploy documentation
110
+ run: uv run mkdocs gh-deploy --force
@@ -0,0 +1,15 @@
1
+ name: validate-codecov-config
2
+
3
+ on:
4
+ pull_request:
5
+ paths: [codecov.yaml]
6
+ push:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ validate-codecov-config:
11
+ runs-on: ubuntu-22.04
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Validate codecov configuration
15
+ run: curl -sSL --fail-with-body --data-binary @codecov.yaml https://codecov.io/validate
@@ -0,0 +1,142 @@
1
+ docs/source
2
+
3
+ # From https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore
4
+
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ build/
16
+ develop-eggs/
17
+ dist/
18
+ downloads/
19
+ eggs/
20
+ .eggs/
21
+ lib/
22
+ lib64/
23
+ parts/
24
+ sdist/
25
+ var/
26
+ wheels/
27
+ share/python-wheels/
28
+ *.egg-info/
29
+ .installed.cfg
30
+ *.egg
31
+ MANIFEST
32
+
33
+ # PyInstaller
34
+ # Usually these files are written by a python script from a template
35
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
36
+ *.manifest
37
+ *.spec
38
+
39
+ # Installer logs
40
+ pip-log.txt
41
+ pip-delete-this-directory.txt
42
+
43
+ # Unit test / coverage reports
44
+ htmlcov/
45
+ .tox/
46
+ .nox/
47
+ .coverage
48
+ .coverage.*
49
+ .cache
50
+ nosetests.xml
51
+ coverage.xml
52
+ *.cover
53
+ *.py,cover
54
+ .hypothesis/
55
+ .pytest_cache/
56
+ cover/
57
+
58
+ # Translations
59
+ *.mo
60
+ *.pot
61
+
62
+ # Django stuff:
63
+ *.log
64
+ local_settings.py
65
+ db.sqlite3
66
+ db.sqlite3-journal
67
+
68
+ # Flask stuff:
69
+ instance/
70
+ .webassets-cache
71
+
72
+ # Scrapy stuff:
73
+ .scrapy
74
+
75
+ # Sphinx documentation
76
+ docs/_build/
77
+
78
+ # PyBuilder
79
+ .pybuilder/
80
+ target/
81
+
82
+ # Jupyter Notebook
83
+ .ipynb_checkpoints
84
+
85
+ # IPython
86
+ profile_default/
87
+ ipython_config.py
88
+
89
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
90
+ __pypackages__/
91
+
92
+ # Celery stuff
93
+ celerybeat-schedule
94
+ celerybeat.pid
95
+
96
+ # SageMath parsed files
97
+ *.sage.py
98
+
99
+ # Environments
100
+ .env
101
+ .venv
102
+ env/
103
+ venv/
104
+ ENV/
105
+ env.bak/
106
+ venv.bak/
107
+
108
+ # Spyder project settings
109
+ .spyderproject
110
+ .spyproject
111
+
112
+ # Rope project settings
113
+ .ropeproject
114
+
115
+ # mkdocs documentation
116
+ /site
117
+
118
+ # mypy
119
+ .mypy_cache/
120
+ .dmypy.json
121
+ dmypy.json
122
+
123
+ # Pyre type checker
124
+ .pyre/
125
+
126
+ # pytype static type analyzer
127
+ .pytype/
128
+
129
+ # Cython debug symbols
130
+ cython_debug/
131
+
132
+ # Vscode config files
133
+ # .vscode/
134
+
135
+ # PyCharm
136
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
137
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
138
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
139
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
140
+ #.idea/
141
+
142
+ tests/config.toml
@@ -0,0 +1,22 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: "v5.0.0"
4
+ hooks:
5
+ - id: check-case-conflict
6
+ - id: check-merge-conflict
7
+ - id: check-toml
8
+ - id: check-yaml
9
+ - id: end-of-file-fixer
10
+ - id: trailing-whitespace
11
+
12
+ - repo: https://github.com/astral-sh/ruff-pre-commit
13
+ rev: "v0.9.7"
14
+ hooks:
15
+ - id: ruff
16
+ args: [--exit-non-zero-on-fix]
17
+ - id: ruff-format
18
+
19
+ - repo: https://github.com/pre-commit/mirrors-prettier
20
+ rev: "v4.0.0-alpha.8"
21
+ hooks:
22
+ - id: prettier
@@ -0,0 +1,3 @@
1
+ {
2
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
3
+ }
@@ -0,0 +1,126 @@
1
+ # Contributing to `mcp-email-server`
2
+
3
+ Contributions are welcome, and they are greatly appreciated!
4
+ Every little bit helps, and credit will always be given.
5
+
6
+ You can contribute in many ways:
7
+
8
+ # Types of Contributions
9
+
10
+ ## Report Bugs
11
+
12
+ Report bugs at https://github.com/ai-zerolab/mcp-email-server/issues
13
+
14
+ If you are reporting a bug, please include:
15
+
16
+ - Your operating system name and version.
17
+ - Any details about your local setup that might be helpful in troubleshooting.
18
+ - Detailed steps to reproduce the bug.
19
+
20
+ ## Fix Bugs
21
+
22
+ Look through the GitHub issues for bugs.
23
+ Anything tagged with "bug" and "help wanted" is open to whoever wants to implement a fix for it.
24
+
25
+ ## Implement Features
26
+
27
+ Look through the GitHub issues for features.
28
+ Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it.
29
+
30
+ ## Write Documentation
31
+
32
+ mcp-email-server could always use more documentation, whether as part of the official docs, in docstrings, or even on the web in blog posts, articles, and such.
33
+
34
+ ## Submit Feedback
35
+
36
+ The best way to send feedback is to file an issue at https://github.com/ai-zerolab/mcp-email-server/issues.
37
+
38
+ If you are proposing a new feature:
39
+
40
+ - Explain in detail how it would work.
41
+ - Keep the scope as narrow as possible, to make it easier to implement.
42
+ - Remember that this is a volunteer-driven project, and that contributions
43
+ are welcome :)
44
+
45
+ # Get Started!
46
+
47
+ Ready to contribute? Here's how to set up `mcp-email-server` for local development.
48
+ Please note this documentation assumes you already have `uv` and `Git` installed and ready to go.
49
+
50
+ 1. Fork the `mcp-email-server` repo on GitHub.
51
+
52
+ 2. Clone your fork locally:
53
+
54
+ ```bash
55
+ cd <directory_in_which_repo_should_be_created>
56
+ git clone git@github.com:YOUR_NAME/mcp-email-server.git
57
+ ```
58
+
59
+ 3. Now we need to install the environment. Navigate into the directory
60
+
61
+ ```bash
62
+ cd mcp-email-server
63
+ ```
64
+
65
+ Then, install and activate the environment with:
66
+
67
+ ```bash
68
+ uv sync
69
+ ```
70
+
71
+ 4. Install pre-commit to run linters/formatters at commit time:
72
+
73
+ ```bash
74
+ uv run pre-commit install
75
+ ```
76
+
77
+ 5. Create a branch for local development:
78
+
79
+ ```bash
80
+ git checkout -b name-of-your-bugfix-or-feature
81
+ ```
82
+
83
+ Now you can make your changes locally.
84
+
85
+ 6. Don't forget to add test cases for your added functionality to the `tests` directory.
86
+
87
+ 7. When you're done making changes, check that your changes pass the formatting tests.
88
+
89
+ ```bash
90
+ make check
91
+ ```
92
+
93
+ Now, validate that all unit tests are passing:
94
+
95
+ ```bash
96
+ make test
97
+ ```
98
+
99
+ 9. Before raising a pull request you should also run tox.
100
+ This will run the tests across different versions of Python:
101
+
102
+ ```bash
103
+ tox
104
+ ```
105
+
106
+ This requires you to have multiple versions of python installed.
107
+ This step is also triggered in the CI/CD pipeline, so you could also choose to skip this step locally.
108
+
109
+ 10. Commit your changes and push your branch to GitHub:
110
+
111
+ ```bash
112
+ git add .
113
+ git commit -m "Your detailed description of your changes."
114
+ git push origin name-of-your-bugfix-or-feature
115
+ ```
116
+
117
+ 11. Submit a pull request through the GitHub website.
118
+
119
+ # Pull Request Guidelines
120
+
121
+ Before you submit a pull request, check that it meets these guidelines:
122
+
123
+ 1. The pull request should include tests.
124
+
125
+ 2. If the pull request adds functionality, the docs should be updated.
126
+ Put your new functionality into a function with a docstring, and add the feature to the list in `README.md`.
@@ -0,0 +1,29 @@
1
+ # Install uv
2
+ FROM python:3.12-slim
3
+
4
+ # Install tini
5
+ RUN apt-get update && \
6
+ apt-get install -y --no-install-recommends tini && \
7
+ rm -rf /var/lib/apt/lists/*
8
+
9
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
10
+
11
+ # Change the working directory to the `app` directory
12
+ WORKDIR /app
13
+
14
+ # Copy the lockfile and `pyproject.toml` into the image
15
+ COPY uv.lock /app/uv.lock
16
+ COPY pyproject.toml /app/pyproject.toml
17
+
18
+ # Install dependencies
19
+ RUN uv sync --frozen --no-install-project
20
+
21
+ # Copy the project into the image
22
+ COPY . /app
23
+
24
+ # Sync the project
25
+ RUN uv sync --frozen
26
+
27
+ # Run the server
28
+ ENTRYPOINT ["tini", "--", "uv", "run", "mcp-email-server"]
29
+ CMD ["stdio"]
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2025, ai-zerolab
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,57 @@
1
+ .PHONY: install
2
+ install: ## Install the virtual environment and install the pre-commit hooks
3
+ @echo "🚀 Creating virtual environment using uv"
4
+ @uv sync
5
+ @uv run pre-commit install
6
+
7
+ .PHONY: check
8
+ check: ## Run code quality tools.
9
+ @echo "🚀 Checking lock file consistency with 'pyproject.toml'"
10
+ @uv lock --locked
11
+ @echo "🚀 Linting code: Running pre-commit"
12
+ @uv run pre-commit run -a
13
+ @echo "🚀 Checking for obsolete dependencies: Running deptry"
14
+ @uv run deptry .
15
+
16
+ .PHONY: test
17
+ test: ## Test the code with pytest
18
+ @echo "🚀 Testing code: Running pytest"
19
+ @uv run python -m pytest --cov --cov-config=pyproject.toml --cov-report=xml -vv -s
20
+
21
+ .PHONY: build
22
+ build: clean-build ## Build wheel file
23
+ @echo "🚀 Creating wheel file"
24
+ @uvx --from build pyproject-build --installer uv
25
+
26
+ .PHONY: clean-build
27
+ clean-build: ## Clean build artifacts
28
+ @echo "🚀 Removing build artifacts"
29
+ @uv run python -c "import shutil; import os; shutil.rmtree('dist') if os.path.exists('dist') else None"
30
+
31
+ .PHONY: publish
32
+ publish: ## Publish a release to PyPI.
33
+ @echo "🚀 Publishing."
34
+ @uvx twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
35
+
36
+ .PHONY: build-and-publish
37
+ build-and-publish: build publish ## Build and publish.
38
+
39
+ .PHONY: docs-test
40
+ docs-test: ## Test if documentation can be built without warnings or errors
41
+ @uv run mkdocs build -s
42
+
43
+ .PHONY: docs
44
+ docs: ## Build and serve the documentation
45
+ @uv run mkdocs serve
46
+
47
+ .PHONY: help
48
+ help:
49
+ @uv run python -c "import re; \
50
+ [[print(f'\033[36m{m[0]:<20}\033[0m {m[1]}') for m in re.findall(r'^([a-zA-Z_-]+):.*?## (.*)$$', open(makefile).read(), re.M)] for makefile in ('$(MAKEFILE_LIST)').strip().split()]"
51
+
52
+ .PHONY: install-claude-desktop
53
+ install-claude-desktop: ## Install the desktop application
54
+ @uv sync
55
+ @python dev/install_claude_desktop.py
56
+
57
+ .DEFAULT_GOAL := help