ableton-ai 2.1.0__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.
- ableton_ai-2.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +70 -0
- ableton_ai-2.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +42 -0
- ableton_ai-2.1.0/.github/PULL_REQUEST_TEMPLATE.md +29 -0
- ableton_ai-2.1.0/.github/workflows/fix-code-style.yml +36 -0
- ableton_ai-2.1.0/.github/workflows/lint.yml +32 -0
- ableton_ai-2.1.0/.github/workflows/tests.yml +34 -0
- ableton_ai-2.1.0/.gitignore +19 -0
- ableton_ai-2.1.0/.pre-commit-config.yaml +28 -0
- ableton_ai-2.1.0/.python-version +1 -0
- ableton_ai-2.1.0/AbletonMCP_M4L/AbletonMCP.amxd.maxpat +456 -0
- ableton_ai-2.1.0/AbletonMCP_M4L/README.md +124 -0
- ableton_ai-2.1.0/AbletonMCP_M4L/code/main.js +2800 -0
- ableton_ai-2.1.0/AbletonMCP_Remote_Script/__init__.py +7221 -0
- ableton_ai-2.1.0/CHANGELOG.md +88 -0
- ableton_ai-2.1.0/CONTRIBUTING.md +199 -0
- ableton_ai-2.1.0/Dockerfile +18 -0
- ableton_ai-2.1.0/LICENSE +23 -0
- ableton_ai-2.1.0/MCP_Server/__init__.py +9 -0
- ableton_ai-2.1.0/MCP_Server/requirements-rest.txt +5 -0
- ableton_ai-2.1.0/MCP_Server/rest_api_server.py +2130 -0
- ableton_ai-2.1.0/PKG-INFO +178 -0
- ableton_ai-2.1.0/README.md +141 -0
- ableton_ai-2.1.0/docs/API_REFERENCE.md +1478 -0
- ableton_ai-2.1.0/docs/CONFIG.md +381 -0
- ableton_ai-2.1.0/docs/MANUAL.md +1334 -0
- ableton_ai-2.1.0/docs/TOOLS.md +1304 -0
- ableton_ai-2.1.0/docs/TROUBLESHOOTING.md +239 -0
- ableton_ai-2.1.0/examples/README.md +119 -0
- ableton_ai-2.1.0/examples/ollama_example.py +267 -0
- ableton_ai-2.1.0/pyproject.toml +148 -0
- ableton_ai-2.1.0/pytest.ini +11 -0
- ableton_ai-2.1.0/skills/ableton/SKILL.md +189 -0
- ableton_ai-2.1.0/smithery.yaml +16 -0
- ableton_ai-2.1.0/src/ableton_mcp/__init__.py +39 -0
- ableton_ai-2.1.0/src/ableton_mcp/config.py +95 -0
- ableton_ai-2.1.0/src/ableton_mcp/connection.py +210 -0
- ableton_ai-2.1.0/src/ableton_mcp/exceptions.py +66 -0
- ableton_ai-2.1.0/src/ableton_mcp/install.py +103 -0
- ableton_ai-2.1.0/src/ableton_mcp/server.py +60 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/__init__.py +58 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/_base.py +71 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/arrangement.py +179 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/automation.py +72 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/browser.py +214 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/clips.py +290 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/devices.py +183 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/music.py +40 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/notes.py +138 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/session.py +396 -0
- ableton_ai-2.1.0/src/ableton_mcp/tools/tracks.py +477 -0
- ableton_ai-2.1.0/tests/__init__.py +0 -0
- ableton_ai-2.1.0/tests/conftest.py +343 -0
- ableton_ai-2.1.0/tests/fixtures/__init__.py +0 -0
- ableton_ai-2.1.0/tests/fixtures/mock_ableton.py +275 -0
- ableton_ai-2.1.0/tests/integration/__init__.py +0 -0
- ableton_ai-2.1.0/tests/integration/test_workflows.py +621 -0
- ableton_ai-2.1.0/tests/requirements-test.txt +6 -0
- ableton_ai-2.1.0/tests/unit/__init__.py +0 -0
- ableton_ai-2.1.0/tests/unit/test_connection.py +195 -0
- ableton_ai-2.1.0/tests/unit/test_error_handling.py +601 -0
- ableton_ai-2.1.0/tests/unit/test_install.py +70 -0
- ableton_ai-2.1.0/tests/unit/test_rest_api_complete.py +1795 -0
- ableton_ai-2.1.0/tests/unit/test_security.py +649 -0
- ableton_ai-2.1.0/tests/unit/test_tools.py +140 -0
- ableton_ai-2.1.0/tests/unit/test_validation.py +777 -0
- ableton_ai-2.1.0/uv.lock +1230 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug or issue
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: component
|
|
7
|
+
attributes:
|
|
8
|
+
label: Component
|
|
9
|
+
description: Which part of AbletonMCP is affected?
|
|
10
|
+
options:
|
|
11
|
+
- Remote Script (Ableton control surface)
|
|
12
|
+
- MCP Server (Claude Desktop / Cursor)
|
|
13
|
+
- REST API Server
|
|
14
|
+
- Max for Live Device
|
|
15
|
+
- Documentation
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- type: input
|
|
20
|
+
id: ableton-version
|
|
21
|
+
attributes:
|
|
22
|
+
label: Ableton Live Version
|
|
23
|
+
placeholder: "e.g. 12.1, 11.3.4"
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
|
|
27
|
+
- type: input
|
|
28
|
+
id: os
|
|
29
|
+
attributes:
|
|
30
|
+
label: Operating System
|
|
31
|
+
placeholder: "e.g. macOS 15.2, Windows 11"
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
|
|
35
|
+
- type: textarea
|
|
36
|
+
id: description
|
|
37
|
+
attributes:
|
|
38
|
+
label: What happened?
|
|
39
|
+
description: Describe the bug. What did you expect to happen vs what actually happened?
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
|
|
43
|
+
- type: textarea
|
|
44
|
+
id: steps
|
|
45
|
+
attributes:
|
|
46
|
+
label: Steps to reproduce
|
|
47
|
+
description: How can we reproduce this issue?
|
|
48
|
+
placeholder: |
|
|
49
|
+
1. Load the Remote Script
|
|
50
|
+
2. Send command X
|
|
51
|
+
3. See error
|
|
52
|
+
validations:
|
|
53
|
+
required: true
|
|
54
|
+
|
|
55
|
+
- type: textarea
|
|
56
|
+
id: logs
|
|
57
|
+
attributes:
|
|
58
|
+
label: Error logs
|
|
59
|
+
description: Paste any relevant error messages or logs (check Ableton's Log.txt or Max Console)
|
|
60
|
+
render: shell
|
|
61
|
+
validations:
|
|
62
|
+
required: false
|
|
63
|
+
|
|
64
|
+
- type: input
|
|
65
|
+
id: command
|
|
66
|
+
attributes:
|
|
67
|
+
label: Command that failed (if applicable)
|
|
68
|
+
placeholder: "e.g. set_clip_automation, freeze_track"
|
|
69
|
+
validations:
|
|
70
|
+
required: false
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest a new feature or improvement
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: component
|
|
7
|
+
attributes:
|
|
8
|
+
label: Component
|
|
9
|
+
description: Which part of AbletonMCP would this affect?
|
|
10
|
+
options:
|
|
11
|
+
- Remote Script (new Ableton command)
|
|
12
|
+
- MCP Server
|
|
13
|
+
- REST API Server
|
|
14
|
+
- Max for Live Device
|
|
15
|
+
- Documentation
|
|
16
|
+
- Other
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: description
|
|
22
|
+
attributes:
|
|
23
|
+
label: What would you like?
|
|
24
|
+
description: Describe the feature or improvement you'd like to see
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: use-case
|
|
30
|
+
attributes:
|
|
31
|
+
label: Use case
|
|
32
|
+
description: How would you use this feature in your workflow?
|
|
33
|
+
validations:
|
|
34
|
+
required: false
|
|
35
|
+
|
|
36
|
+
- type: textarea
|
|
37
|
+
id: alternatives
|
|
38
|
+
attributes:
|
|
39
|
+
label: Alternatives considered
|
|
40
|
+
description: Have you tried any workarounds?
|
|
41
|
+
validations:
|
|
42
|
+
required: false
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
## What does this PR do?
|
|
2
|
+
|
|
3
|
+
<!-- Brief description of the changes -->
|
|
4
|
+
|
|
5
|
+
## Component
|
|
6
|
+
|
|
7
|
+
<!-- Check the relevant boxes -->
|
|
8
|
+
|
|
9
|
+
- [ ] Remote Script
|
|
10
|
+
- [ ] MCP Server
|
|
11
|
+
- [ ] REST API Server
|
|
12
|
+
- [ ] Max for Live Device
|
|
13
|
+
- [ ] Documentation
|
|
14
|
+
- [ ] Tests
|
|
15
|
+
|
|
16
|
+
## Testing
|
|
17
|
+
|
|
18
|
+
<!-- How did you test these changes? -->
|
|
19
|
+
|
|
20
|
+
- [ ] Tested in Ableton Live (version: )
|
|
21
|
+
- [ ] Ran existing tests
|
|
22
|
+
- [ ] Added new tests
|
|
23
|
+
|
|
24
|
+
## Checklist
|
|
25
|
+
|
|
26
|
+
- [ ] Code follows existing style
|
|
27
|
+
- [ ] Updated ALLOWED_COMMANDS in rest_api_server.py (if adding new commands)
|
|
28
|
+
- [ ] Updated command routing in Remote Script _process_command (if adding new commands)
|
|
29
|
+
- [ ] No secrets or credentials in code
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# The equivalent of Spatie's fix-php-code-style-issues workflow.
|
|
2
|
+
# Instead of failing a PR over formatting, it fixes it and pushes the fix back.
|
|
3
|
+
name: fix code style
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
paths:
|
|
9
|
+
- "**.py"
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
ruff:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
name: ruff fix
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
ref: ${{ github.head_ref }}
|
|
23
|
+
|
|
24
|
+
- uses: astral-sh/setup-uv@v5
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
|
|
28
|
+
- name: Fix and format
|
|
29
|
+
run: |
|
|
30
|
+
uvx ruff check --fix src tests
|
|
31
|
+
uvx ruff format src tests
|
|
32
|
+
|
|
33
|
+
- name: Commit anything that changed
|
|
34
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
35
|
+
with:
|
|
36
|
+
commit_message: "Fix code style with ruff"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
ruff:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
name: ruff
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: astral-sh/setup-uv@v5
|
|
15
|
+
with:
|
|
16
|
+
enable-cache: true
|
|
17
|
+
- run: uv sync --all-extras
|
|
18
|
+
- name: Check formatting
|
|
19
|
+
run: uv run ruff format --check src tests
|
|
20
|
+
- name: Lint
|
|
21
|
+
run: uv run ruff check src tests
|
|
22
|
+
|
|
23
|
+
mypy:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
name: mypy
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: astral-sh/setup-uv@v5
|
|
29
|
+
with:
|
|
30
|
+
enable-cache: true
|
|
31
|
+
- run: uv sync --all-extras
|
|
32
|
+
- run: uv run mypy
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
os: [ubuntu-latest, macos-latest]
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
16
|
+
|
|
17
|
+
name: ${{ matrix.os }} / python ${{ matrix.python-version }}
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v5
|
|
24
|
+
with:
|
|
25
|
+
enable-cache: true
|
|
26
|
+
|
|
27
|
+
- name: Set up Python
|
|
28
|
+
run: uv python install ${{ matrix.python-version }}
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: uv sync --all-extras
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: uv run pytest --cov --cov-report=term-missing -m "not integration"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
.DS_Store
|
|
12
|
+
|
|
13
|
+
# Coverage
|
|
14
|
+
.coverage
|
|
15
|
+
.coverage.*
|
|
16
|
+
htmlcov/
|
|
17
|
+
|
|
18
|
+
# bundled at build time via force-include; source-tree copy for local dev only
|
|
19
|
+
src/ableton_mcp/_remote_script/
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Install once with: uv run pre-commit install
|
|
2
|
+
# Run against everything with: uv run pre-commit run --all-files
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
5
|
+
rev: v0.14.2
|
|
6
|
+
hooks:
|
|
7
|
+
# Autofix first, then format. Order matters: fixes can change formatting.
|
|
8
|
+
- id: ruff
|
|
9
|
+
args: [--fix, --exit-non-zero-on-fix]
|
|
10
|
+
- id: ruff-format
|
|
11
|
+
|
|
12
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
13
|
+
rev: v5.0.0
|
|
14
|
+
hooks:
|
|
15
|
+
- id: trailing-whitespace
|
|
16
|
+
- id: end-of-file-fixer
|
|
17
|
+
- id: check-yaml
|
|
18
|
+
- id: check-toml
|
|
19
|
+
- id: check-added-large-files
|
|
20
|
+
- id: check-merge-conflict
|
|
21
|
+
- id: debug-statements
|
|
22
|
+
|
|
23
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
24
|
+
rev: v1.18.2
|
|
25
|
+
hooks:
|
|
26
|
+
- id: mypy
|
|
27
|
+
files: ^src/
|
|
28
|
+
additional_dependencies: [types-requests]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|