nworks 1.1.1 → 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/index.js CHANGED
@@ -2205,39 +2205,55 @@ var doctorCommand = new Command11("doctor").description("Check nworks configurat
2205
2205
  function registerTools(server) {
2206
2206
  server.tool(
2207
2207
  "nworks_setup",
2208
- "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",
2208
+ "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",
2209
2209
  {
2210
2210
  clientId: z.string().describe("Client ID (Developer Console\uC5D0\uC11C \uBC1C\uAE09)"),
2211
- 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"),
2212
2211
  serviceAccount: z.string().optional().describe("Service Account ID (\uC608: xxxxx.serviceaccount@domain)"),
2213
- 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."),
2214
2212
  botId: z.string().optional().describe("Bot ID (\uBA54\uC2DC\uC9C0 \uC804\uC1A1 \uC2DC \uD544\uC694)"),
2215
2213
  domainId: z.string().optional().describe("Domain ID")
2216
2214
  },
2217
- async ({ clientId, clientSecret, serviceAccount, privateKeyPath, botId, domainId }) => {
2215
+ async ({ clientId, serviceAccount, botId, domainId }) => {
2218
2216
  try {
2219
- const resolvedSecret = clientSecret || process.env["NWORKS_CLIENT_SECRET"];
2217
+ const resolvedSecret = process.env["NWORKS_CLIENT_SECRET"];
2220
2218
  if (!resolvedSecret) {
2221
2219
  return {
2222
- 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." }) }],
2220
+ content: [{ type: "text", text: JSON.stringify({
2221
+ error: true,
2222
+ message: "\uD658\uACBD\uBCC0\uC218 NWORKS_CLIENT_SECRET\uC774 \uC124\uC815\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
2223
+ 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.",
2224
+ example: {
2225
+ mcpServers: {
2226
+ nworks: {
2227
+ command: "npx",
2228
+ args: ["-y", "nworks", "mcp"],
2229
+ env: {
2230
+ NWORKS_CLIENT_SECRET: "<Developer Console\uC5D0\uC11C \uBC1C\uAE09\uBC1B\uC740 Client Secret>"
2231
+ }
2232
+ }
2233
+ }
2234
+ },
2235
+ developerConsole: "https://dev.worksmobile.com"
2236
+ }) }],
2223
2237
  isError: true
2224
2238
  };
2225
2239
  }
2240
+ const resolvedPrivateKeyPath = process.env["NWORKS_PRIVATE_KEY_PATH"];
2226
2241
  await saveCredentials({
2227
2242
  clientId,
2228
2243
  clientSecret: resolvedSecret,
2229
2244
  serviceAccount,
2230
- privateKeyPath,
2245
+ privateKeyPath: resolvedPrivateKeyPath,
2231
2246
  botId,
2232
2247
  domainId
2233
2248
  });
2234
2249
  const nextSteps = [];
2235
- if (serviceAccount && privateKeyPath && botId) {
2250
+ if (serviceAccount && resolvedPrivateKeyPath && botId) {
2236
2251
  nextSteps.push("Service Account \uC778\uC99D \uC900\uBE44 \uC644\uB8CC \u2014 \uBD07 \uBA54\uC2DC\uC9C0 \uB4F1 \uBC14\uB85C \uC0AC\uC6A9 \uAC00\uB2A5");
2252
+ } else if (serviceAccount && botId && !resolvedPrivateKeyPath) {
2253
+ 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.");
2237
2254
  }
2238
2255
  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");
2239
2256
  const mask = (s) => s.length <= 4 ? "****" : `****${s.slice(-Math.min(4, Math.floor(s.length / 3)))}`;
2240
- const secretSource = clientSecret ? "\uD30C\uB77C\uBBF8\uD130" : "\uD658\uACBD\uBCC0\uC218";
2241
2257
  return {
2242
2258
  content: [
2243
2259
  {
@@ -2247,9 +2263,9 @@ function registerTools(server) {
2247
2263
  message: "\uC778\uC99D \uC815\uBCF4\uAC00 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
2248
2264
  nextSteps,
2249
2265
  clientId,
2250
- clientSecret: `${mask(resolvedSecret)} (${secretSource})`,
2266
+ clientSecret: `${mask(resolvedSecret)} (\uD658\uACBD\uBCC0\uC218)`,
2251
2267
  serviceAccount: serviceAccount ?? null,
2252
- privateKeyPath: privateKeyPath ? mask(privateKeyPath) : null,
2268
+ privateKeyPath: resolvedPrivateKeyPath ? `${mask(resolvedPrivateKeyPath)} (\uD658\uACBD\uBCC0\uC218)` : null,
2253
2269
  botId: botId ?? null
2254
2270
  })
2255
2271
  }
@@ -2265,7 +2281,7 @@ function registerTools(server) {
2265
2281
  );
2266
2282
  server.tool(
2267
2283
  "nworks_message_send",
2268
- "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)",
2284
+ "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)",
2269
2285
  {
2270
2286
  to: z.string().optional().describe("\uC218\uC2E0\uC790 userId (channel\uACFC \uD0DD 1). nworks_directory_members\uB85C userId \uC870\uD68C \uAC00\uB2A5"),
2271
2287
  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"),