@wootsup/mcp 0.1.0 → 0.4.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/CHANGELOG.md +157 -83
- package/README.md +31 -27
- package/SECURITY.md +15 -6
- package/dist/auth/keychain.d.ts +27 -1
- package/dist/auth/keychain.js +48 -2
- package/dist/auth/keychain.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +31 -0
- package/dist/catalog/build-catalog.js +68 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.js +129 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/auto-layout.d.ts +21 -0
- package/dist/modules/apimapper/auto-layout.js +54 -0
- package/dist/modules/apimapper/auto-layout.js.map +1 -0
- package/dist/modules/apimapper/cache.js +25 -17
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +115 -4
- package/dist/modules/apimapper/client.js +699 -304
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +31 -1
- package/dist/modules/apimapper/connections-format.js +97 -5
- package/dist/modules/apimapper/connections-format.js.map +1 -1
- package/dist/modules/apimapper/connections.d.ts +9 -7
- package/dist/modules/apimapper/connections.js +449 -127
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
- package/dist/modules/apimapper/credential-sanitizer.js +60 -1
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
- package/dist/modules/apimapper/credentials.js +105 -61
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.js +21 -2
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +29 -0
- package/dist/modules/apimapper/elicitation.js +62 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -1
- package/dist/modules/apimapper/example-extract.d.ts +13 -0
- package/dist/modules/apimapper/example-extract.js +111 -0
- package/dist/modules/apimapper/example-extract.js.map +1 -0
- package/dist/modules/apimapper/filter-operators.d.ts +24 -0
- package/dist/modules/apimapper/filter-operators.js +103 -0
- package/dist/modules/apimapper/filter-operators.js.map +1 -0
- package/dist/modules/apimapper/flows-format.js +92 -22
- package/dist/modules/apimapper/flows-format.js.map +1 -1
- package/dist/modules/apimapper/flows.d.ts +8 -7
- package/dist/modules/apimapper/flows.js +275 -120
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-read-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js +172 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +66 -106
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -1
- package/dist/modules/apimapper/gateway/collect-module-tools.d.ts +17 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js +44 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +1 -1
- package/dist/modules/apimapper/gateway/essentials.js +21 -2
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -1
- package/dist/modules/apimapper/gateway/gateway-shared.d.ts +21 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js +124 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +1 -17
- package/dist/modules/apimapper/gateway/test-support.js +4 -33
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -1
- package/dist/modules/apimapper/get-skill-cores.d.ts +4 -0
- package/dist/modules/apimapper/get-skill-cores.js +220 -0
- package/dist/modules/apimapper/get-skill-cores.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +1 -1
- package/dist/modules/apimapper/get-skill.js +74 -9
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.d.ts +85 -2
- package/dist/modules/apimapper/graph-builder.js +151 -15
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.js +152 -48
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.js +27 -13
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/jmespath-test.d.ts +4 -0
- package/dist/modules/apimapper/jmespath-test.js +152 -0
- package/dist/modules/apimapper/jmespath-test.js.map +1 -0
- package/dist/modules/apimapper/library.js +553 -88
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license.js +12 -36
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/list-footer.d.ts +27 -0
- package/dist/modules/apimapper/list-footer.js +57 -0
- package/dist/modules/apimapper/list-footer.js.map +1 -0
- package/dist/modules/apimapper/local-sources.js +100 -57
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/mcp-client-identity.d.ts +32 -0
- package/dist/modules/apimapper/mcp-client-identity.js +70 -0
- package/dist/modules/apimapper/mcp-client-identity.js.map +1 -0
- package/dist/modules/apimapper/merge-constants.d.ts +6 -0
- package/dist/modules/apimapper/merge-constants.js +26 -0
- package/dist/modules/apimapper/merge-constants.js.map +1 -0
- package/dist/modules/apimapper/misc.js +13 -27
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -2
- package/dist/modules/apimapper/node-schema.js +95 -4
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +59 -1
- package/dist/modules/apimapper/onboarding.js +231 -28
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +16 -3
- package/dist/modules/apimapper/read-cache.js +59 -4
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/index.js +26 -5
- package/dist/modules/apimapper/render/index.js.map +1 -1
- package/dist/modules/apimapper/resource-id.d.ts +13 -0
- package/dist/modules/apimapper/resource-id.js +69 -0
- package/dist/modules/apimapper/resource-id.js.map +1 -0
- package/dist/modules/apimapper/schema.js +9 -18
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings.js +49 -52
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/sites-tools.d.ts +29 -0
- package/dist/modules/apimapper/sites-tools.js +165 -0
- package/dist/modules/apimapper/sites-tools.js.map +1 -0
- package/dist/modules/apimapper/tool-result.d.ts +66 -0
- package/dist/modules/apimapper/tool-result.js +125 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +12 -11
- package/dist/modules/apimapper/toolslist-size.js +34 -21
- package/dist/modules/apimapper/toolslist-size.js.map +1 -1
- package/dist/modules/apimapper/types.d.ts +34 -0
- package/dist/modules/apimapper/types.js +1 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +375 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.js +302 -58
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
- package/dist/modules/apimapper/yootheme-binding.js +267 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +158 -2
- package/dist/platform/index.js.map +1 -1
- package/dist/proxy/bridge.d.ts +35 -0
- package/dist/proxy/bridge.js +129 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +9 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/setup/detect-clients.d.ts +40 -1
- package/dist/setup/detect-clients.js +148 -1
- package/dist/setup/detect-clients.js.map +1 -1
- package/dist/setup/probe-auth.d.ts +51 -0
- package/dist/setup/probe-auth.js +141 -0
- package/dist/setup/probe-auth.js.map +1 -0
- package/dist/setup/probe-handshake.js +40 -7
- package/dist/setup/probe-handshake.js.map +1 -1
- package/dist/setup/remove-config.d.ts +8 -0
- package/dist/setup/remove-config.js +145 -0
- package/dist/setup/remove-config.js.map +1 -0
- package/dist/setup/uninstall.d.ts +34 -0
- package/dist/setup/uninstall.js +147 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup-cli.d.ts +16 -0
- package/dist/setup-cli.js +63 -1
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +48 -0
- package/dist/sites/loader.js +134 -0
- package/dist/sites/loader.js.map +1 -0
- package/dist/sites/schema.d.ts +69 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +47 -0
- package/dist/sites/secret-resolver.js +150 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/skill-instructions.d.ts +14 -1
- package/dist/skill-instructions.js +35 -6
- package/dist/skill-instructions.js.map +1 -1
- package/dist/transports/stdio.js +4 -4
- package/dist/transports/stdio.js.map +1 -1
- package/dist/uninstall-skill.d.ts +27 -0
- package/dist/uninstall-skill.js +89 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/docs/architecture.md +21 -21
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -79
- package/package.json +69 -65
- package/skills/apimapper/SKILL.md +128 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/dynamize-existing-layout.md +158 -0
- package/skills/apimapper/reference/jmespath-cookbook.md +241 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +189 -0
- package/skills/apimapper/reference/joomla.md +1 -1
- package/skills/apimapper/reference/library-template-discovery.md +65 -0
- package/skills/apimapper/reference/merge-two-sources-on-key.md +204 -0
- package/skills/apimapper/reference/oauth.md +143 -52
- package/skills/apimapper/reference/troubleshooting.md +22 -2
- package/skills/apimapper/reference/yootheme-source-to-builder-handoff.md +348 -0
- package/skills/apimapper/reference/yootheme.md +75 -44
- package/dist/auth/oauth-provider.d.ts +0 -68
- package/dist/auth/oauth-provider.js +0 -232
- package/dist/auth/oauth-provider.js.map +0 -1
- package/dist/server-http.d.ts +0 -22
- package/dist/server-http.js +0 -159
- package/dist/server-http.js.map +0 -1
- package/dist/transports/http.d.ts +0 -29
- package/dist/transports/http.js +0 -267
- package/dist/transports/http.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,91 +1,165 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
-
The format
|
|
6
|
-
this project
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project follows [Semantic Versioning](https://semver.org/).
|
|
7
7
|
|
|
8
|
-
## [0.
|
|
8
|
+
## [0.4.0] `Latest` - 2026-06-21
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Proxy mode: the server now connects through your site's plugin-served MCP endpoint. New setups use it automatically; existing installs keep working unchanged.**
|
|
13
|
+
- **Smoother client setup: tool-catalog export and a Connect to Claude handoff.**
|
|
14
|
+
|
|
15
|
+
## [0.3.0] - 2026-06-08
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **Library-first workflow: creating a custom connection for an API a curated library template already covers now returns a 409 that steers you to activate the template instead. Override with acknowledge_no_library:true for genuinely uncovered endpoints.**
|
|
20
|
+
- **New tool apimapper_yootheme_binding_for_flow: inspect the exact YOOtheme binding a published flow exposes.**
|
|
21
|
+
- **New tool apimapper_connection_recover: repair stuck or corrupted connections.**
|
|
22
|
+
- **JMESPath date primitives (date_weekday, date_iso_to_time, date_iso_to_date, time_in_window) plus a depth-overflow guard for deeply nested expressions.**
|
|
23
|
+
- **Connection reads now explain why they returned 0 items instead of failing silently.**
|
|
24
|
+
- **MCP keys can be minted from a permission level (read / write / admin) with additive scopes.**
|
|
25
|
+
- **Multi-site routing: target a specific site via a sites file.**
|
|
26
|
+
- **uninstall CLI command (reverse of setup).**
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **library_activate is resource-aware: it never silently mutates a healthy existing connection: reuse, heal, or fork is explicit (force_new + reused/mutated/healed semantics).**
|
|
31
|
+
- **Recompile/publish auto-fix is on by default.**
|
|
32
|
+
- **Version history note: the public npm line goes 0.1.0 → 0.3.0. The intermediate 0.2.0 / 0.2.1 bumps were internal build/test cuts and were never published to npm (npm registry: 0.1.0-rc.1…rc.12, rc.13-w3.0, rc.13-w3.1, 0.1.0, 0.3.0), so there is no 0.2.x release to upgrade from: 0.3.0 is the direct successor to 0.1.0.**
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- **connection_update accepts the extra_fields alias so template fields are no longer dropped.**
|
|
37
|
+
- **Source item-shape falls back to the template-merged shape instead of rendering empty.**
|
|
38
|
+
- **The API response cache is dropped on connection update/delete/re-auth, so stale data no longer lingers.**
|
|
39
|
+
- **getFlow reports compile state and node types so YOOtheme bindings don't go stale.**
|
|
40
|
+
- **Full WordPress ↔ Joomla parity across library, license, connection and cache paths.**
|
|
41
|
+
- **OAuth refresh-token storage and re-consent hardening.**
|
|
42
|
+
|
|
43
|
+
### Security
|
|
44
|
+
|
|
45
|
+
- **Bearer-scope gate on all destructive MCP tasks (delete*, revokeMcpKey, deactivateLibraryConnection): a read- or write-scoped token can no longer delete connections or revoke keys.**
|
|
46
|
+
|
|
47
|
+
## [0.1.0] - 2026-05-28
|
|
14
48
|
|
|
15
49
|
### Added
|
|
16
50
|
|
|
17
|
-
- **Stripe-style HMAC-SHA256 auth
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- **
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- **
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
[0.1.0-rc.
|
|
51
|
+
- **First public stable release. CLI installer (`npx -y @wootsup/mcp setup`), 17 MCP tools via the apimapper_advanced gateway (77 capabilities behind it), Stripe-style HMAC-SHA256 auth, Claude Desktop DXT bundle, multi-AI-client wizard (Claude Desktop, Claude Code, Cursor, VS Code, Cline, Codex CLI), bundled skills with topic-scoped reference docs.** `npm`
|
|
52
|
+
|
|
53
|
+
## [0.1.0-rc.13-w3.1] - 2026-05-20
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- **Pre-release iteration during initial public testing. Wave-3 hotfix on top of rc.13.** `npm`
|
|
58
|
+
|
|
59
|
+
## [0.1.0-rc.13-w3.0] - 2026-05-20
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **Pre-release iteration during initial public testing. Wave-3 baseline iteration on rc.13.** `npm`
|
|
64
|
+
|
|
65
|
+
## [0.1.0-rc.12] - 2026-05-19
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
70
|
+
|
|
71
|
+
## [0.1.0-rc.11] - 2026-05-19
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
|
|
75
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
76
|
+
|
|
77
|
+
## [0.1.0-rc.10] - 2026-05-19
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
82
|
+
|
|
83
|
+
## [0.1.0-rc.9] - 2026-05-19
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
88
|
+
|
|
89
|
+
## [0.1.0-rc.8] - 2026-05-19
|
|
90
|
+
|
|
91
|
+
### Fixed
|
|
92
|
+
|
|
93
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
94
|
+
|
|
95
|
+
## [0.1.0-rc.7] - 2026-05-19
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
|
|
99
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
100
|
+
|
|
101
|
+
## [0.1.0-rc.6] - 2026-05-19
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
|
|
105
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
106
|
+
|
|
107
|
+
## [0.1.0-rc.5] - 2026-05-18
|
|
108
|
+
|
|
109
|
+
### Fixed
|
|
110
|
+
|
|
111
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
112
|
+
|
|
113
|
+
## [0.1.0-rc.4] - 2026-05-18
|
|
114
|
+
|
|
115
|
+
### Fixed
|
|
116
|
+
|
|
117
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
118
|
+
|
|
119
|
+
## [0.1.0-rc.3] - 2026-05-18
|
|
120
|
+
|
|
121
|
+
### Fixed
|
|
122
|
+
|
|
123
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
124
|
+
|
|
125
|
+
## [0.1.0-rc.2] - 2026-05-18
|
|
126
|
+
|
|
127
|
+
### Fixed
|
|
128
|
+
|
|
129
|
+
- **Pre-release iteration during initial public testing.** `npm`
|
|
130
|
+
|
|
131
|
+
## [0.1.0-rc.1] - 2026-05-18
|
|
132
|
+
|
|
133
|
+
### Added
|
|
134
|
+
|
|
135
|
+
- **First public release candidate. Ships the full 74-tool MCP surface plus a complete setup story (npx setup wizard plus Claude Desktop DXT bundle). Stripe-style HMAC-SHA256 auth, WordPress and Joomla plugin foundations, OS keychain integration via @napi-rs/keyring, multi-AI-client wizard (Claude Desktop, Claude Code, Cursor, VS Code, Cline, Codex), bundled skills, stdio plus HTTP+OAuth2 (PKCE) transports.** `npm`
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Version Types
|
|
140
|
+
|
|
141
|
+
- **Added** - New features
|
|
142
|
+
- **Changed** - Changes to existing features
|
|
143
|
+
- **Deprecated** - Features to be removed in future versions
|
|
144
|
+
- **Removed** - Removed features
|
|
145
|
+
- **Fixed** - Bug fixes
|
|
146
|
+
- **Security** - Security updates
|
|
147
|
+
|
|
148
|
+
[0.4.0]: https://github.com/wootsup/api-mapper/compare/v0.3.0...HEAD
|
|
149
|
+
[0.3.0]: https://github.com/wootsup/api-mapper/compare/v0.1.0...v0.3.0
|
|
150
|
+
[0.1.0]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.13-w3.1...v0.1.0
|
|
151
|
+
[0.1.0-rc.13-w3.1]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.13-w3.0...v0.1.0-rc.13-w3.1
|
|
152
|
+
[0.1.0-rc.13-w3.0]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.12...v0.1.0-rc.13-w3.0
|
|
153
|
+
[0.1.0-rc.12]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.11...v0.1.0-rc.12
|
|
154
|
+
[0.1.0-rc.11]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.10...v0.1.0-rc.11
|
|
155
|
+
[0.1.0-rc.10]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.9...v0.1.0-rc.10
|
|
156
|
+
[0.1.0-rc.9]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.8...v0.1.0-rc.9
|
|
157
|
+
[0.1.0-rc.8]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.7...v0.1.0-rc.8
|
|
158
|
+
[0.1.0-rc.7]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.6...v0.1.0-rc.7
|
|
159
|
+
[0.1.0-rc.6]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.5...v0.1.0-rc.6
|
|
160
|
+
[0.1.0-rc.5]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.4...v0.1.0-rc.5
|
|
161
|
+
[0.1.0-rc.4]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.3...v0.1.0-rc.4
|
|
162
|
+
[0.1.0-rc.3]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.2...v0.1.0-rc.3
|
|
163
|
+
[0.1.0-rc.2]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.1...v0.1.0-rc.2
|
|
164
|
+
[0.1.0-rc.1]: https://github.com/wootsup/api-mapper/releases/tag/v0.1.0-rc.1
|
|
165
|
+
|
package/README.md
CHANGED
|
@@ -7,7 +7,6 @@ flows, manage OAuth credentials, and publish sources without leaving the
|
|
|
7
7
|
chat.
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/@wootsup/mcp)
|
|
10
|
-
[](https://github.com/wootsup/api-mapper/actions/workflows/apimapper-mcp-ci.yml)
|
|
11
10
|
[](./LICENSE)
|
|
12
11
|
|
|
13
12
|
---
|
|
@@ -36,8 +35,8 @@ subcommands.
|
|
|
36
35
|
|
|
37
36
|
### Option B — Claude Desktop (DXT bundle)
|
|
38
37
|
|
|
39
|
-
1. Download `apimapper-mcp.dxt`
|
|
40
|
-
[
|
|
38
|
+
1. Download `apimapper-mcp.dxt` — see the
|
|
39
|
+
[installation guide](https://wootsup.com/docs/mcp/api-mapper/installation).
|
|
41
40
|
2. Drag it onto the Claude Desktop window (or **Settings → Developer →
|
|
42
41
|
Install from file**).
|
|
43
42
|
3. Enter your site URL, MCP key, and platform when prompted.
|
|
@@ -65,13 +64,16 @@ Verify in your AI client:
|
|
|
65
64
|
|
|
66
65
|
```text
|
|
67
66
|
You: apimapper_health
|
|
68
|
-
LLM: ✅ status: ok, platform: wordpress, version: 2.0.
|
|
67
|
+
LLM: ✅ status: ok, platform: wordpress, version: 2.0.13
|
|
69
68
|
```
|
|
70
69
|
|
|
71
70
|
## Common tools
|
|
72
71
|
|
|
73
|
-
A small set of high-leverage tools
|
|
74
|
-
|
|
72
|
+
A small set of high-leverage tools. The full surface is 79 tools: 19 are
|
|
73
|
+
first-class in `tools/list`, and the other 60 route through the
|
|
74
|
+
`apimapper_advanced` gateway (so the listed surface stays under each client's
|
|
75
|
+
tool cap). Everything is
|
|
76
|
+
[documented in detail in the tools reference](https://wootsup.com/docs/mcp/api-mapper/tools).
|
|
75
77
|
|
|
76
78
|
| Tool | What it does |
|
|
77
79
|
|------|--------------|
|
|
@@ -84,10 +86,16 @@ A small set of high-leverage tools — the full 74-tool surface is
|
|
|
84
86
|
| `apimapper_graph_preview` | Preview a flow's output without saving. |
|
|
85
87
|
| `apimapper_library_catalog` | Browse pre-built connection templates. |
|
|
86
88
|
| `apimapper_get_skill` | Fetch the bundled skill text on demand. |
|
|
89
|
+
| `apimapper_advanced` | Gateway to the 60 advanced tools. Call `{ tool }` for a target's schema, or `{ tool, arguments }` to run it. |
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
The 60 advanced tools (the full connection / credential / flow / library /
|
|
92
|
+
license / schema surface) are not listed individually in `tools/list` — they
|
|
93
|
+
route through `apimapper_advanced` so the first-class surface stays under each
|
|
94
|
+
client's tool cap.
|
|
95
|
+
|
|
96
|
+
See the [tools reference](https://wootsup.com/docs/mcp/api-mapper/tools) for the
|
|
97
|
+
canonical workflow guide, and the
|
|
98
|
+
[API Mapper MCP docs](https://wootsup.com/docs/mcp/api-mapper/) for OAuth,
|
|
91
99
|
Joomla, YOOtheme, and troubleshooting deep-dives.
|
|
92
100
|
|
|
93
101
|
## Multi-platform: WordPress and Joomla
|
|
@@ -107,15 +115,15 @@ Supported AI clients (auto-detected by the setup wizard):
|
|
|
107
115
|
- **Cursor** — `~/.cursor/mcp.json` (or project-local `.cursor/mcp.json`)
|
|
108
116
|
- **VS Code** — workspace `.vscode/settings.json` `mcp.servers`
|
|
109
117
|
- **Cline** — VS Code extension settings
|
|
110
|
-
- **Codex** — `~/.
|
|
118
|
+
- **Codex** — `~/.codex/config.toml`
|
|
111
119
|
- **ChatGPT Desktop** — when MCP support ships
|
|
112
120
|
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
The server ships **stdio-only** (local install via npx or the Claude
|
|
122
|
+
Desktop DXT bundle).
|
|
115
123
|
|
|
116
124
|
## Troubleshooting
|
|
117
125
|
|
|
118
|
-
See [
|
|
126
|
+
See the [troubleshooting guide](https://wootsup.com/docs/mcp/api-mapper/troubleshooting).
|
|
119
127
|
Common cases:
|
|
120
128
|
|
|
121
129
|
- `403 invalid_token` → token expired or wrong site URL. Re-run setup.
|
|
@@ -123,14 +131,10 @@ Common cases:
|
|
|
123
131
|
- Joomla `0` envelope → SEF/htaccess intercepting `com_ajax`; check
|
|
124
132
|
the reference doc.
|
|
125
133
|
|
|
126
|
-
##
|
|
134
|
+
## Feedback and support
|
|
127
135
|
|
|
128
|
-
|
|
129
|
-
[
|
|
130
|
-
in `packages/apimapper-mcp/`. Run `npm test --workspace=@wootsup/mcp`
|
|
131
|
-
before opening a PR; the cross-platform CI matrix
|
|
132
|
-
([`apimapper-mcp-ci.yml`](../../.github/workflows/apimapper-mcp-ci.yml))
|
|
133
|
-
re-runs on ubuntu, macOS, and windows.
|
|
136
|
+
Found a bug or have a feature request? Reach us at
|
|
137
|
+
[wootsup.com/contact](https://wootsup.com/contact/).
|
|
134
138
|
|
|
135
139
|
For the security disclosure process, see [`SECURITY.md`](./SECURITY.md).
|
|
136
140
|
|
|
@@ -141,10 +145,10 @@ For the security disclosure process, see [`SECURITY.md`](./SECURITY.md).
|
|
|
141
145
|
## Links
|
|
142
146
|
|
|
143
147
|
- **Homepage:** <https://wootsup.com>
|
|
144
|
-
- **Plugin (WordPress + Joomla):** <https://wootsup.com>
|
|
145
|
-
- **Docs:** <https://wootsup.com/docs/mcp/>
|
|
146
|
-
- **
|
|
147
|
-
- **
|
|
148
|
-
- **
|
|
149
|
-
- **
|
|
150
|
-
- **Changelog:** [`CHANGELOG.md`](
|
|
148
|
+
- **Plugin (WordPress + Joomla):** download from <https://wootsup.com/downloads>
|
|
149
|
+
- **Docs:** <https://wootsup.com/docs/mcp/api-mapper/>
|
|
150
|
+
- **Installation:** <https://wootsup.com/docs/mcp/api-mapper/installation>
|
|
151
|
+
- **Tools reference:** <https://wootsup.com/docs/mcp/api-mapper/tools>
|
|
152
|
+
- **Troubleshooting:** <https://wootsup.com/docs/mcp/api-mapper/troubleshooting>
|
|
153
|
+
- **Support:** <https://wootsup.com/contact/>
|
|
154
|
+
- **Changelog:** [`CHANGELOG.md`](./CHANGELOG.md)
|
package/SECURITY.md
CHANGED
|
@@ -91,12 +91,16 @@ tool-list (eliminates one class of confused-deputy risk).
|
|
|
91
91
|
| `GET /mcp/keys` (list) | ❌ key IDs + scopes + last-used only. **Never** the token string. |
|
|
92
92
|
| `POST /mcp/keys` (create) | ✅ **Only on creation.** Subsequent reads cannot retrieve it. |
|
|
93
93
|
| `apimapper_credential_*` | ❌ Stored OAuth/Bearer creds are returned with values redacted (`***`). |
|
|
94
|
+
| `apimapper_connection_get` / `apimapper_connection_data` | ❌ Read through the sanitizer (`sanitize:true`). Inline `Authorization` / `X-API-Key` values stored in a connection's `headers`/`params` (`{name,value}` pairs) are redacted. |
|
|
94
95
|
| `apimapper_inspect_token` | Returns the **decoded payload** (key_id, scopes, env) but **not** the signature. |
|
|
95
96
|
| `apimapper_settings_get` | Always strips `signing_key`, OAuth client secrets, and Brandfetch keys. |
|
|
96
97
|
|
|
97
98
|
Server-side, the `CredentialSanitizer` runs on every response that
|
|
98
99
|
could possibly contain a credential value — see
|
|
99
100
|
[`src/modules/apimapper/credential-sanitizer.ts`](./src/modules/apimapper/credential-sanitizer.ts).
|
|
101
|
+
The TS sanitizer redacts both secret-named keys (`auth_data`, `api_key`, …)
|
|
102
|
+
and the `value` of a `{name,value}` header/param pair whose `name` is a known
|
|
103
|
+
auth header (`Authorization`, `X-API-Key`, `Cookie`, vendor variants, …).
|
|
100
104
|
Unit tests pin the redaction surface.
|
|
101
105
|
|
|
102
106
|
### Token rotation
|
|
@@ -127,13 +131,15 @@ file is plain JSON containing the token string — readable by the user
|
|
|
127
131
|
account only. If you operate in a hostile multi-user environment,
|
|
128
132
|
**use the OS keychain path** (the default on macOS and Windows).
|
|
129
133
|
|
|
130
|
-
###
|
|
134
|
+
### Transport: stdio only
|
|
131
135
|
|
|
132
|
-
|
|
133
|
-
both
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
136
|
+
`@wootsup/mcp` ships **stdio-only**. The published npm package and the DXT
|
|
137
|
+
bundle both run over **stdio** (`index.ts` → `transports/stdio.ts`) — the
|
|
138
|
+
MCP server is spawned by the AI client and speaks JSON-RPC over
|
|
139
|
+
stdin/stdout. There is **no HTTP, SSE, or remote transport**, and the
|
|
140
|
+
server does not open a network listener. All of the authentication
|
|
141
|
+
guarantees described above (HMAC tokens, identity probe, scope filtering,
|
|
142
|
+
no-secret-leak) apply to that stdio path.
|
|
137
143
|
|
|
138
144
|
## Threat model summary
|
|
139
145
|
|
|
@@ -146,6 +152,9 @@ the `Origin` header differs.
|
|
|
146
152
|
| Phishing setup link | Identity probe + site-title confirmation in wizard. |
|
|
147
153
|
| Confused-deputy / over-privileged LLM | Scope filter excludes destructive tools from token-restricted lists. |
|
|
148
154
|
| Local-fs token theft (no keychain) | `0600` perms on profile file; keychain default on macOS/Windows. |
|
|
155
|
+
| Network exposure of the server | None — the server is stdio-only and opens no network listener. |
|
|
156
|
+
|
|
157
|
+
> The MCP server ships stdio-only; there is no HTTP/remote transport.
|
|
149
158
|
|
|
150
159
|
See [`docs/security.md`](./docs/security.md) for the long-form threat
|
|
151
160
|
model.
|
package/dist/auth/keychain.d.ts
CHANGED
|
@@ -10,13 +10,32 @@ export declare class SystemKeychain implements Keychain {
|
|
|
10
10
|
get(ref: string): Promise<string | null>;
|
|
11
11
|
delete(ref: string): Promise<void>;
|
|
12
12
|
}
|
|
13
|
+
/** True when the value is a production API Mapper token (`amk_live_…`). */
|
|
14
|
+
export declare function isLiveToken(value: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Thrown when a live (`amk_live_…`) token would be written to the encrypted-file
|
|
17
|
+
* fallback without the explicit opt-in. The message names the safer path.
|
|
18
|
+
*/
|
|
19
|
+
export declare class LiveTokenFileFallbackError extends Error {
|
|
20
|
+
constructor();
|
|
21
|
+
}
|
|
22
|
+
export interface EncryptedFileKeychainOptions {
|
|
23
|
+
/**
|
|
24
|
+
* When true, allow persisting a production (`amk_live_…`) token to the file
|
|
25
|
+
* fallback. Default false — live tokens are refused (see
|
|
26
|
+
* LiveTokenFileFallbackError). Set this only on hosts where the OS keychain is
|
|
27
|
+
* unavailable AND you accept the weaker at-rest protection.
|
|
28
|
+
*/
|
|
29
|
+
allowLiveTokens?: boolean;
|
|
30
|
+
}
|
|
13
31
|
export declare class EncryptedFileKeychain implements Keychain {
|
|
14
32
|
private readonly dir;
|
|
15
33
|
private readonly vaultPath;
|
|
16
34
|
private readonly saltPath;
|
|
35
|
+
private readonly allowLiveTokens;
|
|
17
36
|
private cachedKey?;
|
|
18
37
|
private writeChain;
|
|
19
|
-
constructor(configDir: string);
|
|
38
|
+
constructor(configDir: string, opts?: EncryptedFileKeychainOptions);
|
|
20
39
|
private deriveKey;
|
|
21
40
|
private readVault;
|
|
22
41
|
private writeVault;
|
|
@@ -43,5 +62,12 @@ export interface CreateKeychainOptions {
|
|
|
43
62
|
* clean.
|
|
44
63
|
*/
|
|
45
64
|
silent?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* S-MED-2: propagated to the EncryptedFileKeychain fallback. When false
|
|
67
|
+
* (default) the file fallback refuses production (`amk_live_…`) tokens. Set
|
|
68
|
+
* true only on hosts without an OS keychain where the weaker at-rest
|
|
69
|
+
* protection is accepted.
|
|
70
|
+
*/
|
|
71
|
+
allowLiveTokensInFileFallback?: boolean;
|
|
46
72
|
}
|
|
47
73
|
export declare function createKeychain(opts: CreateKeychainOptions): Promise<Keychain>;
|
package/dist/auth/keychain.js
CHANGED
|
@@ -19,6 +19,14 @@
|
|
|
19
19
|
// through casual file inspection, and (b) is no worse than the alternative
|
|
20
20
|
// (raw plaintext) for environments that already failed the system-keychain
|
|
21
21
|
// probe.
|
|
22
|
+
//
|
|
23
|
+
// S-MED-2 (Wave-B 2026-06-03): because the file fallback's key is derivable
|
|
24
|
+
// from repo-public material + a co-located salt, the EncryptedFileKeychain
|
|
25
|
+
// REFUSES to persist a production (`amk_live_…`) token by default (throws
|
|
26
|
+
// LiveTokenFileFallbackError). Live secrets belong in the OS keychain; dev/test
|
|
27
|
+
// tokens may still use the fallback. Pass { allowLiveTokens: true } (or
|
|
28
|
+
// createKeychain({ allowLiveTokensInFileFallback: true })) to override on a host
|
|
29
|
+
// with no OS keychain.
|
|
22
30
|
import { randomBytes, pbkdf2Sync, createCipheriv, createDecipheriv, } from "node:crypto";
|
|
23
31
|
import { mkdirSync, existsSync, readFileSync, writeFileSync, } from "node:fs";
|
|
24
32
|
import { createRequire } from "node:module";
|
|
@@ -115,18 +123,48 @@ const PBKDF2_DIGEST = "sha256";
|
|
|
115
123
|
// derived key is unique to this product even if two unrelated tools share the
|
|
116
124
|
// same salt file path by accident.
|
|
117
125
|
const KDF_PHRASE = "apimapper-mcp/v1/keychain";
|
|
126
|
+
// S-MED-2 (Wave-B 2026-06-03): the file fallback's AES key is derived from a
|
|
127
|
+
// repo-public KDF phrase + a `.salt` co-located with the vault. An attacker with
|
|
128
|
+
// read access to both files can recompute the key and decrypt offline — this is
|
|
129
|
+
// obfuscation, not encryption, against a local attacker. We therefore REFUSE to
|
|
130
|
+
// persist a production (`amk_live_…`) token to the file fallback by default: live
|
|
131
|
+
// secrets must live in the OS keychain. Dev/test tokens (`amk_test_…`, app
|
|
132
|
+
// passwords) may still use the fallback. Callers that genuinely need the file
|
|
133
|
+
// fallback for a live token (locked-down host with no OS keychain) must opt in
|
|
134
|
+
// explicitly via { allowLiveTokens: true }.
|
|
135
|
+
const LIVE_TOKEN_PREFIX = "amk_live_";
|
|
136
|
+
/** True when the value is a production API Mapper token (`amk_live_…`). */
|
|
137
|
+
export function isLiveToken(value) {
|
|
138
|
+
return value.startsWith(LIVE_TOKEN_PREFIX);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Thrown when a live (`amk_live_…`) token would be written to the encrypted-file
|
|
142
|
+
* fallback without the explicit opt-in. The message names the safer path.
|
|
143
|
+
*/
|
|
144
|
+
export class LiveTokenFileFallbackError extends Error {
|
|
145
|
+
constructor() {
|
|
146
|
+
super("Refusing to persist a production (amk_live_…) token to the encrypted-file " +
|
|
147
|
+
"keychain fallback: its AES key is derivable from repo-public material + a " +
|
|
148
|
+
"co-located salt. Use the OS keychain for live tokens, or pass " +
|
|
149
|
+
"{ allowLiveTokens: true } to override on a host where no OS keychain is " +
|
|
150
|
+
"available.");
|
|
151
|
+
this.name = "LiveTokenFileFallbackError";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
118
154
|
export class EncryptedFileKeychain {
|
|
119
155
|
dir;
|
|
120
156
|
vaultPath;
|
|
121
157
|
saltPath;
|
|
158
|
+
allowLiveTokens;
|
|
122
159
|
cachedKey;
|
|
123
160
|
// In-memory mutex to serialise writes — vitest hits concurrent set() in the
|
|
124
161
|
// "concurrent writes" test and we don't want a torn JSON file.
|
|
125
162
|
writeChain = Promise.resolve();
|
|
126
|
-
constructor(configDir) {
|
|
163
|
+
constructor(configDir, opts = {}) {
|
|
127
164
|
this.dir = configDir;
|
|
128
165
|
this.vaultPath = join(configDir, "keychain.enc.json");
|
|
129
166
|
this.saltPath = join(configDir, ".salt");
|
|
167
|
+
this.allowLiveTokens = opts.allowLiveTokens ?? false;
|
|
130
168
|
if (!existsSync(this.dir)) {
|
|
131
169
|
mkdirSync(this.dir, { recursive: true });
|
|
132
170
|
}
|
|
@@ -210,6 +248,12 @@ export class EncryptedFileKeychain {
|
|
|
210
248
|
}
|
|
211
249
|
}
|
|
212
250
|
set(ref, value) {
|
|
251
|
+
// S-MED-2: refuse production tokens unless explicitly opted in. Reject
|
|
252
|
+
// BEFORE touching the write chain so nothing is persisted and the salt/vault
|
|
253
|
+
// files are not created as a side effect.
|
|
254
|
+
if (!this.allowLiveTokens && isLiveToken(value)) {
|
|
255
|
+
return Promise.reject(new LiveTokenFileFallbackError());
|
|
256
|
+
}
|
|
213
257
|
// Serialise on the per-instance write chain to avoid torn JSON. Callers
|
|
214
258
|
// can still hit us concurrently — each set() waits for the prior one.
|
|
215
259
|
const next = this.writeChain.then(() => {
|
|
@@ -256,7 +300,9 @@ export async function createKeychain(opts) {
|
|
|
256
300
|
console.warn(`[apimapper-mcp] System keychain unavailable (${msg}); ` +
|
|
257
301
|
`falling back to AES-GCM-encrypted file at ${opts.configDir}/keychain.enc.json`);
|
|
258
302
|
}
|
|
259
|
-
return new EncryptedFileKeychain(opts.configDir
|
|
303
|
+
return new EncryptedFileKeychain(opts.configDir, {
|
|
304
|
+
allowLiveTokens: opts.allowLiveTokensInFileFallback ?? false,
|
|
305
|
+
});
|
|
260
306
|
}
|
|
261
307
|
}
|
|
262
308
|
//# sourceMappingURL=keychain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/auth/keychain.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,2DAA2D;AAC3D,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,qBAAqB;AACrB,EAAE;AACF,gEAAgE;AAChE,6EAA6E;AAC7E,0EAA0E;AAC1E,mBAAmB;AACnB,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,SAAS;
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/auth/keychain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ModuleStatus } from "@getimo/mcp-toolkit";
|
|
2
|
+
/**
|
|
3
|
+
* Convert a captured tool inputSchema to JSON Schema. collectModuleTools yields a
|
|
4
|
+
* RAW Zod shape for advanced tools (entry.config.inputSchema) but a constructed Zod
|
|
5
|
+
* OBJECT for essentials (server._registeredTools[name].inputSchema, SDK mcp.js:611).
|
|
6
|
+
* Branch on the Zod-4 internal marker `_zod`. Native z.toJSONSchema (zod 4.4.3).
|
|
7
|
+
*/
|
|
8
|
+
export declare function toJsonSchema(inputSchema: unknown): object;
|
|
9
|
+
/**
|
|
10
|
+
* Fail loud if module registration degraded. `loadModules` is graceful by
|
|
11
|
+
* design — when a module's `register()` throws it logs and records
|
|
12
|
+
* `{ status: "error" }` but RETURNS normally, so a registration failure would
|
|
13
|
+
* otherwise yield an empty/partial catalog that still resolves successfully.
|
|
14
|
+
* The catalog is a release artifact (SSOT for a future PHP MCP surface), so a
|
|
15
|
+
* silently-degraded export is worse than a hard failure — mirror the repo's
|
|
16
|
+
* fail-loud discipline (encryption golden-master, deploy key-survival).
|
|
17
|
+
*/
|
|
18
|
+
export declare function assertModulesLoaded(statuses: ModuleStatus[]): void;
|
|
19
|
+
export interface CatalogTool {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
jsonSchema: object;
|
|
23
|
+
annotations: Record<string, unknown>;
|
|
24
|
+
tier: "essential" | "advanced";
|
|
25
|
+
}
|
|
26
|
+
export interface Catalog {
|
|
27
|
+
version: string;
|
|
28
|
+
generatedFrom: "zod";
|
|
29
|
+
tools: CatalogTool[];
|
|
30
|
+
}
|
|
31
|
+
export declare function buildCatalog(): Promise<Catalog>;
|