@uzqw/mcp 0.1.6 → 0.1.8
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/index.js
CHANGED
|
@@ -235,12 +235,12 @@ function registerTools(server2, client2) {
|
|
|
235
235
|
|
|
236
236
|
// src/index.ts
|
|
237
237
|
var CALLBACK_PORT = 8199;
|
|
238
|
-
var LOGIN_TIMEOUT_MS =
|
|
238
|
+
var LOGIN_TIMEOUT_MS = 3e5;
|
|
239
239
|
var require2 = createRequire(import.meta.url);
|
|
240
240
|
var MCP_VERSION = require2("../package.json").version;
|
|
241
241
|
var sub = process.argv[2];
|
|
242
242
|
if (sub === "install" || sub === "uninstall") {
|
|
243
|
-
const { runInstall, runUninstall, parseEnvFlag } = await import("./install-
|
|
243
|
+
const { runInstall, runUninstall, parseEnvFlag } = await import("./install-5NYCT73T.js");
|
|
244
244
|
const args = process.argv.slice(3);
|
|
245
245
|
const yes = args.includes("--yes") || args.includes("-y");
|
|
246
246
|
const noLogin = args.includes("--no-login");
|
|
@@ -268,27 +268,36 @@ var READ_ONLY2 = { readOnlyHint: true, destructiveHint: false, openWorldHint: tr
|
|
|
268
268
|
server.registerTool(
|
|
269
269
|
"login",
|
|
270
270
|
{
|
|
271
|
-
description: "\u767B\u5F55 Recolx\uFF08OAuth PKCE\uFF09\uFF1A\u6253\u5F00\u6D4F\u89C8\u5668\u8DF3\u8F6C\u6388\u6743\u9875\uFF0C\u540C\u610F\u540E\u5728\u672C\u5730 8199 \u56DE\u8C03\u6536\u53D6 token \u5E76\u5199\u5165 ~/.recolx/tokens-mcp-{env}.json\uFF08\u6BCF\u73AF\u5883\u72EC\u7ACB\uFF09\uFF1B\u5DF2\u767B\u5F55\u65F6\u76F4\u63A5\u8FD4\u56DE",
|
|
271
|
+
description: "\u767B\u5F55 Recolx\uFF08OAuth PKCE\uFF09\uFF1A\u6253\u5F00\u6D4F\u89C8\u5668\u8DF3\u8F6C\u6388\u6743\u9875\uFF0C\u540C\u610F\u540E\u5728\u672C\u5730 8199 \u56DE\u8C03\u6536\u53D6 token \u5E76\u5199\u5165 ~/.recolx/tokens-mcp-{env}.json\uFF08\u6BCF\u73AF\u5883\u72EC\u7ACB\uFF09\uFF1B\u5DF2\u767B\u5F55\u65F6\u76F4\u63A5\u8FD4\u56DE\u3002\u767B\u51FA\u540E\u7B2C\u4E00\u6B21 login \u4F1A\u81EA\u52A8\u5F3A\u5236\u91CD\u65B0\u8BA4\u8BC1\uFF08\u5F39 Logto \u9875\uFF09\uFF0C\u65E0\u9700\u989D\u5916\u53C2\u6570",
|
|
272
272
|
annotations: { title: "\u767B\u5F55 Recolx", ...READ_ONLY2 },
|
|
273
273
|
inputSchema: LoginInput
|
|
274
274
|
},
|
|
275
|
-
async () => {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
275
|
+
async (args = {}) => {
|
|
276
|
+
if (!args.force && !await client.auth.isForceLoginPending()) {
|
|
277
|
+
const existingToken = await client.auth.getAccessToken();
|
|
278
|
+
if (existingToken) {
|
|
279
|
+
try {
|
|
280
|
+
await client.getCurrentUser();
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{
|
|
284
|
+
type: "text",
|
|
285
|
+
text: "\u5DF2\u767B\u5F55\u3002\u60F3\u6362\u8D26\u53F7\uFF1A\u5148 logout \u518D login\uFF08\u4F1A\u81EA\u52A8\u5F3A\u5236\u91CD\u65B0\u8BA4\u8BC1\u5F39\u51FA\u767B\u5F55\u9875\uFF09\uFF0C\u6216\u76F4\u63A5 login(force: true)\u3002"
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
};
|
|
289
|
+
} catch (err) {
|
|
290
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
291
|
+
if (msg.includes("401") || msg.includes("\u672A\u767B\u5F55")) {
|
|
292
|
+
await client.auth.logout();
|
|
293
|
+
} else {
|
|
294
|
+
return { content: [{ type: "text", text: `\u767B\u5F55\u6001\u6821\u9A8C\u5931\u8D25\uFF1A${msg}` }], isError: true };
|
|
295
|
+
}
|
|
287
296
|
}
|
|
288
297
|
}
|
|
289
298
|
}
|
|
290
299
|
const devUserId = process.env.RECOLX_DEV_USER_ID;
|
|
291
|
-
const authReq = client.auth.createAuthorizationRequest(devUserId ? { user_id: devUserId } : {});
|
|
300
|
+
const authReq = await client.auth.createAuthorizationRequest(devUserId ? { user_id: devUserId } : args.force ? { prompt: "login" } : {});
|
|
292
301
|
const authUrlFile = process.env.RECOLX_DEV_AUTH_URL_FILE;
|
|
293
302
|
const result = await runOAuthCallback({
|
|
294
303
|
port: CALLBACK_PORT,
|
|
@@ -320,10 +329,9 @@ server.registerTool(
|
|
|
320
329
|
content: [
|
|
321
330
|
{
|
|
322
331
|
type: "text",
|
|
323
|
-
text: `\u6388\u6743\u8D85\u65F6\
|
|
324
|
-
${authReq.url}
|
|
332
|
+
text: `\u6388\u6743\u7B49\u5F85\u8D85\u65F6\uFF085 \u5206\u949F\uFF09\u3002\u82E5\u6D4F\u89C8\u5668\u5DF2\u8DF3\u8F6C\u5E76\u663E\u793A "localhost:8199 \u65E0\u6CD5\u8BBF\u95EE"\uFF0C\u8BF4\u660E\u672C\u6B21\u6388\u6743\u7A97\u53E3\u5DF2\u8FC7\u671F\u2014\u2014\u8BF7\u91CD\u65B0\u8C03\u7528 login \u518D\u8BD5\uFF08\u767B\u5F55\u9700\u5728 5 \u5206\u949F\u5185\u5B8C\u6210\uFF09\u3002
|
|
325
333
|
|
|
326
|
-
\u8FDC\u7A0B
|
|
334
|
+
\u65E0\u5934/\u8FDC\u7A0B\u673A\u5668\uFF1A\u53EF\u8BBE RECOLX_DEV_AUTH_URL_FILE=/path/url.txt \u8BA9 login \u628A\u6388\u6743 URL \u5199\u5165\u6587\u4EF6\u540E\u518D\u624B\u52A8\u5904\u7406\uFF1B\u5E76\u9700\u8F6C\u53D1\u672C\u5730\u7AEF\u53E3 ${CALLBACK_PORT}\uFF1Assh -L ${CALLBACK_PORT}:localhost:${CALLBACK_PORT}`
|
|
327
335
|
}
|
|
328
336
|
],
|
|
329
337
|
isError: true
|
|
@@ -355,15 +363,15 @@ server.registerTool(
|
|
|
355
363
|
},
|
|
356
364
|
async () => {
|
|
357
365
|
const existingToken = await client.auth.getAccessToken();
|
|
358
|
-
if (
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
} catch {
|
|
366
|
+
if (existingToken) {
|
|
367
|
+
try {
|
|
368
|
+
await client.revokeCurrentUser();
|
|
369
|
+
} catch {
|
|
370
|
+
}
|
|
364
371
|
}
|
|
365
372
|
await client.auth.logout();
|
|
366
|
-
|
|
373
|
+
const text = existingToken ? "\u5DF2\u767B\u51FA\u5E76\u64A4\u9500 Recolx \u6388\u6743\uFF08\u672C\u5730 token \u5DF2\u5220\u9664\uFF09\u3002\u4E0B\u6B21 login \u4F1A\u81EA\u52A8\u5F3A\u5236\u91CD\u65B0\u8BA4\u8BC1\uFF1A\u6D4F\u89C8\u5668\u5F39\u51FA Logto \u767B\u5F55\u9875\uFF0C\u53EF\u76F4\u63A5\u6362\u8D26\u53F7\u3002" : "\u5C1A\u672A\u767B\u5F55\uFF08\u672C\u5730\u65E0 token\uFF09\u3002\u5DF2\u6807\u8BB0\uFF1A\u4E0B\u6B21 login \u4F1A\u8D70\u5F3A\u5236\u91CD\u65B0\u8BA4\u8BC1\uFF08\u5F39 Logto \u767B\u5F55\u9875\uFF09\u3002";
|
|
374
|
+
return { content: [{ type: "text", text }] };
|
|
367
375
|
}
|
|
368
376
|
);
|
|
369
377
|
registerTools(server, client);
|
|
@@ -453,7 +453,7 @@ function pickIdentity(user) {
|
|
|
453
453
|
async function runLogin() {
|
|
454
454
|
const client = new RecolxClient({});
|
|
455
455
|
const devUserId = process.env.RECOLX_DEV_USER_ID;
|
|
456
|
-
const authReq = client.auth.createAuthorizationRequest(devUserId ? { user_id: devUserId } : {});
|
|
456
|
+
const authReq = await client.auth.createAuthorizationRequest(devUserId ? { user_id: devUserId } : {});
|
|
457
457
|
const authUrlFile = process.env.RECOLX_DEV_AUTH_URL_FILE;
|
|
458
458
|
const result = await runOAuthCallback({
|
|
459
459
|
port: CALLBACK_PORT,
|