Skip to content

Commit 222ea28

Browse files
gui-wfclaude
andcommitted
Add licensing, automation commands, and project documentation
- Add custom non-commercial license with commercial protection - Create Claude Code commands for automated license checking - Add comprehensive project documentation in docs/ folder - Move KNOWN_ISSUES.md to docs/ for better organization - Add GitHub issue templates for MCP server context - Update README with licensing and documentation references 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent f7b80ac commit 222ea28

File tree

10 files changed

+529
-6
lines changed

10 files changed

+529
-6
lines changed

.claude/commands/check-license.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
argument-hint: [package-name] [version-optional]
3+
description: Check if a package license is compatible with our non-commercial license
4+
---
5+
6+
Check the license compatibility for package $1 ${2:+version $2}.
7+
8+
## License Checking Workflow
9+
10+
First, run the license check command:
11+
```bash
12+
npm view $1${2:+@$2} license
13+
```
14+
15+
Then analyze the result using this decision tree:
16+
17+
### ✅ COMPATIBLE LICENSES
18+
If the license is one of: **MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, 0BSD**
19+
20+
**Action:** Proceed with the update
21+
1. Use `/update-license-docs` command to update docs/package-licenses.md
22+
2. If this is a license change from the previous version, note it in the "Notes" column
23+
3. Continue with package installation/update
24+
4. Confirm compatibility has been verified
25+
26+
### 🚨 INCOMPATIBLE LICENSES
27+
If the license is one of: **GPL, GPL-2.0, GPL-3.0, AGPL, AGPL-3.0, LGPL, LGPL-2.1, LGPL-3.0**
28+
29+
**Action:** Cannot use this package version
30+
1. **Recommend:** Keep the current version (check current version in package.json)
31+
2. **Alternative:** Search for alternatives with: `npm search <package-functionality-keywords>`
32+
3. **Last resort:** Consider if our project license should be changed to accommodate this dependency
33+
4. Document the incompatibility issue for future reference
34+
35+
### ⚠️ REQUIRES MANUAL REVIEW
36+
If the license contains: **"NonCommercial", "NC", "Commercial", proprietary terms**
37+
38+
**Action:** Manual review needed
39+
1. Check if the license restrictions overlap with our non-commercial license (potentially redundant)
40+
2. Verify if the license allows our intended use case (internal productivity, open source contributions)
41+
3. Flag for decision: proceed, find alternatives, or contact package maintainer
42+
43+
### ❓ UNKNOWN/UNDEFINED LICENSE
44+
If npm returns: **undefined, empty, or unrecognized license**
45+
46+
**Action:** Investigation required
47+
1. Check the package's GitHub repository for LICENSE file
48+
2. Look in package.json for license field
49+
3. Check README.md for license information
50+
4. If still unclear, consider this package high-risk and find alternatives
51+
52+
## Output Format
53+
54+
Always provide a clear summary:
55+
- **License found:** [license name]
56+
- **Compatibility:** ✅ Compatible / 🚨 Incompatible / ⚠️ Needs Review / ❓ Unknown
57+
- **Recommended action:** [specific next steps]
58+
- **Alternative packages:** [if applicable]
59+
60+
This ensures consistent license checking across all package updates and maintains our project's licensing integrity.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
argument-hint: [package-name] [version] [license] [notes-optional]
3+
description: Update docs/package-licenses.md with new package information
4+
---
5+
6+
Update the package license documentation for $1 version $2 with license $3.
7+
8+
## Update Process
9+
10+
1. **Read current docs/package-licenses.md** to understand the existing format and find the package entry
11+
12+
2. **Determine update type:**
13+
- **New package:** Add new row to the appropriate table (Runtime Dependencies or Development Dependencies)
14+
- **Version update:** Update existing package version
15+
- **License change:** Update license field and add note about the change
16+
17+
3. **Update the markdown table:**
18+
- Locate the correct table (Runtime Dependencies vs Development Dependencies)
19+
- Find or create the package row: `| $1 | $2 | $3 | ✅ | ${4:-Version update} |`
20+
- Maintain alphabetical ordering within each table
21+
- Ensure consistent formatting with existing entries
22+
23+
4. **Update metadata:**
24+
- Change "Last updated" date to today's date (2025-01-19)
25+
- Keep "Package.json version" as 1.0.0 unless the package.json version field has changed
26+
27+
5. **Add notes if provided:**
28+
- If $4 is provided, use it in the Notes column
29+
- For license changes, format as: "License changed from [old] to [new]"
30+
- For new packages, use: "New dependency added"
31+
- For version updates with same license, use: "Version update"
32+
33+
## Table Format Reference
34+
35+
```markdown
36+
| Package | Version | License | Compatible | Notes |
37+
|---------|---------|---------|------------|-------|
38+
| package-name | x.y.z | MIT | ✅ | Description |
39+
```
40+
41+
## Validation Checklist
42+
43+
Before saving the updated file:
44+
- [ ] Package is in the correct table (runtime vs dev dependencies)
45+
- [ ] Version format is consistent (x.y.z)
46+
- [ ] License name matches npm registry format
47+
- [ ] Compatible column shows ✅ (since we only update compatible packages)
48+
- [ ] Notes column has meaningful information
49+
- [ ] "Last updated" date is current
50+
- [ ] Markdown table formatting is preserved
51+
52+
This command should only be used after `/check-license` has confirmed compatibility.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
name: 🐛 MCP Server Bug Report
2+
description: Report an issue with the PurelyMail MCP Server
3+
title: "[Bug]: "
4+
labels: ["bug", "triage"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for reporting a bug with the PurelyMail MCP Server!
10+
This template helps us understand AI assistant interaction issues.
11+
12+
- type: dropdown
13+
id: assistant
14+
attributes:
15+
label: AI Assistant/Tool Used
16+
description: Which AI assistant were you using when the issue occurred?
17+
options:
18+
- Claude Desktop
19+
- Claude Code CLI
20+
- Cursor
21+
- Codex CLI
22+
- Continue (VS Code)
23+
- Aider
24+
- Other MCP Client
25+
- Custom Implementation
26+
validations:
27+
required: true
28+
29+
- type: textarea
30+
id: prompt
31+
attributes:
32+
label: Exact Prompt Used
33+
description: Please provide the exact prompt/request you gave to the AI assistant
34+
placeholder: |
35+
Example: "Create a new email account [email protected] with a strong password"
36+
validations:
37+
required: true
38+
39+
- type: dropdown
40+
id: context-pollution
41+
attributes:
42+
label: Context Pollution Level
43+
description: On a scale of 1-10, how much of your prior conversation with the assistant was related to PurelyMail account management?
44+
options:
45+
- "1 - No prior PurelyMail context"
46+
- "2 - Minimal PurelyMail mentions"
47+
- "3 - Some unrelated PurelyMail discussion"
48+
- "4 - Mixed topics with some PurelyMail"
49+
- "5 - Half PurelyMail, half other topics"
50+
- "6 - Mostly PurelyMail with some other topics"
51+
- "7 - Primarily PurelyMail focused"
52+
- "8 - Almost entirely PurelyMail discussion"
53+
- "9 - Continuous PurelyMail conversation"
54+
- "10 - Pure PurelyMail management session"
55+
validations:
56+
required: true
57+
58+
- type: textarea
59+
id: expected-result
60+
attributes:
61+
label: Expected Result
62+
description: What did you expect the AI assistant to accomplish?
63+
placeholder: |
64+
Example: "Assistant should create user 'thomas' on domain 'cool.shop' with a secure password"
65+
validations:
66+
required: true
67+
68+
- type: textarea
69+
id: actual-result
70+
attributes:
71+
label: Actual Result
72+
description: What actually happened? Include any error messages from the assistant or MCP server
73+
placeholder: |
74+
Example: "Assistant failed with error 'invalidRequest' or used wrong parameters"
75+
validations:
76+
required: true
77+
78+
- type: textarea
79+
id: expected-parameters
80+
attributes:
81+
label: Expected MCP Tool Parameters
82+
description: |
83+
What parameters should the assistant have used? (Based on PurelyMail API requirements)
84+
For CreateUser: userName (required), domainName (required), password (required)
85+
Optional: enablePasswordReset, recoveryEmail, enableSearchIndexing, sendWelcomeEmail
86+
placeholder: |
87+
Example for CreateUser:
88+
- userName: "thomas" (required)
89+
- domainName: "cool.shop" (required)
90+
- password: "[generated]" (required)
91+
- enablePasswordReset: true (optional, defaults to true)
92+
93+
- type: textarea
94+
id: environment
95+
attributes:
96+
label: Environment Details
97+
description: Technical environment information
98+
placeholder: |
99+
- MCP Client: [e.g. Claude Desktop v1.0.0]
100+
- MCP Server Version: [e.g. 1.2.3]
101+
- Node.js Version: [e.g. 18.17.0]
102+
- Operating System: [e.g. macOS 13.0, Windows 11, Ubuntu 22.04]
103+
validations:
104+
required: true
105+
106+
- type: textarea
107+
id: conversation-flow
108+
attributes:
109+
label: Conversation Flow (if relevant)
110+
description: |
111+
If this bug occurred after multiple exchanges, briefly describe the conversation flow
112+
placeholder: |
113+
1. Asked assistant to list domains
114+
2. Asked to create user on specific domain
115+
3. Bug occurred when trying to create app password
116+
117+
- type: checkboxes
118+
id: terms
119+
attributes:
120+
label: Code of Conduct
121+
description: By submitting this issue, you agree to follow our Code of Conduct
122+
options:
123+
- label: I agree to follow this project's Code of Conduct
124+
required: true
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
name: 🚀 MCP Server Feature Request
2+
description: Suggest a new feature or improvement for the PurelyMail MCP Server
3+
title: "[Feature]: "
4+
labels: ["enhancement", "triage"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for suggesting a feature for the PurelyMail MCP Server!
10+
Help us understand how to improve AI assistant interactions.
11+
12+
- type: dropdown
13+
id: feature-type
14+
attributes:
15+
label: Feature Type
16+
description: What type of feature are you requesting?
17+
options:
18+
- New MCP Tool (expose new PurelyMail API endpoint)
19+
- Improve Existing Tool (better parameters, validation, etc.)
20+
- Better AI Assistant Integration (prompting, context handling)
21+
- Developer Experience (docs, error messages, etc.)
22+
- Performance/Reliability Improvement
23+
- Other
24+
validations:
25+
required: true
26+
27+
- type: textarea
28+
id: use-case
29+
attributes:
30+
label: Use Case Description
31+
description: Describe the specific use case or workflow this feature would enable
32+
placeholder: |
33+
Example: "I want AI assistants to be able to bulk-create multiple email accounts
34+
from a CSV file or list, instead of creating them one by one"
35+
validations:
36+
required: true
37+
38+
- type: textarea
39+
id: current-limitation
40+
attributes:
41+
label: Current Limitation
42+
description: What's currently missing or difficult to achieve?
43+
placeholder: |
44+
Example: "Currently, the assistant has to make separate API calls for each user creation,
45+
which is slow and prone to partial failures"
46+
validations:
47+
required: true
48+
49+
- type: textarea
50+
id: proposed-solution
51+
attributes:
52+
label: Proposed Solution & Flow
53+
description: |
54+
Describe your proposed solution and how it would work from a high-level perspective.
55+
Include the expected conversation flow with an AI assistant.
56+
placeholder: |
57+
Example:
58+
1. User provides: "Create these email accounts: [email protected], [email protected], [email protected]"
59+
2. Assistant uses new "Bulk Create Users" tool with array of user definitions
60+
3. Tool validates all inputs before starting, returns detailed success/failure report
61+
4. Assistant reports back with summary of created accounts and any failures
62+
validations:
63+
required: true
64+
65+
- type: textarea
66+
id: purelymail-api
67+
attributes:
68+
label: Related PurelyMail API Endpoints
69+
description: |
70+
If this involves new API integration, which PurelyMail endpoints would be involved?
71+
Check the swagger spec or mention if this requires new PurelyMail API features.
72+
placeholder: |
73+
Example:
74+
- Extends existing "Create User" endpoint
75+
- OR requires new bulk endpoint from PurelyMail
76+
- OR combines "Create User" + "Create App Password" operations
77+
78+
- type: dropdown
79+
id: priority
80+
attributes:
81+
label: Priority
82+
description: How important is this feature for your workflow?
83+
options:
84+
- Low - Nice to have
85+
- Medium - Would improve efficiency
86+
- High - Significantly impacts workflow
87+
- Critical - Blocking important use cases
88+
validations:
89+
required: true
90+
91+
- type: dropdown
92+
id: assistant-used
93+
attributes:
94+
label: Primary AI Assistant
95+
description: Which AI assistant would you primarily use this feature with?
96+
options:
97+
- Claude Desktop
98+
- Claude Code CLI
99+
- Cursor
100+
- Codex CLI
101+
- Continue (VS Code)
102+
- Aider
103+
- Multiple assistants
104+
- Other MCP Client
105+
validations:
106+
required: true
107+
108+
- type: textarea
109+
id: ai-assistant-benefit
110+
attributes:
111+
label: AI Assistant Benefit
112+
description: |
113+
How would this feature specifically improve AI assistant interactions?
114+
Consider prompt clarity, error handling, context efficiency, etc.
115+
placeholder: |
116+
Example: "This would reduce the number of back-and-forth exchanges needed,
117+
make prompts more natural ('create these 5 accounts' vs individual requests),
118+
and provide clearer success/failure feedback"
119+
120+
- type: textarea
121+
id: additional-context
122+
attributes:
123+
label: Additional Context
124+
description: Any other context, examples, or considerations
125+
126+
- type: checkboxes
127+
id: terms
128+
attributes:
129+
label: Code of Conduct
130+
description: By submitting this issue, you agree to follow our Code of Conduct
131+
options:
132+
- label: I agree to follow this project's Code of Conduct
133+
required: true

.mcp.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
"PURELYMAIL_API_KEY": "${PURELYMAIL_API_KEY}",
1818
"MOCK_MODE": "false"
1919
}
20+
},
21+
"perplexity": {
22+
"command": "npx",
23+
"args": ["-y", "perplexity-mcp"],
24+
"env": {
25+
"PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}"
26+
}
2027
}
2128
}
2229
}

0 commit comments

Comments
 (0)