@contextstream/mcp-server 0.4.64 → 0.4.65
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/README.md +43 -1
- package/dist/hooks/auto-rules.js +1 -1
- package/dist/hooks/notification.js +5 -2
- package/dist/hooks/permission-request.js +5 -2
- package/dist/hooks/post-tool-use-failure.js +5 -2
- package/dist/hooks/pre-compact.js +1 -4
- package/dist/hooks/runner.js +8 -11
- package/dist/hooks/session-init.js +1 -4
- package/dist/hooks/stop.js +5 -2
- package/dist/hooks/subagent-start.js +5 -2
- package/dist/hooks/subagent-stop.js +5 -2
- package/dist/hooks/task-completed.js +5 -2
- package/dist/hooks/teammate-idle.js +5 -2
- package/dist/index.js +613 -104
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -84,7 +84,7 @@ npx @contextstream/mcp-server@latest setup
|
|
|
84
84
|
|
|
85
85
|
The wizard handles everything: authentication, configuration, editor integration, and optional hooks that supercharge your workflow.
|
|
86
86
|
|
|
87
|
-
**Works with:** Claude Code • Cursor • VS Code • Claude Desktop • Codex CLI • Antigravity
|
|
87
|
+
**Works with:** Claude Code • Cursor • VS Code • Claude Desktop • Codex CLI • OpenCode • Antigravity
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
@@ -139,6 +139,48 @@ claude mcp update contextstream -e CONTEXTSTREAM_API_KEY=your_key
|
|
|
139
139
|
|
|
140
140
|
</details>
|
|
141
141
|
|
|
142
|
+
<details>
|
|
143
|
+
<summary><b>OpenCode</b></summary>
|
|
144
|
+
|
|
145
|
+
Local server:
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"$schema": "https://opencode.ai/config.json",
|
|
150
|
+
"mcp": {
|
|
151
|
+
"contextstream": {
|
|
152
|
+
"type": "local",
|
|
153
|
+
"command": ["npx", "-y", "contextstream-mcp"],
|
|
154
|
+
"environment": {
|
|
155
|
+
"CONTEXTSTREAM_API_KEY": "{env:CONTEXTSTREAM_API_KEY}"
|
|
156
|
+
},
|
|
157
|
+
"enabled": true
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Remote server:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"$schema": "https://opencode.ai/config.json",
|
|
168
|
+
"mcp": {
|
|
169
|
+
"contextstream": {
|
|
170
|
+
"type": "remote",
|
|
171
|
+
"url": "https://mcp.contextstream.com",
|
|
172
|
+
"enabled": true
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
For the local variant, export `CONTEXTSTREAM_API_KEY` before launching OpenCode.
|
|
179
|
+
|
|
180
|
+
**Locations:** `./opencode.json` • `~/.config/opencode/opencode.json`
|
|
181
|
+
|
|
182
|
+
</details>
|
|
183
|
+
|
|
142
184
|
<details>
|
|
143
185
|
<summary><b>VS Code</b></summary>
|
|
144
186
|
|
package/dist/hooks/auto-rules.js
CHANGED
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|
|
@@ -10,6 +10,7 @@ import * as fs from "node:fs";
|
|
|
10
10
|
import * as path from "node:path";
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
12
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
13
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
13
14
|
function readHookInput() {
|
|
14
15
|
try {
|
|
15
16
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -18,9 +19,11 @@ function readHookInput() {
|
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
function writeHookOutput(output) {
|
|
22
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
23
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
21
24
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
22
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
23
|
-
hookEventName:
|
|
25
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
26
|
+
hookEventName: eventName,
|
|
24
27
|
additionalContext: output.additionalContext
|
|
25
28
|
} : void 0,
|
|
26
29
|
additionalContext: output.additionalContext,
|
|
@@ -303,10 +303,7 @@ After compaction, call session_init(is_post_compact=true) to restore context.${c
|
|
|
303
303
|
User instructions: ${customInstructions}` : ""}`;
|
|
304
304
|
console.log(
|
|
305
305
|
JSON.stringify({
|
|
306
|
-
|
|
307
|
-
hookEventName: "PreCompact",
|
|
308
|
-
additionalContext: context
|
|
309
|
-
}
|
|
306
|
+
additionalContext: context
|
|
310
307
|
})
|
|
311
308
|
);
|
|
312
309
|
process.exit(0);
|
package/dist/hooks/runner.js
CHANGED
|
@@ -2181,10 +2181,7 @@ After compaction, call session_init(is_post_compact=true) to restore context.${c
|
|
|
2181
2181
|
User instructions: ${customInstructions}` : ""}`;
|
|
2182
2182
|
console.log(
|
|
2183
2183
|
JSON.stringify({
|
|
2184
|
-
|
|
2185
|
-
hookEventName: "PreCompact",
|
|
2186
|
-
additionalContext: context
|
|
2187
|
-
}
|
|
2184
|
+
additionalContext: context
|
|
2188
2185
|
})
|
|
2189
2186
|
);
|
|
2190
2187
|
process.exit(0);
|
|
@@ -3673,10 +3670,7 @@ async function runSessionInitHook() {
|
|
|
3673
3670
|
});
|
|
3674
3671
|
console.log(
|
|
3675
3672
|
JSON.stringify({
|
|
3676
|
-
|
|
3677
|
-
hookEventName: "SessionStart",
|
|
3678
|
-
additionalContext: formattedContext
|
|
3679
|
-
}
|
|
3673
|
+
additionalContext: formattedContext
|
|
3680
3674
|
})
|
|
3681
3675
|
);
|
|
3682
3676
|
process.exit(0);
|
|
@@ -3714,9 +3708,11 @@ function readHookInput() {
|
|
|
3714
3708
|
}
|
|
3715
3709
|
}
|
|
3716
3710
|
function writeHookOutput(output) {
|
|
3711
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
3712
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
3717
3713
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
3718
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
3719
|
-
hookEventName:
|
|
3714
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
3715
|
+
hookEventName: eventName,
|
|
3720
3716
|
additionalContext: output.additionalContext
|
|
3721
3717
|
} : void 0,
|
|
3722
3718
|
additionalContext: output.additionalContext,
|
|
@@ -3917,11 +3913,12 @@ async function fetchFastContext(config, body) {
|
|
|
3917
3913
|
return null;
|
|
3918
3914
|
}
|
|
3919
3915
|
}
|
|
3920
|
-
var DEFAULT_API_URL;
|
|
3916
|
+
var DEFAULT_API_URL, HOOK_SPECIFIC_OUTPUT_EVENTS;
|
|
3921
3917
|
var init_common = __esm({
|
|
3922
3918
|
"src/hooks/common.ts"() {
|
|
3923
3919
|
"use strict";
|
|
3924
3920
|
DEFAULT_API_URL = "https://api.contextstream.io";
|
|
3921
|
+
HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
3925
3922
|
}
|
|
3926
3923
|
});
|
|
3927
3924
|
|
|
@@ -1708,10 +1708,7 @@ async function runSessionInitHook() {
|
|
|
1708
1708
|
});
|
|
1709
1709
|
console.log(
|
|
1710
1710
|
JSON.stringify({
|
|
1711
|
-
|
|
1712
|
-
hookEventName: "SessionStart",
|
|
1713
|
-
additionalContext: formattedContext
|
|
1714
|
-
}
|
|
1711
|
+
additionalContext: formattedContext
|
|
1715
1712
|
})
|
|
1716
1713
|
);
|
|
1717
1714
|
process.exit(0);
|
package/dist/hooks/stop.js
CHANGED
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|
|
@@ -8,6 +8,7 @@ import * as fs from "node:fs";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
11
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
11
12
|
function readHookInput() {
|
|
12
13
|
try {
|
|
13
14
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -16,9 +17,11 @@ function readHookInput() {
|
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
function writeHookOutput(output) {
|
|
20
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
21
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
19
22
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
20
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
21
|
-
hookEventName:
|
|
23
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
24
|
+
hookEventName: eventName,
|
|
22
25
|
additionalContext: output.additionalContext
|
|
23
26
|
} : void 0,
|
|
24
27
|
additionalContext: output.additionalContext,
|
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|
|
@@ -5,6 +5,7 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
var DEFAULT_API_URL = "https://api.contextstream.io";
|
|
8
|
+
var HOOK_SPECIFIC_OUTPUT_EVENTS = /* @__PURE__ */ new Set(["PreToolUse", "UserPromptSubmit", "PostToolUse"]);
|
|
8
9
|
function readHookInput() {
|
|
9
10
|
try {
|
|
10
11
|
return JSON.parse(fs.readFileSync(0, "utf8"));
|
|
@@ -13,9 +14,11 @@ function readHookInput() {
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
function writeHookOutput(output) {
|
|
17
|
+
const eventName = output?.hookEventName || (typeof process.env.HOOK_EVENT_NAME === "string" ? process.env.HOOK_EVENT_NAME.trim() : "");
|
|
18
|
+
const canUseHookSpecificOutput = HOOK_SPECIFIC_OUTPUT_EVENTS.has(eventName);
|
|
16
19
|
const payload = output && (output.additionalContext || output.blocked || output.reason) ? {
|
|
17
|
-
hookSpecificOutput: output.additionalContext ? {
|
|
18
|
-
hookEventName:
|
|
20
|
+
hookSpecificOutput: output.additionalContext && canUseHookSpecificOutput ? {
|
|
21
|
+
hookEventName: eventName,
|
|
19
22
|
additionalContext: output.additionalContext
|
|
20
23
|
} : void 0,
|
|
21
24
|
additionalContext: output.additionalContext,
|