claude-code-templates 1.3.2 → 1.3.3
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.
- package/package.json +2 -1
- package/src/command-scanner.js +1 -1
- package/src/file-operations.js +1 -1
- package/src/hook-scanner.js +2 -2
- package/templates/common/.claude/commands/git-workflow.md +239 -0
- package/templates/common/.claude/commands/project-setup.md +316 -0
- package/templates/common/.mcp.json +41 -0
- package/templates/common/CLAUDE.md +109 -0
- package/templates/common/README.md +96 -0
- package/templates/go/.mcp.json +78 -0
- package/templates/go/README.md +25 -0
- package/templates/javascript-typescript/.claude/commands/api-endpoint.md +51 -0
- package/templates/javascript-typescript/.claude/commands/debug.md +52 -0
- package/templates/javascript-typescript/.claude/commands/lint.md +48 -0
- package/templates/javascript-typescript/.claude/commands/npm-scripts.md +48 -0
- package/templates/javascript-typescript/.claude/commands/refactor.md +55 -0
- package/templates/javascript-typescript/.claude/commands/test.md +61 -0
- package/templates/javascript-typescript/.claude/commands/typescript-migrate.md +51 -0
- package/templates/javascript-typescript/.claude/settings.json +142 -0
- package/templates/javascript-typescript/.mcp.json +80 -0
- package/templates/javascript-typescript/CLAUDE.md +185 -0
- package/templates/javascript-typescript/README.md +259 -0
- package/templates/javascript-typescript/examples/angular-app/.claude/commands/components.md +63 -0
- package/templates/javascript-typescript/examples/angular-app/.claude/commands/services.md +62 -0
- package/templates/javascript-typescript/examples/node-api/.claude/commands/api-endpoint.md +46 -0
- package/templates/javascript-typescript/examples/node-api/.claude/commands/database.md +56 -0
- package/templates/javascript-typescript/examples/node-api/.claude/commands/middleware.md +61 -0
- package/templates/javascript-typescript/examples/node-api/.claude/commands/route.md +57 -0
- package/templates/javascript-typescript/examples/node-api/CLAUDE.md +102 -0
- package/templates/javascript-typescript/examples/react-app/.claude/commands/component.md +29 -0
- package/templates/javascript-typescript/examples/react-app/.claude/commands/hooks.md +44 -0
- package/templates/javascript-typescript/examples/react-app/.claude/commands/state-management.md +45 -0
- package/templates/javascript-typescript/examples/react-app/CLAUDE.md +81 -0
- package/templates/javascript-typescript/examples/vue-app/.claude/commands/components.md +46 -0
- package/templates/javascript-typescript/examples/vue-app/.claude/commands/composables.md +51 -0
- package/templates/python/.claude/commands/lint.md +111 -0
- package/templates/python/.claude/commands/test.md +73 -0
- package/templates/python/.claude/settings.json +153 -0
- package/templates/python/.mcp.json +78 -0
- package/templates/python/CLAUDE.md +276 -0
- package/templates/python/examples/django-app/.claude/commands/admin.md +264 -0
- package/templates/python/examples/django-app/.claude/commands/django-model.md +124 -0
- package/templates/python/examples/django-app/.claude/commands/views.md +222 -0
- package/templates/python/examples/django-app/CLAUDE.md +313 -0
- package/templates/python/examples/fastapi-app/.claude/commands/api-endpoints.md +513 -0
- package/templates/python/examples/fastapi-app/.claude/commands/auth.md +775 -0
- package/templates/python/examples/fastapi-app/.claude/commands/database.md +657 -0
- package/templates/python/examples/fastapi-app/.claude/commands/deployment.md +160 -0
- package/templates/python/examples/fastapi-app/.claude/commands/testing.md +927 -0
- package/templates/python/examples/fastapi-app/CLAUDE.md +229 -0
- package/templates/python/examples/flask-app/.claude/commands/app-factory.md +384 -0
- package/templates/python/examples/flask-app/.claude/commands/blueprint.md +243 -0
- package/templates/python/examples/flask-app/.claude/commands/database.md +410 -0
- package/templates/python/examples/flask-app/.claude/commands/deployment.md +620 -0
- package/templates/python/examples/flask-app/.claude/commands/flask-route.md +217 -0
- package/templates/python/examples/flask-app/.claude/commands/testing.md +559 -0
- package/templates/python/examples/flask-app/CLAUDE.md +391 -0
- package/templates/rust/.mcp.json +78 -0
- package/templates/rust/README.md +26 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Vue Components
|
|
2
|
+
|
|
3
|
+
Create Vue Single File Components for $ARGUMENTS following project conventions.
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
Create or optimize Vue components based on the requirements:
|
|
8
|
+
|
|
9
|
+
1. **Analyze project structure**: Check existing Vue components to understand patterns, conventions, and file organization
|
|
10
|
+
2. **Examine Vue setup**: Identify Vue version (2/3), TypeScript usage, and Composition/Options API preference
|
|
11
|
+
3. **Check styling approach**: Determine if using CSS modules, SCSS, styled-components, or other styling methods
|
|
12
|
+
4. **Review testing patterns**: Check existing component tests to understand testing framework and conventions
|
|
13
|
+
5. **Create component structure**: Generate SFC with template, script, and style sections
|
|
14
|
+
6. **Implement component**: Write TypeScript interfaces, props, emits, and component logic
|
|
15
|
+
7. **Add accessibility**: Include proper ARIA attributes and semantic HTML
|
|
16
|
+
8. **Create tests**: Write comprehensive component tests following project patterns
|
|
17
|
+
9. **Add documentation**: Include JSDoc comments and usage examples
|
|
18
|
+
|
|
19
|
+
## Component Requirements
|
|
20
|
+
|
|
21
|
+
- Follow project's TypeScript conventions and interfaces
|
|
22
|
+
- Use existing component patterns and naming conventions
|
|
23
|
+
- Implement proper props validation and typing
|
|
24
|
+
- Add appropriate event emissions with TypeScript signatures
|
|
25
|
+
- Include scoped styles following project's styling approach
|
|
26
|
+
- Add proper accessibility attributes (ARIA, semantic HTML)
|
|
27
|
+
- Consider responsive design if applicable
|
|
28
|
+
|
|
29
|
+
## Vue Patterns to Consider
|
|
30
|
+
|
|
31
|
+
Based on the component type:
|
|
32
|
+
- **Composition API**: For Vue 3 projects with `<script setup>`
|
|
33
|
+
- **Options API**: For Vue 2 or legacy Vue 3 projects
|
|
34
|
+
- **Composables**: Extract reusable logic into composables
|
|
35
|
+
- **Provide/Inject**: For deep component communication
|
|
36
|
+
- **Slots**: For flexible component content
|
|
37
|
+
- **Teleport**: For portal-like functionality (Vue 3)
|
|
38
|
+
|
|
39
|
+
## Important Notes
|
|
40
|
+
|
|
41
|
+
- ALWAYS examine existing components first to understand project patterns
|
|
42
|
+
- Use the same Vue API style (Composition vs Options) as the project
|
|
43
|
+
- Follow project's folder structure for components
|
|
44
|
+
- Don't install new dependencies without asking
|
|
45
|
+
- Consider component performance (v-memo, computed properties)
|
|
46
|
+
- Add proper TypeScript types for all props and emits
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Vue Composables
|
|
2
|
+
|
|
3
|
+
Create Vue composables for $ARGUMENTS following project conventions.
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
Create or optimize Vue composables based on the requirements:
|
|
8
|
+
|
|
9
|
+
1. **Analyze existing composables**: Check project for existing composable patterns, naming conventions, and file organization
|
|
10
|
+
2. **Examine Vue setup**: Verify Vue 3 Composition API usage and TypeScript configuration
|
|
11
|
+
3. **Identify composable type**: Determine the composable category:
|
|
12
|
+
- State management (reactive data, computed properties)
|
|
13
|
+
- API/HTTP operations (data fetching, mutations)
|
|
14
|
+
- DOM interactions (event listeners, element refs)
|
|
15
|
+
- Utility functions (validation, formatting, storage)
|
|
16
|
+
- Lifecycle management (cleanup, watchers)
|
|
17
|
+
4. **Check dependencies**: Review existing composables to avoid duplication
|
|
18
|
+
5. **Implement composable**: Create composable with proper TypeScript types and reactivity
|
|
19
|
+
6. **Add lifecycle management**: Include proper cleanup with onUnmounted when needed
|
|
20
|
+
7. **Create tests**: Write comprehensive unit tests for composable logic
|
|
21
|
+
8. **Add documentation**: Include JSDoc comments and usage examples
|
|
22
|
+
|
|
23
|
+
## Implementation Requirements
|
|
24
|
+
|
|
25
|
+
- Follow project's TypeScript conventions and interfaces
|
|
26
|
+
- Use appropriate Vue reactivity APIs (ref, reactive, computed, watch)
|
|
27
|
+
- Include proper error handling and loading states
|
|
28
|
+
- Add cleanup for side effects (event listeners, timers, subscriptions)
|
|
29
|
+
- Make composables reusable and focused on single responsibility
|
|
30
|
+
- Consider performance implications (shallow vs deep reactivity)
|
|
31
|
+
|
|
32
|
+
## Common Composable Patterns
|
|
33
|
+
|
|
34
|
+
Based on the request:
|
|
35
|
+
- **Data fetching**: API calls with loading/error states
|
|
36
|
+
- **Form handling**: Input management, validation, submission
|
|
37
|
+
- **State management**: Local state, persistence, computed values
|
|
38
|
+
- **DOM utilities**: Element refs, event handling, intersection observer
|
|
39
|
+
- **Storage**: localStorage, sessionStorage, IndexedDB
|
|
40
|
+
- **Authentication**: User state, token management, permissions
|
|
41
|
+
- **UI utilities**: Dark mode, responsive breakpoints, modals
|
|
42
|
+
|
|
43
|
+
## Important Notes
|
|
44
|
+
|
|
45
|
+
- ALWAYS examine existing composables first to understand project patterns
|
|
46
|
+
- Use proper Vue 3 Composition API patterns
|
|
47
|
+
- Follow project's folder structure for composables (usually /composables)
|
|
48
|
+
- Don't install new dependencies without asking
|
|
49
|
+
- Consider composable composition (using other composables within composables)
|
|
50
|
+
- Add proper TypeScript return types and generic constraints
|
|
51
|
+
- Include proper reactivity patterns (avoid losing reactivity)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Python Linter
|
|
2
|
+
|
|
3
|
+
Run Python code linting and formatting tools.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This command helps you maintain code quality using Python's best linting and formatting tools.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/lint
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What this command does
|
|
16
|
+
|
|
17
|
+
1. **Runs multiple linters** (flake8, pylint, black, isort)
|
|
18
|
+
2. **Provides detailed feedback** on code quality issues
|
|
19
|
+
3. **Auto-fixes formatting** where possible
|
|
20
|
+
4. **Checks type hints** if mypy is configured
|
|
21
|
+
|
|
22
|
+
## Example Commands
|
|
23
|
+
|
|
24
|
+
### Black (code formatting)
|
|
25
|
+
```bash
|
|
26
|
+
# Format all Python files
|
|
27
|
+
black .
|
|
28
|
+
|
|
29
|
+
# Check formatting without changing files
|
|
30
|
+
black --check .
|
|
31
|
+
|
|
32
|
+
# Format specific file
|
|
33
|
+
black src/main.py
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### flake8 (style guide enforcement)
|
|
37
|
+
```bash
|
|
38
|
+
# Check all Python files
|
|
39
|
+
flake8 .
|
|
40
|
+
|
|
41
|
+
# Check specific directory
|
|
42
|
+
flake8 src/
|
|
43
|
+
|
|
44
|
+
# Check with specific rules
|
|
45
|
+
flake8 --max-line-length=88 .
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### isort (import sorting)
|
|
49
|
+
```bash
|
|
50
|
+
# Sort imports in all files
|
|
51
|
+
isort .
|
|
52
|
+
|
|
53
|
+
# Check import sorting
|
|
54
|
+
isort --check-only .
|
|
55
|
+
|
|
56
|
+
# Sort imports in specific file
|
|
57
|
+
isort src/main.py
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### pylint (comprehensive linting)
|
|
61
|
+
```bash
|
|
62
|
+
# Run pylint on all files
|
|
63
|
+
pylint src/
|
|
64
|
+
|
|
65
|
+
# Run with specific score threshold
|
|
66
|
+
pylint --fail-under=8.0 src/
|
|
67
|
+
|
|
68
|
+
# Generate detailed report
|
|
69
|
+
pylint --output-format=html src/ > pylint_report.html
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### mypy (type checking)
|
|
73
|
+
```bash
|
|
74
|
+
# Check types in all files
|
|
75
|
+
mypy .
|
|
76
|
+
|
|
77
|
+
# Check specific module
|
|
78
|
+
mypy src/models.py
|
|
79
|
+
|
|
80
|
+
# Check with strict mode
|
|
81
|
+
mypy --strict src/
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Configuration Files
|
|
85
|
+
|
|
86
|
+
Most projects benefit from configuration files:
|
|
87
|
+
|
|
88
|
+
### .flake8
|
|
89
|
+
```ini
|
|
90
|
+
[flake8]
|
|
91
|
+
max-line-length = 88
|
|
92
|
+
exclude = .git,__pycache__,venv
|
|
93
|
+
ignore = E203,W503
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### pyproject.toml
|
|
97
|
+
```toml
|
|
98
|
+
[tool.black]
|
|
99
|
+
line-length = 88
|
|
100
|
+
|
|
101
|
+
[tool.isort]
|
|
102
|
+
profile = "black"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Best Practices
|
|
106
|
+
|
|
107
|
+
- Run linters before committing code
|
|
108
|
+
- Use consistent formatting across the project
|
|
109
|
+
- Fix linting issues promptly
|
|
110
|
+
- Configure linters to match your team's style
|
|
111
|
+
- Use type hints for better code documentation
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Test Runner
|
|
2
|
+
|
|
3
|
+
Run Python tests with pytest, unittest, or other testing frameworks.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This command helps you run Python tests effectively with proper configuration and reporting.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/test
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What this command does
|
|
16
|
+
|
|
17
|
+
1. **Detects test framework** (pytest, unittest, nose2)
|
|
18
|
+
2. **Runs appropriate tests** with proper configuration
|
|
19
|
+
3. **Provides coverage reporting** if available
|
|
20
|
+
4. **Shows clear test results** with failure details
|
|
21
|
+
|
|
22
|
+
## Example Commands
|
|
23
|
+
|
|
24
|
+
### pytest (recommended)
|
|
25
|
+
```bash
|
|
26
|
+
# Run all tests
|
|
27
|
+
pytest
|
|
28
|
+
|
|
29
|
+
# Run with coverage
|
|
30
|
+
pytest --cov=src --cov-report=html
|
|
31
|
+
|
|
32
|
+
# Run specific test file
|
|
33
|
+
pytest tests/test_models.py
|
|
34
|
+
|
|
35
|
+
# Run with verbose output
|
|
36
|
+
pytest -v
|
|
37
|
+
|
|
38
|
+
# Run tests matching pattern
|
|
39
|
+
pytest -k "test_user"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### unittest
|
|
43
|
+
```bash
|
|
44
|
+
# Run all tests
|
|
45
|
+
python -m unittest discover
|
|
46
|
+
|
|
47
|
+
# Run specific test file
|
|
48
|
+
python -m unittest tests.test_models
|
|
49
|
+
|
|
50
|
+
# Run with verbose output
|
|
51
|
+
python -m unittest -v
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Django tests
|
|
55
|
+
```bash
|
|
56
|
+
# Run all Django tests
|
|
57
|
+
python manage.py test
|
|
58
|
+
|
|
59
|
+
# Run specific app tests
|
|
60
|
+
python manage.py test myapp
|
|
61
|
+
|
|
62
|
+
# Run with coverage
|
|
63
|
+
coverage run --source='.' manage.py test
|
|
64
|
+
coverage report
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Best Practices
|
|
68
|
+
|
|
69
|
+
- Write tests for all critical functionality
|
|
70
|
+
- Use descriptive test names
|
|
71
|
+
- Keep tests isolated and independent
|
|
72
|
+
- Mock external dependencies
|
|
73
|
+
- Aim for high test coverage (80%+)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash",
|
|
5
|
+
"Edit",
|
|
6
|
+
"MultiEdit",
|
|
7
|
+
"Write",
|
|
8
|
+
"Bash(python:*)",
|
|
9
|
+
"Bash(pip:*)",
|
|
10
|
+
"Bash(pytest:*)",
|
|
11
|
+
"Bash(black:*)",
|
|
12
|
+
"Bash(isort:*)",
|
|
13
|
+
"Bash(flake8:*)",
|
|
14
|
+
"Bash(mypy:*)",
|
|
15
|
+
"Bash(django-admin:*)",
|
|
16
|
+
"Bash(flask:*)",
|
|
17
|
+
"Bash(uvicorn:*)",
|
|
18
|
+
"Bash(gunicorn:*)",
|
|
19
|
+
"Bash(git:*)"
|
|
20
|
+
],
|
|
21
|
+
"deny": [
|
|
22
|
+
"Bash(curl:*)",
|
|
23
|
+
"Bash(wget:*)",
|
|
24
|
+
"Bash(rm -rf:*)"
|
|
25
|
+
],
|
|
26
|
+
"defaultMode": "allowEdits"
|
|
27
|
+
},
|
|
28
|
+
"env": {
|
|
29
|
+
"BASH_DEFAULT_TIMEOUT_MS": "60000",
|
|
30
|
+
"BASH_MAX_OUTPUT_LENGTH": "20000",
|
|
31
|
+
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1",
|
|
32
|
+
"PYTHONPATH": "."
|
|
33
|
+
},
|
|
34
|
+
"includeCoAuthoredBy": true,
|
|
35
|
+
"cleanupPeriodDays": 30,
|
|
36
|
+
"hooks": {
|
|
37
|
+
"PreToolUse": [
|
|
38
|
+
{
|
|
39
|
+
"matcher": "Bash",
|
|
40
|
+
"hooks": [
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \"No description\")\"' >> ~/.claude/bash-command-log.txt"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"matcher": "Write",
|
|
49
|
+
"hooks": [
|
|
50
|
+
{
|
|
51
|
+
"type": "command",
|
|
52
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"); CONTENT=$(echo $STDIN_JSON | jq -r '.tool_input.content // \"\"); if [[ \"$FILE\" =~ \\.py$ ]] && echo \"$CONTENT\" | grep -q 'print('; then echo 'Warning: print() statements should be replaced with logging' >&2; exit 2; fi"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"matcher": "Write",
|
|
58
|
+
"hooks": [
|
|
59
|
+
{
|
|
60
|
+
"type": "command",
|
|
61
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" == \"requirements.txt\" ]] || [[ \"$FILE\" == \"pyproject.toml\" ]] || [[ \"$FILE\" == \"setup.py\" ]]; then echo 'Checking for vulnerable dependencies...'; if command -v safety >/dev/null 2>&1; then safety check; elif command -v pip-audit >/dev/null 2>&1; then pip-audit; else echo 'No security audit tool found. Install safety or pip-audit'; fi; fi",
|
|
62
|
+
"timeout": 60
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"PostToolUse": [
|
|
68
|
+
{
|
|
69
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
70
|
+
"hooks": [
|
|
71
|
+
{
|
|
72
|
+
"type": "command",
|
|
73
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" =~ \\.py$ ]]; then black \"$FILE\" 2>/dev/null || echo 'Black formatting skipped (not installed)'; fi",
|
|
74
|
+
"timeout": 30
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
80
|
+
"hooks": [
|
|
81
|
+
{
|
|
82
|
+
"type": "command",
|
|
83
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" =~ \\.py$ ]]; then isort \"$FILE\" 2>/dev/null || echo 'isort skipped (not installed)'; fi",
|
|
84
|
+
"timeout": 30
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
90
|
+
"hooks": [
|
|
91
|
+
{
|
|
92
|
+
"type": "command",
|
|
93
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" =~ \\.py$ ]]; then RESULT=$(flake8 \"$FILE\" 2>&1); if [ $? -ne 0 ] && command -v flake8 >/dev/null 2>&1; then echo \"Flake8 linting issues found: $RESULT\" >&2; exit 2; fi; fi",
|
|
94
|
+
"timeout": 30
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
100
|
+
"hooks": [
|
|
101
|
+
{
|
|
102
|
+
"type": "command",
|
|
103
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" =~ \\.py$ ]]; then RESULT=$(mypy \"$FILE\" 2>&1); if [ $? -ne 0 ] && command -v mypy >/dev/null 2>&1; then echo \"MyPy type checking issues found: $RESULT\" >&2; exit 2; fi; fi",
|
|
104
|
+
"timeout": 30
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
110
|
+
"hooks": [
|
|
111
|
+
{
|
|
112
|
+
"type": "command",
|
|
113
|
+
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" =~ \\.py$ && \"$FILE\" != *\"test_\"* && \"$FILE\" != *\"_test.py\" ]]; then DIR=$(dirname \"$FILE\"); BASENAME=$(basename \"$FILE\" .py); for TEST_FILE in \"$DIR/test_$BASENAME.py\" \"$DIR/${BASENAME}_test.py\" \"tests/test_$BASENAME.py\"; do if [ -f \"$TEST_FILE\" ]; then echo \"Running tests for $TEST_FILE...\"; if command -v pytest >/dev/null 2>&1; then pytest \"$TEST_FILE\" -v; elif python -m pytest \"$TEST_FILE\" 2>/dev/null; then python -m pytest \"$TEST_FILE\" -v; else python -m unittest \"$TEST_FILE\" 2>/dev/null || echo 'No test runner found'; fi; break; fi; done; fi",
|
|
114
|
+
"timeout": 60
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"Notification": [
|
|
120
|
+
{
|
|
121
|
+
"matcher": "",
|
|
122
|
+
"hooks": [
|
|
123
|
+
{
|
|
124
|
+
"type": "command",
|
|
125
|
+
"command": "echo \"Claude Code notification: $(date)\" >> ~/.claude/notifications.log"
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"Stop": [
|
|
131
|
+
{
|
|
132
|
+
"matcher": "",
|
|
133
|
+
"hooks": [
|
|
134
|
+
{
|
|
135
|
+
"type": "command",
|
|
136
|
+
"command": "if [[ -f requirements.txt || -f pyproject.toml || -f setup.py ]] && [[ $(git status --porcelain | grep '\\.py$') ]]; then echo 'Running linter on changed Python files...'; if command -v flake8 >/dev/null 2>&1; then flake8 $(git diff --name-only --diff-filter=ACMR | grep '\\.py$'); elif command -v pylint >/dev/null 2>&1; then pylint $(git diff --name-only --diff-filter=ACMR | grep '\\.py$'); else echo 'No Python linter found (flake8/pylint)'; fi; fi",
|
|
137
|
+
"timeout": 60
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"matcher": "",
|
|
143
|
+
"hooks": [
|
|
144
|
+
{
|
|
145
|
+
"type": "command",
|
|
146
|
+
"command": "if [[ -f requirements.txt || -f pyproject.toml || -f setup.py ]] && [[ $(git status --porcelain | grep '\\.py$') ]]; then echo 'Running type checking on changed files...'; if command -v mypy >/dev/null 2>&1; then mypy $(git diff --name-only --diff-filter=ACMR | grep '\\.py$') || echo 'Type checking completed with issues'; else echo 'MyPy not found for type checking'; fi; fi",
|
|
147
|
+
"timeout": 60
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"python-sdk": {
|
|
4
|
+
"name": "Python SDK",
|
|
5
|
+
"description": "Official Python SDK with FastMCP for rapid MCP development",
|
|
6
|
+
"command": "python",
|
|
7
|
+
"args": ["-m", "python_sdk.server"],
|
|
8
|
+
"env": {}
|
|
9
|
+
},
|
|
10
|
+
"docker": {
|
|
11
|
+
"name": "Docker MCP",
|
|
12
|
+
"description": "Isolated code execution via Docker containers",
|
|
13
|
+
"command": "python",
|
|
14
|
+
"args": ["-m", "mcp_server_docker"],
|
|
15
|
+
"env": {}
|
|
16
|
+
},
|
|
17
|
+
"jupyter": {
|
|
18
|
+
"name": "Jupyter MCP",
|
|
19
|
+
"description": "MCP integration for interactive Jupyter notebooks",
|
|
20
|
+
"command": "python",
|
|
21
|
+
"args": ["-m", "server_jupyter"],
|
|
22
|
+
"env": {}
|
|
23
|
+
},
|
|
24
|
+
"postgresql": {
|
|
25
|
+
"name": "PostgreSQL MCP",
|
|
26
|
+
"description": "Natural language queries to PostgreSQL databases",
|
|
27
|
+
"command": "python",
|
|
28
|
+
"args": ["-m", "server_postgres"],
|
|
29
|
+
"env": {
|
|
30
|
+
"DATABASE_URL": "postgresql://user:pass@host/db"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"opik": {
|
|
34
|
+
"name": "Opik MCP",
|
|
35
|
+
"description": "Observability for LLM apps with tracing and metrics",
|
|
36
|
+
"command": "python",
|
|
37
|
+
"args": ["-m", "opik_mcp"],
|
|
38
|
+
"env": {}
|
|
39
|
+
},
|
|
40
|
+
"memory-bank": {
|
|
41
|
+
"name": "Memory Bank MCP",
|
|
42
|
+
"description": "Centralized memory system for AI agents",
|
|
43
|
+
"command": "server-memory",
|
|
44
|
+
"args": [],
|
|
45
|
+
"env": {}
|
|
46
|
+
},
|
|
47
|
+
"sequential-thinking": {
|
|
48
|
+
"name": "Sequential Thinking MCP",
|
|
49
|
+
"description": "Helps LLMs decompose complex tasks into logical steps",
|
|
50
|
+
"command": "code-reasoning",
|
|
51
|
+
"args": [],
|
|
52
|
+
"env": {}
|
|
53
|
+
},
|
|
54
|
+
"brave-search": {
|
|
55
|
+
"name": "Brave Search MCP",
|
|
56
|
+
"description": "Privacy-focused web search tool",
|
|
57
|
+
"command": "server-brave-search",
|
|
58
|
+
"args": [],
|
|
59
|
+
"env": {}
|
|
60
|
+
},
|
|
61
|
+
"google-maps": {
|
|
62
|
+
"name": "Google Maps MCP",
|
|
63
|
+
"description": "Integrates Google Maps for geolocation and directions",
|
|
64
|
+
"command": "server-google-maps",
|
|
65
|
+
"args": [],
|
|
66
|
+
"env": {
|
|
67
|
+
"GOOGLE_MAPS_API_KEY": "..."
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"deep-graph": {
|
|
71
|
+
"name": "Deep Graph MCP (Code Graph)",
|
|
72
|
+
"description": "Transforms source code into semantic graphs via DeepGraph",
|
|
73
|
+
"command": "mcp-code-graph",
|
|
74
|
+
"args": [],
|
|
75
|
+
"env": {}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|