@subseam/mcp 0.4.13 → 0.4.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
@@ -13,7 +13,7 @@ and the rest. It runs on your machine and talks to the subseam service over HTTP
13
13
 
14
14
  - Node.js 22 or later, and npm.
15
15
  - A GitHub account, and a subseam organization that someone has added you to.
16
- - The subseam API URL: `https://subseam.theconstructory.com/subseam`.
16
+ - The subseam URL: `https://subseam.theconstructory.com`.
17
17
 
18
18
  ## 1. Sign in
19
19
 
@@ -23,27 +23,17 @@ owner your GitHub login so they can add you.
23
23
 
24
24
  ## 2. Get a token
25
25
 
26
- The MCP server authenticates with a token tied to your account. There is no token page yet, so
27
- you mint one with your browser session:
28
-
29
- 1. In the browser where you signed in, open the developer tools, then Application (Storage in
30
- Firefox) → Cookies → `https://subseam.theconstructory.com`, and copy the value of
31
- `__Host-subseam_session`.
32
- 2. Run, pasting that value:
26
+ The MCP server authenticates with a token tied to your account. Open
27
+ <https://subseam.theconstructory.com/settings>, signed in as in step 1, name the token after the
28
+ machine it is for, and create it. The page shows the token once: copy it, then run
33
29
 
34
30
  ```
35
- S='<the cookie value>'; C=$(openssl rand -hex 16)
36
- mkdir -p ~/.subseam && curl -s -X POST https://subseam.theconstructory.com/tokens \
37
- -H "cookie: __Host-subseam_session=$S; subseam_csrf=$C" -H "x-csrf-token: $C" \
38
- -H 'content-type: application/json' -d '{"label":"my-machine"}' \
39
- | node -e 'let b="";process.stdin.on("data",d=>b+=d).on("end",()=>{let t;try{t=JSON.parse(b).token}catch{}if(typeof t==="string")process.stdout.write(t);else{console.error("subseam refused the token request: "+b);process.exit(1)}})' > ~/.subseam/token
40
- chmod 600 ~/.subseam/token
31
+ mkdir -p ~/.subseam && umask 077 && printf '%s' '<the token>' > ~/.subseam/token
41
32
  ```
42
33
 
43
- `~/.subseam/token` now holds one line starting `cpt_`. If the command prints "subseam refused the
44
- token request" with the server's answer, the session cookie was wrong or expired: sign in again and
45
- repeat. The server also accepts the token in the
46
- `SUBSEAM_TOKEN` environment variable instead of the file.
34
+ `~/.subseam/token` now holds one line starting `cpt_`. The server also accepts the token in the
35
+ `SUBSEAM_TOKEN` environment variable instead of the file. The same page lists your tokens and
36
+ revokes one you no longer use.
47
37
 
48
38
  ## 3. Install
49
39
 
@@ -57,7 +47,7 @@ npm install @subseam/mcp
57
47
  For Claude Code:
58
48
 
59
49
  ```
60
- claude mcp add-json --scope user subseam '{"command":"node","args":["'"$HOME"'/.subseam/mcp/node_modules/@subseam/mcp/dist/main.js"],"env":{"SUBSEAM_URL":"https://subseam.theconstructory.com/subseam"}}'
50
+ claude mcp add-json --scope user subseam '{"command":"node","args":["'"$HOME"'/.subseam/mcp/node_modules/@subseam/mcp/dist/main.js"],"env":{"SUBSEAM_URL":"https://subseam.theconstructory.com"}}'
61
51
  ```
62
52
 
63
53
  `claude mcp list` should show `subseam ... Connected`. Any other MCP host: run
package/dist/main.js CHANGED
@@ -24036,7 +24036,7 @@ function requireEnv(env, name, purpose) {
24036
24036
  function loadConfig2(env = process.env, sources = realTokenSources()) {
24037
24037
  return Object.freeze({
24038
24038
  get url() {
24039
- return requireEnv(env, "SUBSEAM_URL", "to reach the hosted service, e.g. https://subseam.theconstructory.com/subseam");
24039
+ return requireEnv(env, "SUBSEAM_URL", "to reach the hosted service, e.g. https://subseam.theconstructory.com");
24040
24040
  },
24041
24041
  get tenantId() {
24042
24042
  const value = env["SUBSEAM_TENANT"];
@@ -31053,8 +31053,13 @@ function renderObject(definitionId, r) {
31053
31053
  } else if (r.bindings.length === 0) {
31054
31054
  out2.push("Bindings: NONE \u2014 the current version is unbound, which admit never legitimately produces.");
31055
31055
  } else {
31056
+ const counts = /* @__PURE__ */ new Map();
31057
+ for (const b of r.bindings) {
31058
+ const line = `${b.role}: ${b.repo} (${b.anchorGrain} grain), bound at ${b.boundAtCommit}`;
31059
+ counts.set(line, (counts.get(line) ?? 0) + 1);
31060
+ }
31056
31061
  out2.push("Bindings (current version):");
31057
- for (const b of r.bindings) out2.push(` \u2022 ${b.role}: ${b.repo} (${b.anchorGrain} grain), bound at ${b.boundAtCommit}`);
31062
+ for (const [line, n] of counts) out2.push(` \u2022 ${line}${n > 1 ? ` (\xD7${n})` : ""}`);
31058
31063
  }
31059
31064
  out2.push(r.draft === null ? "Draft (current version): none \u2014 the version has no subject binding, or canvas has published no version of its repo." : `Draft (current version):
31060
31065
  ${renderDraft(r.draft)}`);
@@ -48336,7 +48341,7 @@ var workReadTools = createWorkReadToolProviders({ capability: "work" });
48336
48341
  var bundledProviders = [src_default2, src_default, tension_default, ...defineTools, ...decisionTools, ...captureTools, ...buildTools, secureTool, ...workTools, ...workReadTools];
48337
48342
 
48338
48343
  // package.json
48339
- var version2 = "0.4.13";
48344
+ var version2 = "0.4.15";
48340
48345
 
48341
48346
  // src/server.ts
48342
48347
  var SERVER_VERSION = version2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subseam/mcp",
3
- "version": "0.4.13",
3
+ "version": "0.4.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {