huly-mcp-selfhost 3.2.0 → 3.4.0
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/.env.example +10 -0
- package/CHANGELOG.md +222 -0
- package/README.md +247 -351
- package/dist/connection.d.ts +22 -0
- package/dist/connection.js +78 -5
- package/dist/connection.js.map +1 -1
- package/dist/guard.d.ts +11 -0
- package/dist/guard.js +13 -0
- package/dist/guard.js.map +1 -1
- package/dist/guides/costs.md +2 -1
- package/dist/guides/workflow.md +2 -1
- package/dist/http.d.ts +22 -0
- package/dist/http.js +213 -0
- package/dist/http.js.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/registry.js +3 -0
- package/dist/registry.js.map +1 -1
- package/dist/resources.d.ts +7 -0
- package/dist/resources.js +43 -0
- package/dist/resources.js.map +1 -1
- package/dist/schemas.d.ts +24 -0
- package/dist/schemas.js +16 -5
- package/dist/schemas.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +12 -4
- package/dist/server.js.map +1 -1
- package/dist/tools/diagnostics.d.ts +17 -0
- package/dist/tools/diagnostics.js +133 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/inbox.d.ts +16 -0
- package/dist/tools/inbox.js +64 -1
- package/dist/tools/inbox.js.map +1 -1
- package/dist/tools/issues.d.ts +2 -0
- package/dist/tools/issues.js +10 -0
- package/dist/tools/issues.js.map +1 -1
- package/package.json +17 -8
- package/scripts/copy-guides.js +18 -0
- package/scripts/setup.js +89 -33
package/dist/connection.d.ts
CHANGED
|
@@ -16,6 +16,12 @@ export interface WorkspaceConnection {
|
|
|
16
16
|
wsToken: string;
|
|
17
17
|
workspaceUuid: string;
|
|
18
18
|
}
|
|
19
|
+
/** Claims of a Huly JWT, read without verifying it (the account service verifies). */
|
|
20
|
+
export declare function tokenClaims(token: string | undefined): {
|
|
21
|
+
workspace?: string;
|
|
22
|
+
exp?: number;
|
|
23
|
+
apiTokenId?: string;
|
|
24
|
+
} | undefined;
|
|
19
25
|
interface OpenConnection {
|
|
20
26
|
client: TxOperations;
|
|
21
27
|
close: () => Promise<void>;
|
|
@@ -63,6 +69,15 @@ export declare class WorkspaceConnectionManager {
|
|
|
63
69
|
* HULY_TRANSACTOR_URL replaces it, e.g. ws://huly/_transactor or ws://transactor:3333.
|
|
64
70
|
*/
|
|
65
71
|
export declare function transactorEndpoint(endpoint: string, override: string | undefined): string;
|
|
72
|
+
/** Runs fn (and everything it starts) with this manager instead of the process-wide one. */
|
|
73
|
+
export declare function withConnectionManager<T>(m: WorkspaceConnectionManager, fn: () => T): T;
|
|
74
|
+
/** A manager for one set of credentials; URLs and the transactor override come from the environment. */
|
|
75
|
+
export declare function createConnectionManager(creds: {
|
|
76
|
+
email?: string;
|
|
77
|
+
password?: string;
|
|
78
|
+
token?: string;
|
|
79
|
+
workspace?: string;
|
|
80
|
+
}, env?: NodeJS.ProcessEnv): WorkspaceConnectionManager;
|
|
66
81
|
export declare function getConnectionManager(): WorkspaceConnectionManager;
|
|
67
82
|
/** Replace the process-wide manager (tests). */
|
|
68
83
|
export declare function setConnectionManager(next: WorkspaceConnectionManager | null): void;
|
|
@@ -74,5 +89,12 @@ export declare function getWorkspaceInfo(workspace?: string): Promise<{
|
|
|
74
89
|
wsToken: string;
|
|
75
90
|
workspaceUuid: string;
|
|
76
91
|
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Connect in the background right after start-up, so the first tool call does not pay for the
|
|
94
|
+
* account login, workspace discovery and the workspace model load (measured 4–12 s on a
|
|
95
|
+
* self-hosted instance). With one workspace (pinned or the only one) its connection is opened
|
|
96
|
+
* too. Never throws: a failure here is reported by the first real call. HULY_PREWARM=0 turns it off.
|
|
97
|
+
*/
|
|
98
|
+
export declare function prewarm(env?: NodeJS.ProcessEnv): Promise<'off' | 'no-credentials' | 'account' | 'workspace' | 'failed'>;
|
|
77
99
|
export declare function closeConnection(): Promise<void>;
|
|
78
100
|
export {};
|
package/dist/connection.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkspaceConnectionManager = void 0;
|
|
4
|
+
exports.tokenClaims = tokenClaims;
|
|
4
5
|
exports.transactorEndpoint = transactorEndpoint;
|
|
6
|
+
exports.withConnectionManager = withConnectionManager;
|
|
7
|
+
exports.createConnectionManager = createConnectionManager;
|
|
5
8
|
exports.getConnectionManager = getConnectionManager;
|
|
6
9
|
exports.setConnectionManager = setConnectionManager;
|
|
7
10
|
exports.listWorkspaces = listWorkspaces;
|
|
@@ -9,10 +12,26 @@ exports.getWorkspace = getWorkspace;
|
|
|
9
12
|
exports.getConnection = getConnection;
|
|
10
13
|
exports.getAccountClient = getAccountClient;
|
|
11
14
|
exports.getWorkspaceInfo = getWorkspaceInfo;
|
|
15
|
+
exports.prewarm = prewarm;
|
|
12
16
|
exports.closeConnection = closeConnection;
|
|
17
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
13
18
|
const account_client_1 = require("@hcengineering/account-client");
|
|
14
19
|
const core_1 = require("@hcengineering/core");
|
|
15
20
|
const server_client_1 = require("@hcengineering/server-client");
|
|
21
|
+
/** Claims of a Huly JWT, read without verifying it (the account service verifies). */
|
|
22
|
+
function tokenClaims(token) {
|
|
23
|
+
const part = token?.split('.')[1];
|
|
24
|
+
if (part == null)
|
|
25
|
+
return undefined;
|
|
26
|
+
try {
|
|
27
|
+
const claims = JSON.parse(Buffer.from(part, 'base64url').toString('utf8'));
|
|
28
|
+
return { workspace: claims.workspace, exp: typeof claims.exp === 'number' ? claims.exp : undefined, apiTokenId: claims.extra?.apiTokenId };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const TOKEN_HELP = 'API token: create a new one in Huly → Settings → API tokens. Account token: npx huly-mcp-selfhost setup.';
|
|
16
35
|
async function defaultOpenConnection(endpoint, token, socialId) {
|
|
17
36
|
const raw = await (0, server_client_1.createClient)(endpoint, token);
|
|
18
37
|
return { client: new core_1.TxOperations(raw, socialId), close: async () => await raw.close() };
|
|
@@ -135,16 +154,22 @@ class WorkspaceConnectionManager {
|
|
|
135
154
|
async login() {
|
|
136
155
|
const { accountsUrl, email, password, token } = this.opts;
|
|
137
156
|
if (token != null && token !== '') {
|
|
138
|
-
// Token auth —
|
|
157
|
+
// Token auth — SSO accounts (Google/GitHub) and managed API tokens.
|
|
158
|
+
const claims = tokenClaims(token);
|
|
159
|
+
if (claims?.exp != null && claims.exp * 1000 <= Date.now()) {
|
|
160
|
+
throw new Error(`HULY_TOKEN expired on ${new Date(claims.exp * 1000).toISOString().slice(0, 10)}. ${TOKEN_HELP}`);
|
|
161
|
+
}
|
|
139
162
|
const accountClient = this.createAccountClient(accountsUrl, token);
|
|
140
|
-
const info = await accountClient.getLoginInfoByToken()
|
|
163
|
+
const info = await accountClient.getLoginInfoByToken().catch((e) => {
|
|
164
|
+
throw new Error(`HULY_TOKEN was refused (${e.message}) — invalid, expired or revoked. ${TOKEN_HELP}`);
|
|
165
|
+
});
|
|
141
166
|
if (info == null) {
|
|
142
|
-
throw new Error(
|
|
167
|
+
throw new Error(`HULY_TOKEN is invalid, expired or revoked. ${TOKEN_HELP}`);
|
|
143
168
|
}
|
|
144
169
|
if (!('socialId' in info) || info.socialId == null) {
|
|
145
170
|
throw new Error('Token auth: no socialId returned for HULY_TOKEN.');
|
|
146
171
|
}
|
|
147
|
-
const session = { accountClient, socialId: info.socialId };
|
|
172
|
+
const session = { accountClient, socialId: info.socialId, apiToken: claims?.apiTokenId != null };
|
|
148
173
|
if ('endpoint' in info && info.endpoint != null && info.token != null) {
|
|
149
174
|
// Workspace-scoped token: its own workspace is usable directly.
|
|
150
175
|
session.preselected = {
|
|
@@ -169,7 +194,12 @@ class WorkspaceConnectionManager {
|
|
|
169
194
|
const session = await this.getSession();
|
|
170
195
|
let all;
|
|
171
196
|
try {
|
|
172
|
-
|
|
197
|
+
// A managed API token is created for one workspace. The account service would hand out
|
|
198
|
+
// tokens for the account's other workspaces too; this server keeps the promise instead.
|
|
199
|
+
if (session.apiToken === true && session.preselected !== undefined)
|
|
200
|
+
all = [session.preselected.workspace];
|
|
201
|
+
else
|
|
202
|
+
all = (await session.accountClient.getUserWorkspaces()).map(toRef);
|
|
173
203
|
}
|
|
174
204
|
catch (err) {
|
|
175
205
|
// A workspace-scoped HULY_TOKEN may not be allowed to enumerate — fall back to its own workspace.
|
|
@@ -231,7 +261,27 @@ function transactorEndpoint(endpoint, override) {
|
|
|
231
261
|
}
|
|
232
262
|
// ── Process-wide manager (configured from env) ──────────────────────────────
|
|
233
263
|
let manager = null;
|
|
264
|
+
// HTTP mode: every session can bring its own Huly login; its tool calls run inside this scope.
|
|
265
|
+
const scoped = new node_async_hooks_1.AsyncLocalStorage();
|
|
266
|
+
/** Runs fn (and everything it starts) with this manager instead of the process-wide one. */
|
|
267
|
+
function withConnectionManager(m, fn) {
|
|
268
|
+
return scoped.run(m, fn);
|
|
269
|
+
}
|
|
270
|
+
/** A manager for one set of credentials; URLs and the transactor override come from the environment. */
|
|
271
|
+
function createConnectionManager(creds, env = process.env) {
|
|
272
|
+
return new WorkspaceConnectionManager({
|
|
273
|
+
accountsUrl: env.HULY_ACCOUNTS_URL ?? 'https://account.huly.app',
|
|
274
|
+
email: creds.email,
|
|
275
|
+
password: creds.password,
|
|
276
|
+
token: creds.token,
|
|
277
|
+
restrictTo: creds.workspace,
|
|
278
|
+
transactorUrl: env.HULY_TRANSACTOR_URL
|
|
279
|
+
});
|
|
280
|
+
}
|
|
234
281
|
function getConnectionManager() {
|
|
282
|
+
const own = scoped.getStore();
|
|
283
|
+
if (own != null)
|
|
284
|
+
return own;
|
|
235
285
|
if (manager === null) {
|
|
236
286
|
manager = new WorkspaceConnectionManager({
|
|
237
287
|
accountsUrl: process.env.HULY_ACCOUNTS_URL ?? 'https://account.huly.app',
|
|
@@ -264,6 +314,29 @@ async function getWorkspaceInfo(workspace) {
|
|
|
264
314
|
const { wsToken, workspaceUuid } = await getWorkspace(workspace);
|
|
265
315
|
return { wsToken, workspaceUuid };
|
|
266
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Connect in the background right after start-up, so the first tool call does not pay for the
|
|
319
|
+
* account login, workspace discovery and the workspace model load (measured 4–12 s on a
|
|
320
|
+
* self-hosted instance). With one workspace (pinned or the only one) its connection is opened
|
|
321
|
+
* too. Never throws: a failure here is reported by the first real call. HULY_PREWARM=0 turns it off.
|
|
322
|
+
*/
|
|
323
|
+
async function prewarm(env = process.env) {
|
|
324
|
+
if (['0', 'false', 'no', 'off'].includes(String(env.HULY_PREWARM ?? '').trim().toLowerCase()))
|
|
325
|
+
return 'off';
|
|
326
|
+
const set = (v) => (v ?? '').trim() !== '';
|
|
327
|
+
if (!set(env.HULY_TOKEN) && !(set(env.HULY_EMAIL) && set(env.HULY_PASSWORD)))
|
|
328
|
+
return 'no-credentials';
|
|
329
|
+
try {
|
|
330
|
+
const workspaces = await listWorkspaces();
|
|
331
|
+
if (workspaces.length !== 1)
|
|
332
|
+
return 'account';
|
|
333
|
+
await getWorkspace();
|
|
334
|
+
return 'workspace';
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return 'failed';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
267
340
|
async function closeConnection() {
|
|
268
341
|
if (manager !== null)
|
|
269
342
|
await manager.closeAll();
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAoD;AACpD,kEAAoG;AACpG,8CAA4G;AAC5G,gEAA2D;AA2C3D,sFAAsF;AACtF,qBAA6B,KAAyB;IACpD,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,SAAS,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAA;IAC5I,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAA;IAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,GAAG,0GAA0G,CAAA;AAoB7H,KAAK,UAAU,qBAAqB,CAAE,QAAgB,EAAE,KAAa,EAAE,QAAkB;IACvF,MAAM,GAAG,GAAW,MAAM,IAAA,4BAAY,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACvD,OAAO,EAAE,MAAM,EAAE,IAAI,mBAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE,CAAA;AAC1F,CAAC;AAED,SAAS,KAAK,CAAE,EAA2B;IACzC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QACrB,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG;QACvB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QACnD,UAAU,EAAE,EAAE,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAE,EAAgB;IACjC,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA;AAC/D,CAAC;AAED;IAUgC,IAAI;IATjB,mBAAmB,CAAwD;IAC3E,cAAc,CAAkF;IACzG,OAAO,GAAmC,IAAI,CAAA;IAC9C,UAAU,GAAmC,IAAI,CAAA;IACzD,uGAAuG;IAC/F,UAAU,GAAG,CAAC,CAAA;IACtB,8FAA8F;IAC7E,WAAW,GAAG,IAAI,GAAG,EAAyE,CAAA;IAE/G,YAA8B,IAA8B;oBAA9B,IAAI;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,0BAAmB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACxG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,qBAAqB,CAAA;IACpE,CAAC;IAED,kGAAkG;IAClG,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAA;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO;gBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAE,KAAc;QACpC,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAE3C,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzC,6EAA6E;YAC7E,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAA;YAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;YACxG,MAAM,IAAI,KAAK,CACb,iGAAiG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtI,CAAA;QACH,CAAC;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,0EAA0E;YAC1E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YACtB,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;YACvC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,iBAAiB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAA;QAC/G,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,YAAY,CAAE,KAAc;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACpF,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACtC,MAAM,OAAO,GAAG,OAAO,CAAA;YACvB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAC1G,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,OAAO,CAAA;QACxC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACpF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7G,CAAC;IAEO,KAAK,CAAE,SAAyB,EAAE,KAAa;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACzC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAA;QACrG,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAA;QACvE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,gDAAgD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjJ,CAAC;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAA;IAC3B,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAEzD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAClC,oEAAoE;YACpE,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YACjC,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC,CAAA;YACnH,CAAC;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAClE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBAC1E,MAAM,IAAI,KAAK,CAAC,2BAA4B,CAAW,CAAC,OAAO,oCAAoC,UAAU,EAAE,CAAC,CAAA;YAClH,CAAC,CAAC,CAAA;YACF,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAA;YAC7E,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACrE,CAAC;YACD,MAAM,OAAO,GAAmB,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,CAAA;YAChH,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACtE,gEAAgE;gBAChE,OAAO,CAAC,WAAW,GAAG;oBACpB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;oBAC5F,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB,CAAA;YACH,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAA;QACrH,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACpF,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACnG,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACtF,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAA;IAChH,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvC,IAAI,GAAmB,CAAA;QACvB,IAAI,CAAC;YACH,uFAAuF;YACvF,wFAAwF;YACxF,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;gBAAE,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;;gBACpG,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kGAAkG;YAClG,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;gBAAE,MAAM,GAAG,CAAA;YAChD,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAA;QACvC,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE;YAAE,OAAO,GAAG,CAAA;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,mCAAmC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAA;QAC7H,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAE,EAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAEvC,IAAI,QAAgB,CAAA;QACpB,IAAI,OAAe,CAAA;QACnB,IAAI,aAAqB,CAAA;QACzB,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YACxF,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;YACpD,aAAa,GAAG,EAAE,CAAC,IAAI,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;YAC9E,IAAI,MAAM,EAAE,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,GAAG,gCAAgC,CAAC,CAAA;YACvE,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,yBAAyB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,GAAG,CAAC,CAAA;YACtH,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC1B,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;YACtB,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;QACrD,CAAC;QAED,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAChE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QACxF,OAAO;YACL,SAAS,EAAE,EAAE;YACb,MAAM;YACN,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;YACvE,OAAO;YACP,aAAa;YACb,KAAK;SACN,CAAA;IACH,CAAC;CACF;;AAED;;;;GAIG;AACH,4BAAoC,QAAgB,EAAE,QAA4B;IAChF,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC1B,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACjE,CAAC;AAED,+EAA+E;AAE/E,IAAI,OAAO,GAAsC,IAAI,CAAA;AACrD,+FAA+F;AAC/F,MAAM,MAAM,GAAG,IAAI,oCAAiB,EAA8B,CAAA;AAElE,4FAA4F;AAC5F,+BAA0C,CAA6B,EAAE,EAAW;IAClF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED,wGAAwG;AACxG,iCAAyC,KAAgF,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC7J,OAAO,IAAI,0BAA0B,CAAC;QACpC,WAAW,EAAE,GAAG,CAAC,iBAAiB,IAAI,0BAA0B;QAChE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,aAAa,EAAE,GAAG,CAAC,mBAAmB;KACvC,CAAC,CAAA;AACJ,CAAC;AAED;IACE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC7B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,GAAG,CAAA;IAC3B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,IAAI,0BAA0B,CAAC;YACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,0BAA0B;YACxE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YAC7B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YACnC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YAC7B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACtC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;SAC/C,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gDAAgD;AAChD,8BAAsC,IAAuC;IAC3E,OAAO,GAAG,IAAI,CAAA;AAChB,CAAC;AAEM,KAAK;IACV,OAAO,MAAM,oBAAoB,EAAE,CAAC,cAAc,EAAE,CAAA;AACtD,CAAC;AAEM,KAAK,uBAAwB,SAAkB;IACpD,OAAO,MAAM,oBAAoB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAC7D,CAAC;AAEM,KAAK,wBAAyB,SAAkB;IACrD,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;AAC/C,CAAC;AAEM,KAAK,2BAA4B,SAAkB;IACxD,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAA;AACtD,CAAC;AAEM,KAAK,2BAA4B,SAAkB;IACxD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAA;IAChE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AACnC,CAAC;AAED;;;;;GAKG;AACI,KAAK,kBAAmB,GAAG,GAAsB,OAAO,CAAC,GAAG;IACjE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3G,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACvE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAAE,OAAO,gBAAgB,CAAA;IACrG,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAA;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QAC7C,MAAM,YAAY,EAAE,CAAA;QACpB,OAAO,WAAW,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAEM,KAAK;IACV,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;AAChD,CAAC"}
|
package/dist/guard.d.ts
CHANGED
|
@@ -11,6 +11,17 @@ export declare function audit(path: string | undefined, tool: ToolDef, args: unk
|
|
|
11
11
|
}): void;
|
|
12
12
|
/** Deletes and bulk/structural changes that are hard to undo. */
|
|
13
13
|
export declare function isRisky(name: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* MCP tool annotations: reads are read-only; deletes, removals and the risky tools above are
|
|
16
|
+
* destructive; every other change (create, add, update, set, …) is marked non-destructive —
|
|
17
|
+
* the MCP default for a write tool is "destructive", which would over-warn.
|
|
18
|
+
* Off by default (HULY_ANNOTATIONS=1): they add ~16% to tools/list in every session.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toolAnnotations(tool: ToolDef): {
|
|
21
|
+
title: string;
|
|
22
|
+
readOnlyHint?: boolean;
|
|
23
|
+
destructiveHint?: boolean;
|
|
24
|
+
};
|
|
14
25
|
export type ConfirmMode = 'auto' | 'off' | 'strict';
|
|
15
26
|
export declare function parseConfirmMode(value: string | undefined): ConfirmMode;
|
|
16
27
|
/** What the confirm callback can do with the connected client. */
|
package/dist/guard.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.parseWriteProjects = parseWriteProjects;
|
|
|
6
6
|
exports.assertWriteAllowed = assertWriteAllowed;
|
|
7
7
|
exports.audit = audit;
|
|
8
8
|
exports.isRisky = isRisky;
|
|
9
|
+
exports.toolAnnotations = toolAnnotations;
|
|
9
10
|
exports.parseConfirmMode = parseConfirmMode;
|
|
10
11
|
exports.describeCall = describeCall;
|
|
11
12
|
exports.elicitationAsker = elicitationAsker;
|
|
@@ -82,6 +83,18 @@ const RISKY = new Set(['bulk_update_issues', 'move_issue', 'generic_update', 'ge
|
|
|
82
83
|
function isRisky(name) {
|
|
83
84
|
return name.startsWith('delete_') || RISKY.has(name);
|
|
84
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* MCP tool annotations: reads are read-only; deletes, removals and the risky tools above are
|
|
88
|
+
* destructive; every other change (create, add, update, set, …) is marked non-destructive —
|
|
89
|
+
* the MCP default for a write tool is "destructive", which would over-warn.
|
|
90
|
+
* Off by default (HULY_ANNOTATIONS=1): they add ~16% to tools/list in every session.
|
|
91
|
+
*/
|
|
92
|
+
function toolAnnotations(tool) {
|
|
93
|
+
const title = tool.name.replace(/_/g, ' ').replace(/^./, (c) => c.toUpperCase());
|
|
94
|
+
if (!isMutation(tool))
|
|
95
|
+
return { title, readOnlyHint: true };
|
|
96
|
+
return { title, destructiveHint: isRisky(tool.name) || /^(remove|revoke)_/.test(tool.name) };
|
|
97
|
+
}
|
|
85
98
|
function parseConfirmMode(value) {
|
|
86
99
|
const v = (value ?? 'auto').trim().toLowerCase();
|
|
87
100
|
if (v === 'auto' || v === 'off' || v === 'strict')
|
package/dist/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/guides/costs.md
CHANGED
|
@@ -12,12 +12,13 @@ Every Huly call costs a round trip and its output stays in context. Aim for **on
|
|
|
12
12
|
| Everything about PROJ-12 before working on it | `get_issue_context` | ~1.3k | `get_issue` + `list_sub_issues` + `list_comments` + relations (4+ calls) |
|
|
13
13
|
| Status/assignee of PROJ-12 | `get_issue` | ~0.4k | `get_issue_context` |
|
|
14
14
|
| What changed? | `changes_since` with `projectIdentifiers` and a short `since` | — | whole workspace for 7d: ~8k |
|
|
15
|
+
| Inbox housekeeping for one object (pin, hide, unread, follow) | `manage_notifications` | small | several updates |
|
|
15
16
|
| What needs my attention? | `triage_inbox` with a small `limit` | ~4k at 10 | `list_notifications` + `get_issue` per item |
|
|
16
17
|
| What's in release v1.2? | `release_notes` | ~2k | `list_issues milestoneLabel=…` + reading every issue |
|
|
17
18
|
| Find issues about X | `search_issues` | ~2k | `list_issues status=all` and scanning |
|
|
18
19
|
| Find anything (docs, chat, issues) | `search` | ~2.5k | several list calls |
|
|
19
20
|
|
|
20
|
-
**Narrow lists with filters, not by reading them:** `list_issues` takes `status` (`open` default, `all`, or a name), `assignee` (`null` = unassigned), `milestoneLabel`, `componentLabel`, `labelName`, `parentIdentifier` (`null` = top level) and `limit`.
|
|
21
|
+
**Narrow lists with filters, not by reading them:** `list_issues` takes `status` (`open` default, `all`, or a name), `assignee` (`null` = unassigned), `milestoneLabel`, `componentLabel`, `labelName`, `parentIdentifier` (`null` = top level), `title` (contains text), `due` (`overdue`, `set`, `none`) and `limit`.
|
|
21
22
|
|
|
22
23
|
**Avoid** `query_documents` / generic tools when a specific tool exists: one issue there is ~1.8k raw fields vs ~0.4k from `get_issue`. Use them only for classes without a tool.
|
|
23
24
|
|
package/dist/guides/workflow.md
CHANGED
|
@@ -19,7 +19,7 @@ Keep Huly current as you work, in the same turn as the action. Every call costs
|
|
|
19
19
|
| Everything about PROJ-12 | `get_issue_context` (just status/assignee: `get_issue`) |
|
|
20
20
|
| Find something | `search_issues`, `search` — not `list_issues status=all` |
|
|
21
21
|
|
|
22
|
-
Narrow lists with filters (`status`, `assignee`, `milestoneLabel`, `componentLabel`, `parentIdentifier`, `limit`). More questions with measured sizes: [costs.md](costs.md).
|
|
22
|
+
Narrow lists with filters (`status`, `assignee`, `milestoneLabel`, `componentLabel`, `parentIdentifier`, `title`, `due: overdue`, `limit`). More questions with measured sizes: [costs.md](costs.md).
|
|
23
23
|
|
|
24
24
|
## 2. Pick up and hand back
|
|
25
25
|
|
|
@@ -54,4 +54,5 @@ Narrow lists with filters (`status`, `assignee`, `milestoneLabel`, `componentLab
|
|
|
54
54
|
- Bulk changes, `move_issue`, deletes: show what will change first.
|
|
55
55
|
- GitHub-synced projects: every change appears on GitHub too; don't cross-post.
|
|
56
56
|
- `HULY_WRITE_PROJECTS` refusals: tell the user, don't work around them.
|
|
57
|
+
- Huly calls fail with login/connection errors: run `check_setup` and show the user what it says.
|
|
57
58
|
- A tool you need is missing: it is in a disabled toolset — `enable_toolsets` if available, otherwise tell the user which toolset to enable ([features.md](features.md)).
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import { type WorkspaceConnectionManager } from './connection';
|
|
3
|
+
export interface HttpOptions {
|
|
4
|
+
port: number;
|
|
5
|
+
host: string;
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
/** Tests: build the manager for a set of credentials. */
|
|
8
|
+
createManager?: (creds: Credentials) => WorkspaceConnectionManager;
|
|
9
|
+
idleMs?: number;
|
|
10
|
+
log?: (line: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export interface Credentials {
|
|
13
|
+
email?: string;
|
|
14
|
+
password?: string;
|
|
15
|
+
token?: string;
|
|
16
|
+
workspace?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Credentials sent by the client, if any. */
|
|
19
|
+
export declare function headerCredentials(req: http.IncomingMessage): Credentials | undefined;
|
|
20
|
+
export declare function allowedHosts(value: string | undefined, port: number): string[] | undefined;
|
|
21
|
+
export declare function startHttpServer(opts: HttpOptions): http.Server;
|
|
22
|
+
export declare function runHttp(argv: string[]): Promise<void>;
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.headerCredentials = headerCredentials;
|
|
7
|
+
exports.allowedHosts = allowedHosts;
|
|
8
|
+
exports.startHttpServer = startHttpServer;
|
|
9
|
+
exports.runHttp = runHttp;
|
|
10
|
+
// `huly-mcp-selfhost http`: the MCP server over Streamable HTTP, for teams and remote clients.
|
|
11
|
+
//
|
|
12
|
+
// One MCP session per client. A session either brings its own Huly login in headers
|
|
13
|
+
// (X-Huly-Token, or X-Huly-Email + X-Huly-Password; optional X-Huly-Workspace) or uses the
|
|
14
|
+
// server's own credentials (HULY_* env) — the latter only behind MCP_AUTH_TOKEN, so an open
|
|
15
|
+
// port never acts as the server's account. Each session keeps its connections; idle sessions close.
|
|
16
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
17
|
+
const node_crypto_1 = require("node:crypto");
|
|
18
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
19
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
20
|
+
const server_1 = require("./server");
|
|
21
|
+
const connection_1 = require("./connection");
|
|
22
|
+
const MAX_BODY = 4 * 1024 * 1024;
|
|
23
|
+
const header = (req, name) => {
|
|
24
|
+
const v = req.headers[name];
|
|
25
|
+
const s = Array.isArray(v) ? v[0] : v;
|
|
26
|
+
return s != null && s.trim() !== '' ? s.trim() : undefined;
|
|
27
|
+
};
|
|
28
|
+
/** Credentials sent by the client, if any. */
|
|
29
|
+
function headerCredentials(req) {
|
|
30
|
+
const token = header(req, 'x-huly-token');
|
|
31
|
+
const email = header(req, 'x-huly-email');
|
|
32
|
+
const password = header(req, 'x-huly-password');
|
|
33
|
+
const workspace = header(req, 'x-huly-workspace');
|
|
34
|
+
if (token != null)
|
|
35
|
+
return { token, workspace };
|
|
36
|
+
if (email != null || password != null) {
|
|
37
|
+
if (email == null || password == null)
|
|
38
|
+
throw new HttpError(400, 'Send both X-Huly-Email and X-Huly-Password (or X-Huly-Token).');
|
|
39
|
+
return { email, password, workspace };
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
class HttpError extends Error {
|
|
44
|
+
status;
|
|
45
|
+
constructor(status, message) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.status = status;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function bearerOk(req, expected) {
|
|
51
|
+
const got = /^Bearer\s+(.+)$/i.exec(header(req, 'authorization') ?? '')?.[1] ?? '';
|
|
52
|
+
const a = Buffer.from(got);
|
|
53
|
+
const b = Buffer.from(expected);
|
|
54
|
+
return a.length === b.length && (0, node_crypto_1.timingSafeEqual)(a, b);
|
|
55
|
+
}
|
|
56
|
+
async function readJson(req) {
|
|
57
|
+
const chunks = [];
|
|
58
|
+
let size = 0;
|
|
59
|
+
for await (const chunk of req) {
|
|
60
|
+
size += chunk.length;
|
|
61
|
+
if (size > MAX_BODY)
|
|
62
|
+
throw new HttpError(413, 'Request body too large.');
|
|
63
|
+
chunks.push(chunk);
|
|
64
|
+
}
|
|
65
|
+
if (size === 0)
|
|
66
|
+
return undefined;
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
throw new HttpError(400, 'Body is not valid JSON.');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function sendError(res, status, message) {
|
|
75
|
+
if (res.headersSent)
|
|
76
|
+
return;
|
|
77
|
+
res.writeHead(status, { 'content-type': 'application/json' });
|
|
78
|
+
res.end(JSON.stringify({ jsonrpc: '2.0', error: { code: -32000, message }, id: null }));
|
|
79
|
+
}
|
|
80
|
+
function allowedHosts(value, port) {
|
|
81
|
+
const hosts = (value ?? '').split(',').map((h) => h.trim()).filter((h) => h !== '');
|
|
82
|
+
if (hosts.length === 0)
|
|
83
|
+
return undefined;
|
|
84
|
+
const all = [...hosts, 'localhost', '127.0.0.1'];
|
|
85
|
+
return [...new Set(all.flatMap((h) => h.includes(':') ? [h] : [h, `${h}:${port}`]))];
|
|
86
|
+
}
|
|
87
|
+
function startHttpServer(opts) {
|
|
88
|
+
const env = opts.env;
|
|
89
|
+
const log = opts.log ?? ((line) => { console.error(`huly-mcp http: ${line}`); });
|
|
90
|
+
const authToken = (env.MCP_AUTH_TOKEN ?? '').trim();
|
|
91
|
+
const serverCreds = (env.HULY_TOKEN ?? '') !== '' || ((env.HULY_EMAIL ?? '') !== '' && (env.HULY_PASSWORD ?? '') !== '');
|
|
92
|
+
const sharedAllowed = serverCreds && authToken !== '';
|
|
93
|
+
const make = opts.createManager ?? ((c) => (0, connection_1.createConnectionManager)(c, env));
|
|
94
|
+
const hosts = allowedHosts(env.MCP_ALLOWED_HOSTS, opts.port);
|
|
95
|
+
const sessions = new Map();
|
|
96
|
+
if (serverCreds && authToken === '')
|
|
97
|
+
log('the server has its own Huly credentials but MCP_AUTH_TOKEN is not set — they are not used; clients must send their own (X-Huly-Token or X-Huly-Email/X-Huly-Password).');
|
|
98
|
+
const closeSession = async (id) => {
|
|
99
|
+
const s = sessions.get(id);
|
|
100
|
+
if (s == null)
|
|
101
|
+
return;
|
|
102
|
+
sessions.delete(id);
|
|
103
|
+
await s.transport.close().catch(() => { });
|
|
104
|
+
if (s.own)
|
|
105
|
+
await s.manager.closeAll().catch(() => { });
|
|
106
|
+
};
|
|
107
|
+
const idleMs = opts.idleMs ?? 30 * 60_000;
|
|
108
|
+
const sweeper = setInterval(() => {
|
|
109
|
+
const cutoff = Date.now() - idleMs;
|
|
110
|
+
for (const [id, s] of sessions)
|
|
111
|
+
if (s.lastSeen < cutoff)
|
|
112
|
+
void closeSession(id);
|
|
113
|
+
}, Math.min(idleMs, 60_000));
|
|
114
|
+
sweeper.unref();
|
|
115
|
+
const server = node_http_1.default.createServer((req, res) => {
|
|
116
|
+
void (async () => {
|
|
117
|
+
const url = new URL(req.url ?? '/', 'http://local');
|
|
118
|
+
if (url.pathname === '/healthz') {
|
|
119
|
+
res.writeHead(204).end();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (url.pathname !== '/mcp') {
|
|
123
|
+
sendError(res, 404, 'Not found. The MCP endpoint is /mcp.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (authToken !== '' && !bearerOk(req, authToken)) {
|
|
127
|
+
res.setHeader('www-authenticate', 'Bearer');
|
|
128
|
+
sendError(res, 401, 'Missing or wrong bearer token (MCP_AUTH_TOKEN).');
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const sessionId = header(req, 'mcp-session-id');
|
|
132
|
+
const body = req.method === 'POST' ? await readJson(req) : undefined;
|
|
133
|
+
const existing = sessionId != null ? sessions.get(sessionId) : undefined;
|
|
134
|
+
if (existing != null) {
|
|
135
|
+
existing.lastSeen = Date.now();
|
|
136
|
+
await (0, connection_1.withConnectionManager)(existing.manager, async () => { await existing.transport.handleRequest(req, res, body); });
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (sessionId != null) {
|
|
140
|
+
sendError(res, 404, 'Unknown or expired session — start a new one.');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (req.method !== 'POST' || !(0, types_js_1.isInitializeRequest)(body)) {
|
|
144
|
+
sendError(res, 400, 'No session: send an initialize request first.');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const creds = headerCredentials(req);
|
|
148
|
+
if (creds == null && !sharedAllowed) {
|
|
149
|
+
sendError(res, 401, serverCreds
|
|
150
|
+
? 'Send your Huly login: X-Huly-Token, or X-Huly-Email and X-Huly-Password. (The server credentials need MCP_AUTH_TOKEN.)'
|
|
151
|
+
: 'Send your Huly login: X-Huly-Token, or X-Huly-Email and X-Huly-Password.');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const own = creds != null;
|
|
155
|
+
const manager = own ? make(creds) : (0, connection_1.getConnectionManager)();
|
|
156
|
+
const pinned = creds?.workspace ?? (own ? undefined : env.HULY_WORKSPACE);
|
|
157
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
158
|
+
sessionIdGenerator: () => (0, node_crypto_1.randomUUID)(),
|
|
159
|
+
allowedHosts: hosts,
|
|
160
|
+
enableDnsRebindingProtection: hosts != null,
|
|
161
|
+
onsessioninitialized: (id) => {
|
|
162
|
+
sessions.set(id, { transport, manager, own, lastSeen: Date.now() });
|
|
163
|
+
if (own)
|
|
164
|
+
void (0, connection_1.withConnectionManager)(manager, async () => await (0, connection_1.prewarm)({ ...creds, HULY_EMAIL: creds.email, HULY_PASSWORD: creds.password, HULY_TOKEN: creds.token }));
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
transport.onclose = () => { if (transport.sessionId != null)
|
|
168
|
+
void closeSession(transport.sessionId); };
|
|
169
|
+
const mcp = (0, connection_1.withConnectionManager)(manager, () => (0, server_1.createServer)({ workspace: pinned }));
|
|
170
|
+
await mcp.connect(transport);
|
|
171
|
+
await (0, connection_1.withConnectionManager)(manager, async () => { await transport.handleRequest(req, res, body); });
|
|
172
|
+
})().catch((e) => {
|
|
173
|
+
if (e instanceof HttpError)
|
|
174
|
+
sendError(res, e.status, e.message);
|
|
175
|
+
else {
|
|
176
|
+
log(`request failed: ${e.message}`);
|
|
177
|
+
sendError(res, 500, 'Internal error.');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
server.on('close', () => {
|
|
182
|
+
clearInterval(sweeper);
|
|
183
|
+
for (const id of [...sessions.keys()])
|
|
184
|
+
void closeSession(id);
|
|
185
|
+
});
|
|
186
|
+
return server;
|
|
187
|
+
}
|
|
188
|
+
async function runHttp(argv) {
|
|
189
|
+
const arg = (name) => {
|
|
190
|
+
const i = argv.indexOf(`--${name}`);
|
|
191
|
+
if (i >= 0)
|
|
192
|
+
return argv[i + 1];
|
|
193
|
+
return argv.find((a) => a.startsWith(`--${name}=`))?.slice(name.length + 3);
|
|
194
|
+
};
|
|
195
|
+
if (argv.includes('--help')) {
|
|
196
|
+
console.log(`huly-mcp-selfhost http [--port 8000] [--host 127.0.0.1]
|
|
197
|
+
|
|
198
|
+
MCP over Streamable HTTP at /mcp (health check: /healthz).
|
|
199
|
+
MCP_AUTH_TOKEN bearer token clients must send (needed to use the server's own HULY_* login)
|
|
200
|
+
MCP_ALLOWED_HOSTS host names clients use (DNS-rebinding protection), e.g. huly-mcp.example.com
|
|
201
|
+
Clients can send their own Huly login: X-Huly-Token, or X-Huly-Email + X-Huly-Password; X-Huly-Workspace pins one.`);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const port = Number(arg('port') ?? process.env.MCP_PORT ?? 8000);
|
|
205
|
+
const host = arg('host') ?? process.env.MCP_HOST ?? '127.0.0.1';
|
|
206
|
+
const server = startHttpServer({ port, host, env: process.env });
|
|
207
|
+
await new Promise((resolve) => server.listen(port, host, resolve));
|
|
208
|
+
console.error(`huly-mcp http: listening on http://${host}:${port}/mcp`);
|
|
209
|
+
const stop = () => { server.close(() => process.exit(0)); setTimeout(() => process.exit(0), 3000).unref(); };
|
|
210
|
+
process.on('SIGINT', stop);
|
|
211
|
+
process.on('SIGTERM', stop);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,12 +7,25 @@ const connection_1 = require("./connection");
|
|
|
7
7
|
const env_1 = require("./env");
|
|
8
8
|
const watch_1 = require("./watch");
|
|
9
9
|
const junit_cli_1 = require("./junit-cli");
|
|
10
|
+
const http_1 = require("./http");
|
|
10
11
|
const redact_1 = require("./utils/redact");
|
|
11
12
|
async function main() {
|
|
12
13
|
if (process.argv[2] === 'watch') {
|
|
13
14
|
await (0, watch_1.runWatch)(process.argv.slice(3));
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
17
|
+
if (process.argv[2] === 'http') {
|
|
18
|
+
(0, env_1.normalizeEnv)();
|
|
19
|
+
(0, redact_1.routeConsoleToStderr)();
|
|
20
|
+
await (0, http_1.runHttp)(process.argv.slice(3));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (process.argv[2] === 'setup') {
|
|
24
|
+
// `npx huly-mcp-selfhost setup`: the token wizard for SSO accounts (scripts/setup.js ships in the package).
|
|
25
|
+
process.env.HULY_SETUP_RUN = '1';
|
|
26
|
+
require('../scripts/setup.js');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
16
29
|
if (process.argv[2] === 'junit') {
|
|
17
30
|
await (0, junit_cli_1.runJUnit)(process.argv.slice(3));
|
|
18
31
|
process.exit();
|
|
@@ -33,6 +46,8 @@ async function main() {
|
|
|
33
46
|
process.exit(0);
|
|
34
47
|
});
|
|
35
48
|
await server.connect(transport);
|
|
49
|
+
// Log in and open the (single) workspace now, not on the first tool call.
|
|
50
|
+
void (0, connection_1.prewarm)();
|
|
36
51
|
// Process stays alive — connection maintained until shutdown
|
|
37
52
|
}
|
|
38
53
|
main().catch((err) => {
|