mdma-cli 4.1.1 → 4.3.0
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/.claude/rules/mdma/best-practices.md +12 -22
- package/.claude/rules/mdma/git-default.md +1 -1
- package/README.md +20 -0
- package/bin/init.js +39 -11
- package/package.json +1 -1
- package/templates/best-practices.md +12 -22
- package/templates/workflow-jira.md +39 -1
- package/templates/mcp.json +0 -8
|
@@ -25,19 +25,16 @@ Le MCP **context7** permet de récupérer la documentation officielle à jour di
|
|
|
25
25
|
|
|
26
26
|
### Configuration
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"command": "npx",
|
|
35
|
-
"args": ["-y", "@upstash/context7-mcp"]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
28
|
+
**mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
|
|
29
|
+
|
|
30
|
+
Configuration manuelle si nécessaire :
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
|
|
39
34
|
```
|
|
40
35
|
|
|
36
|
+
> **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
|
|
37
|
+
|
|
41
38
|
### Usage
|
|
42
39
|
|
|
43
40
|
Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
|
|
@@ -46,15 +43,8 @@ Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour
|
|
|
46
43
|
|
|
47
44
|
### API Key (optionnel)
|
|
48
45
|
|
|
49
|
-
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard)
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
"mcpServers": {
|
|
54
|
-
"context7": {
|
|
55
|
-
"command": "npx",
|
|
56
|
-
"args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
46
|
+
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
|
|
60
50
|
```
|
|
@@ -34,7 +34,7 @@ Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisa
|
|
|
34
34
|
|
|
35
35
|
### Après validation
|
|
36
36
|
1. `git add <fichiers>` (pas -A)
|
|
37
|
-
2. `git commit -m "
|
|
37
|
+
2. `git commit -m "XXX: description"`. Remplacer XXX par le prefix de conventionnal commits qui correspond le mieux au sujet traité (voir ### Commits)
|
|
38
38
|
3. `git push -u origin <branche>`
|
|
39
39
|
4. `gh pr create --fill`
|
|
40
40
|
5. Attendre validation utilisateur
|
package/README.md
CHANGED
|
@@ -21,6 +21,26 @@ npx mdma-cli add # default: GitHub workflow, merge auto
|
|
|
21
21
|
npx mdma-cli add jira # JIRA integration, milestone, anonymity
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
### Configuration JIRA
|
|
25
|
+
|
|
26
|
+
**Variables globales** (`.zshrc` ou `.bashrc`) :
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
export ARTE_ATLASSIAN_ROOT_URL="https://mycompany.atlassian.net" # ou URL on-premise
|
|
30
|
+
export ARTE_ATLASSIAN_USER_EMAIL="user@email.com"
|
|
31
|
+
export ARTE_ATLASSIAN_API_TOKEN="your-api-token"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Variable projet** (dans `CLAUDE.md` ou `.env`) :
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
export ARTE_ATLASSIAN_PROJECT_NAME="PROJ" # clé du projet JIRA
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Créer un token : [Atlassian API tokens](https://id.atlassian.com/manage-profile/security/api-tokens)
|
|
41
|
+
|
|
42
|
+
**Fallback MCP** : si l'API échoue, le workflow propose d'utiliser `@anthropic/atlassian-mcp-server`.
|
|
43
|
+
|
|
24
44
|
## Custom mix
|
|
25
45
|
|
|
26
46
|
```bash
|
package/bin/init.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { copyFileSync, mkdirSync, rmSync, readdirSync, existsSync, readFileSync, appendFileSync } from 'fs';
|
|
4
4
|
import { join, dirname } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
6
7
|
|
|
7
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
9
|
const PKG_ROOT = join(__dirname, '..');
|
|
@@ -10,8 +11,6 @@ const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
|
|
|
10
11
|
const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
|
|
11
12
|
|
|
12
13
|
const CORE_FILES = ['models.md', 'style.md', 'best-practices.md'];
|
|
13
|
-
const MCP_FILE = 'mcp.json';
|
|
14
|
-
const MCP_DEST = join(process.cwd(), '.mcp.json');
|
|
15
14
|
|
|
16
15
|
const PRESETS = {
|
|
17
16
|
default: { workflow: 'default', git: 'default' },
|
|
@@ -81,6 +80,32 @@ function updateGitExclude() {
|
|
|
81
80
|
return true;
|
|
82
81
|
}
|
|
83
82
|
|
|
83
|
+
function setupContext7() {
|
|
84
|
+
try {
|
|
85
|
+
// Check if context7 is already configured
|
|
86
|
+
const result = execSync('claude mcp list', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
87
|
+
if (result.includes('context7')) {
|
|
88
|
+
return 'already';
|
|
89
|
+
}
|
|
90
|
+
} catch {
|
|
91
|
+
// claude command not found or error - try to add anyway
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
execSync('claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp', {
|
|
96
|
+
encoding: 'utf-8',
|
|
97
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
98
|
+
});
|
|
99
|
+
return true;
|
|
100
|
+
} catch (error) {
|
|
101
|
+
// Check if error is because it already exists
|
|
102
|
+
if (error.message && error.message.includes('already exists')) {
|
|
103
|
+
return 'already';
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
84
109
|
function parseArgs(args) {
|
|
85
110
|
const result = { preset: null, workflow: null, git: null };
|
|
86
111
|
|
|
@@ -162,13 +187,6 @@ function add(args) {
|
|
|
162
187
|
copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
|
|
163
188
|
console.log(` [ok] git-${git}.md`);
|
|
164
189
|
|
|
165
|
-
// Copy MCP config to project root
|
|
166
|
-
const mcpSrc = join(TEMPLATES_SRC, MCP_FILE);
|
|
167
|
-
if (existsSync(mcpSrc)) {
|
|
168
|
-
copyFileSync(mcpSrc, MCP_DEST);
|
|
169
|
-
console.log(` [ok] .mcp.json (project root)`);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
190
|
// Update .git/info/exclude
|
|
173
191
|
const excludeResult = updateGitExclude();
|
|
174
192
|
if (excludeResult === true) {
|
|
@@ -179,8 +197,18 @@ function add(args) {
|
|
|
179
197
|
console.log(` [skip] .git/info/exclude (not a git repo)`);
|
|
180
198
|
}
|
|
181
199
|
|
|
182
|
-
|
|
183
|
-
|
|
200
|
+
// Setup context7 MCP (user scope)
|
|
201
|
+
const context7Result = setupContext7();
|
|
202
|
+
if (context7Result === true) {
|
|
203
|
+
console.log(` [ok] context7 MCP (user scope)`);
|
|
204
|
+
} else if (context7Result === 'already') {
|
|
205
|
+
console.log(` [skip] context7 MCP (already configured)`);
|
|
206
|
+
} else {
|
|
207
|
+
console.log(` [warn] context7 MCP (claude CLI not found)`);
|
|
208
|
+
console.log(` Run manually: claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp`);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
console.log(`\n5 file(s) installed to .claude/rules/mdma/\n`);
|
|
184
212
|
}
|
|
185
213
|
|
|
186
214
|
function main() {
|
package/package.json
CHANGED
|
@@ -25,19 +25,16 @@ Le MCP **context7** permet de récupérer la documentation officielle à jour di
|
|
|
25
25
|
|
|
26
26
|
### Configuration
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"command": "npx",
|
|
35
|
-
"args": ["-y", "@upstash/context7-mcp"]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
28
|
+
**mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
|
|
29
|
+
|
|
30
|
+
Configuration manuelle si nécessaire :
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
|
|
39
34
|
```
|
|
40
35
|
|
|
36
|
+
> **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
|
|
37
|
+
|
|
41
38
|
### Usage
|
|
42
39
|
|
|
43
40
|
Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
|
|
@@ -46,15 +43,8 @@ Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour
|
|
|
46
43
|
|
|
47
44
|
### API Key (optionnel)
|
|
48
45
|
|
|
49
|
-
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard)
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
"mcpServers": {
|
|
54
|
-
"context7": {
|
|
55
|
-
"command": "npx",
|
|
56
|
-
"args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
46
|
+
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
|
|
60
50
|
```
|
|
@@ -7,6 +7,44 @@
|
|
|
7
7
|
> - Ne jamais faire d'exception, quelle que soit la taille ou nature du changement
|
|
8
8
|
> - En cas de doute → STOP → demander à l'utilisateur
|
|
9
9
|
|
|
10
|
+
## Configuration JIRA
|
|
11
|
+
|
|
12
|
+
### Variables globales (`.zshrc` ou `.bashrc`)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
export ARTE_ATLASSIAN_ROOT_URL="https://mycompany.atlassian.net" # ou URL on-premise
|
|
16
|
+
export ARTE_ATLASSIAN_USER_EMAIL="user@email.com"
|
|
17
|
+
export ARTE_ATLASSIAN_API_TOKEN="your-api-token"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Variable projet (`CLAUDE.md` du projet)
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
## JIRA
|
|
24
|
+
- **Projet** : `PROJ` (clé JIRA)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Ou via variable d'environnement projet :
|
|
28
|
+
```bash
|
|
29
|
+
export ARTE_ATLASSIAN_PROJECT_NAME="PROJ"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Utilisation API
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Exemple de requête JIRA
|
|
36
|
+
curl -s -u "$ARTE_ATLASSIAN_USER_EMAIL:$ARTE_ATLASSIAN_API_TOKEN" \
|
|
37
|
+
"$ARTE_ATLASSIAN_ROOT_URL/rest/api/3/issue/PROJ-123"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Fallback
|
|
41
|
+
|
|
42
|
+
Si l'API REST échoue (erreurs réseau, permissions), utiliser le MCP Atlassian :
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
claude mcp add atlassian -- npx -y @anthropic/atlassian-mcp-server
|
|
46
|
+
```
|
|
47
|
+
|
|
10
48
|
## Étapes obligatoires
|
|
11
49
|
|
|
12
50
|
### 0. Setup Git
|
|
@@ -15,7 +53,7 @@
|
|
|
15
53
|
- Ne jamais rationaliser ("c'est juste un petit fix")
|
|
16
54
|
|
|
17
55
|
### 1. Plan
|
|
18
|
-
-
|
|
56
|
+
- Utilise les variables `$ARTE_ATLASSIAN_*` pour les appels API JIRA (voir Configuration ci-dessus)
|
|
19
57
|
- Cherche le contenu du ticket JIRA à traiter avec l'id donné dans le prompt
|
|
20
58
|
- Passe le statut du ticket JIRA à "In progress"
|
|
21
59
|
- Attribue le ticket à l'utilisateur
|