@subseam/mcp 0.4.14 → 0.4.16
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 +9 -19
- package/dist/main.js +9 -6
- package/package.json +1 -1
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
|
|
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.
|
|
27
|
-
|
|
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
|
-
|
|
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_`.
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
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
|
|
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"];
|
|
@@ -31929,19 +31929,22 @@ var defineProposalReadTool = {
|
|
|
31929
31929
|
init_esm_shims();
|
|
31930
31930
|
var input9 = external_exports.object({
|
|
31931
31931
|
taskId: external_exports.string().uuid(),
|
|
31932
|
-
|
|
31933
|
-
|
|
31932
|
+
files: external_exports.array(external_exports.object({ path: external_exports.string().min(1), content: external_exports.string().nullable() })).min(1).optional(),
|
|
31933
|
+
sha: external_exports.string().regex(/^[0-9a-f]{40}$/).optional(),
|
|
31934
|
+
gitDir: external_exports.string().startsWith("/").optional()
|
|
31934
31935
|
});
|
|
31935
31936
|
var site2 = external_exports.object({ definitionName: external_exports.string(), path: external_exports.string(), line: external_exports.number(), cause: external_exports.string() });
|
|
31936
31937
|
var siteLine2 = (d) => ` ${d.definitionName} at ${d.path}:${d.line} \u2014 ${d.cause}`;
|
|
31937
31938
|
var defineProposalCheckTool = {
|
|
31938
31939
|
name: "define_proposal_check",
|
|
31939
|
-
description: "Before submitting a fill for a PR-check proposal, ask what the check would say about your candidate:
|
|
31940
|
+
description: "Before submitting a fill for a PR-check proposal, ask what the check would say about your candidate: pass `files`, the same file-set you would submit with tasks_submit ({path, content} each; content null deletes the file). Answers the divergences still standing at the candidate, the ones it closes and the ones it opens. Records nothing.",
|
|
31940
31941
|
capability: "decision",
|
|
31941
31942
|
inputSchema: input9.shape,
|
|
31942
31943
|
async handler(raw, ctx) {
|
|
31943
31944
|
const args2 = input9.parse(raw);
|
|
31944
|
-
const
|
|
31945
|
+
const candidate = args2.files !== void 0 ? { taskId: args2.taskId, files: args2.files } : args2.sha !== void 0 && args2.gitDir !== void 0 ? { taskId: args2.taskId, sha: args2.sha, gitDir: args2.gitDir } : null;
|
|
31946
|
+
if (candidate === null) return { text: "define_proposal_check: pass `files`, the file-set you would submit as the fill." };
|
|
31947
|
+
const wire = await ctx.gateway.invoke("decision-proposal-check", candidate);
|
|
31945
31948
|
const body2 = readBody(
|
|
31946
31949
|
external_exports.object({
|
|
31947
31950
|
delta: external_exports.object({
|
|
@@ -48341,7 +48344,7 @@ var workReadTools = createWorkReadToolProviders({ capability: "work" });
|
|
|
48341
48344
|
var bundledProviders = [src_default2, src_default, tension_default, ...defineTools, ...decisionTools, ...captureTools, ...buildTools, secureTool, ...workTools, ...workReadTools];
|
|
48342
48345
|
|
|
48343
48346
|
// package.json
|
|
48344
|
-
var version2 = "0.4.
|
|
48347
|
+
var version2 = "0.4.16";
|
|
48345
48348
|
|
|
48346
48349
|
// src/server.ts
|
|
48347
48350
|
var SERVER_VERSION = version2;
|