shotgrid-mcp-server 0.2.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.
Files changed (42) hide show
  1. shotgrid_mcp_server-0.2.1/.coveragerc +13 -0
  2. shotgrid_mcp_server-0.2.1/.flake8 +34 -0
  3. shotgrid_mcp_server-0.2.1/.github/workflows/bumpversion.yml +23 -0
  4. shotgrid_mcp_server-0.2.1/.github/workflows/codecov.yml +47 -0
  5. shotgrid_mcp_server-0.2.1/.github/workflows/issue-translator.yml +18 -0
  6. shotgrid_mcp_server-0.2.1/.github/workflows/mr-test.yml +45 -0
  7. shotgrid_mcp_server-0.2.1/.github/workflows/python-publish.yml +74 -0
  8. shotgrid_mcp_server-0.2.1/.gitignore +30 -0
  9. shotgrid_mcp_server-0.2.1/.hound.yml +8 -0
  10. shotgrid_mcp_server-0.2.1/.pre-commit-config.yaml +12 -0
  11. shotgrid_mcp_server-0.2.1/.pylintrc +7 -0
  12. shotgrid_mcp_server-0.2.1/.python-version +1 -0
  13. shotgrid_mcp_server-0.2.1/CHANGELOG.md +21 -0
  14. shotgrid_mcp_server-0.2.1/LICENSE +21 -0
  15. shotgrid_mcp_server-0.2.1/PKG-INFO +178 -0
  16. shotgrid_mcp_server-0.2.1/README.md +149 -0
  17. shotgrid_mcp_server-0.2.1/README_zh.md +149 -0
  18. shotgrid_mcp_server-0.2.1/codecov.yml +9 -0
  19. shotgrid_mcp_server-0.2.1/nox_actions/__init__.py +1 -0
  20. shotgrid_mcp_server-0.2.1/nox_actions/codetest.py +27 -0
  21. shotgrid_mcp_server-0.2.1/nox_actions/lint.py +42 -0
  22. shotgrid_mcp_server-0.2.1/nox_actions/release.py +45 -0
  23. shotgrid_mcp_server-0.2.1/nox_actions/utils.py +6 -0
  24. shotgrid_mcp_server-0.2.1/noxfile.py +81 -0
  25. shotgrid_mcp_server-0.2.1/pyproject.toml +161 -0
  26. shotgrid_mcp_server-0.2.1/renovate.json +6 -0
  27. shotgrid_mcp_server-0.2.1/requirements-dev.txt +3 -0
  28. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/__init__.py +3 -0
  29. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/__main__.py +7 -0
  30. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/connection_pool.py +280 -0
  31. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/constants.py +51 -0
  32. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/logger.py +91 -0
  33. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/mockgun_ext.py +559 -0
  34. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/py.typed +1 -0
  35. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/server.py +432 -0
  36. shotgrid_mcp_server-0.2.1/src/shotgrid_mcp_server/utils.py +212 -0
  37. shotgrid_mcp_server-0.2.1/tests/__init__.py +1 -0
  38. shotgrid_mcp_server-0.2.1/tests/conftest.py +417 -0
  39. shotgrid_mcp_server-0.2.1/tests/data/yaml/entity_schema.yaml +411 -0
  40. shotgrid_mcp_server-0.2.1/tests/data/yaml/schema.yaml +918 -0
  41. shotgrid_mcp_server-0.2.1/tests/test_server.py +279 -0
  42. shotgrid_mcp_server-0.2.1/uv.lock +878 -0
@@ -0,0 +1,13 @@
1
+ [run]
2
+ branch = True
3
+ source =
4
+
5
+ [report]
6
+ exclude_lines =
7
+ if self.debug:
8
+ pragma: no cover
9
+ raise NotImplementedError
10
+ if __name__ == .__main__.:
11
+ ignore_errors = True
12
+ omit =
13
+ tests/*
@@ -0,0 +1,34 @@
1
+ [flake8]
2
+ ignore = BLK100
3
+
4
+ # flake8-quotes:
5
+ # Use double quotes as our default to comply with black, we like it and
6
+ # don't want to use single quotes anymore.
7
+ # We would love to configure this via our pyproject.toml but flake8-3.8 does
8
+ # not support it yet.
9
+ inline-quotes = double
10
+ multiline-quotes = double
11
+ docstring-quotes = double
12
+ avoid-escape = True
13
+
14
+ # flake8-docstrings
15
+ # Use the Google Python Styleguide Docstring format.
16
+ docstring-convention=google
17
+
18
+ exclude =
19
+ # No need to traverse our git directory
20
+ .git,
21
+ # There's no value in checking cache directories
22
+ __pycache__,
23
+ # The conf file is mostly autogenerated, ignore it
24
+ docs/source/conf.py,
25
+ # The old directory contains Flake8 2.0
26
+ old,
27
+ # This contains our built documentation
28
+ build,
29
+ # This contains builds of flake8 that we don't want to check
30
+ dist,
31
+ venv,
32
+ docs
33
+
34
+ max-line-length = 120
@@ -0,0 +1,23 @@
1
+ name: Bump version
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ bump-version:
10
+ if: "!startsWith(github.event.head_commit.message, 'bump:')"
11
+ runs-on: ubuntu-latest
12
+ name: "Bump version and create changelog with commitizen"
13
+ steps:
14
+ - name: Check out
15
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
16
+ with:
17
+ fetch-depth: 0
18
+ token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}'
19
+ - name: Create bump and changelog
20
+ uses: commitizen-tools/commitizen-action@master
21
+ with:
22
+ github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
23
+ branch: main
@@ -0,0 +1,47 @@
1
+ name: Codecov
2
+ on: [push, pull_request]
3
+ jobs:
4
+ run:
5
+ runs-on: ubuntu-latest
6
+ steps:
7
+ - name: Checkout
8
+ uses: actions/checkout@v4
9
+ with:
10
+ fetch-depth: 0
11
+ - name: Get repository name
12
+ id: repo-name
13
+ uses: MariachiBear/get-repo-name-action@v1.3.0
14
+ with:
15
+ with-owner: 'true'
16
+ string-case: 'uppercase'
17
+ - name: Set up Python 3.10
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: '3.10'
21
+ - name: Install dependencies
22
+ shell: bash
23
+ run: |
24
+ python -m pip install uv
25
+ uv venv
26
+ if [ "$RUNNER_OS" = "Windows" ]; then
27
+ source .venv/Scripts/activate
28
+ else
29
+ source .venv/bin/activate
30
+ fi
31
+ uv pip install -r requirements-dev.txt
32
+ - name: Run tests and collect coverage
33
+ shell: bash
34
+ run: |
35
+ if [ "$RUNNER_OS" = "Windows" ]; then
36
+ source .venv/Scripts/activate
37
+ else
38
+ source .venv/bin/activate
39
+ fi
40
+ nox -s tests
41
+ - name: Upload coverage reports to Codecov
42
+ uses: codecov/codecov-action@v5
43
+ with:
44
+ slug: loonghao/${{ steps.repo-name.outputs.repository-name }}
45
+ files: 'coverage.xml'
46
+ env:
47
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -0,0 +1,18 @@
1
+ name: 'issue-translator'
2
+ on:
3
+ issue_comment:
4
+ types: [created]
5
+ issues:
6
+ types: [opened]
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: usthe/issues-translate-action@v2.7
13
+ with:
14
+ IS_MODIFY_TITLE: false
15
+ # not require, default false, . Decide whether to modify the issue title
16
+ # if true, the robot account @Issues-translate-bot must have modification permissions, invite @Issues-translate-bot to your project or use your custom bot.
17
+ CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. đŸ‘¯đŸ‘­đŸģ🧑‍🤝‍🧑đŸ‘Ģ🧑đŸŋ‍🤝‍🧑đŸģ👩🏾‍🤝‍👨đŸŋđŸ‘ŦđŸŋ
18
+ # not require. Customize the translation robot prefix message.
@@ -0,0 +1,45 @@
1
+ name: MR Checks
2
+ on: [ pull_request ]
3
+
4
+ jobs:
5
+ python-check:
6
+ strategy:
7
+ max-parallel: 3
8
+ matrix:
9
+ target:
10
+ - os: 'ubuntu-latest'
11
+ triple: 'x86_64-unknown-linux-gnu'
12
+ - os: 'macos-latest'
13
+ triple: 'x86_64-apple-darwin'
14
+ - os: 'windows-latest'
15
+ triple: 'x86_64-pc-windows-msvc'
16
+ python-version: ["3.10", "3.11", "3.12"]
17
+ fail-fast: false
18
+ runs-on: ${{ matrix.target.os }}
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v4
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+ - name: Install dependencies
27
+ shell: bash
28
+ run: |
29
+ python -m pip install uv
30
+ uv venv
31
+ if [ "${{ matrix.target.os }}" = "windows-latest" ]; then
32
+ source .venv/Scripts/activate
33
+ else
34
+ source .venv/bin/activate
35
+ fi
36
+ uv pip install -r requirements-dev.txt
37
+ - name: lint
38
+ shell: bash
39
+ run: |
40
+ if [ "${{ matrix.target.os }}" = "windows-latest" ]; then
41
+ source .venv/Scripts/activate
42
+ else
43
+ source .venv/bin/activate
44
+ fi
45
+ nox -s lint
@@ -0,0 +1,74 @@
1
+ name: Upload Python Package
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ # IMPORTANT: this permission is mandatory for trusted publishing
13
+ id-token: write
14
+ contents: write
15
+
16
+ steps:
17
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
18
+ with:
19
+ token: "${{ secrets.GITHUB_TOKEN }}"
20
+ fetch-depth: 0
21
+ ref: main
22
+ - uses: olegtarasov/get-tag@v2.1.4
23
+ id: get_tag_name
24
+ with:
25
+ tagRegex: "v(?<version>.*)"
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: '3.x'
30
+ - name: Install dependencies
31
+ shell: bash
32
+ run: |
33
+ python -m pip install uv
34
+ uv venv
35
+ if [ "$RUNNER_OS" = "Windows" ]; then
36
+ source .venv/Scripts/activate
37
+ else
38
+ source .venv/bin/activate
39
+ fi
40
+ uv pip install -r requirements-dev.txt
41
+ uv --version
42
+ uv build
43
+ # Note that we don't need credentials.
44
+ # We rely on https://docs.pypi.org/trusted-publishers/.
45
+ - name: Upload to PyPI
46
+ uses: pypa/gh-action-pypi-publish@release/v1
47
+ with:
48
+ packages-dir: dist
49
+ - name: Generate changelog
50
+ id: changelog
51
+ uses: jaywcjlove/changelog-generator@main
52
+ with:
53
+ token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
54
+ filter-author: (|dependabot|renovate\\[bot\\]|dependabot\\[bot\\]|Renovate Bot)
55
+ filter: '[R|r]elease[d]\s+[v|V]\d(\.\d+){0,2}'
56
+ template: |
57
+ ## Bugs
58
+ {{fix}}
59
+ ## Feature
60
+ {{feat}}
61
+ ## Improve
62
+ {{refactor,perf,clean}}
63
+ ## Misc
64
+ {{chore,style,ci||đŸ”ļ Nothing change}}
65
+ ## Unknown
66
+ {{__unknown__}}
67
+ - uses: ncipollo/release-action@v1
68
+ with:
69
+ artifacts: "dist/*"
70
+ token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
71
+ body: |
72
+ Comparing Changes: ${{ steps.changelog.outputs.compareurl }}
73
+
74
+ ${{ steps.changelog.outputs.changelog }}
@@ -0,0 +1,30 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ *.py[cod]
3
+
4
+ # PyCharm project files
5
+ .idea/
6
+
7
+ # Vim / Notepad++ temp files
8
+ *~
9
+
10
+ # Coverage output
11
+ .coverage
12
+
13
+ # Documentation build folders.
14
+ docs/_*
15
+ docs/src/*
16
+ target/*
17
+ /venv/
18
+ /run_pycharm.bat
19
+ /.nox/
20
+ /build/
21
+ /coverage.xml
22
+ /.zip/
23
+ /.env
24
+ /.windsurfrules
25
+ /docs/
26
+ /dist/
27
+ /.venv/
28
+ /tests/data/convert_schema.py
29
+ /tests/data/schema.bin
30
+ /tests/data/entity_schema.bin
@@ -0,0 +1,8 @@
1
+ python:
2
+ enabled: true
3
+
4
+ flake8:
5
+ enabled: true
6
+ config_file: .flake8
7
+
8
+ fail_on_violations: true
@@ -0,0 +1,12 @@
1
+ default_language_version:
2
+ python: python3.10
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v4.3.0
6
+ hooks:
7
+ - id: no-commit-to-branch # prevent direct commits to main branch
8
+ - id: check-yaml
9
+ args: ["--unsafe"]
10
+ - id: check-toml
11
+ - id: end-of-file-fixer
12
+ - id: trailing-whitespace
@@ -0,0 +1,7 @@
1
+ # Generated Pylint configuration file that disables default output tables.
2
+
3
+ [MESSAGES CONTROL]
4
+ disable=RP0001,RP0002,RP0003,RP0101,RP0401,RP0402,RP0701,RP0801,C0103,R0903
5
+
6
+ [REPORTS]
7
+ output-format=text
@@ -0,0 +1 @@
1
+ 3.10
@@ -0,0 +1,21 @@
1
+ ## v0.2.1 (2025-01-05)
2
+
3
+ ### Refactor
4
+
5
+ - **workflows**: Update dependency installation in workflows
6
+
7
+ ## v0.2.0 (2025-01-05)
8
+
9
+ ### Feat
10
+
11
+ - Implement ShotGrid client factories and enhance connection pool
12
+
13
+ ### Refactor
14
+
15
+ - **server**: Refactor server tools registration and error handling
16
+
17
+ ## v0.1.0 (2025-01-05)
18
+
19
+ ### Feat
20
+
21
+ - Initialize ShotGrid MCP Server project structure and dependencies Add initial files and directories for the ShotGrid MCP Server project, including examples, src, tests, and documentation.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Hal
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,178 @@
1
+ Metadata-Version: 2.4
2
+ Name: shotgrid-mcp-server
3
+ Version: 0.2.1
4
+ Summary: A Model Context Protocol (MCP) server implementation using fastmcp
5
+ License-File: LICENSE
6
+ Requires-Python: <3.11,>=3.10
7
+ Requires-Dist: aiohttp>=3.9.0
8
+ Requires-Dist: fastmcp>=0.4.1
9
+ Requires-Dist: mcp>=1.2.0
10
+ Requires-Dist: platformdirs>=2.5.4
11
+ Requires-Dist: pydantic>=2.0.0
12
+ Requires-Dist: python-dotenv>=1.0.0
13
+ Requires-Dist: requests>=2.32.3
14
+ Requires-Dist: shotgun-api3
15
+ Requires-Dist: six>=1.16.0
16
+ Requires-Dist: uvicorn>=0.22.0
17
+ Provides-Extra: lint
18
+ Requires-Dist: black; extra == 'lint'
19
+ Requires-Dist: mypy; extra == 'lint'
20
+ Requires-Dist: ruff; extra == 'lint'
21
+ Requires-Dist: types-requests; extra == 'lint'
22
+ Provides-Extra: test
23
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
24
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
25
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
26
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
27
+ Requires-Dist: pyyaml; extra == 'test'
28
+ Description-Content-Type: text/markdown
29
+
30
+ # đŸŽ¯ ShotGrid MCP Server
31
+
32
+ English | [įŽ€äŊ“中文](README_zh.md)
33
+
34
+ <div align="center">
35
+
36
+ A high-performance ShotGrid Model Context Protocol (MCP) server implementation based on fastmcp
37
+
38
+ [![Python Version](https://img.shields.io/pypi/pyversions/shotgrid-mcp-server.svg)](https://pypi.org/project/shotgrid-mcp-server/)
39
+ [![License](https://img.shields.io/github/license/loonghao/shotgrid-mcp-server.svg)](LICENSE)
40
+ [![PyPI version](https://badge.fury.io/py/shotgrid-mcp-server.svg)](https://badge.fury.io/py/shotgrid-mcp-server)
41
+ [![Downloads](https://pepy.tech/badge/shotgrid-mcp-server)](https://pepy.tech/project/shotgrid-mcp-server)
42
+
43
+ </div>
44
+
45
+ ## ✨ Features
46
+
47
+ - 🚀 High-performance implementation based on fastmcp
48
+ - 🛠 Complete CRUD operation toolset
49
+ - đŸ–ŧ Dedicated thumbnail download/upload tools
50
+ - 🔄 Efficient connection pool management
51
+ - ✅ Comprehensive test coverage with pytest
52
+ - đŸ“Ļ Dependency management with UV
53
+ - 🌐 Cross-platform support (Windows, macOS, Linux)
54
+
55
+ ## 🚀 Quick Start
56
+
57
+ ### Installation
58
+
59
+ Install using UV:
60
+ ```bash
61
+ uv pip install shotgrid-mcp-server
62
+ ```
63
+
64
+ ### Development Setup
65
+
66
+ 1. Clone the repository:
67
+ ```bash
68
+ git clone https://github.com/loonghao/shotgrid-mcp-server.git
69
+ cd shotgrid-mcp-server
70
+ ```
71
+
72
+ 2. Install development dependencies:
73
+ ```bash
74
+ pip install -r requirements-dev.txt
75
+ ```
76
+
77
+ 3. Development Commands
78
+ All development commands are managed through nox. Check `noxfile.py` for available commands:
79
+ ```bash
80
+ # Run tests
81
+ nox -s tests
82
+
83
+ # Run linting
84
+ nox -s lint
85
+
86
+ # Run type checking
87
+ nox -s type_check
88
+
89
+ # And more...
90
+ ```
91
+
92
+ ## âš™ī¸ Configuration
93
+
94
+ ### Environment Variables
95
+
96
+ Create a `.env` file with the following variables:
97
+ ```bash
98
+ SHOTGRID_URL=your_shotgrid_url
99
+ SCRIPT_NAME=your_script_name
100
+ SCRIPT_KEY=your_script_key
101
+ ```
102
+
103
+ ## 🔧 Available Tools
104
+
105
+ - `create`: Create ShotGrid entities
106
+ - `read`: Read entity information
107
+ - `update`: Update entity data
108
+ - `delete`: Delete entities
109
+ - `download_thumbnail`: Download entity thumbnails
110
+ - `upload_thumbnail`: Upload entity thumbnails
111
+
112
+ ## 📚 API Documentation
113
+
114
+ For detailed API documentation, please refer to the documentation files in the `/docs` directory.
115
+
116
+ ## 🤝 Contributing
117
+
118
+ Contributions are welcome! Please ensure:
119
+
120
+ 1. Follow Google Python Style Guide
121
+ 2. Write tests using pytest
122
+ 3. Update documentation
123
+ 4. Use absolute imports
124
+ 5. Follow the project's coding standards
125
+
126
+ ## 📝 Version History
127
+
128
+ See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
129
+
130
+ ## 📄 License
131
+
132
+ MIT License - see the [LICENSE](LICENSE) file for details.
133
+
134
+ ## 🔌 MCP Client Configuration
135
+
136
+ To use the ShotGrid MCP server in your MCP client, add the following configuration to your client's settings:
137
+
138
+ ```json
139
+ {
140
+ "mcpServers": {
141
+ "shotgrid-server": {
142
+ "command": "uvx",
143
+ "args": [
144
+ "shotgrid-mcp-server"
145
+ ],
146
+ "env": {
147
+ "SCRIPT_NAME": "XXX",
148
+ "SCRIPT_KEY": "XX",
149
+ "SHOTGRID_URL": "XXXX"
150
+ },
151
+ "disabled": false,
152
+ "alwaysAllow": [
153
+ "search_entities",
154
+ "create_entity",
155
+ "batch_create",
156
+ "find_entity",
157
+ "get_entity_types",
158
+ "update_entity",
159
+ "download_thumbnail",
160
+ "batch_update",
161
+ "delete_entity",
162
+ "batch_delete"
163
+ ]
164
+ }
165
+ }
166
+ }
167
+ ```
168
+
169
+ ### 🔑 Credentials Setup
170
+
171
+ Replace the following values with your ShotGrid credentials:
172
+ - `SCRIPT_NAME`: Your ShotGrid script name
173
+ - `SCRIPT_KEY`: Your ShotGrid script key
174
+ - `SHOTGRID_URL`: Your ShotGrid server URL
175
+
176
+ ### đŸ›Ąī¸ Tool Permissions
177
+
178
+ The `alwaysAllow` section lists the tools that can be executed without requiring user confirmation. These tools are carefully selected for safe operations.
@@ -0,0 +1,149 @@
1
+ # đŸŽ¯ ShotGrid MCP Server
2
+
3
+ English | [įŽ€äŊ“中文](README_zh.md)
4
+
5
+ <div align="center">
6
+
7
+ A high-performance ShotGrid Model Context Protocol (MCP) server implementation based on fastmcp
8
+
9
+ [![Python Version](https://img.shields.io/pypi/pyversions/shotgrid-mcp-server.svg)](https://pypi.org/project/shotgrid-mcp-server/)
10
+ [![License](https://img.shields.io/github/license/loonghao/shotgrid-mcp-server.svg)](LICENSE)
11
+ [![PyPI version](https://badge.fury.io/py/shotgrid-mcp-server.svg)](https://badge.fury.io/py/shotgrid-mcp-server)
12
+ [![Downloads](https://pepy.tech/badge/shotgrid-mcp-server)](https://pepy.tech/project/shotgrid-mcp-server)
13
+
14
+ </div>
15
+
16
+ ## ✨ Features
17
+
18
+ - 🚀 High-performance implementation based on fastmcp
19
+ - 🛠 Complete CRUD operation toolset
20
+ - đŸ–ŧ Dedicated thumbnail download/upload tools
21
+ - 🔄 Efficient connection pool management
22
+ - ✅ Comprehensive test coverage with pytest
23
+ - đŸ“Ļ Dependency management with UV
24
+ - 🌐 Cross-platform support (Windows, macOS, Linux)
25
+
26
+ ## 🚀 Quick Start
27
+
28
+ ### Installation
29
+
30
+ Install using UV:
31
+ ```bash
32
+ uv pip install shotgrid-mcp-server
33
+ ```
34
+
35
+ ### Development Setup
36
+
37
+ 1. Clone the repository:
38
+ ```bash
39
+ git clone https://github.com/loonghao/shotgrid-mcp-server.git
40
+ cd shotgrid-mcp-server
41
+ ```
42
+
43
+ 2. Install development dependencies:
44
+ ```bash
45
+ pip install -r requirements-dev.txt
46
+ ```
47
+
48
+ 3. Development Commands
49
+ All development commands are managed through nox. Check `noxfile.py` for available commands:
50
+ ```bash
51
+ # Run tests
52
+ nox -s tests
53
+
54
+ # Run linting
55
+ nox -s lint
56
+
57
+ # Run type checking
58
+ nox -s type_check
59
+
60
+ # And more...
61
+ ```
62
+
63
+ ## âš™ī¸ Configuration
64
+
65
+ ### Environment Variables
66
+
67
+ Create a `.env` file with the following variables:
68
+ ```bash
69
+ SHOTGRID_URL=your_shotgrid_url
70
+ SCRIPT_NAME=your_script_name
71
+ SCRIPT_KEY=your_script_key
72
+ ```
73
+
74
+ ## 🔧 Available Tools
75
+
76
+ - `create`: Create ShotGrid entities
77
+ - `read`: Read entity information
78
+ - `update`: Update entity data
79
+ - `delete`: Delete entities
80
+ - `download_thumbnail`: Download entity thumbnails
81
+ - `upload_thumbnail`: Upload entity thumbnails
82
+
83
+ ## 📚 API Documentation
84
+
85
+ For detailed API documentation, please refer to the documentation files in the `/docs` directory.
86
+
87
+ ## 🤝 Contributing
88
+
89
+ Contributions are welcome! Please ensure:
90
+
91
+ 1. Follow Google Python Style Guide
92
+ 2. Write tests using pytest
93
+ 3. Update documentation
94
+ 4. Use absolute imports
95
+ 5. Follow the project's coding standards
96
+
97
+ ## 📝 Version History
98
+
99
+ See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
100
+
101
+ ## 📄 License
102
+
103
+ MIT License - see the [LICENSE](LICENSE) file for details.
104
+
105
+ ## 🔌 MCP Client Configuration
106
+
107
+ To use the ShotGrid MCP server in your MCP client, add the following configuration to your client's settings:
108
+
109
+ ```json
110
+ {
111
+ "mcpServers": {
112
+ "shotgrid-server": {
113
+ "command": "uvx",
114
+ "args": [
115
+ "shotgrid-mcp-server"
116
+ ],
117
+ "env": {
118
+ "SCRIPT_NAME": "XXX",
119
+ "SCRIPT_KEY": "XX",
120
+ "SHOTGRID_URL": "XXXX"
121
+ },
122
+ "disabled": false,
123
+ "alwaysAllow": [
124
+ "search_entities",
125
+ "create_entity",
126
+ "batch_create",
127
+ "find_entity",
128
+ "get_entity_types",
129
+ "update_entity",
130
+ "download_thumbnail",
131
+ "batch_update",
132
+ "delete_entity",
133
+ "batch_delete"
134
+ ]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ ### 🔑 Credentials Setup
141
+
142
+ Replace the following values with your ShotGrid credentials:
143
+ - `SCRIPT_NAME`: Your ShotGrid script name
144
+ - `SCRIPT_KEY`: Your ShotGrid script key
145
+ - `SHOTGRID_URL`: Your ShotGrid server URL
146
+
147
+ ### đŸ›Ąī¸ Tool Permissions
148
+
149
+ The `alwaysAllow` section lists the tools that can be executed without requiring user confirmation. These tools are carefully selected for safe operations.