nworks 1.1.2 → 1.2.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/dist/mcp.js CHANGED
@@ -1435,39 +1435,55 @@ var doctorCommand = new Command("doctor").description("Check nworks configuratio
1435
1435
  function registerTools(server) {
1436
1436
  server.tool(
1437
1437
  "nworks_setup",
1438
- "NAVER WORKS API \uC778\uC99D \uC815\uBCF4\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. clientId\uB294 \uD544\uC218, clientSecret\uC740 \uD658\uACBD\uBCC0\uC218(NWORKS_CLIENT_SECRET)\uB85C\uB3C4 \uC124\uC815 \uAC00\uB2A5\uD569\uB2C8\uB2E4. \uBBFC\uAC10 \uC815\uBCF4\uB294 \uD658\uACBD\uBCC0\uC218\uB85C \uC124\uC815\uD558\uB294 \uAC83\uC744 \uAD8C\uC7A5\uD569\uB2C8\uB2E4 (NWORKS_CLIENT_ID, NWORKS_CLIENT_SECRET \uB4F1). \uBA54\uC2DC\uC9C0/\uAD6C\uC131\uC6D0\uC870\uD68C\uB294 Service Account \uC778\uC99D(serviceAccount, privateKeyPath, botId \uCD94\uAC00 \uD544\uC694). \uCE98\uB9B0\uB354/\uBA54\uC77C/\uD560\uC77C/\uB4DC\uB77C\uC774\uBE0C/\uAC8C\uC2DC\uD310\uC740 User OAuth \uC778\uC99D(\uC124\uC815 \uD6C4 nworks_login_user\uB85C \uBE0C\uB77C\uC6B0\uC800 \uB85C\uADF8\uC778 \uD544\uC694). OAuth Redirect URI: http://localhost:9876/callback",
1438
+ "NAVER WORKS API \uC778\uC99D \uC815\uBCF4\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. \uBBFC\uAC10 \uC815\uBCF4(Client Secret, Private Key \uACBD\uB85C)\uB294 \uC774 tool\uC758 \uD30C\uB77C\uBBF8\uD130\uB85C \uBC1B\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 \uC0AC\uC6A9\uC790\uAC00 MCP \uC124\uC815 \uD30C\uC77C(\uC608: claude_desktop_config.json)\uC758 env \uD544\uB4DC\uC5D0 NWORKS_CLIENT_SECRET(\uD544\uC218)\uACFC NWORKS_PRIVATE_KEY_PATH(Service Account \uC0AC\uC6A9 \uC2DC)\uB97C \uBBF8\uB9AC \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4. Developer Console: https://dev.worksmobile.com. \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC740 \uACBD\uC6B0, \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC124\uC815 \uBC29\uBC95\uC744 \uC548\uB0B4\uD558\uC138\uC694. \uBA54\uC2DC\uC9C0/\uAD6C\uC131\uC6D0\uC870\uD68C\uB294 Service Account \uC778\uC99D(serviceAccount, botId + \uD658\uACBD\uBCC0\uC218 NWORKS_PRIVATE_KEY_PATH \uD544\uC694). \uCE98\uB9B0\uB354/\uBA54\uC77C/\uD560\uC77C/\uB4DC\uB77C\uC774\uBE0C/\uAC8C\uC2DC\uD310\uC740 User OAuth \uC778\uC99D(\uC124\uC815 \uD6C4 nworks_login_user\uB85C \uBE0C\uB77C\uC6B0\uC800 \uB85C\uADF8\uC778 \uD544\uC694). OAuth Redirect URI: http://localhost:9876/callback",
1439
1439
  {
1440
1440
  clientId: z.string().describe("Client ID (Developer Console\uC5D0\uC11C \uBC1C\uAE09)"),
1441
- clientSecret: z.string().optional().describe("Client Secret (Developer Console\uC5D0\uC11C \uBC1C\uAE09). \uD658\uACBD\uBCC0\uC218 NWORKS_CLIENT_SECRET\uC774 \uC124\uC815\uB418\uC5B4 \uC788\uC73C\uBA74 \uC0DD\uB7B5 \uAC00\uB2A5"),
1442
1441
  serviceAccount: z.string().optional().describe("Service Account ID (\uC608: xxxxx.serviceaccount@domain)"),
1443
- privateKeyPath: z.string().optional().describe("Private Key \uD30C\uC77C\uC758 \uB85C\uCEEC \uC808\uB300 \uACBD\uB85C (\uC11C\uBE44\uC2A4 \uACC4\uC815 \uC778\uC99D \uC2DC \uD544\uC694). \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD30C\uC77C\uC774 \uC800\uC7A5\uB41C \uACBD\uB85C\uB97C \uC9C1\uC811 \uBB3C\uC5B4\uBCF4\uC138\uC694 (\uC608: C:\\Users\\me\\Downloads\\private.key). \uD30C\uC77C \uC5C5\uB85C\uB4DC\uAC00 \uC544\uB2CC \uACBD\uB85C \uBB38\uC790\uC5F4\uC785\uB2C8\uB2E4."),
1444
1442
  botId: z.string().optional().describe("Bot ID (\uBA54\uC2DC\uC9C0 \uC804\uC1A1 \uC2DC \uD544\uC694)"),
1445
1443
  domainId: z.string().optional().describe("Domain ID")
1446
1444
  },
1447
- async ({ clientId, clientSecret, serviceAccount, privateKeyPath, botId, domainId }) => {
1445
+ async ({ clientId, serviceAccount, botId, domainId }) => {
1448
1446
  try {
1449
- const resolvedSecret = clientSecret || process.env["NWORKS_CLIENT_SECRET"];
1447
+ const resolvedSecret = process.env["NWORKS_CLIENT_SECRET"];
1450
1448
  if (!resolvedSecret) {
1451
1449
  return {
1452
- content: [{ type: "text", text: JSON.stringify({ error: true, message: "clientSecret\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uD30C\uB77C\uBBF8\uD130\uB85C \uC804\uB2EC\uD558\uAC70\uB098 \uD658\uACBD\uBCC0\uC218 NWORKS_CLIENT_SECRET\uC744 \uC124\uC815\uD558\uC138\uC694." }) }],
1450
+ content: [{ type: "text", text: JSON.stringify({
1451
+ error: true,
1452
+ message: "\uD658\uACBD\uBCC0\uC218 NWORKS_CLIENT_SECRET\uC774 \uC124\uC815\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
1453
+ solution: "\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uB2E4\uC74C \uC548\uB0B4\uB97C \uC804\uB2EC\uD558\uC138\uC694: MCP \uC124\uC815 \uD30C\uC77C(\uC608: claude_desktop_config.json)\uC758 nworks \uC11C\uBC84 \uC124\uC815\uC5D0 env \uD544\uB4DC\uB97C \uCD94\uAC00\uD574\uC57C \uD569\uB2C8\uB2E4.",
1454
+ example: {
1455
+ mcpServers: {
1456
+ nworks: {
1457
+ command: "npx",
1458
+ args: ["-y", "nworks", "mcp"],
1459
+ env: {
1460
+ NWORKS_CLIENT_SECRET: "<Developer Console\uC5D0\uC11C \uBC1C\uAE09\uBC1B\uC740 Client Secret>"
1461
+ }
1462
+ }
1463
+ }
1464
+ },
1465
+ developerConsole: "https://dev.worksmobile.com"
1466
+ }) }],
1453
1467
  isError: true
1454
1468
  };
1455
1469
  }
1470
+ const resolvedPrivateKeyPath = process.env["NWORKS_PRIVATE_KEY_PATH"];
1456
1471
  await saveCredentials({
1457
1472
  clientId,
1458
1473
  clientSecret: resolvedSecret,
1459
1474
  serviceAccount,
1460
- privateKeyPath,
1475
+ privateKeyPath: resolvedPrivateKeyPath,
1461
1476
  botId,
1462
1477
  domainId
1463
1478
  });
1464
1479
  const nextSteps = [];
1465
- if (serviceAccount && privateKeyPath && botId) {
1480
+ if (serviceAccount && resolvedPrivateKeyPath && botId) {
1466
1481
  nextSteps.push("Service Account \uC778\uC99D \uC900\uBE44 \uC644\uB8CC \u2014 \uBD07 \uBA54\uC2DC\uC9C0 \uB4F1 \uBC14\uB85C \uC0AC\uC6A9 \uAC00\uB2A5");
1482
+ } else if (serviceAccount && botId && !resolvedPrivateKeyPath) {
1483
+ nextSteps.push("NWORKS_PRIVATE_KEY_PATH \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. Service Account \uC778\uC99D\uC5D0\uB294 Private Key \uACBD\uB85C\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uC5D0\uAC8C MCP \uC124\uC815 \uD30C\uC77C(\uC608: claude_desktop_config.json)\uC758 env \uD544\uB4DC\uC5D0 NWORKS_PRIVATE_KEY_PATH\uB97C \uCD94\uAC00\uD558\uB3C4\uB85D \uC548\uB0B4\uD558\uC138\uC694. Private Key\uB294 Developer Console(https://dev.worksmobile.com)\uC5D0\uC11C \uB2E4\uC6B4\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.");
1467
1484
  }
1468
1485
  nextSteps.push("User OAuth\uAC00 \uD544\uC694\uD55C API\uB294 nworks_login_user tool\uB85C \uBE0C\uB77C\uC6B0\uC800 \uB85C\uADF8\uC778\uC744 \uC9C4\uD589\uD558\uC138\uC694");
1469
1486
  const mask = (s) => s.length <= 4 ? "****" : `****${s.slice(-Math.min(4, Math.floor(s.length / 3)))}`;
1470
- const secretSource = clientSecret ? "\uD30C\uB77C\uBBF8\uD130" : "\uD658\uACBD\uBCC0\uC218";
1471
1487
  return {
1472
1488
  content: [
1473
1489
  {
@@ -1477,9 +1493,9 @@ function registerTools(server) {
1477
1493
  message: "\uC778\uC99D \uC815\uBCF4\uAC00 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
1478
1494
  nextSteps,
1479
1495
  clientId,
1480
- clientSecret: `${mask(resolvedSecret)} (${secretSource})`,
1496
+ clientSecret: `${mask(resolvedSecret)} (\uD658\uACBD\uBCC0\uC218)`,
1481
1497
  serviceAccount: serviceAccount ?? null,
1482
- privateKeyPath: privateKeyPath ? mask(privateKeyPath) : null,
1498
+ privateKeyPath: resolvedPrivateKeyPath ? `${mask(resolvedPrivateKeyPath)} (\uD658\uACBD\uBCC0\uC218)` : null,
1483
1499
  botId: botId ?? null
1484
1500
  })
1485
1501
  }
@@ -1495,7 +1511,7 @@ function registerTools(server) {
1495
1511
  );
1496
1512
  server.tool(
1497
1513
  "nworks_message_send",
1498
- "NAVER WORKS \uBA54\uC2DC\uC9C0\uB97C \uC804\uC1A1\uD569\uB2C8\uB2E4 (\uBD07\uC774 \uC0AC\uC6A9\uC790 \uB610\uB294 \uCC44\uB110\uC5D0 \uBC1C\uC1A1). Service Account \uC778\uC99D \uC0AC\uC6A9 (nworks_setup\uC5D0\uC11C serviceAccount, privateKeyPath, botId \uC124\uC815 \uD544\uC694. User OAuth \uBD88\uD544\uC694)",
1514
+ "NAVER WORKS \uBA54\uC2DC\uC9C0\uB97C \uC804\uC1A1\uD569\uB2C8\uB2E4 (\uBD07\uC774 \uC0AC\uC6A9\uC790 \uB610\uB294 \uCC44\uB110\uC5D0 \uBC1C\uC1A1). Service Account \uC778\uC99D \uC0AC\uC6A9 (nworks_setup\uC5D0\uC11C serviceAccount, botId \uC124\uC815 + \uD658\uACBD\uBCC0\uC218 NWORKS_PRIVATE_KEY_PATH \uD544\uC694. User OAuth \uBD88\uD544\uC694)",
1499
1515
  {
1500
1516
  to: z.string().optional().describe("\uC218\uC2E0\uC790 userId (channel\uACFC \uD0DD 1). nworks_directory_members\uB85C userId \uC870\uD68C \uAC00\uB2A5"),
1501
1517
  channel: z.string().optional().describe("\uCC44\uB110 channelId (to\uC640 \uD0DD 1). nworks_message_members\uB85C \uCC44\uB110 \uAD6C\uC131\uC6D0 \uD655\uC778 \uAC00\uB2A5"),