@mwturnbull/papi-mcp 0.1.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/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/config/assembler.d.ts +6 -0
- package/dist/config/assembler.d.ts.map +1 -0
- package/dist/config/assembler.js +56 -0
- package/dist/config/assembler.js.map +1 -0
- package/dist/config/parser.d.ts +6 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +79 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/config/snippets.d.ts +12 -0
- package/dist/config/snippets.d.ts.map +1 -0
- package/dist/config/snippets.js +75 -0
- package/dist/config/snippets.js.map +1 -0
- package/dist/git/git-ops.d.ts +16 -0
- package/dist/git/git-ops.d.ts.map +1 -0
- package/dist/git/git-ops.js +64 -0
- package/dist/git/git-ops.js.map +1 -0
- package/dist/git/github.d.ts +12 -0
- package/dist/git/github.d.ts.map +1 -0
- package/dist/git/github.js +83 -0
- package/dist/git/github.js.map +1 -0
- package/dist/git/gitlab.d.ts +11 -0
- package/dist/git/gitlab.d.ts.map +1 -0
- package/dist/git/gitlab.js +65 -0
- package/dist/git/gitlab.js.map +1 -0
- package/dist/git/provider.d.ts +33 -0
- package/dist/git/provider.d.ts.map +1 -0
- package/dist/git/provider.js +49 -0
- package/dist/git/provider.js.map +1 -0
- package/dist/papi/auth.d.ts +12 -0
- package/dist/papi/auth.d.ts.map +1 -0
- package/dist/papi/auth.js +74 -0
- package/dist/papi/auth.js.map +1 -0
- package/dist/papi/client.d.ts +19 -0
- package/dist/papi/client.d.ts.map +1 -0
- package/dist/papi/client.js +115 -0
- package/dist/papi/client.js.map +1 -0
- package/dist/papi/types.d.ts +487 -0
- package/dist/papi/types.d.ts.map +1 -0
- package/dist/papi/types.js +94 -0
- package/dist/papi/types.js.map +1 -0
- package/dist/redaction/redactor.d.ts +25 -0
- package/dist/redaction/redactor.d.ts.map +1 -0
- package/dist/redaction/redactor.js +128 -0
- package/dist/redaction/redactor.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +219 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/activate.d.ts +16 -0
- package/dist/tools/activate.d.ts.map +1 -0
- package/dist/tools/activate.js +59 -0
- package/dist/tools/activate.js.map +1 -0
- package/dist/tools/diff-configs.d.ts +3 -0
- package/dist/tools/diff-configs.d.ts.map +1 -0
- package/dist/tools/diff-configs.js +152 -0
- package/dist/tools/diff-configs.js.map +1 -0
- package/dist/tools/get-property-config.d.ts +9 -0
- package/dist/tools/get-property-config.d.ts.map +1 -0
- package/dist/tools/get-property-config.js +53 -0
- package/dist/tools/get-property-config.js.map +1 -0
- package/dist/tools/pipeline.d.ts +11 -0
- package/dist/tools/pipeline.d.ts.map +1 -0
- package/dist/tools/pipeline.js +9 -0
- package/dist/tools/pipeline.js.map +1 -0
- package/dist/tools/sync-property.d.ts +9 -0
- package/dist/tools/sync-property.d.ts.map +1 -0
- package/dist/tools/sync-property.js +65 -0
- package/dist/tools/sync-property.js.map +1 -0
- package/dist/tools/write-snippet.d.ts +30 -0
- package/dist/tools/write-snippet.d.ts.map +1 -0
- package/dist/tools/write-snippet.js +92 -0
- package/dist/tools/write-snippet.js.map +1 -0
- package/dist/validation/local.d.ts +3 -0
- package/dist/validation/local.d.ts.map +1 -0
- package/dist/validation/local.js +290 -0
- package/dist/validation/local.js.map +1 -0
- package/dist/validation/papi.d.ts +6 -0
- package/dist/validation/papi.d.ts.map +1 -0
- package/dist/validation/papi.js +59 -0
- package/dist/validation/papi.js.map +1 -0
- package/package.json +55 -0
- package/src/skill/system-prompt.md +205 -0
- package/templates/.gitkeep +0 -0
- package/templates/CLAUDE.md +115 -0
- package/templates/copilot-instructions.md +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/validation/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"papi.d.ts","sourceRoot":"","sources":["../../src/validation/papi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AAO1E,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,gBAAgB,CAAC,CA4D3B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { PapiClient, PapiClientError } from '../papi/client.js';
|
|
2
|
+
import { resolveCredentials } from '../papi/auth.js';
|
|
3
|
+
import { assembleRuleTree } from '../config/assembler.js';
|
|
4
|
+
import { readMetadata } from '../config/snippets.js';
|
|
5
|
+
import { validateLocal } from './local.js';
|
|
6
|
+
export async function validateWithApi(repoPath, options) {
|
|
7
|
+
// Always run local validation first
|
|
8
|
+
const localResult = await validateLocal(repoPath);
|
|
9
|
+
// Try API validation
|
|
10
|
+
let apiChecks = [];
|
|
11
|
+
try {
|
|
12
|
+
const credentials = await resolveCredentials({
|
|
13
|
+
edgercPath: options?.edgercPath,
|
|
14
|
+
section: options?.edgercSection,
|
|
15
|
+
});
|
|
16
|
+
const client = new PapiClient(credentials);
|
|
17
|
+
const metadata = await readMetadata(repoPath);
|
|
18
|
+
const tree = await assembleRuleTree(repoPath);
|
|
19
|
+
const apiResult = await client.validateRuleTree(String(metadata.envInfo.propertyId), metadata.envInfo.latestVersionInfo.propertyVersion, tree.rules);
|
|
20
|
+
// Convert API errors to ValidationCheck format
|
|
21
|
+
for (const err of apiResult.errors) {
|
|
22
|
+
apiChecks.push({
|
|
23
|
+
check: 'papi-api',
|
|
24
|
+
severity: 'error',
|
|
25
|
+
message: err.detail,
|
|
26
|
+
location: err.errorLocation,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
for (const warn of apiResult.warnings) {
|
|
30
|
+
apiChecks.push({
|
|
31
|
+
check: 'papi-api',
|
|
32
|
+
severity: 'warning',
|
|
33
|
+
message: warn.detail,
|
|
34
|
+
location: warn.errorLocation,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// API unavailable — return local results with a note
|
|
40
|
+
const message = error instanceof PapiClientError
|
|
41
|
+
? `PAPI API validation unavailable: ${error.message} (status: ${error.statusCode})`
|
|
42
|
+
: `PAPI API validation unavailable: ${error.message}`;
|
|
43
|
+
apiChecks.push({
|
|
44
|
+
check: 'papi-api',
|
|
45
|
+
severity: 'info',
|
|
46
|
+
message,
|
|
47
|
+
location: 'api',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Merge local + API results
|
|
51
|
+
const allChecks = [...localResult.errors, ...localResult.warnings, ...localResult.infos, ...apiChecks];
|
|
52
|
+
return {
|
|
53
|
+
valid: allChecks.filter(c => c.severity === 'error').length === 0,
|
|
54
|
+
errors: allChecks.filter(c => c.severity === 'error'),
|
|
55
|
+
warnings: allChecks.filter(c => c.severity === 'warning'),
|
|
56
|
+
infos: allChecks.filter(c => c.severity === 'info'),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=papi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"papi.js","sourceRoot":"","sources":["../../src/validation/papi.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mwturnbull/papi-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Akamai Property Manager (PAPI) configurations",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/server.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"papi-mcp": "dist/server.js"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "m-w-turnbull",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/m-w-turnbull/papi-mcp.git"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"akamai",
|
|
18
|
+
"papi",
|
|
19
|
+
"mcp",
|
|
20
|
+
"property-manager",
|
|
21
|
+
"cdn",
|
|
22
|
+
"edgegrid"
|
|
23
|
+
],
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"src/skill/system-prompt.md",
|
|
27
|
+
"templates",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"test:coverage": "vitest run --coverage",
|
|
36
|
+
"dev": "tsx src/server.ts",
|
|
37
|
+
"lint": "tsc --noEmit",
|
|
38
|
+
"prepublishOnly": "npm run build && npm test"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
42
|
+
"akamai-edgegrid": "^3.5.0",
|
|
43
|
+
"zod": "^3.24.4"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^22.15.21",
|
|
47
|
+
"typescript": "^5.8.3",
|
|
48
|
+
"vitest": "^3.2.1",
|
|
49
|
+
"tsx": "^4.19.4",
|
|
50
|
+
"@vitest/coverage-v8": "^3.2.1"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18.0.0"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Akamai PAPI Configuration Agent
|
|
2
|
+
|
|
3
|
+
You are an expert Akamai Property Manager configuration agent. You help SRE and performance engineering teams manage Akamai CDN properties through structured tools.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
### Properties and Versions
|
|
8
|
+
|
|
9
|
+
- An Akamai **property** defines how edge servers handle HTTP requests for your hostnames
|
|
10
|
+
- Properties are versioned — each change creates a new version
|
|
11
|
+
- Only one version can be active on each network (staging/production) at a time
|
|
12
|
+
- Properties are identified by `propertyId` (e.g., `prp_12345`)
|
|
13
|
+
- Access control groups are identified by `groupId` (e.g., `grp_54321`)
|
|
14
|
+
|
|
15
|
+
### Rule Trees
|
|
16
|
+
|
|
17
|
+
Configuration is structured as a **rule tree** — a hierarchy of rules defining behavior across the CDN:
|
|
18
|
+
|
|
19
|
+
- The root rule (`default`) contains global behaviors and child rules
|
|
20
|
+
- Each rule has: `name`, `behaviors`, `criteria`, `children`, `criteriaMustSatisfy`
|
|
21
|
+
- **Behaviors** define what the edge server does (caching, origin selection, headers, etc.)
|
|
22
|
+
- **Criteria** define when a rule applies (path match, hostname, request method, etc.)
|
|
23
|
+
- `criteriaMustSatisfy`: `"all"` (AND logic) or `"any"` (OR logic)
|
|
24
|
+
- Rules are evaluated top-to-bottom; first match applies
|
|
25
|
+
|
|
26
|
+
### Variables
|
|
27
|
+
|
|
28
|
+
PAPI variables allow dynamic configuration without hardcoding values:
|
|
29
|
+
|
|
30
|
+
- PAPI variables use the `PMUSER_` prefix: `PMUSER_ORIGIN_HOST`, `PMUSER_API_KEY`
|
|
31
|
+
- Referenced as `{{user.PMUSER_VARIABLE_NAME}}` in behavior options
|
|
32
|
+
- Declared in the root rule's `variables` array
|
|
33
|
+
- Variables can be marked `hidden: true` and `sensitive: true` (for secrets)
|
|
34
|
+
- Sensitive variables are redacted in logs and outputs by default
|
|
35
|
+
- Each variable has a type: `string`, `number`, `jsonBlock`
|
|
36
|
+
|
|
37
|
+
### Config Snippets and #include:
|
|
38
|
+
|
|
39
|
+
Large rule trees are split into snippet files for maintainability:
|
|
40
|
+
|
|
41
|
+
- Snippets live under `config-snippets/` directory
|
|
42
|
+
- `main.json` is the root snippet — it uses `#include:Filename.json` directives in its children array
|
|
43
|
+
- Snippet files are standalone rule objects (no `{ "rules": {} }` envelope)
|
|
44
|
+
- Only `main.json` has the envelope wrapper
|
|
45
|
+
- Example: `#include:Origins.json` includes the `Origins.json` snippet
|
|
46
|
+
|
|
47
|
+
### Activation and Networks
|
|
48
|
+
|
|
49
|
+
Once a property version is validated and approved:
|
|
50
|
+
|
|
51
|
+
- **Staging activation** deploys to Akamai's staging network for testing
|
|
52
|
+
- **Production activation** deploys to the live CDN network (requires explicit risk acknowledgement)
|
|
53
|
+
- Activations return immediately — use polling to check status
|
|
54
|
+
- Each activation request requires `contactEmails` for notifications
|
|
55
|
+
|
|
56
|
+
## Available Tools (14)
|
|
57
|
+
|
|
58
|
+
### Read & Analyse
|
|
59
|
+
|
|
60
|
+
| Tool | Purpose |
|
|
61
|
+
|------|---------|
|
|
62
|
+
| `get_property_config` | Fetch live rule tree from PAPI API |
|
|
63
|
+
| `read_snippets` | Read local config snippet files or list all |
|
|
64
|
+
| `parse_rule_tree` | Convert rule tree to LLM-friendly flat format |
|
|
65
|
+
| `assemble_rule_tree` | Resolve all #include: directives into complete tree |
|
|
66
|
+
| `sync_property` | Compare local vs live config (version-number comparison) |
|
|
67
|
+
|
|
68
|
+
### Validate & Diff
|
|
69
|
+
|
|
70
|
+
| Tool | Purpose |
|
|
71
|
+
|------|---------|
|
|
72
|
+
| `validate_config` | Run 7 local checks + optional PAPI API validation |
|
|
73
|
+
| `diff_configs` | Structured diff between two rule tree versions |
|
|
74
|
+
|
|
75
|
+
### Write & Ship
|
|
76
|
+
|
|
77
|
+
| Tool | Purpose |
|
|
78
|
+
|------|---------|
|
|
79
|
+
| `write_snippet` | Create or update config snippet files |
|
|
80
|
+
| `apply_behavior` | Add or modify a single behavior in a snippet |
|
|
81
|
+
| `create_branch` | Create git branch with akamai/ naming convention |
|
|
82
|
+
| `create_merge_request` | Commit, push, and open MR/PR |
|
|
83
|
+
|
|
84
|
+
### Activate & Pipeline
|
|
85
|
+
|
|
86
|
+
| Tool | Purpose |
|
|
87
|
+
|------|---------|
|
|
88
|
+
| `activate_staging` | Activate property version to staging network |
|
|
89
|
+
| `activate_production` | Activate to production (requires risk acknowledgement) |
|
|
90
|
+
| `trigger_pipeline` | Trigger CI/CD pipeline for a branch |
|
|
91
|
+
|
|
92
|
+
## Recommended Workflow
|
|
93
|
+
|
|
94
|
+
1. **Read**: `read_snippets` or `get_property_config` to understand current state
|
|
95
|
+
2. **Parse**: `parse_rule_tree` for a human-readable summary
|
|
96
|
+
3. **Branch**: `create_branch` to start a feature branch
|
|
97
|
+
4. **Modify**: `write_snippet` or `apply_behavior` to make changes
|
|
98
|
+
5. **Validate**: `validate_config` to check for issues
|
|
99
|
+
6. **Diff**: `diff_configs` to review changes
|
|
100
|
+
7. **Ship**: `create_merge_request` to open a MR/PR for review
|
|
101
|
+
8. **Activate**: After MR approval, `activate_staging` then `activate_production`
|
|
102
|
+
|
|
103
|
+
## Activation Safety
|
|
104
|
+
|
|
105
|
+
- **Always activate staging first** and verify behavior before production
|
|
106
|
+
- Production activation requires `acknowledgeProductionRisk: true`
|
|
107
|
+
- Production activation requires at least one `contactEmails` entry
|
|
108
|
+
- Activations return immediately — use polling to check completion status
|
|
109
|
+
- Monitor activation emails and logs for any warnings
|
|
110
|
+
|
|
111
|
+
## Common Behavior Patterns
|
|
112
|
+
|
|
113
|
+
### Caching
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"name": "caching",
|
|
118
|
+
"options": {
|
|
119
|
+
"behavior": "MAX_AGE",
|
|
120
|
+
"ttl": "7d"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Origin Selection
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"name": "origin",
|
|
130
|
+
"options": {
|
|
131
|
+
"originType": "CUSTOMER",
|
|
132
|
+
"hostname": "{{user.PMUSER_ORIGIN}}"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Response Headers
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"name": "modifyOutgoingResponseHeader",
|
|
142
|
+
"options": {
|
|
143
|
+
"action": "ADD",
|
|
144
|
+
"customHeaderName": "X-Frame-Options",
|
|
145
|
+
"headerValue": "DENY"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Path Matching Criteria
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"name": "path",
|
|
155
|
+
"options": {
|
|
156
|
+
"matchOperator": "MATCHES_ONE_OF",
|
|
157
|
+
"values": ["/api/*"]
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Validation Checks (7)
|
|
163
|
+
|
|
164
|
+
The `validate_config` tool performs these checks:
|
|
165
|
+
|
|
166
|
+
1. **JSON syntax** — all files must be valid JSON (error)
|
|
167
|
+
2. **Required fields** — name, children, behaviors, criteria, criteriaMustSatisfy (error)
|
|
168
|
+
3. **Include resolution** — all #include: targets must exist (error)
|
|
169
|
+
4. **Orphan detection** — unreferenced snippets (warning)
|
|
170
|
+
5. **Variable references** — PMUSER_ vars must be declared (warning)
|
|
171
|
+
6. **Duplicate rule names** — siblings with same name (warning)
|
|
172
|
+
7. **No-op rules** — empty behaviors + criteria + children (info)
|
|
173
|
+
|
|
174
|
+
Use `validate_config` with `apiValidation: true` to also check PAPI schema compliance.
|
|
175
|
+
|
|
176
|
+
## Best Practices
|
|
177
|
+
|
|
178
|
+
- Keep snippet names descriptive: `CORS_Policy.json`, `API_Caching.json`, `Origins.json`
|
|
179
|
+
- Use variables for environment-specific values (hostnames, API keys)
|
|
180
|
+
- Mark sensitive variables as `hidden: true, sensitive: true`
|
|
181
|
+
- Run validation after every change
|
|
182
|
+
- Review diffs before creating merge requests
|
|
183
|
+
- Use staging activation to verify behavior before production
|
|
184
|
+
- Document rule purposes in rule names and comments
|
|
185
|
+
- Group related rules under descriptive parent rules
|
|
186
|
+
|
|
187
|
+
## Error Handling
|
|
188
|
+
|
|
189
|
+
Common API errors and solutions:
|
|
190
|
+
|
|
191
|
+
| Error | Meaning | Solution |
|
|
192
|
+
|-------|---------|----------|
|
|
193
|
+
| 401 Unauthorized | Invalid credentials | Check .edgerc or env vars |
|
|
194
|
+
| 403 Forbidden | Insufficient permissions | Verify account has property access |
|
|
195
|
+
| 404 Not Found | Property not found | Verify propertyId and groupId |
|
|
196
|
+
| 422 Unprocessable | Validation failed | Run `validate_config` with `apiValidation: true` |
|
|
197
|
+
| 429 Rate Limited | Too many requests | Wait and retry |
|
|
198
|
+
|
|
199
|
+
## Git Integration
|
|
200
|
+
|
|
201
|
+
- Branch names follow pattern: `akamai/<type>/<description>`
|
|
202
|
+
- Types: `feature`, `fix`, `chore`, `docs`, `refactor`
|
|
203
|
+
- Example: `akamai/feature/add-cors-policy`
|
|
204
|
+
- MR descriptions should include plain-English summary of changes
|
|
205
|
+
- Auto-detects GitLab and GitHub repositories
|
|
File without changes
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Akamai Property Configuration
|
|
2
|
+
|
|
3
|
+
This project uses the papi-mcp MCP server for AI-assisted Akamai property management.
|
|
4
|
+
|
|
5
|
+
## Available Tools
|
|
6
|
+
|
|
7
|
+
14 tools across read, validate, write, activate, and pipeline workflows.
|
|
8
|
+
|
|
9
|
+
### Read & Analyse
|
|
10
|
+
|
|
11
|
+
- `get_property_config` — Fetch current property rule tree from PAPI API
|
|
12
|
+
- `read_snippets` — List or read config snippet files from disk
|
|
13
|
+
- `parse_rule_tree` — Convert JSON rule tree to LLM-optimised representation
|
|
14
|
+
- `assemble_rule_tree` — Resolve all #include: directives into complete tree
|
|
15
|
+
- `sync_property` — Compare local config against live PAPI version
|
|
16
|
+
|
|
17
|
+
### Validate & Diff
|
|
18
|
+
|
|
19
|
+
- `validate_config` — Run 7 validation checks + optional PAPI API validation
|
|
20
|
+
- `diff_configs` — Structured diff between two rule tree versions
|
|
21
|
+
|
|
22
|
+
### Write & Ship
|
|
23
|
+
|
|
24
|
+
- `write_snippet` — Create or update config snippet files
|
|
25
|
+
- `apply_behavior` — Add or modify single behavior in a snippet
|
|
26
|
+
- `create_branch` — Create git branch with akamai/ naming convention
|
|
27
|
+
- `create_merge_request` — Commit, push, and open MR/PR
|
|
28
|
+
|
|
29
|
+
### Activate & Pipeline
|
|
30
|
+
|
|
31
|
+
- `activate_staging` — Activate property to staging network
|
|
32
|
+
- `activate_production` — Activate to production (requires risk acknowledgement)
|
|
33
|
+
- `trigger_pipeline` — Trigger CI/CD pipeline for current branch
|
|
34
|
+
|
|
35
|
+
## Recommended Workflow
|
|
36
|
+
|
|
37
|
+
1. **Understand**: `read_snippets` → `parse_rule_tree` to get overview
|
|
38
|
+
2. **Branch**: `create_branch` with type and description
|
|
39
|
+
3. **Modify**: `write_snippet` or `apply_behavior` to make changes
|
|
40
|
+
4. **Validate**: `validate_config` to check for issues
|
|
41
|
+
5. **Review**: `diff_configs` to see what changed
|
|
42
|
+
6. **Ship**: `create_merge_request` to open MR/PR
|
|
43
|
+
7. **Activate** (after MR approval):
|
|
44
|
+
- `activate_staging` to test on staging first
|
|
45
|
+
- `activate_production` with acknowledgeProductionRisk and contactEmails
|
|
46
|
+
|
|
47
|
+
## Configuration
|
|
48
|
+
|
|
49
|
+
### Akamai Credentials
|
|
50
|
+
|
|
51
|
+
Use `.edgerc` file (default location: `~/.edgerc`):
|
|
52
|
+
|
|
53
|
+
```ini
|
|
54
|
+
[default]
|
|
55
|
+
client_secret = xxx
|
|
56
|
+
host = xxx.luna.akamaiapis.net
|
|
57
|
+
access_token = xxx
|
|
58
|
+
client_token = xxx
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Or set environment variables:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
export AKAMAI_CLIENT_SECRET=xxx
|
|
65
|
+
export AKAMAI_HOST=xxx.luna.akamaiapis.net
|
|
66
|
+
export AKAMAI_ACCESS_TOKEN=xxx
|
|
67
|
+
export AKAMAI_CLIENT_TOKEN=xxx
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Redaction Config (.papi-mcp.json)
|
|
71
|
+
|
|
72
|
+
Configure sensitive field redaction:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"redact": {
|
|
77
|
+
"sensitiveVariables": true,
|
|
78
|
+
"fields": ["options.hostname", "options.headerValue"],
|
|
79
|
+
"sensitiveHeaders": ["authorization", "x-api-key"]
|
|
80
|
+
},
|
|
81
|
+
"gitProvider": {
|
|
82
|
+
"type": "gitlab",
|
|
83
|
+
"host": "gitlab.internal.example.com"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Git Provider
|
|
89
|
+
|
|
90
|
+
Auto-detected from git remote. Override in `.papi-mcp.json` if needed.
|
|
91
|
+
|
|
92
|
+
- **GitLab**: Requires `GITLAB_TOKEN`, `GITLAB_PERSONAL_ACCESS_TOKEN`, or `CI_JOB_TOKEN`
|
|
93
|
+
- **GitHub**: Requires `GITHUB_TOKEN` or `GH_TOKEN`
|
|
94
|
+
|
|
95
|
+
### Property Metadata
|
|
96
|
+
|
|
97
|
+
Auto-detected from `envInfo.json` in property repo:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"propertyId": "prp_12345",
|
|
102
|
+
"groupId": "grp_54321",
|
|
103
|
+
"networkType": "production"
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Best Practices
|
|
108
|
+
|
|
109
|
+
- Start with `parse_rule_tree` to understand current configuration
|
|
110
|
+
- Use descriptive snippet names: `CORS_Policy.json`, `API_Caching.json`
|
|
111
|
+
- Use variables for environment-specific values
|
|
112
|
+
- Validate after every change
|
|
113
|
+
- Review diffs before creating MRs
|
|
114
|
+
- Test on staging before production activation
|
|
115
|
+
- Include detailed descriptions in MRs explaining the why of changes
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Akamai PAPI MCP Tools
|
|
2
|
+
|
|
3
|
+
You have access to 14 Akamai Property Manager tools via the papi-mcp MCP server.
|
|
4
|
+
|
|
5
|
+
## Tool Categories
|
|
6
|
+
|
|
7
|
+
### Read & Analyse (5 tools)
|
|
8
|
+
|
|
9
|
+
- `get_property_config` — Fetch current property rule tree from PAPI API
|
|
10
|
+
- `read_snippets` — List or read config snippet files from disk
|
|
11
|
+
- `parse_rule_tree` — Convert JSON rule tree to human-readable representation
|
|
12
|
+
- `assemble_rule_tree` — Resolve all #include: directives into complete tree
|
|
13
|
+
- `sync_property` — Compare local config against live PAPI version
|
|
14
|
+
|
|
15
|
+
### Validate & Diff (2 tools)
|
|
16
|
+
|
|
17
|
+
- `validate_config` — Run 7 validation checks + optional PAPI API validation
|
|
18
|
+
- `diff_configs` — Structured diff between two rule tree versions
|
|
19
|
+
|
|
20
|
+
### Write & Ship (4 tools)
|
|
21
|
+
|
|
22
|
+
- `write_snippet` — Create or update config snippet files
|
|
23
|
+
- `apply_behavior` — Add or modify single behavior in a snippet
|
|
24
|
+
- `create_branch` — Create git branch with akamai/ naming convention
|
|
25
|
+
- `create_merge_request` — Commit, push, and open MR/PR
|
|
26
|
+
|
|
27
|
+
### Activate & Pipeline (3 tools)
|
|
28
|
+
|
|
29
|
+
- `activate_staging` — Activate property to staging network
|
|
30
|
+
- `activate_production` — Activate to production (requires risk acknowledgement)
|
|
31
|
+
- `trigger_pipeline` — Trigger CI/CD pipeline for current branch
|
|
32
|
+
|
|
33
|
+
## Recommended Workflow
|
|
34
|
+
|
|
35
|
+
Always follow this sequence:
|
|
36
|
+
|
|
37
|
+
1. **Read & Parse**: Understand current configuration
|
|
38
|
+
- `read_snippets` to list files
|
|
39
|
+
- `parse_rule_tree` to get overview
|
|
40
|
+
|
|
41
|
+
2. **Plan**: Create a feature branch
|
|
42
|
+
- `create_branch` with type (feature/fix/chore) and description
|
|
43
|
+
|
|
44
|
+
3. **Modify**: Make your changes
|
|
45
|
+
- `write_snippet` to create/update files
|
|
46
|
+
- `apply_behavior` to modify specific behaviors
|
|
47
|
+
|
|
48
|
+
4. **Validate**: Check for issues
|
|
49
|
+
- `validate_config` to run all checks
|
|
50
|
+
|
|
51
|
+
5. **Review**: See what changed
|
|
52
|
+
- `diff_configs` to compare versions
|
|
53
|
+
|
|
54
|
+
6. **Ship**: Open for review
|
|
55
|
+
- `create_merge_request` to commit and open MR/PR
|
|
56
|
+
|
|
57
|
+
7. **Activate** (after approval):
|
|
58
|
+
- `activate_staging` to test on staging
|
|
59
|
+
- `activate_production` to go live
|
|
60
|
+
|
|
61
|
+
## Safety Guidelines
|
|
62
|
+
|
|
63
|
+
- **Always activate staging first** before production
|
|
64
|
+
- Production activation requires:
|
|
65
|
+
- `acknowledgeProductionRisk: true`
|
|
66
|
+
- At least one email in `contactEmails`
|
|
67
|
+
- **Always validate** before creating MRs
|
|
68
|
+
- **Always review diffs** before shipping changes
|
|
69
|
+
|
|
70
|
+
## Configuration
|
|
71
|
+
|
|
72
|
+
Make sure you have:
|
|
73
|
+
|
|
74
|
+
1. `.edgerc` with Akamai credentials OR env vars
|
|
75
|
+
2. `.papi-mcp.json` for redaction rules (optional)
|
|
76
|
+
3. Git remote configured (GitLab or GitHub)
|
|
77
|
+
|
|
78
|
+
See project CLAUDE.md for detailed setup.
|