ultimate-gemini-mcp 1.0.1__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.

Potentially problematic release.


This version of ultimate-gemini-mcp might be problematic. Click here for more details.

Files changed (30) hide show
  1. ultimate_gemini_mcp-1.0.1/.env.example +34 -0
  2. ultimate_gemini_mcp-1.0.1/.github/workflows/README.md +74 -0
  3. ultimate_gemini_mcp-1.0.1/.github/workflows/claude-code-review.yml +57 -0
  4. ultimate_gemini_mcp-1.0.1/.github/workflows/claude.yml +50 -0
  5. ultimate_gemini_mcp-1.0.1/.github/workflows/publish.yml +161 -0
  6. ultimate_gemini_mcp-1.0.1/.github/workflows/test.yml +106 -0
  7. ultimate_gemini_mcp-1.0.1/.gitignore +66 -0
  8. ultimate_gemini_mcp-1.0.1/CLAUDE.md +390 -0
  9. ultimate_gemini_mcp-1.0.1/LICENSE +31 -0
  10. ultimate_gemini_mcp-1.0.1/MANIFEST.in +9 -0
  11. ultimate_gemini_mcp-1.0.1/PKG-INFO +372 -0
  12. ultimate_gemini_mcp-1.0.1/PUBLISHING.md +146 -0
  13. ultimate_gemini_mcp-1.0.1/README.md +336 -0
  14. ultimate_gemini_mcp-1.0.1/pyproject.toml +54 -0
  15. ultimate_gemini_mcp-1.0.1/src/__init__.py +16 -0
  16. ultimate_gemini_mcp-1.0.1/src/config/__init__.py +32 -0
  17. ultimate_gemini_mcp-1.0.1/src/config/constants.py +77 -0
  18. ultimate_gemini_mcp-1.0.1/src/config/settings.py +143 -0
  19. ultimate_gemini_mcp-1.0.1/src/core/__init__.py +55 -0
  20. ultimate_gemini_mcp-1.0.1/src/core/exceptions.py +60 -0
  21. ultimate_gemini_mcp-1.0.1/src/core/validation.py +161 -0
  22. ultimate_gemini_mcp-1.0.1/src/server.py +166 -0
  23. ultimate_gemini_mcp-1.0.1/src/services/__init__.py +15 -0
  24. ultimate_gemini_mcp-1.0.1/src/services/gemini_client.py +230 -0
  25. ultimate_gemini_mcp-1.0.1/src/services/image_service.py +243 -0
  26. ultimate_gemini_mcp-1.0.1/src/services/imagen_client.py +175 -0
  27. ultimate_gemini_mcp-1.0.1/src/services/prompt_enhancer.py +140 -0
  28. ultimate_gemini_mcp-1.0.1/src/tools/__init__.py +11 -0
  29. ultimate_gemini_mcp-1.0.1/src/tools/batch_generate.py +159 -0
  30. ultimate_gemini_mcp-1.0.1/src/tools/generate_image.py +252 -0
@@ -0,0 +1,34 @@
1
+ # Ultimate Gemini MCP Server Configuration
2
+
3
+ # Required: Your Google Gemini API Key
4
+ # Get one from: https://makersuite.google.com/app/apikey
5
+ GEMINI_API_KEY=your_api_key_here
6
+
7
+ # Alternative API key name (either works)
8
+ # GOOGLE_API_KEY=your_api_key_here
9
+
10
+ # Optional: Output directory for generated images (default: generated_images)
11
+ # OUTPUT_DIR=./generated_images
12
+
13
+ # Optional: Enable/disable prompt enhancement (default: true)
14
+ # ENABLE_PROMPT_ENHANCEMENT=true
15
+
16
+ # Optional: Enable/disable batch processing (default: true)
17
+ # ENABLE_BATCH_PROCESSING=true
18
+
19
+ # Optional: Default models
20
+ # DEFAULT_GEMINI_MODEL=gemini-2.5-flash-image
21
+ # DEFAULT_IMAGEN_MODEL=imagen-4-ultra
22
+
23
+ # Optional: Request settings
24
+ # REQUEST_TIMEOUT=60
25
+ # MAX_BATCH_SIZE=8
26
+ # MAX_RETRIES=3
27
+
28
+ # Optional: Default generation settings
29
+ # DEFAULT_ASPECT_RATIO=1:1
30
+ # DEFAULT_OUTPUT_FORMAT=png
31
+
32
+ # Optional: Logging
33
+ # LOG_LEVEL=INFO
34
+ # LOG_FORMAT=standard
@@ -0,0 +1,74 @@
1
+ # GitHub Actions Workflows
2
+
3
+ ## Publish to PyPI
4
+
5
+ The `publish.yml` workflow automatically versions and publishes the package to PyPI.
6
+
7
+ ### Automatic Versioning
8
+
9
+ The workflow automatically increments the version based on commit messages:
10
+
11
+ - **Patch bump** (default): `1.0.0` → `1.0.1`
12
+ - Used for bug fixes and minor changes
13
+ - No special keyword needed
14
+
15
+ - **Minor bump**: `1.0.0` → `1.1.0`
16
+ - Add `[minor]` to your commit message
17
+ - Used for new features
18
+
19
+ - **Major bump**: `1.0.0` → `2.0.0`
20
+ - Add `[major]` to your commit message
21
+ - Used for breaking changes
22
+
23
+ ### Examples
24
+
25
+ ```bash
26
+ # Patch version (1.0.0 → 1.0.1)
27
+ git commit -m "Fix image saving bug"
28
+ git push origin main
29
+
30
+ # Minor version (1.0.0 → 1.1.0)
31
+ git commit -m "[minor] Add support for new aspect ratios"
32
+ git push origin main
33
+
34
+ # Major version (1.0.0 → 2.0.0)
35
+ git commit -m "[major] Complete API redesign with breaking changes"
36
+ git push origin main
37
+ ```
38
+
39
+ ### Manual Trigger
40
+
41
+ You can also manually trigger a release from the GitHub Actions tab:
42
+
43
+ 1. Go to Actions → Publish to PyPI
44
+ 2. Click "Run workflow"
45
+ 3. Select the version bump type (major/minor/patch)
46
+ 4. Click "Run workflow"
47
+
48
+ ### What Happens
49
+
50
+ When you push to main:
51
+
52
+ 1. ✅ Detects version bump type from commit message
53
+ 2. ✅ Increments version in `pyproject.toml` and `src/__init__.py`
54
+ 3. ✅ Commits the version bump with `[skip ci]` to avoid infinite loops
55
+ 4. ✅ Creates a git tag (e.g., `v1.0.1`)
56
+ 5. ✅ Builds the Python package
57
+ 6. ✅ Publishes to PyPI using `PYPI_API_TOKEN` secret
58
+ 7. ✅ Creates a GitHub Release with changelog
59
+
60
+ ### Requirements
61
+
62
+ - `PYPI_API_TOKEN` secret must be configured in repository settings
63
+ - Python 3.11+ for building
64
+ - uv for fast builds and dependency management
65
+
66
+ ### Skipping CI
67
+
68
+ To prevent the workflow from running on a commit, add `[skip ci]` to the commit message:
69
+
70
+ ```bash
71
+ git commit -m "Update README [skip ci]"
72
+ ```
73
+
74
+ This is automatically added to version bump commits to prevent infinite loops.
@@ -0,0 +1,57 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize]
6
+ # Optional: Only run on specific file changes
7
+ # paths:
8
+ # - "src/**/*.ts"
9
+ # - "src/**/*.tsx"
10
+ # - "src/**/*.js"
11
+ # - "src/**/*.jsx"
12
+
13
+ jobs:
14
+ claude-review:
15
+ # Optional: Filter by PR author
16
+ # if: |
17
+ # github.event.pull_request.user.login == 'external-contributor' ||
18
+ # github.event.pull_request.user.login == 'new-developer' ||
19
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20
+
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+ pull-requests: read
25
+ issues: read
26
+ id-token: write
27
+
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@v4
31
+ with:
32
+ fetch-depth: 1
33
+
34
+ - name: Run Claude Code Review
35
+ id: claude-review
36
+ uses: anthropics/claude-code-action@v1
37
+ with:
38
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39
+ prompt: |
40
+ REPO: ${{ github.repository }}
41
+ PR NUMBER: ${{ github.event.pull_request.number }}
42
+
43
+ Please review this pull request and provide feedback on:
44
+ - Code quality and best practices
45
+ - Potential bugs or issues
46
+ - Performance considerations
47
+ - Security concerns
48
+ - Test coverage
49
+
50
+ Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
51
+
52
+ Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
53
+
54
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
55
+ # or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
56
+ claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
57
+
@@ -0,0 +1,50 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ actions: read # Required for Claude to read CI results on PRs
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 1
32
+
33
+ - name: Run Claude Code
34
+ id: claude
35
+ uses: anthropics/claude-code-action@v1
36
+ with:
37
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
+
39
+ # This is an optional setting that allows Claude to read CI results on PRs
40
+ additional_permissions: |
41
+ actions: read
42
+
43
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
44
+ # prompt: 'Update the pull request description to include a summary of changes.'
45
+
46
+ # Optional: Add claude_args to customize behavior and configuration
47
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
48
+ # or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
49
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
50
+
@@ -0,0 +1,161 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+ inputs:
9
+ version_bump:
10
+ description: 'Version bump type'
11
+ required: false
12
+ default: 'patch'
13
+ type: choice
14
+ options:
15
+ - major
16
+ - minor
17
+ - patch
18
+
19
+ jobs:
20
+ publish:
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: write
24
+
25
+ steps:
26
+ - name: Checkout code
27
+ uses: actions/checkout@v4
28
+ with:
29
+ fetch-depth: 0
30
+ token: ${{ secrets.GITHUB_TOKEN }}
31
+
32
+ - name: Set up Python
33
+ uses: actions/setup-python@v5
34
+ with:
35
+ python-version: '3.11'
36
+
37
+ - name: Install uv
38
+ uses: astral-sh/setup-uv@v4
39
+
40
+ - name: Install dependencies
41
+ run: |
42
+ uv pip install --system toml packaging
43
+
44
+ - name: Determine version bump type
45
+ id: bump_type
46
+ run: |
47
+ # Check if manual workflow dispatch
48
+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
49
+ echo "type=${{ inputs.version_bump }}" >> $GITHUB_OUTPUT
50
+ else
51
+ # Check commit message for version bump indicators
52
+ COMMIT_MSG=$(git log -1 --pretty=%B)
53
+ if echo "$COMMIT_MSG" | grep -iq "\[major\]"; then
54
+ echo "type=major" >> $GITHUB_OUTPUT
55
+ elif echo "$COMMIT_MSG" | grep -iq "\[minor\]"; then
56
+ echo "type=minor" >> $GITHUB_OUTPUT
57
+ else
58
+ echo "type=patch" >> $GITHUB_OUTPUT
59
+ fi
60
+ fi
61
+
62
+ - name: Bump version
63
+ id: version
64
+ run: |
65
+ python << 'EOF'
66
+ import os
67
+ import toml
68
+ import sys
69
+ from packaging import version
70
+
71
+ # Read current version
72
+ with open('pyproject.toml', 'r') as f:
73
+ data = toml.load(f)
74
+
75
+ current = version.parse(data['project']['version'])
76
+ bump_type = "${{ steps.bump_type.outputs.type }}"
77
+
78
+ # Calculate new version
79
+ if bump_type == 'major':
80
+ new_version = f"{current.major + 1}.0.0"
81
+ elif bump_type == 'minor':
82
+ new_version = f"{current.major}.{current.minor + 1}.0"
83
+ else: # patch
84
+ new_version = f"{current.major}.{current.minor}.{current.micro + 1}"
85
+
86
+ # Update pyproject.toml
87
+ data['project']['version'] = new_version
88
+ with open('pyproject.toml', 'w') as f:
89
+ toml.dump(data, f)
90
+
91
+ # Update src/__init__.py
92
+ with open('src/__init__.py', 'r') as f:
93
+ content = f.read()
94
+
95
+ content = content.replace(
96
+ f'__version__ = "{current}"',
97
+ f'__version__ = "{new_version}"'
98
+ )
99
+
100
+ with open('src/__init__.py', 'w') as f:
101
+ f.write(content)
102
+
103
+ print(f"new_version={new_version}")
104
+ with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
105
+ f.write(f"new_version={new_version}\n")
106
+ f.write(f"old_version={current}\n")
107
+ EOF
108
+
109
+ - name: Commit version bump
110
+ run: |
111
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
112
+ git config --local user.name "github-actions[bot]"
113
+ git add pyproject.toml src/__init__.py
114
+ git commit -m "Bump version: ${{ steps.version.outputs.old_version }} → ${{ steps.version.outputs.new_version }} [skip ci]"
115
+ git tag -a "v${{ steps.version.outputs.new_version }}" -m "Release v${{ steps.version.outputs.new_version }}"
116
+
117
+ - name: Push changes
118
+ uses: ad-m/github-push-action@master
119
+ with:
120
+ github_token: ${{ secrets.GITHUB_TOKEN }}
121
+ branch: main
122
+ tags: true
123
+
124
+ - name: Build package
125
+ run: |
126
+ uv build
127
+
128
+ - name: Publish to PyPI
129
+ env:
130
+ TWINE_USERNAME: __token__
131
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
132
+ run: |
133
+ uv pip install --system twine
134
+ twine upload dist/*
135
+
136
+ - name: Create GitHub Release
137
+ uses: softprops/action-gh-release@v1
138
+ with:
139
+ tag_name: v${{ steps.version.outputs.new_version }}
140
+ name: Release v${{ steps.version.outputs.new_version }}
141
+ body: |
142
+ ## Changes in v${{ steps.version.outputs.new_version }}
143
+
144
+ **Version bump:** ${{ steps.bump_type.outputs.type }}
145
+ **Previous version:** ${{ steps.version.outputs.old_version }}
146
+
147
+ ### Installation
148
+ ```bash
149
+ pip install ultimate-gemini-mcp==${{ steps.version.outputs.new_version }}
150
+ ```
151
+
152
+ Or with uv:
153
+ ```bash
154
+ uvx ultimate-gemini-mcp@${{ steps.version.outputs.new_version }}
155
+ ```
156
+
157
+ See the [README](https://github.com/${{ github.repository }}/blob/main/README.md) for full documentation.
158
+ draft: false
159
+ prerelease: false
160
+ env:
161
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,106 @@
1
+ name: Tests and Linting
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+ push:
8
+ branches:
9
+ - main
10
+ paths-ignore:
11
+ - '**.md'
12
+ - '.github/workflows/publish.yml'
13
+
14
+ jobs:
15
+ lint:
16
+ name: Lint Code
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: '3.11'
27
+
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@v4
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ uv pip install --system ruff mypy
34
+
35
+ - name: Run ruff format check
36
+ run: ruff format --check .
37
+
38
+ - name: Run ruff linter
39
+ run: ruff check .
40
+
41
+ - name: Run type checking
42
+ run: mypy src/ --install-types --non-interactive || true
43
+
44
+ validate-structure:
45
+ name: Validate Package Structure
46
+ runs-on: ubuntu-latest
47
+
48
+ steps:
49
+ - name: Checkout code
50
+ uses: actions/checkout@v4
51
+
52
+ - name: Set up Python
53
+ uses: actions/setup-python@v5
54
+ with:
55
+ python-version: '3.11'
56
+
57
+ - name: Install uv
58
+ uses: astral-sh/setup-uv@v4
59
+
60
+ - name: Validate pyproject.toml
61
+ run: |
62
+ uv pip install --system toml
63
+ python -c "import toml; toml.load('pyproject.toml')"
64
+
65
+ - name: Check required files
66
+ run: |
67
+ test -f README.md || (echo "Missing README.md" && exit 1)
68
+ test -f LICENSE || (echo "Missing LICENSE" && exit 1)
69
+ test -f pyproject.toml || (echo "Missing pyproject.toml" && exit 1)
70
+ test -f src/__init__.py || (echo "Missing src/__init__.py" && exit 1)
71
+ test -f src/server.py || (echo "Missing src/server.py" && exit 1)
72
+
73
+ - name: Test package build
74
+ run: |
75
+ uv build
76
+ ls -lh dist/
77
+
78
+ test-install:
79
+ name: Test Installation
80
+ runs-on: ubuntu-latest
81
+ strategy:
82
+ matrix:
83
+ python-version: ['3.11', '3.12']
84
+
85
+ steps:
86
+ - name: Checkout code
87
+ uses: actions/checkout@v4
88
+
89
+ - name: Set up Python ${{ matrix.python-version }}
90
+ uses: actions/setup-python@v5
91
+ with:
92
+ python-version: ${{ matrix.python-version }}
93
+
94
+ - name: Install uv
95
+ uses: astral-sh/setup-uv@v4
96
+
97
+ - name: Install package
98
+ run: |
99
+ uv pip install --system .
100
+
101
+ - name: Verify installation
102
+ run: |
103
+ python -c "import src; print(f'Version: {src.__version__}')"
104
+ python -c "from src.config import get_settings; print('Config module OK')"
105
+ python -c "from src.services import ImageService; print('Services module OK')"
106
+ python -c "from src.tools import generate_image_tool; print('Tools module OK')"
@@ -0,0 +1,66 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # Virtual environments
24
+ venv/
25
+ env/
26
+ ENV/
27
+ .venv
28
+
29
+ # uv
30
+ .uv/
31
+ uv.lock
32
+
33
+ # IDEs
34
+ .vscode/
35
+ .idea/
36
+ *.swp
37
+ *.swo
38
+ *~
39
+ .DS_Store
40
+
41
+ # Testing
42
+ .pytest_cache/
43
+ .coverage
44
+ htmlcov/
45
+ .tox/
46
+ .mypy_cache/
47
+ .ruff_cache/
48
+
49
+ # Environment
50
+ .env
51
+ .env.local
52
+ .env.*.local
53
+
54
+ # Generated images
55
+ generated_images/
56
+ *.png
57
+ *.jpg
58
+ *.jpeg
59
+ *.webp
60
+
61
+ # Logs
62
+ *.log
63
+ logs/
64
+
65
+ # FastMCP
66
+ .fastmcp/