claude-autopm 1.15.2 โ 1.15.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.
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: context7
|
|
3
|
+
command: npx
|
|
4
|
+
args: ["-y", "@upstash/context7-mcp"]
|
|
5
|
+
description: MCP server for Context7 - Up-to-date documentation database
|
|
6
|
+
category: documentation
|
|
7
|
+
status: inactive
|
|
8
|
+
env:
|
|
9
|
+
DEFAULT_MINIMUM_TOKENS: "${DEFAULT_MINIMUM_TOKENS:-10000}"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Context7 MCP Server
|
|
13
|
+
|
|
14
|
+
Official MCP server for [Context7](https://context7.com) - provides up-to-date documentation for libraries and frameworks.
|
|
15
|
+
|
|
16
|
+
## ๐ฏ Features
|
|
17
|
+
|
|
18
|
+
- **Up-to-date Documentation**: Always current library documentation
|
|
19
|
+
- **Smart Search**: Resolve library names to Context7 IDs
|
|
20
|
+
- **Token Control**: Configure minimum tokens for documentation retrieval
|
|
21
|
+
- **Multi-library Support**: Access documentation for any supported library
|
|
22
|
+
|
|
23
|
+
## ๐ฆ Installation
|
|
24
|
+
|
|
25
|
+
### Option 1: Using AutoPM (Recommended)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Install from npm with automatic configuration
|
|
29
|
+
autopm mcp install @upstash/context7-mcp --enable
|
|
30
|
+
|
|
31
|
+
# Configure API key
|
|
32
|
+
echo "CONTEXT7_API_KEY=your-key-here" >> .claude/.env
|
|
33
|
+
|
|
34
|
+
# Test connection
|
|
35
|
+
autopm mcp test context7
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Option 2: Manual Setup
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Copy this example to your project
|
|
42
|
+
cp .claude/examples/mcp/context7.md .claude/mcp/
|
|
43
|
+
|
|
44
|
+
# Enable the server
|
|
45
|
+
autopm mcp enable context7
|
|
46
|
+
|
|
47
|
+
# Sync configuration
|
|
48
|
+
autopm mcp sync
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## ๐ Configuration
|
|
52
|
+
|
|
53
|
+
### Environment Variables
|
|
54
|
+
|
|
55
|
+
Add to `.claude/.env`:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Optional: Minimum tokens for documentation retrieval (default: 10000)
|
|
59
|
+
DEFAULT_MINIMUM_TOKENS=10000
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Note: Context7 API key is not required for basic usage.
|
|
63
|
+
|
|
64
|
+
## ๐ง Available Tools
|
|
65
|
+
|
|
66
|
+
### 1. `resolve-library-id`
|
|
67
|
+
Resolves a general library name into a Context7-compatible library ID.
|
|
68
|
+
|
|
69
|
+
**Example:**
|
|
70
|
+
```
|
|
71
|
+
Library: "react" โ ID: "react/latest"
|
|
72
|
+
Library: "nextjs" โ ID: "next/latest"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 2. `get-library-docs`
|
|
76
|
+
Fetches documentation for a library using a Context7-compatible library ID.
|
|
77
|
+
|
|
78
|
+
**Parameters:**
|
|
79
|
+
- `libraryId` (required): Context7 library ID (e.g., "react/latest")
|
|
80
|
+
- `topic` (optional): Specific topic to focus on
|
|
81
|
+
- `tokens` (optional): Minimum tokens to retrieve (default: 10000)
|
|
82
|
+
|
|
83
|
+
**Example:**
|
|
84
|
+
```
|
|
85
|
+
get-library-docs("react/latest", topic="hooks")
|
|
86
|
+
get-library-docs("nextjs/14", topic="app-router", tokens=15000)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## ๐ Usage in Agent Definitions
|
|
90
|
+
|
|
91
|
+
Reference Context7 documentation in your agents:
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
## MCP Servers Used
|
|
95
|
+
|
|
96
|
+
This agent uses Context7 for up-to-date documentation:
|
|
97
|
+
- `mcp://context7/react/latest` - React documentation
|
|
98
|
+
- `mcp://context7/nextjs/14` - Next.js 14 documentation
|
|
99
|
+
- `mcp://context7/typescript/latest` - TypeScript reference
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## ๐งช Testing
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Test the connection
|
|
106
|
+
autopm mcp test context7
|
|
107
|
+
|
|
108
|
+
# Check status
|
|
109
|
+
autopm mcp status
|
|
110
|
+
|
|
111
|
+
# Verify in Claude Code
|
|
112
|
+
/mcp
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## ๐ Security
|
|
116
|
+
|
|
117
|
+
- Context7 MCP server does not require authentication for basic usage
|
|
118
|
+
- Never commit `.claude/.env` with sensitive data
|
|
119
|
+
- Review Context7's [privacy policy](https://context7.com/privacy)
|
|
120
|
+
|
|
121
|
+
## ๐ Supported Libraries
|
|
122
|
+
|
|
123
|
+
Context7 supports hundreds of libraries including:
|
|
124
|
+
- **Frontend**: React, Vue, Angular, Svelte, Next.js
|
|
125
|
+
- **Backend**: Express, Fastify, NestJS, Django, Flask
|
|
126
|
+
- **Databases**: PostgreSQL, MongoDB, Redis, MySQL
|
|
127
|
+
- **Cloud**: AWS, Azure, GCP services
|
|
128
|
+
- **And many more...**
|
|
129
|
+
|
|
130
|
+
Visit [Context7](https://context7.com) to browse all available documentation.
|
|
131
|
+
|
|
132
|
+
## ๐ Troubleshooting
|
|
133
|
+
|
|
134
|
+
### Server Not Starting
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Check npm package is available
|
|
138
|
+
npm view @upstash/context7-mcp
|
|
139
|
+
|
|
140
|
+
# Reinstall
|
|
141
|
+
npm install -g @upstash/context7-mcp
|
|
142
|
+
|
|
143
|
+
# Test manually
|
|
144
|
+
npx -y @upstash/context7-mcp
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Library Not Found
|
|
148
|
+
|
|
149
|
+
Use `resolve-library-id` to find the correct library ID:
|
|
150
|
+
```
|
|
151
|
+
resolve-library-id("your-library-name")
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Token Limit Issues
|
|
155
|
+
|
|
156
|
+
Adjust `DEFAULT_MINIMUM_TOKENS` in your environment:
|
|
157
|
+
```bash
|
|
158
|
+
echo "DEFAULT_MINIMUM_TOKENS=5000" >> .claude/.env
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## ๐ Links
|
|
162
|
+
|
|
163
|
+
- **NPM Package**: https://www.npmjs.com/package/@upstash/context7-mcp
|
|
164
|
+
- **GitHub**: https://github.com/upstash/context7
|
|
165
|
+
- **Context7 Website**: https://context7.com
|
|
166
|
+
- **Documentation**: https://upstash.com/docs/redis/integrations/mcp
|
|
167
|
+
- **Blog Post**: https://upstash.com/blog/context7-mcp
|
|
168
|
+
|
|
169
|
+
## ๐ Example Agent Configuration
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
---
|
|
173
|
+
name: react-expert
|
|
174
|
+
description: React development expert with Context7 documentation
|
|
175
|
+
mcpServers:
|
|
176
|
+
- context7
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
# React Expert Agent
|
|
180
|
+
|
|
181
|
+
This agent has access to:
|
|
182
|
+
- `mcp://context7/react/latest` - Current React documentation
|
|
183
|
+
- `mcp://context7/react-router/latest` - React Router docs
|
|
184
|
+
- `mcp://context7/redux/latest` - Redux documentation
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## ๐ Best Practices
|
|
188
|
+
|
|
189
|
+
1. **Use Specific Library IDs**: `react/18` instead of `react/latest` for stability
|
|
190
|
+
2. **Configure Token Limits**: Adjust based on your needs
|
|
191
|
+
3. **Cache Results**: Context7 provides fresh docs but cache for performance
|
|
192
|
+
4. **Topic Filtering**: Use specific topics to reduce token usage
|
|
193
|
+
5. **Test Regularly**: Ensure documentation sources are accessible
|
|
194
|
+
|
|
195
|
+
## ๐ Updates
|
|
196
|
+
|
|
197
|
+
Context7 MCP server is actively maintained by Upstash. Check for updates:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm update -g @upstash/context7-mcp
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
**Need help?** Visit [Context7 documentation](https://context7.com) or [Upstash support](https://upstash.com/support)
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-mcp
|
|
3
|
+
command: npx
|
|
4
|
+
args: ["@modelcontextprotocol/server-github"]
|
|
5
|
+
env:
|
|
6
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN:-}"
|
|
7
|
+
GITHUB_API_URL: "${GITHUB_API_URL:-https://api.github.com}"
|
|
8
|
+
envFile: .claude/.env
|
|
9
|
+
description: GitHub MCP server for repository management and collaboration
|
|
10
|
+
category: integration
|
|
11
|
+
status: active
|
|
12
|
+
version: ">=1.0.0"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# GitHub MCP Server
|
|
16
|
+
|
|
17
|
+
## Description
|
|
18
|
+
|
|
19
|
+
The GitHub MCP Server provides comprehensive GitHub integration through the Model Context Protocol, enabling repository management, issue tracking, pull request workflows, and collaborative development features.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- **Repository Management**: Create, clone, configure repositories
|
|
24
|
+
- **Issue Tracking**: Create, update, search issues
|
|
25
|
+
- **Pull Requests**: Create, review, merge PRs
|
|
26
|
+
- **Actions/Workflows**: Manage GitHub Actions
|
|
27
|
+
- **Code Search**: Search across repositories
|
|
28
|
+
- **Release Management**: Create and manage releases
|
|
29
|
+
- **Team Collaboration**: Manage teams and permissions
|
|
30
|
+
|
|
31
|
+
## Configuration
|
|
32
|
+
|
|
33
|
+
### Required Environment Variables
|
|
34
|
+
|
|
35
|
+
- `GITHUB_PERSONAL_ACCESS_TOKEN`: Your GitHub PAT (required)
|
|
36
|
+
|
|
37
|
+
### Optional Environment Variables
|
|
38
|
+
|
|
39
|
+
- `GITHUB_API_URL`: GitHub API endpoint (for GitHub Enterprise)
|
|
40
|
+
- `GITHUB_DEFAULT_OWNER`: Default repository owner
|
|
41
|
+
- `GITHUB_DEFAULT_REPO`: Default repository name
|
|
42
|
+
|
|
43
|
+
### Token Permissions
|
|
44
|
+
|
|
45
|
+
Required scopes for full functionality:
|
|
46
|
+
```
|
|
47
|
+
repo - Full repository access
|
|
48
|
+
workflow - GitHub Actions workflows
|
|
49
|
+
write:packages - Package registry
|
|
50
|
+
admin:org - Organization management (optional)
|
|
51
|
+
gist - Gist creation (optional)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Usage Examples
|
|
55
|
+
|
|
56
|
+
### Basic Setup
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Enable the server
|
|
60
|
+
autopm mcp enable github-mcp
|
|
61
|
+
|
|
62
|
+
# Configure authentication
|
|
63
|
+
echo "GITHUB_TOKEN=ghp_your_token_here" >> .claude/.env
|
|
64
|
+
|
|
65
|
+
# For a specific repository
|
|
66
|
+
echo "GITHUB_DEFAULT_OWNER=your-username" >> .claude/.env
|
|
67
|
+
echo "GITHUB_DEFAULT_REPO=your-repo" >> .claude/.env
|
|
68
|
+
|
|
69
|
+
# Sync configuration
|
|
70
|
+
autopm mcp sync
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Integration with Agents
|
|
74
|
+
|
|
75
|
+
Commonly used with:
|
|
76
|
+
- `github-operations-specialist` - For DevOps workflows
|
|
77
|
+
- `code-analyzer` - For PR reviews
|
|
78
|
+
- `test-runner` - For CI/CD integration
|
|
79
|
+
|
|
80
|
+
## MCP Commands
|
|
81
|
+
|
|
82
|
+
### Repository Operations
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
// Get repository info
|
|
86
|
+
github.getRepository({ owner, repo })
|
|
87
|
+
|
|
88
|
+
// Create repository
|
|
89
|
+
github.createRepository({
|
|
90
|
+
name: "new-repo",
|
|
91
|
+
description: "Repository description",
|
|
92
|
+
private: false,
|
|
93
|
+
auto_init: true
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
// List repositories
|
|
97
|
+
github.listRepositories({ type: "owner" })
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Issue Management
|
|
101
|
+
|
|
102
|
+
```javascript
|
|
103
|
+
// Create issue
|
|
104
|
+
github.createIssue({
|
|
105
|
+
title: "Bug: Application crashes",
|
|
106
|
+
body: "Detailed description...",
|
|
107
|
+
labels: ["bug", "high-priority"],
|
|
108
|
+
assignees: ["username"]
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// Update issue
|
|
112
|
+
github.updateIssue({
|
|
113
|
+
issue_number: 123,
|
|
114
|
+
state: "closed",
|
|
115
|
+
labels: ["resolved"]
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
// Search issues
|
|
119
|
+
github.searchIssues({
|
|
120
|
+
query: "is:open label:bug"
|
|
121
|
+
})
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Pull Request Workflows
|
|
125
|
+
|
|
126
|
+
```javascript
|
|
127
|
+
// Create PR
|
|
128
|
+
github.createPullRequest({
|
|
129
|
+
title: "Feature: Add new functionality",
|
|
130
|
+
head: "feature-branch",
|
|
131
|
+
base: "main",
|
|
132
|
+
body: "PR description..."
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
// Review PR
|
|
136
|
+
github.createReview({
|
|
137
|
+
pull_number: 456,
|
|
138
|
+
event: "APPROVE",
|
|
139
|
+
body: "LGTM!"
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
// Merge PR
|
|
143
|
+
github.mergePullRequest({
|
|
144
|
+
pull_number: 456,
|
|
145
|
+
merge_method: "squash"
|
|
146
|
+
})
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### GitHub Actions
|
|
150
|
+
|
|
151
|
+
```javascript
|
|
152
|
+
// Trigger workflow
|
|
153
|
+
github.triggerWorkflow({
|
|
154
|
+
workflow_id: "ci.yml",
|
|
155
|
+
ref: "main",
|
|
156
|
+
inputs: { environment: "production" }
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
// Get workflow runs
|
|
160
|
+
github.listWorkflowRuns({
|
|
161
|
+
workflow_id: "ci.yml",
|
|
162
|
+
status: "completed"
|
|
163
|
+
})
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Advanced Features
|
|
167
|
+
|
|
168
|
+
### Code Search
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
// Search code
|
|
172
|
+
github.searchCode({
|
|
173
|
+
query: "function TODO in:file language:js repo:owner/repo"
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
// Search commits
|
|
177
|
+
github.searchCommits({
|
|
178
|
+
query: "fix bug author:username"
|
|
179
|
+
})
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Release Management
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
// Create release
|
|
186
|
+
github.createRelease({
|
|
187
|
+
tag_name: "v1.0.0",
|
|
188
|
+
name: "Version 1.0.0",
|
|
189
|
+
body: "Release notes...",
|
|
190
|
+
draft: false,
|
|
191
|
+
prerelease: false
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
// Upload release asset
|
|
195
|
+
github.uploadReleaseAsset({
|
|
196
|
+
release_id: 789,
|
|
197
|
+
name: "app.zip",
|
|
198
|
+
data: fileBuffer
|
|
199
|
+
})
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Webhooks
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
// Create webhook
|
|
206
|
+
github.createWebhook({
|
|
207
|
+
config: {
|
|
208
|
+
url: "https://example.com/webhook",
|
|
209
|
+
content_type: "json"
|
|
210
|
+
},
|
|
211
|
+
events: ["push", "pull_request"]
|
|
212
|
+
})
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Workflow Integration
|
|
216
|
+
|
|
217
|
+
### Automated PR Workflow
|
|
218
|
+
|
|
219
|
+
```yaml
|
|
220
|
+
workflow:
|
|
221
|
+
- create_branch: feature/new-feature
|
|
222
|
+
- commit_changes:
|
|
223
|
+
message: "Add new feature"
|
|
224
|
+
- create_pr:
|
|
225
|
+
title: "Feature: New functionality"
|
|
226
|
+
reviewers: ["reviewer1", "reviewer2"]
|
|
227
|
+
- wait_for_checks: true
|
|
228
|
+
- auto_merge:
|
|
229
|
+
method: squash
|
|
230
|
+
delete_branch: true
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Issue Triage
|
|
234
|
+
|
|
235
|
+
```yaml
|
|
236
|
+
triage:
|
|
237
|
+
rules:
|
|
238
|
+
- if: "title contains 'bug'"
|
|
239
|
+
then:
|
|
240
|
+
- add_label: bug
|
|
241
|
+
- assign_to: bug-team
|
|
242
|
+
- if: "title contains 'feature'"
|
|
243
|
+
then:
|
|
244
|
+
- add_label: enhancement
|
|
245
|
+
- add_to_project: feature-requests
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Best Practices
|
|
249
|
+
|
|
250
|
+
1. **Authentication**
|
|
251
|
+
- Use fine-grained PATs
|
|
252
|
+
- Rotate tokens regularly
|
|
253
|
+
- Store securely in .env
|
|
254
|
+
|
|
255
|
+
2. **Rate Limiting**
|
|
256
|
+
- Monitor API usage
|
|
257
|
+
- Implement caching
|
|
258
|
+
- Use conditional requests
|
|
259
|
+
|
|
260
|
+
3. **Branch Protection**
|
|
261
|
+
- Require PR reviews
|
|
262
|
+
- Enable status checks
|
|
263
|
+
- Protect main branch
|
|
264
|
+
|
|
265
|
+
4. **Automation**
|
|
266
|
+
- Use GitHub Actions for CI/CD
|
|
267
|
+
- Automate repetitive tasks
|
|
268
|
+
- Implement proper error handling
|
|
269
|
+
|
|
270
|
+
## Troubleshooting
|
|
271
|
+
|
|
272
|
+
### Common Issues
|
|
273
|
+
|
|
274
|
+
1. **Authentication Failed**
|
|
275
|
+
- Verify token is valid
|
|
276
|
+
- Check token permissions
|
|
277
|
+
- Ensure token hasn't expired
|
|
278
|
+
|
|
279
|
+
2. **Rate Limit Exceeded**
|
|
280
|
+
- Check rate limit status
|
|
281
|
+
- Implement exponential backoff
|
|
282
|
+
- Use authenticated requests
|
|
283
|
+
|
|
284
|
+
3. **Permission Denied**
|
|
285
|
+
- Verify repository access
|
|
286
|
+
- Check organization permissions
|
|
287
|
+
- Ensure proper token scopes
|
|
288
|
+
|
|
289
|
+
### Debug Mode
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# Enable debug logging
|
|
293
|
+
export GITHUB_DEBUG=true
|
|
294
|
+
export NODE_DEBUG=github
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Security Considerations
|
|
298
|
+
|
|
299
|
+
1. **Token Security**
|
|
300
|
+
- Never commit tokens
|
|
301
|
+
- Use environment variables
|
|
302
|
+
- Implement token rotation
|
|
303
|
+
|
|
304
|
+
2. **Repository Access**
|
|
305
|
+
- Use least privilege principle
|
|
306
|
+
- Review collaborator permissions
|
|
307
|
+
- Enable 2FA
|
|
308
|
+
|
|
309
|
+
3. **Webhook Security**
|
|
310
|
+
- Validate webhook signatures
|
|
311
|
+
- Use HTTPS endpoints
|
|
312
|
+
- Implement IP allowlisting
|
|
313
|
+
|
|
314
|
+
## GitHub Enterprise
|
|
315
|
+
|
|
316
|
+
For GitHub Enterprise Server:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# Configure enterprise URL
|
|
320
|
+
export GITHUB_API_URL=https://github.enterprise.com/api/v3
|
|
321
|
+
export GITHUB_GRAPHQL_URL=https://github.enterprise.com/api/graphql
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Rate Limits
|
|
325
|
+
|
|
326
|
+
### API Limits
|
|
327
|
+
- Authenticated: 5,000 requests/hour
|
|
328
|
+
- Search: 30 requests/minute
|
|
329
|
+
- GraphQL: 5,000 points/hour
|
|
330
|
+
|
|
331
|
+
### Checking Rate Limit
|
|
332
|
+
|
|
333
|
+
```javascript
|
|
334
|
+
github.getRateLimit()
|
|
335
|
+
// Returns: { limit, remaining, reset }
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Version History
|
|
339
|
+
|
|
340
|
+
- **1.0.0**: Initial MCP integration
|
|
341
|
+
- **1.1.0**: Added Actions support
|
|
342
|
+
- **1.2.0**: GraphQL API integration
|
|
343
|
+
- **1.3.0**: Enterprise support
|
|
344
|
+
- **1.4.0**: Advanced search capabilities
|
|
345
|
+
|
|
346
|
+
## Related Resources
|
|
347
|
+
|
|
348
|
+
- [GitHub API Documentation](https://docs.github.com/en/rest)
|
|
349
|
+
- [GitHub Actions](https://docs.github.com/en/actions)
|
|
350
|
+
- [GitHub Operations Specialist](../agents/devops/github-operations-specialist.md)
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-mcp
|
|
3
|
+
command: npx
|
|
4
|
+
args: ["@playwright/mcp"]
|
|
5
|
+
env:
|
|
6
|
+
PLAYWRIGHT_BROWSER: "${PLAYWRIGHT_BROWSER:-chromium}"
|
|
7
|
+
PLAYWRIGHT_HEADLESS: "${PLAYWRIGHT_HEADLESS:-true}"
|
|
8
|
+
envFile: .claude/.env
|
|
9
|
+
description: Playwright MCP server for browser automation and E2E testing
|
|
10
|
+
category: testing
|
|
11
|
+
status: active
|
|
12
|
+
version: ">=1.0.0"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Playwright MCP Server
|
|
16
|
+
|
|
17
|
+
## Description
|
|
18
|
+
|
|
19
|
+
The Playwright MCP Server enables browser automation, visual testing, and end-to-end testing capabilities through the Model Context Protocol. It provides direct browser control for testing web applications, capturing screenshots, and validating user interfaces.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- **Browser Automation**: Control Chromium, Firefox, and WebKit
|
|
24
|
+
- **Visual Testing**: Screenshot capture and comparison
|
|
25
|
+
- **E2E Testing**: Automated user flow testing
|
|
26
|
+
- **Accessibility Testing**: WCAG compliance checks
|
|
27
|
+
- **Performance Monitoring**: Page load metrics
|
|
28
|
+
- **Network Interception**: Mock API responses
|
|
29
|
+
- **Mobile Emulation**: Test responsive designs
|
|
30
|
+
|
|
31
|
+
## Configuration
|
|
32
|
+
|
|
33
|
+
### Environment Variables
|
|
34
|
+
|
|
35
|
+
- `PLAYWRIGHT_BROWSER`: Browser engine (chromium|firefox|webkit)
|
|
36
|
+
- `PLAYWRIGHT_HEADLESS`: Run in headless mode (true|false)
|
|
37
|
+
- `PLAYWRIGHT_SLOW_MO`: Slow down operations by ms
|
|
38
|
+
- `PLAYWRIGHT_TIMEOUT`: Default timeout in ms
|
|
39
|
+
- `PLAYWRIGHT_VIDEO`: Record videos (on|off|retain-on-failure)
|
|
40
|
+
- `PLAYWRIGHT_TRACE`: Record traces (on|off|retain-on-failure)
|
|
41
|
+
|
|
42
|
+
### Browser Options
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
browsers:
|
|
46
|
+
chromium:
|
|
47
|
+
channel: chrome # or 'msedge', 'chrome-beta'
|
|
48
|
+
args:
|
|
49
|
+
- --disable-dev-shm-usage
|
|
50
|
+
- --no-sandbox
|
|
51
|
+
firefox:
|
|
52
|
+
firefoxUserPrefs:
|
|
53
|
+
"media.navigator.streams.fake": true
|
|
54
|
+
webkit:
|
|
55
|
+
# Safari-specific options
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Usage Examples
|
|
59
|
+
|
|
60
|
+
### Basic Setup
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Enable the server
|
|
64
|
+
autopm mcp enable playwright-mcp
|
|
65
|
+
|
|
66
|
+
# Configure for headed mode during development
|
|
67
|
+
echo "PLAYWRIGHT_HEADLESS=false" >> .claude/.env
|
|
68
|
+
echo "PLAYWRIGHT_SLOW_MO=100" >> .claude/.env
|
|
69
|
+
|
|
70
|
+
# Sync configuration
|
|
71
|
+
autopm mcp sync
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Integration with Agents
|
|
75
|
+
|
|
76
|
+
Used extensively with:
|
|
77
|
+
- `e2e-test-engineer` - For E2E test creation
|
|
78
|
+
- `react-frontend-engineer` - For UI testing
|
|
79
|
+
- `ux-design-expert` - For visual regression
|
|
80
|
+
|
|
81
|
+
### Test Examples
|
|
82
|
+
|
|
83
|
+
```javascript
|
|
84
|
+
// Navigation
|
|
85
|
+
await page.goto('https://example.com');
|
|
86
|
+
|
|
87
|
+
// Interaction
|
|
88
|
+
await page.click('button#submit');
|
|
89
|
+
await page.fill('input#email', 'test@example.com');
|
|
90
|
+
|
|
91
|
+
// Assertions
|
|
92
|
+
await expect(page).toHaveTitle('Example Site');
|
|
93
|
+
await expect(page.locator('.message')).toBeVisible();
|
|
94
|
+
|
|
95
|
+
// Screenshots
|
|
96
|
+
await page.screenshot({ path: 'screenshot.png' });
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## MCP Commands
|
|
100
|
+
|
|
101
|
+
### Navigation
|
|
102
|
+
- `navigate(url)` - Go to URL
|
|
103
|
+
- `reload()` - Reload page
|
|
104
|
+
- `goBack()` - Navigate back
|
|
105
|
+
- `goForward()` - Navigate forward
|
|
106
|
+
|
|
107
|
+
### Interaction
|
|
108
|
+
- `click(selector)` - Click element
|
|
109
|
+
- `fill(selector, value)` - Fill input
|
|
110
|
+
- `select(selector, value)` - Select option
|
|
111
|
+
- `check(selector)` - Check checkbox
|
|
112
|
+
- `press(key)` - Press keyboard key
|
|
113
|
+
|
|
114
|
+
### Validation
|
|
115
|
+
- `screenshot(options)` - Capture screenshot
|
|
116
|
+
- `textContent(selector)` - Get text
|
|
117
|
+
- `isVisible(selector)` - Check visibility
|
|
118
|
+
- `waitForSelector(selector)` - Wait for element
|
|
119
|
+
|
|
120
|
+
## Visual Testing
|
|
121
|
+
|
|
122
|
+
### Screenshot Comparison
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
visual_testing:
|
|
126
|
+
baseline_dir: .playwright/baselines
|
|
127
|
+
diff_dir: .playwright/diffs
|
|
128
|
+
threshold: 0.2 # 20% difference threshold
|
|
129
|
+
ignore_areas:
|
|
130
|
+
- selector: .timestamp
|
|
131
|
+
- selector: .dynamic-content
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Full Page Screenshots
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
await page.screenshot({
|
|
138
|
+
fullPage: true,
|
|
139
|
+
animations: 'disabled',
|
|
140
|
+
mask: ['.sensitive-data']
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Mobile Testing
|
|
145
|
+
|
|
146
|
+
### Device Emulation
|
|
147
|
+
|
|
148
|
+
```javascript
|
|
149
|
+
// iPhone 12
|
|
150
|
+
{
|
|
151
|
+
viewport: { width: 390, height: 844 },
|
|
152
|
+
userAgent: 'Mozilla/5.0 (iPhone...)',
|
|
153
|
+
deviceScaleFactor: 3,
|
|
154
|
+
isMobile: true,
|
|
155
|
+
hasTouch: true
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Responsive Testing
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
viewports:
|
|
163
|
+
- name: mobile
|
|
164
|
+
width: 375
|
|
165
|
+
height: 667
|
|
166
|
+
- name: tablet
|
|
167
|
+
width: 768
|
|
168
|
+
height: 1024
|
|
169
|
+
- name: desktop
|
|
170
|
+
width: 1920
|
|
171
|
+
height: 1080
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Performance Testing
|
|
175
|
+
|
|
176
|
+
### Metrics Collection
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
const metrics = await page.metrics();
|
|
180
|
+
// Returns: JSHeapUsedSize, Timestamp, etc.
|
|
181
|
+
|
|
182
|
+
const performance = await page.evaluate(() =>
|
|
183
|
+
JSON.stringify(window.performance.timing)
|
|
184
|
+
);
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Network Monitoring
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
// Monitor requests
|
|
191
|
+
page.on('request', request => {
|
|
192
|
+
console.log('Request:', request.url());
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// Mock responses
|
|
196
|
+
await page.route('**/api/*', route => {
|
|
197
|
+
route.fulfill({
|
|
198
|
+
status: 200,
|
|
199
|
+
body: JSON.stringify({ mocked: true })
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Accessibility Testing
|
|
205
|
+
|
|
206
|
+
### ARIA Validation
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
const accessibilityTree = await page.accessibility.snapshot();
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Keyboard Navigation
|
|
213
|
+
|
|
214
|
+
```javascript
|
|
215
|
+
await page.keyboard.press('Tab');
|
|
216
|
+
await page.keyboard.press('Enter');
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Debugging
|
|
220
|
+
|
|
221
|
+
### Debug Mode
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Enable debugging
|
|
225
|
+
export DEBUG=pw:api
|
|
226
|
+
export PWDEBUG=1
|
|
227
|
+
|
|
228
|
+
# Slow mode for debugging
|
|
229
|
+
export PLAYWRIGHT_SLOW_MO=1000
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Trace Viewer
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Record trace
|
|
236
|
+
npx playwright test --trace on
|
|
237
|
+
|
|
238
|
+
# View trace
|
|
239
|
+
npx playwright show-trace trace.zip
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Best Practices
|
|
243
|
+
|
|
244
|
+
1. **Selectors**
|
|
245
|
+
- Use data-testid attributes
|
|
246
|
+
- Avoid fragile CSS selectors
|
|
247
|
+
- Prefer user-facing attributes
|
|
248
|
+
|
|
249
|
+
2. **Waits**
|
|
250
|
+
- Use auto-waiting
|
|
251
|
+
- Avoid hard-coded delays
|
|
252
|
+
- Wait for specific conditions
|
|
253
|
+
|
|
254
|
+
3. **Test Isolation**
|
|
255
|
+
- Fresh browser context per test
|
|
256
|
+
- Clean up test data
|
|
257
|
+
- No test interdependencies
|
|
258
|
+
|
|
259
|
+
4. **Error Handling**
|
|
260
|
+
- Comprehensive error messages
|
|
261
|
+
- Screenshot on failure
|
|
262
|
+
- Trace on failure
|
|
263
|
+
|
|
264
|
+
## Troubleshooting
|
|
265
|
+
|
|
266
|
+
### Common Issues
|
|
267
|
+
|
|
268
|
+
1. **Browser Launch Failed**
|
|
269
|
+
- Install system dependencies
|
|
270
|
+
- Check browser binaries
|
|
271
|
+
- Verify permissions
|
|
272
|
+
|
|
273
|
+
2. **Timeout Errors**
|
|
274
|
+
- Increase timeout values
|
|
275
|
+
- Check network conditions
|
|
276
|
+
- Verify element selectors
|
|
277
|
+
|
|
278
|
+
3. **Flaky Tests**
|
|
279
|
+
- Add proper waits
|
|
280
|
+
- Mock external dependencies
|
|
281
|
+
- Use retry logic
|
|
282
|
+
|
|
283
|
+
## Security Considerations
|
|
284
|
+
|
|
285
|
+
1. **Credentials**
|
|
286
|
+
- Never hardcode passwords
|
|
287
|
+
- Use environment variables
|
|
288
|
+
- Implement secure storage
|
|
289
|
+
|
|
290
|
+
2. **Cross-Origin**
|
|
291
|
+
- Handle CORS properly
|
|
292
|
+
- Use context isolation
|
|
293
|
+
- Validate origins
|
|
294
|
+
|
|
295
|
+
3. **Data Privacy**
|
|
296
|
+
- Mask sensitive data in screenshots
|
|
297
|
+
- Clear cookies/storage
|
|
298
|
+
- Use test data only
|
|
299
|
+
|
|
300
|
+
## Version History
|
|
301
|
+
|
|
302
|
+
- **1.0.0**: Initial MCP integration
|
|
303
|
+
- **1.1.0**: Added visual testing
|
|
304
|
+
- **1.2.0**: Mobile emulation support
|
|
305
|
+
- **1.3.0**: Performance metrics
|
|
306
|
+
- **1.4.0**: Accessibility testing
|
|
307
|
+
|
|
308
|
+
## Related Resources
|
|
309
|
+
|
|
310
|
+
- [Playwright Documentation](https://playwright.dev)
|
|
311
|
+
- [MCP Browser Control](https://modelcontextprotocol.org/browser)
|
|
312
|
+
- [E2E Test Engineer Agent](../agents/frameworks/e2e-test-engineer.md)
|