studiograph 1.3.48-next.34 → 1.3.48-next.36
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/dist/cli/commands/mcp.js +3 -1
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/core/accent-palette.js +12 -12
- package/dist/core/accent-palette.js.map +1 -1
- package/dist/core/types.d.ts +22 -22
- package/dist/mcp/server.d.ts +8 -2
- package/dist/mcp/server.js +26 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +11 -2
- package/dist/mcp/tools.js +150 -86
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/index.js +20 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/auth-api.js +74 -0
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/graph-api.js +13 -58
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +6 -3
- package/dist/server/routes/mcp.js +14 -3
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/services/access-control.d.ts +46 -0
- package/dist/services/access-control.js +100 -0
- package/dist/services/access-control.js.map +1 -0
- package/dist/services/auth-service.d.ts +25 -0
- package/dist/services/auth-service.js +56 -1
- package/dist/services/auth-service.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.lKU4zpOl.css +1 -0
- package/dist/web/_app/immutable/assets/2.CgFb_GCJ.css +1 -0
- package/dist/web/_app/immutable/assets/{4.CghflsfM.css → 4.DVc_mPcN.css} +1 -1
- package/dist/web/_app/immutable/assets/ChevronLeft.D7vOtKrc.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.CNUBJMNi.css +1 -0
- package/dist/web/_app/immutable/chunks/-wxjF91G.js +1 -0
- package/dist/web/_app/immutable/chunks/{C1rO1sKp.js → B32tD4pl.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BblPWFvo.js → BC7ktj07.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BdJSf8eV.js → BWrcBDa3.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BhJ88KJC.js → BbbskiWe.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D1VGPe1I.js → BkRT6ruV.js} +2 -2
- package/dist/web/_app/immutable/chunks/{3-Cfj5RG.js → BmagG8yY.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BV6jIcce.js → BnuL1eJn.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D7Z-dBFs.js → CjyyBzjb.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CNGBe8KX.js → CwaL6kTg.js} +1 -1
- package/dist/web/_app/immutable/chunks/{8qgHZsBL.js → CyBmiHLm.js} +1 -1
- package/dist/web/_app/immutable/chunks/D1BlNihW.js +1 -0
- package/dist/web/_app/immutable/chunks/{B18-u2yi.js → D8zKd89r.js} +1 -1
- package/dist/web/_app/immutable/chunks/DJ4CW5i8.js +1 -0
- package/dist/web/_app/immutable/chunks/Db9eca6L.js +1 -0
- package/dist/web/_app/immutable/chunks/{C-q2uf7L.js → DylK7bu3.js} +1 -1
- package/dist/web/_app/immutable/chunks/{whmg2rRy.js → GssR8fQ3.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BtExut8f.js → HSKfY6ZU.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Ck7PmFKJ.js → VCEvgZJw.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DryafJQh.js → xKZKU22O.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DpT4m9bh.js → yAfzmYvy.js} +1 -1
- package/dist/web/_app/immutable/entry/{app.CKXkagZM.js → app.mWBFKRZ2.js} +2 -2
- package/dist/web/_app/immutable/entry/start.Q1XHCrNU.js +1 -0
- package/dist/web/_app/immutable/nodes/{0.F28ZFrke.js → 0.BKV2H-Ug.js} +2 -2
- package/dist/web/_app/immutable/nodes/{1.BRs6Tem2.js → 1.9KX9N3iR.js} +1 -1
- package/dist/web/_app/immutable/nodes/{10.BVH4jc7f.js → 10.CEOTZ-Ot.js} +1 -1
- package/dist/web/_app/immutable/nodes/{11.CKKYuN1Z.js → 11.DD5U4pzY.js} +1 -1
- package/dist/web/_app/immutable/nodes/{12.CXJ8sDNM.js → 12.DbrTQoB-.js} +1 -1
- package/dist/web/_app/immutable/nodes/2.Byr6x-5l.js +269 -0
- package/dist/web/_app/immutable/nodes/{3.DbFtIJG7.js → 3.DSrTzRN9.js} +3 -3
- package/dist/web/_app/immutable/nodes/{4.VE63TlUE.js → 4.BQTnXHet.js} +3 -3
- package/dist/web/_app/immutable/nodes/{5.QtyyzHxb.js → 5.D_EgSewC.js} +1 -1
- package/dist/web/_app/immutable/nodes/{6.4YLZFsig.js → 6.CDdiiN7o.js} +1 -1
- package/dist/web/_app/immutable/nodes/{7.CEjEBTVj.js → 7.DGqsv15n.js} +1 -1
- package/dist/web/_app/immutable/nodes/{8.I2oVhMDH.js → 8.DGhcX90z.js} +1 -1
- package/dist/web/_app/immutable/nodes/{9.DlVbuY2B.js → 9.CzFXF5sO.js} +1 -1
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +6 -6
- package/package.json +1 -1
- package/dist/web/_app/immutable/assets/0.C1qY3o0H.css +0 -1
- package/dist/web/_app/immutable/assets/2.CwXdjwwp.css +0 -1
- package/dist/web/_app/immutable/assets/ChevronLeft.BwM9mwS4.css +0 -1
- package/dist/web/_app/immutable/assets/WorkspaceView.BJxy1FMS.css +0 -1
- package/dist/web/_app/immutable/chunks/Bn-nifhJ.js +0 -1
- package/dist/web/_app/immutable/chunks/CUChLjvX.js +0 -1
- package/dist/web/_app/immutable/chunks/CiOLfoJj.js +0 -1
- package/dist/web/_app/immutable/chunks/DRv5njmV.js +0 -1
- package/dist/web/_app/immutable/entry/start.DCSCR1R6.js +0 -1
- package/dist/web/_app/immutable/nodes/2.zgCaZSSX.js +0 -269
package/dist/cli/commands/mcp.js
CHANGED
|
@@ -27,6 +27,7 @@ import { Command } from 'commander';
|
|
|
27
27
|
import { Workspace } from '../../core/workspace.js';
|
|
28
28
|
import { WorkspaceManager } from '../../core/workspace-manager.js';
|
|
29
29
|
import { loadUserConfig } from '../../core/user-config.js';
|
|
30
|
+
import { AuthService } from '../../services/auth-service.js';
|
|
30
31
|
import { startMcpServer } from '../../mcp/server.js';
|
|
31
32
|
export const mcpCommand = new Command('mcp')
|
|
32
33
|
.description('Start the Studiograph MCP server for Claude Desktop integration')
|
|
@@ -52,6 +53,7 @@ export const mcpCommand = new Command('mcp')
|
|
|
52
53
|
email: 'noreply@studiograph.local',
|
|
53
54
|
};
|
|
54
55
|
const workspaceManager = new WorkspaceManager(workspacePath, config, gitUser);
|
|
55
|
-
|
|
56
|
+
const authService = new AuthService(workspacePath);
|
|
57
|
+
await startMcpServer(workspaceManager, authService);
|
|
56
58
|
});
|
|
57
59
|
//# sourceMappingURL=mcp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,iEAAiE,CAAC;KAC9E,QAAQ,CAAC,aAAa,EAAE,mDAAmD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,YAAqB,EAAE,EAAE;IACtC,MAAM,aAAa,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC;YAChC,gGAAgG,CACjG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAE5C,kEAAkE;IAClE,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC;IACrD,CAAC;IAED,2EAA2E;IAC3E,MAAM,OAAO,GAAG;QACd,EAAE,EAAK,KAAK;QACZ,IAAI,EAAG,iBAAiB;QACxB,KAAK,EAAE,2BAA2B;KACnC,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAC3C,aAAa,EACb,MAAM,EACN,OAAO,CACR,CAAC;IAEF,MAAM,cAAc,CAAC,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,iEAAiE,CAAC;KAC9E,QAAQ,CAAC,aAAa,EAAE,mDAAmD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,YAAqB,EAAE,EAAE;IACtC,MAAM,aAAa,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC;YAChC,gGAAgG,CACjG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAE5C,kEAAkE;IAClE,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC;IACrD,CAAC;IAED,2EAA2E;IAC3E,MAAM,OAAO,GAAG;QACd,EAAE,EAAK,KAAK;QACZ,IAAI,EAAG,iBAAiB;QACxB,KAAK,EAAE,2BAA2B;KACnC,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAC3C,aAAa,EACb,MAAM,EACN,OAAO,CACR,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;IAEnD,MAAM,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
|
|
@@ -11,23 +11,23 @@
|
|
|
11
11
|
// Red doubles as --color-accent and Violet as --color-agent so the global
|
|
12
12
|
// system tokens always have a palette member to match; users can still pick
|
|
13
13
|
// either for their personal avatar.
|
|
14
|
-
// Ordered for the picker: red-family first (Red →
|
|
14
|
+
// Ordered for the picker: red-family first (Red → Rose → Orange),
|
|
15
15
|
// then earthy/green (Sand → Pistachio → Mint), cool middle (Teal → Sky → Slate),
|
|
16
16
|
// and purples/magenta last (Violet → Lilac → Orchid → Pink).
|
|
17
17
|
export const ACCENT_PALETTE = [
|
|
18
18
|
{ name: 'Red', color: '#FE3C3C' },
|
|
19
|
-
{ name: '
|
|
20
|
-
{ name: '
|
|
21
|
-
{ name: 'Sand', color: '#
|
|
22
|
-
{ name: 'Pistachio', color: '#
|
|
23
|
-
{ name: 'Mint', color: '#
|
|
19
|
+
{ name: 'Rose', color: '#C06A6A' },
|
|
20
|
+
{ name: 'Orange', color: '#CC7013' },
|
|
21
|
+
{ name: 'Sand', color: '#AB8630' },
|
|
22
|
+
{ name: 'Pistachio', color: '#5A9A08' },
|
|
23
|
+
{ name: 'Mint', color: '#369770' },
|
|
24
24
|
{ name: 'Teal', color: '#289795' },
|
|
25
|
-
{ name: 'Sky', color: '#
|
|
26
|
-
{ name: 'Slate', color: '#
|
|
27
|
-
{ name: 'Violet', color: '#
|
|
28
|
-
{ name: 'Lilac', color: '#
|
|
29
|
-
{ name: 'Orchid', color: '#
|
|
30
|
-
{ name: 'Pink', color: '#
|
|
25
|
+
{ name: 'Sky', color: '#4289C4' },
|
|
26
|
+
{ name: 'Slate', color: '#718599' },
|
|
27
|
+
{ name: 'Violet', color: '#7C7CD9' },
|
|
28
|
+
{ name: 'Lilac', color: '#B267F3' },
|
|
29
|
+
{ name: 'Orchid', color: '#B269C0' },
|
|
30
|
+
{ name: 'Pink', color: '#DC6CD4' },
|
|
31
31
|
];
|
|
32
32
|
/**
|
|
33
33
|
* Pick a deterministic default accent color for a new user, rotating
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accent-palette.js","sourceRoot":"","sources":["../../src/core/accent-palette.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,uEAAuE;AACvE,0EAA0E;AAC1E,4EAA4E;AAC5E,oCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"accent-palette.js","sourceRoot":"","sources":["../../src/core/accent-palette.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,uEAAuE;AACvE,0EAA0E;AAC1E,4EAA4E;AAC5E,oCAAoC;AACpC,kEAAkE;AAClE,iFAAiF;AACjF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC5C,EAAE,IAAI,EAAE,KAAK,EAAQ,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAO,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAO,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAO,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAO,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,KAAK,EAAQ,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,OAAO,EAAM,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,OAAO,EAAM,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,IAAI,EAAE,MAAM,EAAO,KAAK,EAAE,SAAS,EAAE;CACvC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,QAAwB;IAC9E,MAAM,aAAa,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,aAAa;QACzB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC;QACrE,CAAC,CAAC,cAAc,CAAC;IAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACxB,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -104,16 +104,16 @@ export declare const FieldDefinitionSchema: z.ZodObject<{
|
|
|
104
104
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
105
105
|
name: string;
|
|
106
106
|
required: boolean;
|
|
107
|
+
default?: unknown;
|
|
107
108
|
description?: string | undefined;
|
|
108
109
|
enum_values?: string[] | undefined;
|
|
109
|
-
default?: unknown;
|
|
110
110
|
}, {
|
|
111
111
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
112
112
|
name: string;
|
|
113
|
+
default?: unknown;
|
|
113
114
|
required?: boolean | undefined;
|
|
114
115
|
description?: string | undefined;
|
|
115
116
|
enum_values?: string[] | undefined;
|
|
116
|
-
default?: unknown;
|
|
117
117
|
}>;
|
|
118
118
|
export type FieldDefinition = z.infer<typeof FieldDefinitionSchema>;
|
|
119
119
|
/**
|
|
@@ -133,16 +133,16 @@ export declare const SchemaExtensionSchema: z.ZodObject<{
|
|
|
133
133
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
134
134
|
name: string;
|
|
135
135
|
required: boolean;
|
|
136
|
+
default?: unknown;
|
|
136
137
|
description?: string | undefined;
|
|
137
138
|
enum_values?: string[] | undefined;
|
|
138
|
-
default?: unknown;
|
|
139
139
|
}, {
|
|
140
140
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
141
141
|
name: string;
|
|
142
|
+
default?: unknown;
|
|
142
143
|
required?: boolean | undefined;
|
|
143
144
|
description?: string | undefined;
|
|
144
145
|
enum_values?: string[] | undefined;
|
|
145
|
-
default?: unknown;
|
|
146
146
|
}>, "many">>;
|
|
147
147
|
fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
148
148
|
name: z.ZodString;
|
|
@@ -155,16 +155,16 @@ export declare const SchemaExtensionSchema: z.ZodObject<{
|
|
|
155
155
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
156
156
|
name: string;
|
|
157
157
|
required: boolean;
|
|
158
|
+
default?: unknown;
|
|
158
159
|
description?: string | undefined;
|
|
159
160
|
enum_values?: string[] | undefined;
|
|
160
|
-
default?: unknown;
|
|
161
161
|
}, {
|
|
162
162
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
163
163
|
name: string;
|
|
164
|
+
default?: unknown;
|
|
164
165
|
required?: boolean | undefined;
|
|
165
166
|
description?: string | undefined;
|
|
166
167
|
enum_values?: string[] | undefined;
|
|
167
|
-
default?: unknown;
|
|
168
168
|
}>, "many">>;
|
|
169
169
|
body_template: z.ZodOptional<z.ZodString>;
|
|
170
170
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -174,17 +174,17 @@ export declare const SchemaExtensionSchema: z.ZodObject<{
|
|
|
174
174
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
175
175
|
name: string;
|
|
176
176
|
required: boolean;
|
|
177
|
+
default?: unknown;
|
|
177
178
|
description?: string | undefined;
|
|
178
179
|
enum_values?: string[] | undefined;
|
|
179
|
-
default?: unknown;
|
|
180
180
|
}[] | undefined;
|
|
181
181
|
fields?: {
|
|
182
182
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
183
183
|
name: string;
|
|
184
184
|
required: boolean;
|
|
185
|
+
default?: unknown;
|
|
185
186
|
description?: string | undefined;
|
|
186
187
|
enum_values?: string[] | undefined;
|
|
187
|
-
default?: unknown;
|
|
188
188
|
}[] | undefined;
|
|
189
189
|
body_template?: string | undefined;
|
|
190
190
|
}, {
|
|
@@ -193,18 +193,18 @@ export declare const SchemaExtensionSchema: z.ZodObject<{
|
|
|
193
193
|
additional_fields?: {
|
|
194
194
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
195
195
|
name: string;
|
|
196
|
+
default?: unknown;
|
|
196
197
|
required?: boolean | undefined;
|
|
197
198
|
description?: string | undefined;
|
|
198
199
|
enum_values?: string[] | undefined;
|
|
199
|
-
default?: unknown;
|
|
200
200
|
}[] | undefined;
|
|
201
201
|
fields?: {
|
|
202
202
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
203
203
|
name: string;
|
|
204
|
+
default?: unknown;
|
|
204
205
|
required?: boolean | undefined;
|
|
205
206
|
description?: string | undefined;
|
|
206
207
|
enum_values?: string[] | undefined;
|
|
207
|
-
default?: unknown;
|
|
208
208
|
}[] | undefined;
|
|
209
209
|
body_template?: string | undefined;
|
|
210
210
|
}>;
|
|
@@ -337,16 +337,16 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
337
337
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
338
338
|
name: string;
|
|
339
339
|
required: boolean;
|
|
340
|
+
default?: unknown;
|
|
340
341
|
description?: string | undefined;
|
|
341
342
|
enum_values?: string[] | undefined;
|
|
342
|
-
default?: unknown;
|
|
343
343
|
}, {
|
|
344
344
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
345
345
|
name: string;
|
|
346
|
+
default?: unknown;
|
|
346
347
|
required?: boolean | undefined;
|
|
347
348
|
description?: string | undefined;
|
|
348
349
|
enum_values?: string[] | undefined;
|
|
349
|
-
default?: unknown;
|
|
350
350
|
}>, "many">>;
|
|
351
351
|
fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
352
352
|
name: z.ZodString;
|
|
@@ -359,16 +359,16 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
359
359
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
360
360
|
name: string;
|
|
361
361
|
required: boolean;
|
|
362
|
+
default?: unknown;
|
|
362
363
|
description?: string | undefined;
|
|
363
364
|
enum_values?: string[] | undefined;
|
|
364
|
-
default?: unknown;
|
|
365
365
|
}, {
|
|
366
366
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
367
367
|
name: string;
|
|
368
|
+
default?: unknown;
|
|
368
369
|
required?: boolean | undefined;
|
|
369
370
|
description?: string | undefined;
|
|
370
371
|
enum_values?: string[] | undefined;
|
|
371
|
-
default?: unknown;
|
|
372
372
|
}>, "many">>;
|
|
373
373
|
body_template: z.ZodOptional<z.ZodString>;
|
|
374
374
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -378,17 +378,17 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
378
378
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
379
379
|
name: string;
|
|
380
380
|
required: boolean;
|
|
381
|
+
default?: unknown;
|
|
381
382
|
description?: string | undefined;
|
|
382
383
|
enum_values?: string[] | undefined;
|
|
383
|
-
default?: unknown;
|
|
384
384
|
}[] | undefined;
|
|
385
385
|
fields?: {
|
|
386
386
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
387
387
|
name: string;
|
|
388
388
|
required: boolean;
|
|
389
|
+
default?: unknown;
|
|
389
390
|
description?: string | undefined;
|
|
390
391
|
enum_values?: string[] | undefined;
|
|
391
|
-
default?: unknown;
|
|
392
392
|
}[] | undefined;
|
|
393
393
|
body_template?: string | undefined;
|
|
394
394
|
}, {
|
|
@@ -397,18 +397,18 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
397
397
|
additional_fields?: {
|
|
398
398
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
399
399
|
name: string;
|
|
400
|
+
default?: unknown;
|
|
400
401
|
required?: boolean | undefined;
|
|
401
402
|
description?: string | undefined;
|
|
402
403
|
enum_values?: string[] | undefined;
|
|
403
|
-
default?: unknown;
|
|
404
404
|
}[] | undefined;
|
|
405
405
|
fields?: {
|
|
406
406
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
407
407
|
name: string;
|
|
408
|
+
default?: unknown;
|
|
408
409
|
required?: boolean | undefined;
|
|
409
410
|
description?: string | undefined;
|
|
410
411
|
enum_values?: string[] | undefined;
|
|
411
|
-
default?: unknown;
|
|
412
412
|
}[] | undefined;
|
|
413
413
|
body_template?: string | undefined;
|
|
414
414
|
}>>>;
|
|
@@ -515,17 +515,17 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
515
515
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
516
516
|
name: string;
|
|
517
517
|
required: boolean;
|
|
518
|
+
default?: unknown;
|
|
518
519
|
description?: string | undefined;
|
|
519
520
|
enum_values?: string[] | undefined;
|
|
520
|
-
default?: unknown;
|
|
521
521
|
}[] | undefined;
|
|
522
522
|
fields?: {
|
|
523
523
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
524
524
|
name: string;
|
|
525
525
|
required: boolean;
|
|
526
|
+
default?: unknown;
|
|
526
527
|
description?: string | undefined;
|
|
527
528
|
enum_values?: string[] | undefined;
|
|
528
|
-
default?: unknown;
|
|
529
529
|
}[] | undefined;
|
|
530
530
|
body_template?: string | undefined;
|
|
531
531
|
}> | undefined;
|
|
@@ -582,18 +582,18 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
582
582
|
additional_fields?: {
|
|
583
583
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
584
584
|
name: string;
|
|
585
|
+
default?: unknown;
|
|
585
586
|
required?: boolean | undefined;
|
|
586
587
|
description?: string | undefined;
|
|
587
588
|
enum_values?: string[] | undefined;
|
|
588
|
-
default?: unknown;
|
|
589
589
|
}[] | undefined;
|
|
590
590
|
fields?: {
|
|
591
591
|
type: "string" | "number" | "boolean" | "enum" | "string[]";
|
|
592
592
|
name: string;
|
|
593
|
+
default?: unknown;
|
|
593
594
|
required?: boolean | undefined;
|
|
594
595
|
description?: string | undefined;
|
|
595
596
|
enum_values?: string[] | undefined;
|
|
596
|
-
default?: unknown;
|
|
597
597
|
}[] | undefined;
|
|
598
598
|
body_template?: string | undefined;
|
|
599
599
|
}> | undefined;
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Studiograph MCP server
|
|
2
|
+
* Studiograph MCP server (stdio transport)
|
|
3
3
|
*
|
|
4
4
|
* Creates a McpServer instance, registers all tools, and connects via stdio
|
|
5
5
|
* transport for integration with Claude Desktop and other MCP clients.
|
|
6
6
|
*
|
|
7
|
+
* Identity: requires STUDIOGRAPH_MCP_TOKEN to be set to a per-user API token
|
|
8
|
+
* (or a JWT). The token is resolved against the workspace's AuthService to
|
|
9
|
+
* produce the caller identity used by every tool's access control check.
|
|
10
|
+
* Fails closed — if the token is missing or invalid the process exits.
|
|
11
|
+
*
|
|
7
12
|
* NOTE: All logging uses console.error() — stdout is reserved for the
|
|
8
13
|
* JSON-RPC protocol messages and must not be written to directly.
|
|
9
14
|
*/
|
|
10
15
|
import { WorkspaceManager } from '../core/workspace-manager.js';
|
|
11
|
-
|
|
16
|
+
import { AuthService } from '../services/auth-service.js';
|
|
17
|
+
export declare function startMcpServer(workspaceManager: WorkspaceManager, authService: AuthService): Promise<void>;
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,28 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Studiograph MCP server
|
|
2
|
+
* Studiograph MCP server (stdio transport)
|
|
3
3
|
*
|
|
4
4
|
* Creates a McpServer instance, registers all tools, and connects via stdio
|
|
5
5
|
* transport for integration with Claude Desktop and other MCP clients.
|
|
6
6
|
*
|
|
7
|
+
* Identity: requires STUDIOGRAPH_MCP_TOKEN to be set to a per-user API token
|
|
8
|
+
* (or a JWT). The token is resolved against the workspace's AuthService to
|
|
9
|
+
* produce the caller identity used by every tool's access control check.
|
|
10
|
+
* Fails closed — if the token is missing or invalid the process exits.
|
|
11
|
+
*
|
|
7
12
|
* NOTE: All logging uses console.error() — stdout is reserved for the
|
|
8
13
|
* JSON-RPC protocol messages and must not be written to directly.
|
|
9
14
|
*/
|
|
10
15
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
16
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
17
|
import { registerTools } from './tools.js';
|
|
13
|
-
export async function startMcpServer(workspaceManager) {
|
|
18
|
+
export async function startMcpServer(workspaceManager, authService) {
|
|
19
|
+
const user = resolveStdioUser(authService);
|
|
20
|
+
if (!user) {
|
|
21
|
+
process.stderr.write('Studiograph MCP: STUDIOGRAPH_MCP_TOKEN is required.\n' +
|
|
22
|
+
'Generate a token with:\n' +
|
|
23
|
+
' curl -X POST http://<host>/api/auth/tokens \\\n' +
|
|
24
|
+
' -H "Content-Type: application/json" \\\n' +
|
|
25
|
+
' -b __sg_token=<your-jwt> \\\n' +
|
|
26
|
+
' -d \'{"name":"claude-desktop"}\'\n' +
|
|
27
|
+
'Then set STUDIOGRAPH_MCP_TOKEN=<token> in your Claude Desktop MCP config env.\n');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
14
30
|
const server = new McpServer({
|
|
15
31
|
name: 'studiograph',
|
|
16
32
|
version: '1.0.0',
|
|
17
33
|
});
|
|
18
|
-
registerTools(server, workspaceManager);
|
|
34
|
+
registerTools(server, workspaceManager, authService, { user });
|
|
19
35
|
const transport = new StdioServerTransport();
|
|
20
36
|
await server.connect(transport);
|
|
21
|
-
console.error(
|
|
37
|
+
console.error(`Studiograph MCP server ready (user: ${user.email})`);
|
|
22
38
|
// Keep the process alive — the transport closes when the client disconnects
|
|
23
39
|
process.on('SIGINT', async () => {
|
|
24
40
|
await server.close();
|
|
25
41
|
process.exit(0);
|
|
26
42
|
});
|
|
27
43
|
}
|
|
44
|
+
function resolveStdioUser(authService) {
|
|
45
|
+
const token = process.env.STUDIOGRAPH_MCP_TOKEN?.trim();
|
|
46
|
+
if (!token)
|
|
47
|
+
return null;
|
|
48
|
+
return authService.verifyApiToken(token) ?? authService.verifyToken(token);
|
|
49
|
+
}
|
|
28
50
|
//# sourceMappingURL=server.js.map
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,gBAAkC,EAClC,WAAwB;IAExB,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uDAAuD;YACvD,0BAA0B;YAC1B,mDAAmD;YACnD,iDAAiD;YACjD,sCAAsC;YACtC,2CAA2C;YAC3C,iFAAiF,CAClF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAK,aAAa;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAEpE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAwB;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC"}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -5,11 +5,20 @@
|
|
|
5
5
|
* methods — no new business logic. Results are returned as JSON text so the
|
|
6
6
|
* MCP client (Claude Desktop) can process structured data.
|
|
7
7
|
*
|
|
8
|
+
* Every tool enforces per-user access control via `services/access-control.ts`.
|
|
9
|
+
* Callers (the HTTP /mcp route, the stdio MCP server) must resolve a user
|
|
10
|
+
* identity before registering tools — `registerTools` requires a user in its
|
|
11
|
+
* `McpAccessContext` argument so there is no anonymous MCP path.
|
|
12
|
+
*
|
|
8
13
|
* Note: `inputSchema` is cast to `any` at each call site because the MCP SDK's
|
|
9
14
|
* ZodRawShapeCompat type does not accept ZodObject in TypeScript's strict mode.
|
|
10
15
|
* Runtime schema validation is handled correctly by the SDK regardless.
|
|
11
16
|
*/
|
|
12
17
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
13
18
|
import { WorkspaceManager } from '../core/workspace-manager.js';
|
|
14
|
-
import type { AuthService } from '../services/auth-service.js';
|
|
15
|
-
|
|
19
|
+
import type { AuthService, AuthUser } from '../services/auth-service.js';
|
|
20
|
+
/** The resolved caller identity for an MCP session. */
|
|
21
|
+
export interface McpAccessContext {
|
|
22
|
+
user: AuthUser;
|
|
23
|
+
}
|
|
24
|
+
export declare function registerTools(server: McpServer, wm: WorkspaceManager, authService: AuthService, ctx: McpAccessContext): void;
|