Skip to content

Commit 36bfcd8

Browse files
committed
Split Abilities.php into domain traits and shared concerns
Extract seven domain-specific ability groups into src/Ability/Domains/ (Content, GlobalStyles, Media, RestExecution, Site, TaxonomyTerms, Users) and three shared helper traits into src/Ability/Concerns/ (Permissions, SchemaHelpers, Validation). Abilities.php becomes a thin coordinator that composes these traits. Add docs/architecture.md describing the new layout and link it from README.md.
1 parent 214b298 commit 36bfcd8

13 files changed

Lines changed: 2471 additions & 2231 deletions

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ WordPress MCP registers WordPress abilities and exposes them through the MCP ada
88

99
WordPress 6.9+ provides the core Abilities API. The MCP transport is provided by the `wordpress/mcp-adapter` Composer dependency.
1010

11+
See [docs/architecture.md](docs/architecture.md) for the ability registry, registration trait, domain trait, schema, validation, and permission helper layout.
12+
1113
## Requirements
1214

1315
- WordPress 6.9 or later.

docs/architecture.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Ability Architecture
2+
3+
`WP_Forge\Abilities` is the coordinator for the WordPress MCP ability catalog. It owns the registry, public listing/schema APIs, WordPress Abilities API registration, tool-name conversion, and dispatch through `call()`.
4+
5+
`src/Tools/` is reserved for ability registration traits. Registration traits define tool schemas, labels, descriptions, annotations, capabilities, and callbacks.
6+
7+
Shared coordinator behavior lives in `src/Ability/Concerns/`:
8+
9+
| File | Responsibility |
10+
| --- | --- |
11+
| `Concerns/SchemaHelpers.php` | JSON schema builders, runtime enum lookup helpers, response schema, annotation mapping, and small shared normalizers. |
12+
| `Concerns/Permissions.php` | Static and dynamic permission checks for ability calls. |
13+
| `Concerns/Validation.php` | Runtime validation for post types, content constraints, MIME types, user roles, and post type metadata. |
14+
15+
Domain behavior lives in `src/Ability/Domains/`:
16+
17+
| Registration trait | Domain trait |
18+
| --- | --- |
19+
| `Tools/ContentManagementTools.php` | `Domains/Content.php` |
20+
| `Tools/TaxonomyTools.php` | `Domains/TaxonomyTerms.php` |
21+
| `Tools/MediaTools.php` | `Domains/Media.php` |
22+
| `Tools/SiteManagementTools.php` | `Domains/Users.php` and `Domains/Site.php` |
23+
| `Tools/GlobalStylesTools.php` | `Domains/GlobalStyles.php` |
24+
| `Tools/RestCatalogTools.php` | `Domains/RestExecution.php` |
25+
26+
When adding a tool, keep registration in the existing `src/Tools/*Tools.php` trait and put runtime behavior in the matching `src/Ability/Domains/` trait. If the tool needs shared schema, validation, or permission behavior, prefer `src/Ability/Concerns/` instead of adding more private implementation methods to `Abilities`.
27+
28+
This layout preserves the existing public API: tool names, ability names, response envelopes, callbacks, and permission callback names remain unchanged.

0 commit comments

Comments
 (0)