@hyperstar/mcp 0.1.13 → 0.1.15

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 CHANGED
@@ -5,6 +5,9 @@ workflows. It exposes scoped creator search, campaign roster, bulk email, and
5
5
  inbox tools for MCP clients using either a service-account key or local browser
6
6
  CLI login.
7
7
 
8
+ For first-tester setup, MCP client snippets, and safe starter prompts, use the
9
+ [headless agent quickstart](https://github.com/Hyperstar-org/backend/blob/main/docs/headless-agent-quickstart.md).
10
+
8
11
  ## Install
9
12
 
10
13
  Run the MCP server directly from npm:
@@ -147,8 +150,13 @@ It also exposes matching prompts:
147
150
  npm install
148
151
  npm test
149
152
  npm run build
153
+ npm run smoke:npm
150
154
  ```
151
155
 
156
+ `npm run smoke:npm` verifies the published npm package can be resolved and that
157
+ both package binaries print help without requiring local build artifacts,
158
+ authentication, or real workflow API calls.
159
+
152
160
  ## Examples
153
161
 
154
162
  Search creators:
package/dist/index.js CHANGED
@@ -2,8 +2,20 @@
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { loadConfig } from "./config.js";
4
4
  import { createHyperstarMcpServer } from "./server.js";
5
+ const MCP_SERVER_USAGE = [
6
+ "Usage: hyperstar-mcp [--help]",
7
+ "",
8
+ "Starts the Hyperstar stdio MCP server.",
9
+ "",
10
+ "Authentication:",
11
+ " Run `hyperstar login` first, or set HYPERSTAR_API_KEY in the MCP server environment.",
12
+ ].join("\n");
5
13
  /** Start the stdio MCP server process. */
6
14
  async function main() {
15
+ if (process.argv.slice(2).some((arg) => arg === "--help" || arg === "-h")) {
16
+ process.stdout.write(`${MCP_SERVER_USAGE}\n`);
17
+ return;
18
+ }
7
19
  const config = loadConfig();
8
20
  const server = createHyperstarMcpServer(config);
9
21
  await server.connect(new StdioServerTransport());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperstar/mcp",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "Local stdio MCP server and CLI for Hyperstar headless workflows.",
@@ -33,6 +33,7 @@
33
33
  },
34
34
  "files": [
35
35
  "dist",
36
+ "scripts/npm-clean-room-smoke.mjs",
36
37
  "README.md",
37
38
  "package.json"
38
39
  ],
@@ -44,6 +45,7 @@
44
45
  "format:check": "prettier --check .",
45
46
  "prepack": "npm run build",
46
47
  "smoke:dev": "npm run build && node scripts/dev-smoke.mjs",
48
+ "smoke:npm": "node scripts/npm-clean-room-smoke.mjs",
47
49
  "test": "vitest run",
48
50
  "typecheck": "tsc -p tsconfig.json --noEmit"
49
51
  },
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawnSync } from "node:child_process";
4
+ import { mkdtempSync, readFileSync, rmSync } from "node:fs";
5
+ import { tmpdir } from "node:os";
6
+ import { dirname, isAbsolute, resolve } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
10
+ const packageJson = JSON.parse(
11
+ readFileSync(resolve(packageRoot, "package.json"), "utf8"),
12
+ );
13
+ const packageSpec =
14
+ process.env.HYPERSTAR_MCP_NPM_PACKAGE ??
15
+ `${packageJson.name}@${packageJson.version}`;
16
+ const scratchDir = mkdtempSync(resolve(tmpdir(), "hyperstar-mcp-npm-smoke-"));
17
+
18
+ function isLocalPackageSpec(value) {
19
+ return (
20
+ value.startsWith("file:") ||
21
+ value.startsWith(".") ||
22
+ value.endsWith(".tgz") ||
23
+ isAbsolute(value)
24
+ );
25
+ }
26
+
27
+ function logLocalPackageSpec(value) {
28
+ console.log(
29
+ JSON.stringify(
30
+ {
31
+ step: "local-package",
32
+ ok: true,
33
+ command: [],
34
+ stdout: [value],
35
+ },
36
+ null,
37
+ 2,
38
+ ),
39
+ );
40
+ }
41
+
42
+ function runStep(step, command, args) {
43
+ const result = spawnSync(command, args, {
44
+ cwd: scratchDir,
45
+ encoding: "utf8",
46
+ env: process.env,
47
+ shell: false,
48
+ });
49
+ const stdout = result.stdout.trim();
50
+ const stderr = result.stderr.trim();
51
+ if (result.status !== 0) {
52
+ console.error(
53
+ JSON.stringify(
54
+ {
55
+ step,
56
+ ok: false,
57
+ command: [command, ...args],
58
+ status: result.status,
59
+ stdout,
60
+ stderr,
61
+ },
62
+ null,
63
+ 2,
64
+ ),
65
+ );
66
+ process.exit(result.status ?? 1);
67
+ }
68
+ console.log(
69
+ JSON.stringify(
70
+ {
71
+ step,
72
+ ok: true,
73
+ command: [command, ...args],
74
+ stdout: stdout.split("\n").slice(0, 8),
75
+ },
76
+ null,
77
+ 2,
78
+ ),
79
+ );
80
+ }
81
+
82
+ try {
83
+ if (isLocalPackageSpec(packageSpec)) {
84
+ logLocalPackageSpec(packageSpec);
85
+ } else {
86
+ runStep("registry-version", "npm", [
87
+ "view",
88
+ packageSpec,
89
+ "version",
90
+ "--silent",
91
+ ]);
92
+ }
93
+ runStep("hyperstar-cli-help", "npm", [
94
+ "exec",
95
+ "--yes",
96
+ "--package",
97
+ packageSpec,
98
+ "--",
99
+ "hyperstar",
100
+ "--help",
101
+ ]);
102
+ runStep("hyperstar-mcp-help", "npm", [
103
+ "exec",
104
+ "--yes",
105
+ "--package",
106
+ packageSpec,
107
+ "--",
108
+ "hyperstar-mcp",
109
+ "--help",
110
+ ]);
111
+ } finally {
112
+ rmSync(scratchDir, { recursive: true, force: true });
113
+ }