@prowl-ai/prowl-skill 0.5.6 → 0.5.7
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
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.5.7 — 2026-08-23
|
|
4
|
+
|
|
5
|
+
Package `@prowl-ai/prowl-skill` 0.5.7 · plugins `prowl` 0.4.4, `prowl-cli` 0.2.6
|
|
6
|
+
(unchanged).
|
|
7
|
+
|
|
8
|
+
A first run with no key opened a browser and left the operator holding a callback into
|
|
9
|
+
a port that had already died. It now refuses to start, and says what to do instead.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **The MCP launcher no longer strands the operator in a half-finished OAuth flow.**
|
|
14
|
+
With no API key configured, `plugins/prowl/.mcp.json` used to hand `mcp-remote` an
|
|
15
|
+
empty `Authorization: Bearer ` header. The server rejects that, and `mcp-remote`
|
|
16
|
+
falls back to OAuth — which opens a browser and starts a `localhost` listener to
|
|
17
|
+
catch the callback. An MCP server spawned at agent startup does not survive long
|
|
18
|
+
enough to be there when consent completes: the listener is gone, the redirect hits a
|
|
19
|
+
dead port, and the operator is left holding a URL with an authorization code that
|
|
20
|
+
expires before anything can be done with it.
|
|
21
|
+
|
|
22
|
+
Measured on one machine on 2026-08-22: two such flows in a single day, both
|
|
23
|
+
stranded. The second left `~/.mcp-auth/mcp-remote-0.1.43/…_lock.json` recording
|
|
24
|
+
`{"pid": 68661, "port": 4333}` for a process that no longer existed.
|
|
25
|
+
|
|
26
|
+
The launcher now resolves the key, and **refuses to start without one** — printing
|
|
27
|
+
the two supported ways to supply it and exiting `78` (`EX_CONFIG`, `sysexits.h`)
|
|
28
|
+
rather than reaching `mcp-remote` at all. A key that is present but empty or
|
|
29
|
+
whitespace-only counts as absent.
|
|
30
|
+
|
|
31
|
+
- **The README said 22 MCP tools; the server registers 23.** `npm run check:contract`
|
|
32
|
+
reads the count off `https://prowl.chat/mcp/` and had no claim in the README to check
|
|
33
|
+
it against — the number sat one line below a heading no gate reads. The skill page
|
|
34
|
+
already said 23.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **`test/mcp_launch_test.js`** — 12 checks that execute the real `.mcp.json` launcher
|
|
39
|
+
rather than reading it. A fake `npx` on the launcher's own PATH captures the argv, so
|
|
40
|
+
the suite can assert both halves: that no key means `npx` is never reached, and that
|
|
41
|
+
each documented key source (`PROWL_MCP_TOKEN`, the plugin file, the Codex file)
|
|
42
|
+
reaches `mcp-remote` carrying that exact key, in that precedence.
|
|
43
|
+
|
|
44
|
+
Shadowing `npx` by PATH alone does not work here — `sh -lc` is a login shell, and on
|
|
45
|
+
macOS `/etc/profile` runs `path_helper`, which pushes an injected PATH entry to the
|
|
46
|
+
end. A `.profile` in the fake `HOME` is sourced afterwards and does win; that is what
|
|
47
|
+
the suite uses. Nothing in it touches the network.
|
|
48
|
+
|
|
49
|
+
Verified to have teeth: against the previous launcher, 6 of the 12 checks fail, and
|
|
50
|
+
the failure output is the defect itself — `'Authorization: Bearer '`. That proof is
|
|
51
|
+
now the fourteenth plant in `scripts/negative-self-test.js`, so every CI run removes
|
|
52
|
+
the refusal from `.mcp.json` and requires the suite to go red on `npx ran without a
|
|
53
|
+
key` — a suite that quietly stopped checking this would otherwise report the same
|
|
54
|
+
green as one that still does.
|
|
55
|
+
|
|
3
56
|
## v0.5.6 — 2026-08-16
|
|
4
57
|
|
|
5
58
|
Package `@prowl-ai/prowl-skill` 0.5.6 · plugins `prowl` 0.4.3 (unchanged), `prowl-cli`
|
package/README.md
CHANGED
|
@@ -97,6 +97,8 @@ Then ensure `[plugins."prowl@prowl"] enabled = true` in `${CODEX_HOME:-$HOME/.co
|
|
|
97
97
|
|
|
98
98
|
The bundled `.mcp.json` connects to `https://prowl.chat/mcp` via `mcp-remote`, reading the token from `PROWL_MCP_TOKEN` or `~/.prowl/prowl_mcp_token`.
|
|
99
99
|
|
|
100
|
+
With no key in either place the server **refuses to start** — it prints the two ways to supply one and exits `78` (`EX_CONFIG`). It deliberately does not fall through to `mcp-remote`'s OAuth: that opens a browser and waits on a `localhost` callback, and an MCP server started by an agent is killed long before the consent screen comes back, leaving the operator holding a redirect into a dead port.
|
|
101
|
+
|
|
100
102
|
### Manual MCP config (any client)
|
|
101
103
|
|
|
102
104
|
Configure a Streamable HTTP MCP server at `https://prowl.chat/mcp` with header `Authorization: Bearer prowl_YOUR_KEY`. See <https://prowl.chat/mcp/install.md> for per-client snippets (Cursor, Claude Code, Codex, generic).
|
|
@@ -137,7 +139,7 @@ pruned after seven days, and the plugin never writes to your Claude Code setting
|
|
|
137
139
|
|
|
138
140
|
## What your agent gets
|
|
139
141
|
|
|
140
|
-
- **
|
|
142
|
+
- **23 MCP tools** front the whole catalog — discovery and schema lookup are free; only data calls are metered.
|
|
141
143
|
- **3 execution modes** for `prowl_analyze` — `basic` (20–100 calls, 30–90s), `deep` (40–300, 3–5 min, needs Exploit+) and `max` (60–400, 5–10 min, needs Blackops+). A key without the subscription is downgraded to `basic` rather than refused.
|
|
142
144
|
- **8 playbooks** — `geo-visibility-audit`, `competitor-teardown`, `content-engine`, `local-and-reputation`, `mobile-aso`, `amazon-marketplace`, `idea-validation`, `channel-economics-audit`.
|
|
143
145
|
- **Verified reports** — a typed evidence ledger extracts claims, attacks them adversarially, then gap-fills what survives. Contradictions and refuted claims ship inside the report.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prowl-ai/prowl-skill",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7",
|
|
4
4
|
"description": "The Prowl plugin: install/usage skills, the hosted MCP config, and the live status widget that makes a running Prowl call, its progress and its cost visible in the terminal. This package is the installer CLI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"prowl",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "prowl",
|
|
4
4
|
"displayName": "Prowl",
|
|
5
5
|
"description": "Prowl market-intelligence skill backed by the hosted Prowl MCP server (448 tools), with a status widget that makes a running call, its progress and its cost visible in the terminal.",
|
|
6
|
-
"version": "0.4.
|
|
6
|
+
"version": "0.4.4",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
|
9
9
|
"email": "support@prowl.chat",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "prowl",
|
|
4
4
|
"displayName": "Prowl",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.4",
|
|
6
6
|
"description": "Prowl market-intelligence skill backed by the hosted Prowl MCP server (448 tools), with a status widget that makes a running call, its progress and its cost visible in the terminal.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
package/plugins/prowl/.mcp.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"command": "sh",
|
|
5
5
|
"args": [
|
|
6
6
|
"-lc",
|
|
7
|
-
"TOKEN=\"${PROWL_MCP_TOKEN:-}\"; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.prowl/prowl_mcp_token\" ]; then TOKEN=\"$(
|
|
7
|
+
"TOKEN=\"$(printf %s \"${PROWL_MCP_TOKEN:-}\" | tr -d \"[:space:]\")\"; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.prowl/prowl_mcp_token\" ]; then TOKEN=\"$(tr -d \"[:space:]\" < \"$HOME/.prowl/prowl_mcp_token\")\"; fi; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.codex/prowl_mcp_token\" ]; then TOKEN=\"$(tr -d \"[:space:]\" < \"$HOME/.codex/prowl_mcp_token\")\"; fi; if [ -z \"$TOKEN\" ]; then echo 'prowl: no API key; the MCP server will not start.' >&2; echo 'prowl: store one with: npx @prowl-ai/prowl-skill token' >&2; echo 'prowl: or set PROWL_MCP_TOKEN in the environment.' >&2; echo 'prowl: not falling back to OAuth - browser consent cannot finish inside MCP startup.' >&2; exit 78; fi; exec npx -y mcp-remote https://prowl.chat/mcp --header \"Authorization: Bearer $TOKEN\" --transport http-first --silent"
|
|
8
8
|
]
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: Requires network access to prowl.chat and a Prowl API token; speaks MCP protocol 2025-06-18 over Streamable HTTP; the bundled MCP config runs `npx mcp-remote` (needs Node.js 18+).
|
|
6
6
|
metadata:
|
|
7
7
|
author: prowl.chat
|
|
8
|
-
version: "0.4.
|
|
8
|
+
version: "0.4.4"
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Prowl — market intelligence for your agent
|
|
@@ -28,6 +28,8 @@ Prowl API keys (`prowl_...`) are billing-bearing — every metered call debits a
|
|
|
28
28
|
- a token file at `~/.prowl/prowl_mcp_token` (`mkdir -p ~/.prowl && printf '%s' "prowl_YOUR_KEY" > ~/.prowl/prowl_mcp_token && chmod 600 ~/.prowl/prowl_mcp_token`).
|
|
29
29
|
3. The bundled `.mcp.json` reads the token automatically and connects via `mcp-remote`.
|
|
30
30
|
|
|
31
|
+
Without a key the server does not start: it names both ways to supply one and exits `78`. That is deliberate — it will not fall through to OAuth, because browser consent cannot finish inside an MCP startup. If the agent reports the `prowl` server as failed, read its stderr: the remedy is in it.
|
|
32
|
+
|
|
31
33
|
For manual per-client setup (Cursor `.cursor/mcp.json`, Claude Code `claude mcp add`, Codex `config.toml`, generic MCP), see the hosted playbook: [https://prowl.chat/mcp/install.md](https://prowl.chat/mcp/install.md).
|
|
32
34
|
|
|
33
35
|
## Core tools
|