@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +320 -0
  3. package/dist/config/assembler.d.ts +6 -0
  4. package/dist/config/assembler.d.ts.map +1 -0
  5. package/dist/config/assembler.js +56 -0
  6. package/dist/config/assembler.js.map +1 -0
  7. package/dist/config/parser.d.ts +6 -0
  8. package/dist/config/parser.d.ts.map +1 -0
  9. package/dist/config/parser.js +79 -0
  10. package/dist/config/parser.js.map +1 -0
  11. package/dist/config/snippets.d.ts +12 -0
  12. package/dist/config/snippets.d.ts.map +1 -0
  13. package/dist/config/snippets.js +75 -0
  14. package/dist/config/snippets.js.map +1 -0
  15. package/dist/git/git-ops.d.ts +16 -0
  16. package/dist/git/git-ops.d.ts.map +1 -0
  17. package/dist/git/git-ops.js +64 -0
  18. package/dist/git/git-ops.js.map +1 -0
  19. package/dist/git/github.d.ts +12 -0
  20. package/dist/git/github.d.ts.map +1 -0
  21. package/dist/git/github.js +83 -0
  22. package/dist/git/github.js.map +1 -0
  23. package/dist/git/gitlab.d.ts +11 -0
  24. package/dist/git/gitlab.d.ts.map +1 -0
  25. package/dist/git/gitlab.js +65 -0
  26. package/dist/git/gitlab.js.map +1 -0
  27. package/dist/git/provider.d.ts +33 -0
  28. package/dist/git/provider.d.ts.map +1 -0
  29. package/dist/git/provider.js +49 -0
  30. package/dist/git/provider.js.map +1 -0
  31. package/dist/papi/auth.d.ts +12 -0
  32. package/dist/papi/auth.d.ts.map +1 -0
  33. package/dist/papi/auth.js +74 -0
  34. package/dist/papi/auth.js.map +1 -0
  35. package/dist/papi/client.d.ts +19 -0
  36. package/dist/papi/client.d.ts.map +1 -0
  37. package/dist/papi/client.js +115 -0
  38. package/dist/papi/client.js.map +1 -0
  39. package/dist/papi/types.d.ts +487 -0
  40. package/dist/papi/types.d.ts.map +1 -0
  41. package/dist/papi/types.js +94 -0
  42. package/dist/papi/types.js.map +1 -0
  43. package/dist/redaction/redactor.d.ts +25 -0
  44. package/dist/redaction/redactor.d.ts.map +1 -0
  45. package/dist/redaction/redactor.js +128 -0
  46. package/dist/redaction/redactor.js.map +1 -0
  47. package/dist/server.d.ts +3 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +219 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/tools/activate.d.ts +16 -0
  52. package/dist/tools/activate.d.ts.map +1 -0
  53. package/dist/tools/activate.js +59 -0
  54. package/dist/tools/activate.js.map +1 -0
  55. package/dist/tools/diff-configs.d.ts +3 -0
  56. package/dist/tools/diff-configs.d.ts.map +1 -0
  57. package/dist/tools/diff-configs.js +152 -0
  58. package/dist/tools/diff-configs.js.map +1 -0
  59. package/dist/tools/get-property-config.d.ts +9 -0
  60. package/dist/tools/get-property-config.d.ts.map +1 -0
  61. package/dist/tools/get-property-config.js +53 -0
  62. package/dist/tools/get-property-config.js.map +1 -0
  63. package/dist/tools/pipeline.d.ts +11 -0
  64. package/dist/tools/pipeline.d.ts.map +1 -0
  65. package/dist/tools/pipeline.js +9 -0
  66. package/dist/tools/pipeline.js.map +1 -0
  67. package/dist/tools/sync-property.d.ts +9 -0
  68. package/dist/tools/sync-property.d.ts.map +1 -0
  69. package/dist/tools/sync-property.js +65 -0
  70. package/dist/tools/sync-property.js.map +1 -0
  71. package/dist/tools/write-snippet.d.ts +30 -0
  72. package/dist/tools/write-snippet.d.ts.map +1 -0
  73. package/dist/tools/write-snippet.js +92 -0
  74. package/dist/tools/write-snippet.js.map +1 -0
  75. package/dist/validation/local.d.ts +3 -0
  76. package/dist/validation/local.d.ts.map +1 -0
  77. package/dist/validation/local.js +290 -0
  78. package/dist/validation/local.js.map +1 -0
  79. package/dist/validation/papi.d.ts +6 -0
  80. package/dist/validation/papi.d.ts.map +1 -0
  81. package/dist/validation/papi.js +59 -0
  82. package/dist/validation/papi.js.map +1 -0
  83. package/package.json +55 -0
  84. package/src/skill/system-prompt.md +205 -0
  85. package/templates/.gitkeep +0 -0
  86. package/templates/CLAUDE.md +115 -0
  87. 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,6 @@
1
+ import type { ValidationResult } from '../papi/types.js';
2
+ export declare function validateWithApi(repoPath: string, options?: {
3
+ edgercPath?: string;
4
+ edgercSection?: string;
5
+ }): Promise<ValidationResult>;
6
+ //# sourceMappingURL=papi.d.ts.map
@@ -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.