mcp-aws-manager 0.4.4 → 0.4.5

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/README.md CHANGED
@@ -179,6 +179,10 @@ mcp-aws-manager setup --clients claude
179
179
 
180
180
  Default behavior (`setup`/`bootstrap` without `--clients`) auto-detects installed clients and registers only detected CLIs.
181
181
 
182
+ Compatibility note:
183
+ - Cursor is registered through MCP config file sync (`~/.cursor/mcp.json` and platform user config path) to avoid editor tab side effects from `cursor mcp ...`.
184
+ - If another editor-style client does not expose stable CLI `mcp` subcommands, `setup`/`doctor` returns `manual configuration required` instead of running unsafe subcommands.
185
+
182
186
  2. Health check:
183
187
 
184
188
  ```bash
package/README_KO.md CHANGED
@@ -178,6 +178,10 @@ mcp-aws-manager setup --clients claude
178
178
 
179
179
  기본 동작(`--clients` 없이 `setup`/`bootstrap`)은 설치된 클라이언트를 자동 감지해, 감지된 CLI만 등록합니다.
180
180
 
181
+ 호환성 참고:
182
+ - Cursor는 `cursor mcp ...` 호출 부작용(편집기 탭 열림)을 피하기 위해 MCP 설정 파일(`~/.cursor/mcp.json` + 플랫폼 사용자 설정 경로) 동기화 방식으로 등록합니다.
183
+ - 다른 에디터형 클라이언트가 안정적인 CLI `mcp` 하위명령을 제공하지 않으면, `setup`/`doctor`는 위험한 하위명령 실행 대신 `manual configuration required`를 반환합니다.
184
+
181
185
  2. 상태 점검:
182
186
 
183
187
  ```bash
@@ -61,6 +61,7 @@ const DEFAULT_GOVERNANCE_LOG_NAME = "mcp-aws-governance-log.jsonl";
61
61
  const DEFAULT_INCIDENT_REPORT_NAME = "incident-escalation.json";
62
62
  const DEFAULT_ENTERPRISE_POLICY_NAME = "enterprise-policy.json";
63
63
  const SUPPORTED_CLIENTS = new Set(["codex", "claude", "cursor", "windsurf", "antigravity"]);
64
+ const EDITOR_STYLE_CLIENTS = new Set(["cursor", "windsurf", "antigravity"]);
64
65
  const INTERNAL_BACKEND_ID = "internal";
65
66
  const AUTH_MODES = Object.freeze(["auto", "profile", "web-identity"]);
66
67
  const SNAPSHOT_PROFILES = Object.freeze({
@@ -2311,13 +2312,14 @@ function listLocalAwsProfiles() {
2311
2312
  }
2312
2313
 
2313
2314
  function runCLICommand(cliBin, args, options = {}) {
2314
- // Cursor 2.x no longer reliably supports `cursor mcp ...` CLI subcommands.
2315
+ // Some editor-style CLIs no longer reliably support `<cli> mcp ...`.
2315
2316
  // Calling it can open editor tabs named like "mcp", "add", "get".
2316
- if (String(cliBin).toLowerCase() === "cursor" && Array.isArray(args) && String(args[0] || "").toLowerCase() === "mcp") {
2317
+ const normalizedCli = String(cliBin || "").toLowerCase();
2318
+ if (EDITOR_STYLE_CLIENTS.has(normalizedCli) && Array.isArray(args) && String(args[0] || "").toLowerCase() === "mcp") {
2317
2319
  return {
2318
2320
  status: 2,
2319
2321
  stdout: "",
2320
- stderr: "cursor mcp subcommand is disabled; use ~/.cursor/mcp.json registration"
2322
+ stderr: `${normalizedCli} mcp subcommand is disabled in automation mode; use client MCP settings registration`
2321
2323
  };
2322
2324
  }
2323
2325
 
@@ -2361,17 +2363,11 @@ function commandExists(bin, checkArgs) {
2361
2363
  }
2362
2364
 
2363
2365
  function clientHelpAttempts(cliBin) {
2364
- if (cliBin === "cursor") {
2366
+ if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase())) {
2365
2367
  return [
2366
2368
  ["--help"]
2367
2369
  ];
2368
2370
  }
2369
- if (cliBin === "windsurf" || cliBin === "antigravity") {
2370
- return [
2371
- ["mcp", "--help"],
2372
- ["--help"]
2373
- ];
2374
- }
2375
2371
  return [["mcp", "--help"]];
2376
2372
  }
2377
2373
 
@@ -2774,6 +2770,19 @@ function runSetupInternal(config, options = {}) {
2774
2770
  }
2775
2771
 
2776
2772
  for (const cliBin of clients) {
2773
+ if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase()) && cliBin !== "cursor") {
2774
+ for (const target of activeTargets) {
2775
+ results.push({
2776
+ cliBin,
2777
+ serverName: target.serverName,
2778
+ ok: false,
2779
+ action: "manual configuration required",
2780
+ detail: `${cliBin} CLI mcp subcommands are unavailable in automation mode; configure MCP server in ${cliBin} client settings`
2781
+ });
2782
+ }
2783
+ continue;
2784
+ }
2785
+
2777
2786
  for (const target of activeTargets) {
2778
2787
  const alreadyRegistered = isRegistered(cliBin, target.serverName, target);
2779
2788
  if (config.force || !ensureOnly || alreadyRegistered) {
@@ -2871,6 +2880,13 @@ function runDoctor(config) {
2871
2880
  }
2872
2881
 
2873
2882
  foundClient = true;
2883
+ if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase()) && cliBin !== "cursor") {
2884
+ hasIssue = true;
2885
+ process.stdout.write(`${cliBin}: manual MCP configuration required\n`);
2886
+ process.stdout.write(` action: register mcp-aws-manager in ${cliBin} settings (CLI mcp subcommands unavailable)\n`);
2887
+ continue;
2888
+ }
2889
+
2874
2890
  for (const target of targets) {
2875
2891
  const registered = isRegistered(cliBin, target.serverName, target);
2876
2892
  if (registered) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-aws-manager",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "AWS operations CLI and MCP server (SSM-only) for EC2/Lambda inventory, remediation, and runtime snapshots",
5
5
  "license": "MIT",
6
6
  "publishConfig": {