@wootsup/mcp 0.1.0 → 0.3.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 (131) hide show
  1. package/CHANGELOG.md +148 -83
  2. package/README.md +31 -27
  3. package/SECURITY.md +15 -6
  4. package/dist/auth/keychain.d.ts +27 -1
  5. package/dist/auth/keychain.js +48 -2
  6. package/dist/auth/keychain.js.map +1 -1
  7. package/dist/cli-hint.d.ts +22 -0
  8. package/dist/cli-hint.js +55 -0
  9. package/dist/cli-hint.js.map +1 -0
  10. package/dist/index.js +97 -22
  11. package/dist/index.js.map +1 -1
  12. package/dist/install-skill.js +1 -1
  13. package/dist/modules/apimapper/cache.js +25 -17
  14. package/dist/modules/apimapper/cache.js.map +1 -1
  15. package/dist/modules/apimapper/client.d.ts +62 -1
  16. package/dist/modules/apimapper/client.js +555 -291
  17. package/dist/modules/apimapper/client.js.map +1 -1
  18. package/dist/modules/apimapper/connections.js +230 -75
  19. package/dist/modules/apimapper/connections.js.map +1 -1
  20. package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
  21. package/dist/modules/apimapper/credential-sanitizer.js +60 -1
  22. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
  23. package/dist/modules/apimapper/credentials.js +19 -47
  24. package/dist/modules/apimapper/credentials.js.map +1 -1
  25. package/dist/modules/apimapper/diagnose.js +21 -2
  26. package/dist/modules/apimapper/diagnose.js.map +1 -1
  27. package/dist/modules/apimapper/flows.js +60 -77
  28. package/dist/modules/apimapper/flows.js.map +1 -1
  29. package/dist/modules/apimapper/gateway/advanced-tool.js +56 -5
  30. package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -1
  31. package/dist/modules/apimapper/gateway/essentials.d.ts +1 -1
  32. package/dist/modules/apimapper/gateway/essentials.js +8 -1
  33. package/dist/modules/apimapper/gateway/essentials.js.map +1 -1
  34. package/dist/modules/apimapper/get-skill.d.ts +1 -1
  35. package/dist/modules/apimapper/get-skill.js +44 -6
  36. package/dist/modules/apimapper/get-skill.js.map +1 -1
  37. package/dist/modules/apimapper/graph.js +40 -36
  38. package/dist/modules/apimapper/graph.js.map +1 -1
  39. package/dist/modules/apimapper/index.js +2 -0
  40. package/dist/modules/apimapper/index.js.map +1 -1
  41. package/dist/modules/apimapper/library.js +425 -83
  42. package/dist/modules/apimapper/library.js.map +1 -1
  43. package/dist/modules/apimapper/license.js +12 -36
  44. package/dist/modules/apimapper/license.js.map +1 -1
  45. package/dist/modules/apimapper/local-sources.js +20 -34
  46. package/dist/modules/apimapper/local-sources.js.map +1 -1
  47. package/dist/modules/apimapper/misc.js +13 -27
  48. package/dist/modules/apimapper/misc.js.map +1 -1
  49. package/dist/modules/apimapper/onboarding.d.ts +30 -1
  50. package/dist/modules/apimapper/onboarding.js +114 -19
  51. package/dist/modules/apimapper/onboarding.js.map +1 -1
  52. package/dist/modules/apimapper/schema.js +9 -18
  53. package/dist/modules/apimapper/schema.js.map +1 -1
  54. package/dist/modules/apimapper/settings.js +49 -52
  55. package/dist/modules/apimapper/settings.js.map +1 -1
  56. package/dist/modules/apimapper/sites-tools.d.ts +29 -0
  57. package/dist/modules/apimapper/sites-tools.js +165 -0
  58. package/dist/modules/apimapper/sites-tools.js.map +1 -0
  59. package/dist/modules/apimapper/tool-result.d.ts +46 -0
  60. package/dist/modules/apimapper/tool-result.js +63 -0
  61. package/dist/modules/apimapper/tool-result.js.map +1 -0
  62. package/dist/modules/apimapper/toolslist-size.d.ts +11 -10
  63. package/dist/modules/apimapper/toolslist-size.js +16 -14
  64. package/dist/modules/apimapper/toolslist-size.js.map +1 -1
  65. package/dist/modules/apimapper/types.d.ts +21 -0
  66. package/dist/modules/apimapper/types.js.map +1 -1
  67. package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
  68. package/dist/modules/apimapper/whitelist-drift.js +360 -0
  69. package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
  70. package/dist/modules/apimapper/workflows.js +82 -27
  71. package/dist/modules/apimapper/workflows.js.map +1 -1
  72. package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
  73. package/dist/modules/apimapper/yootheme-binding.js +186 -0
  74. package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
  75. package/dist/platform/index.d.ts +56 -0
  76. package/dist/platform/index.js +151 -2
  77. package/dist/platform/index.js.map +1 -1
  78. package/dist/setup/detect-clients.d.ts +40 -1
  79. package/dist/setup/detect-clients.js +148 -1
  80. package/dist/setup/detect-clients.js.map +1 -1
  81. package/dist/setup/probe-handshake.js +40 -7
  82. package/dist/setup/probe-handshake.js.map +1 -1
  83. package/dist/setup/remove-config.d.ts +8 -0
  84. package/dist/setup/remove-config.js +145 -0
  85. package/dist/setup/remove-config.js.map +1 -0
  86. package/dist/setup/uninstall.d.ts +34 -0
  87. package/dist/setup/uninstall.js +147 -0
  88. package/dist/setup/uninstall.js.map +1 -0
  89. package/dist/setup-cli.d.ts +7 -0
  90. package/dist/setup-cli.js +29 -1
  91. package/dist/setup-cli.js.map +1 -1
  92. package/dist/sites/loader.d.ts +41 -0
  93. package/dist/sites/loader.js +119 -0
  94. package/dist/sites/loader.js.map +1 -0
  95. package/dist/sites/schema.d.ts +69 -0
  96. package/dist/sites/schema.js +71 -0
  97. package/dist/sites/schema.js.map +1 -0
  98. package/dist/sites/secret-resolver.d.ts +47 -0
  99. package/dist/sites/secret-resolver.js +150 -0
  100. package/dist/sites/secret-resolver.js.map +1 -0
  101. package/dist/skill-instructions.d.ts +1 -1
  102. package/dist/skill-instructions.js +5 -0
  103. package/dist/skill-instructions.js.map +1 -1
  104. package/dist/transports/stdio.js +4 -4
  105. package/dist/transports/stdio.js.map +1 -1
  106. package/dist/uninstall-skill.d.ts +27 -0
  107. package/dist/uninstall-skill.js +89 -0
  108. package/dist/uninstall-skill.js.map +1 -0
  109. package/docs/architecture.md +21 -21
  110. package/docs/customgraph-internal-migration.md +4 -4
  111. package/docs/security.md +2 -21
  112. package/docs/tools.md +40 -12
  113. package/manifest.json +77 -79
  114. package/package.json +68 -65
  115. package/skills/apimapper/SKILL.md +53 -7
  116. package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
  117. package/skills/apimapper/reference/jmespath-pitfalls.md +108 -0
  118. package/skills/apimapper/reference/joomla.md +1 -1
  119. package/skills/apimapper/reference/library-template-discovery.md +65 -0
  120. package/skills/apimapper/reference/merge-two-sources-on-key.md +99 -0
  121. package/skills/apimapper/reference/troubleshooting.md +20 -0
  122. package/skills/apimapper/reference/yootheme.md +1 -1
  123. package/dist/auth/oauth-provider.d.ts +0 -68
  124. package/dist/auth/oauth-provider.js +0 -232
  125. package/dist/auth/oauth-provider.js.map +0 -1
  126. package/dist/server-http.d.ts +0 -22
  127. package/dist/server-http.js +0 -159
  128. package/dist/server-http.js.map +0 -1
  129. package/dist/transports/http.d.ts +0 -29
  130. package/dist/transports/http.js +0 -267
  131. package/dist/transports/http.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,91 +1,156 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to `@wootsup/mcp` will be documented here.
3
+ All notable changes to this project are documented in this file.
4
4
 
5
- The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
6
- this project uses [Semantic Versioning](https://semver.org/).
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.1.0-rc.1] - 2026-05-18 (unreleased)
8
+ ## [0.3.0] `Latest` - 2026-06-08
9
9
 
10
- First public release candidate. Ships the full 74-tool MCP surface
11
- plus a complete setup story (`npx setup` wizard + Claude Desktop DXT
12
- bundle). Built across Phases 0–10 of the
13
- `apimapper-mcp-implementation-plan` (vault).
10
+ ### Added
11
+
12
+ - **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.**
13
+ - **New tool apimapper_yootheme_binding_for_flow — inspect the exact YOOtheme binding a published flow exposes.**
14
+ - **New tool apimapper_connection_recover — repair stuck or corrupted connections.**
15
+ - **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.**
16
+ - **Connection reads now explain why they returned 0 items instead of failing silently.**
17
+ - **MCP keys can be minted from a permission level (read / write / admin) with additive scopes.**
18
+ - **Multi-site routing: target a specific site via a sites file.**
19
+ - **uninstall CLI command (reverse of setup).**
20
+
21
+ ### Changed
22
+
23
+ - **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).**
24
+ - **Recompile/publish auto-fix is on by default.**
25
+
26
+ ### Fixed
27
+
28
+ - **connection_update accepts the extra_fields alias so template fields are no longer dropped.**
29
+ - **Source item-shape falls back to the template-merged shape instead of rendering empty.**
30
+ - **The API response cache is dropped on connection update/delete/re-auth, so stale data no longer lingers.**
31
+ - **getFlow reports compile state and node types so YOOtheme bindings don't go stale.**
32
+ - **Full WordPress ↔ Joomla parity across library, license, connection and cache paths.**
33
+ - **OAuth refresh-token storage and re-consent hardening.**
34
+
35
+ ### Security
36
+
37
+ - **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.**
38
+
39
+ ## [0.1.0] - 2026-05-28
14
40
 
15
41
  ### Added
16
42
 
17
- - **Stripe-style HMAC-SHA256 auth.** `amk_live_…` / `amk_test_…`
18
- token format, server-side signing key, identity-probe handshake
19
- with site-title confirmation in the setup wizard.
20
- - **WordPress plugin foundation.** REST routes under
21
- `/wp-json/api-mapper/v1/mcp/*`, key generation UI under
22
- *API Mapper → Connections → MCP Access*, key list + rotate +
23
- revoke endpoints.
24
- - **Joomla plugin foundation.** Mirror surface via `com_ajax`
25
- envelope; same key lifecycle as WordPress. Joomla envelope unwrap
26
- is handled by the client layer transparently.
27
- - **5 admin UI components** for MCP key management: KeyList,
28
- CreateKey, KeyDetail, RotateKey, RevokeKey — shared between
29
- WordPress and Joomla via the platform abstraction.
30
- - **Platform abstraction.** Each MCP tool routes through a single
31
- platform-router that detects WordPress vs. Joomla from the site
32
- URL + `APIMAPPER_PLATFORM` env, then dispatches to the correct
33
- REST shape.
34
- - **Keychain + Profiles.** OS keychain integration via
35
- `@napi-rs/keyring` (macOS Keychain, Windows Credential Manager,
36
- Linux libsecret) with named profile support (`APIMAPPER_PROFILE`)
37
- and a `0600` file fallback when no keychain is available.
38
- - **Setup CLI (`apimapper-mcp` binary).** Interactive
39
- `@clack/prompts` wizard with subcommands: `setup` (default),
40
- `install-skill`, `help`. Auto-detects Claude Desktop, Claude Code,
41
- Cursor, VS Code, Cline, Codex. Idempotent config writers; rollback
42
- on probe failure.
43
- - **Skills bundling.** `skills/apimapper/SKILL.md` plus four reference
44
- docs (`oauth.md`, `joomla.md`, `yootheme.md`, `troubleshooting.md`)
45
- shipped with every install. Resources surfaced via
46
- `apimapper_get_skill` tool.
47
- - **Composite tools.** `apimapper_flow_setup_with_sources` (create
48
- flow + add sources + compile + publish), `apimapper_diagnose`
49
- (pre-flight: health + license + platform parity + connection probe
50
- + recent flow status). Reduces multi-turn back-and-forth for the
51
- most common workflows.
52
- - **Multi-transport.** stdio transport (default, local install) plus
53
- HTTP transport with OAuth 2.0 (PKCE-required, S256) for remote
54
- consumption. Bearer tokens are site-bound (rejected on origin
55
- mismatch).
56
- - **DXT bundle.** `apimapper-mcp.dxt` packaged via `build-dxt.js`
57
- for one-click Claude Desktop install. User-config keys
58
- (`APIMAPPER_TOKEN`, `APIMAPPER_SITE_URL`, `APIMAPPER_PLATFORM`)
59
- bridged into the runtime via env shimming. Build verified with a
60
- grep-gate that ensures every declared user-config key has a
61
- runtime consumer.
62
- - **74 MCP tools** spanning: connections, credentials, flows, graph
63
- preview/validate, local sources, schema profile, library catalog,
64
- cache, settings, license, releases, brandfetch, feedback,
65
- workflows, plus health / onboarding / diagnose / inspect-token /
66
- use-profile.
67
-
68
- ### Engineering
69
-
70
- - **Test suite.** 243 tests across 27 files
71
- (vitest + `tsx watch` dev). Includes a stdio-transport spawn
72
- smoke-test, HTTP+Bearer transport tests, build-dxt manifest
73
- invariants, and unit coverage of every register file.
74
- - **CI matrix.** ubuntu-latest, macos-latest, windows-latest × Node
75
- 22.x, gated by path filter and concurrency-cancel per ref
76
- (`.github/workflows/apimapper-mcp-ci.yml`).
77
- - **Publish workflow.** Tag-triggered (`apimapper-mcp-v*`),
78
- verifies tag-version vs. `package.json#version` before publishing,
79
- publishes with `--provenance`, uploads DXT bundle to GitHub
80
- Release (`.github/workflows/apimapper-mcp-publish.yml`).
81
-
82
- ### Known issues
83
-
84
- - `@getimo/mcp-toolkit@1.0.0` declares a `workspace:*` peer-dep on
85
- `@pipeline-studio/screenshot-capture` that is unresolvable outside
86
- the source monorepo. Install with `npm install --legacy-peer-deps`
87
- (or `npm ci --legacy-peer-deps` in CI). Tracked upstream; will be
88
- fixed in `@getimo/mcp-toolkit@1.1.0`. Does not affect runtime —
89
- `npx @wootsup/mcp` and the DXT bundle work without intervention.
90
-
91
- [0.1.0-rc.1]: https://github.com/wootsup/api-mapper/releases/tag/apimapper-mcp-v0.1.0-rc.1
43
+ - **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`
44
+
45
+ ## [0.1.0-rc.13-w3.1] - 2026-05-20
46
+
47
+ ### Fixed
48
+
49
+ - **Pre-release iteration during initial public testing. Wave-3 hotfix on top of rc.13.** `npm`
50
+
51
+ ## [0.1.0-rc.13-w3.0] - 2026-05-20
52
+
53
+ ### Fixed
54
+
55
+ - **Pre-release iteration during initial public testing. Wave-3 baseline iteration on rc.13.** `npm`
56
+
57
+ ## [0.1.0-rc.12] - 2026-05-19
58
+
59
+ ### Fixed
60
+
61
+ - **Pre-release iteration during initial public testing.** `npm`
62
+
63
+ ## [0.1.0-rc.11] - 2026-05-19
64
+
65
+ ### Fixed
66
+
67
+ - **Pre-release iteration during initial public testing.** `npm`
68
+
69
+ ## [0.1.0-rc.10] - 2026-05-19
70
+
71
+ ### Fixed
72
+
73
+ - **Pre-release iteration during initial public testing.** `npm`
74
+
75
+ ## [0.1.0-rc.9] - 2026-05-19
76
+
77
+ ### Fixed
78
+
79
+ - **Pre-release iteration during initial public testing.** `npm`
80
+
81
+ ## [0.1.0-rc.8] - 2026-05-19
82
+
83
+ ### Fixed
84
+
85
+ - **Pre-release iteration during initial public testing.** `npm`
86
+
87
+ ## [0.1.0-rc.7] - 2026-05-19
88
+
89
+ ### Fixed
90
+
91
+ - **Pre-release iteration during initial public testing.** `npm`
92
+
93
+ ## [0.1.0-rc.6] - 2026-05-19
94
+
95
+ ### Fixed
96
+
97
+ - **Pre-release iteration during initial public testing.** `npm`
98
+
99
+ ## [0.1.0-rc.5] - 2026-05-18
100
+
101
+ ### Fixed
102
+
103
+ - **Pre-release iteration during initial public testing.** `npm`
104
+
105
+ ## [0.1.0-rc.4] - 2026-05-18
106
+
107
+ ### Fixed
108
+
109
+ - **Pre-release iteration during initial public testing.** `npm`
110
+
111
+ ## [0.1.0-rc.3] - 2026-05-18
112
+
113
+ ### Fixed
114
+
115
+ - **Pre-release iteration during initial public testing.** `npm`
116
+
117
+ ## [0.1.0-rc.2] - 2026-05-18
118
+
119
+ ### Fixed
120
+
121
+ - **Pre-release iteration during initial public testing.** `npm`
122
+
123
+ ## [0.1.0-rc.1] - 2026-05-18
124
+
125
+ ### Added
126
+
127
+ - **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`
128
+
129
+ ---
130
+
131
+ ## Version Types
132
+
133
+ - **Added** - New features
134
+ - **Changed** - Changes to existing features
135
+ - **Deprecated** - Features to be removed in future versions
136
+ - **Removed** - Removed features
137
+ - **Fixed** - Bug fixes
138
+ - **Security** - Security updates
139
+
140
+ [0.3.0]: https://github.com/wootsup/api-mapper/compare/v0.1.0...HEAD
141
+ [0.1.0]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.13-w3.1...v0.1.0
142
+ [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
143
+ [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
144
+ [0.1.0-rc.12]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.11...v0.1.0-rc.12
145
+ [0.1.0-rc.11]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.10...v0.1.0-rc.11
146
+ [0.1.0-rc.10]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.9...v0.1.0-rc.10
147
+ [0.1.0-rc.9]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.8...v0.1.0-rc.9
148
+ [0.1.0-rc.8]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.7...v0.1.0-rc.8
149
+ [0.1.0-rc.7]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.6...v0.1.0-rc.7
150
+ [0.1.0-rc.6]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.5...v0.1.0-rc.6
151
+ [0.1.0-rc.5]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.4...v0.1.0-rc.5
152
+ [0.1.0-rc.4]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.3...v0.1.0-rc.4
153
+ [0.1.0-rc.3]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.2...v0.1.0-rc.3
154
+ [0.1.0-rc.2]: https://github.com/wootsup/api-mapper/compare/v0.1.0-rc.1...v0.1.0-rc.2
155
+ [0.1.0-rc.1]: https://github.com/wootsup/api-mapper/releases/tag/v0.1.0-rc.1
156
+
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
  [![npm version](https://img.shields.io/npm/v/@wootsup/mcp.svg)](https://www.npmjs.com/package/@wootsup/mcp)
10
- [![CI](https://github.com/wootsup/api-mapper/actions/workflows/apimapper-mcp-ci.yml/badge.svg)](https://github.com/wootsup/api-mapper/actions/workflows/apimapper-mcp-ci.yml)
11
10
  [![license](https://img.shields.io/badge/license-MIT-blue.svg)](./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` from the latest
40
- [GitHub Release](https://github.com/wootsup/api-mapper/releases?q=apimapper-mcp).
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.7
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 the full 74-tool surface is
74
- [documented in detail in the bundled skill](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/skills/apimapper/SKILL.md).
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
- See [`skills/apimapper/SKILL.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/skills/apimapper/SKILL.md) for the
89
- canonical workflow guide, and
90
- [`skills/apimapper/reference/`](https://github.com/wootsup/api-mapper/tree/main/packages/apimapper-mcp/skills/apimapper/reference) for OAuth,
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** — `~/.config/codex/mcp.json`
118
+ - **Codex** — `~/.codex/config.toml`
111
119
  - **ChatGPT Desktop** — when MCP support ships
112
120
 
113
- Both transports are supported: **stdio** (default, local install) and
114
- **HTTP + OAuth 2.0** (remote use, see [`docs/architecture.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/docs/architecture.md)).
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 [`skills/apimapper/reference/troubleshooting.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/skills/apimapper/reference/troubleshooting.md).
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
- ## Contributing
134
+ ## Feedback and support
127
135
 
128
- PRs welcome. Source lives at
129
- [github.com/wootsup/api-mapper](https://github.com/wootsup/api-mapper)
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> · download from `/downloads`
145
- - **Docs:** <https://wootsup.com/docs/mcp/>
146
- - **Issues:** <https://github.com/wootsup/api-mapper/issues>
147
- - **Architecture:** [`docs/architecture.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/docs/architecture.md)
148
- - **Security model:** [`docs/security.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/docs/security.md)
149
- - **Tools reference:** [`docs/tools.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/docs/tools.md)
150
- - **Changelog:** [`CHANGELOG.md`](https://github.com/wootsup/api-mapper/blob/main/packages/apimapper-mcp/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
- ### OAuth 2.0 (HTTP transport)
134
+ ### Transport: stdio only
131
135
 
132
- When `@wootsup/mcp` runs in HTTP mode (`server-http.ts`), it acts as
133
- both an MCP server and an OAuth 2.0 authorization server with **PKCE
134
- required** (RFC 7636 S256). No implicit flow, no `code` grant without
135
- PKCE. Bearer tokens are bound to the issuing site URL and rejected if
136
- the `Origin` header differs.
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.
@@ -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>;
@@ -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":"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"}
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/auth/keychain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Decide whether the bare/unknown-invocation interactive hint should be shown.
3
+ *
4
+ * Returns true ONLY when the invocation is interactive (a TTY on stdin) AND
5
+ * the given subcommand is not a recognised CLI subcommand (either absent —
6
+ * bare `npx @wootsup/mcp` — or an unknown typo).
7
+ *
8
+ * When stdin is NOT a TTY (piped, i.e. a real MCP client) this ALWAYS returns
9
+ * false so the server-boot path is never disturbed.
10
+ *
11
+ * @param subcommand The first positional CLI arg (`process.argv[2]`), or undefined.
12
+ * @param knownSubcommands The set of recognised CLI subcommands.
13
+ * @param isTTY Whether stdin is an interactive terminal (`process.stdin.isTTY`).
14
+ */
15
+ export declare function shouldShowInteractiveHint(subcommand: string | undefined, knownSubcommands: ReadonlySet<string>, isTTY: boolean): boolean;
16
+ /**
17
+ * Build the human-facing hint message printed to stderr in interactive mode.
18
+ *
19
+ * When `subcommand` is a non-empty unknown token, the message is prefixed with
20
+ * an "unknown command" line so a typo is called out explicitly.
21
+ */
22
+ export declare function buildInteractiveHint(subcommand: string | undefined): string;