@prowl-ai/prowl-skill 0.6.0 → 0.6.1
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,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.6.1 – 2026-10-11
|
|
4
|
+
|
|
5
|
+
Package `@prowl-ai/prowl-skill` 0.6.1 · plugins `prowl` 0.5.1, `prowl-cli` 0.3.0.
|
|
6
|
+
|
|
7
|
+
### Security
|
|
8
|
+
|
|
9
|
+
- **The API key is no longer in a process's arguments.** The bundled launcher used to
|
|
10
|
+
start `mcp-remote … --header "Authorization: Bearer <key>"`, so the key sat in argv,
|
|
11
|
+
where any process of the same user reads it with `ps` or `pgrep -fl` — and two Prowl
|
|
12
|
+
keys leaked from one machine exactly that way (2026-10-04, 2026-10-09). The launcher
|
|
13
|
+
now exports `PROWL_MCP_AUTH="Bearer <key>"` and passes the literal
|
|
14
|
+
`Authorization:${PROWL_MCP_AUTH}`, which `mcp-remote` expands from its own
|
|
15
|
+
environment. Key sources and their order are unchanged. `test/mcp_launch_test.js`
|
|
16
|
+
asserts no argument carries the key from any source; `negative-self-test.js` plants
|
|
17
|
+
the old form and watches that assertion fire. Verified live against prowl.chat with
|
|
18
|
+
`mcp-remote` 0.14.3: `initialize` and `tools/list` (23 tools) succeed, the argv shows
|
|
19
|
+
only the placeholder.
|
|
20
|
+
- **Restart running sessions after updating.** An `mcp-remote` already running keeps
|
|
21
|
+
its old argv until its session restarts; rotate a key that was exposed.
|
|
22
|
+
|
|
3
23
|
## v0.6.0 – 2026-09-29
|
|
4
24
|
|
|
5
25
|
Package `@prowl-ai/prowl-skill` 0.6.0 · plugins `prowl` 0.5.0, `prowl-cli` 0.3.0.
|
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ codex plugin marketplace add https://github.com/PROWL-AI/prowl-skill
|
|
|
97
97
|
|
|
98
98
|
Then ensure `[plugins."prowl@prowl"] enabled = true` in `${CODEX_HOME:-$HOME/.codex}/config.toml` and restart.
|
|
99
99
|
|
|
100
|
-
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`.
|
|
100
|
+
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`. The token never appears in a process's arguments: the launcher hands it to `mcp-remote` in the `PROWL_MCP_AUTH` environment variable and passes only the placeholder `Authorization:${PROWL_MCP_AUTH}`, which `mcp-remote` expands itself — so `ps` and `pgrep -fl` show no key.
|
|
101
101
|
|
|
102
102
|
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.
|
|
103
103
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prowl-ai/prowl-skill",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
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": "Real-world market data for your agents: the Prowl skill backed by the hosted Prowl MCP server (444 market data tools across 17 providers), with a status widget that makes a running call, its progress and its cost visible in the terminal.",
|
|
6
|
-
"version": "0.5.
|
|
6
|
+
"version": "0.5.1",
|
|
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.5.
|
|
5
|
+
"version": "0.5.1",
|
|
6
6
|
"description": "Real-world market data for your agents: the Prowl skill backed by the hosted Prowl MCP server (444 market data tools across 17 providers), 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=\"$(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
|
|
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; PROWL_MCP_AUTH=\"Bearer $TOKEN\"; export PROWL_MCP_AUTH; unset TOKEN; exec npx -y mcp-remote https://prowl.chat/mcp --header 'Authorization:${PROWL_MCP_AUTH}' --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.5.
|
|
8
|
+
version: "0.5.1"
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Prowl – real-world market data for your agents
|