mcp-aws-manager 0.4.4 → 0.4.6
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 +4 -0
- package/README_KO.md +4 -0
- package/bin/mcp-aws-manager.js +32 -11
- package/package.json +1 -1
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
|
package/bin/mcp-aws-manager.js
CHANGED
|
@@ -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({
|
|
@@ -680,6 +681,11 @@ function resolveDefaultHtmlOutPath() {
|
|
|
680
681
|
}
|
|
681
682
|
}
|
|
682
683
|
|
|
684
|
+
const cwd = path.resolve(process.cwd());
|
|
685
|
+
if (!isLikelyProtectedInstallDir(cwd) && isWritableDirectory(cwd)) {
|
|
686
|
+
return path.join(cwd, DEFAULT_HTML_REPORT_NAME);
|
|
687
|
+
}
|
|
688
|
+
|
|
683
689
|
const home = os.homedir();
|
|
684
690
|
if (isWritableDirectory(home)) {
|
|
685
691
|
return path.join(home, DEFAULT_HTML_REPORT_NAME);
|
|
@@ -914,7 +920,7 @@ function usageText() {
|
|
|
914
920
|
" --ssh-bastion-user <user>",
|
|
915
921
|
" --ssh-bastion-port <port> (default: 22)",
|
|
916
922
|
" --ssh-bastion-pem-path <path> (optional bastion-only key path)",
|
|
917
|
-
" --html-out <path> (default: auto -> workspace/home aws-inventory.html)",
|
|
923
|
+
" --html-out <path> (default: auto -> workspace/cwd/home aws-inventory.html)",
|
|
918
924
|
" --topology-out <path> (default: auto -> workspace/home aws-topology.json)",
|
|
919
925
|
" --relationships-out <path> (default: auto -> workspace/home aws-relationships.json)",
|
|
920
926
|
" --governance-log <path> (default: auto -> workspace/home mcp-aws-governance-log.jsonl)",
|
|
@@ -2311,13 +2317,14 @@ function listLocalAwsProfiles() {
|
|
|
2311
2317
|
}
|
|
2312
2318
|
|
|
2313
2319
|
function runCLICommand(cliBin, args, options = {}) {
|
|
2314
|
-
//
|
|
2320
|
+
// Some editor-style CLIs no longer reliably support `<cli> mcp ...`.
|
|
2315
2321
|
// Calling it can open editor tabs named like "mcp", "add", "get".
|
|
2316
|
-
|
|
2322
|
+
const normalizedCli = String(cliBin || "").toLowerCase();
|
|
2323
|
+
if (EDITOR_STYLE_CLIENTS.has(normalizedCli) && Array.isArray(args) && String(args[0] || "").toLowerCase() === "mcp") {
|
|
2317
2324
|
return {
|
|
2318
2325
|
status: 2,
|
|
2319
2326
|
stdout: "",
|
|
2320
|
-
stderr:
|
|
2327
|
+
stderr: `${normalizedCli} mcp subcommand is disabled in automation mode; use client MCP settings registration`
|
|
2321
2328
|
};
|
|
2322
2329
|
}
|
|
2323
2330
|
|
|
@@ -2361,14 +2368,8 @@ function commandExists(bin, checkArgs) {
|
|
|
2361
2368
|
}
|
|
2362
2369
|
|
|
2363
2370
|
function clientHelpAttempts(cliBin) {
|
|
2364
|
-
if (cliBin
|
|
2365
|
-
return [
|
|
2366
|
-
["--help"]
|
|
2367
|
-
];
|
|
2368
|
-
}
|
|
2369
|
-
if (cliBin === "windsurf" || cliBin === "antigravity") {
|
|
2371
|
+
if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase())) {
|
|
2370
2372
|
return [
|
|
2371
|
-
["mcp", "--help"],
|
|
2372
2373
|
["--help"]
|
|
2373
2374
|
];
|
|
2374
2375
|
}
|
|
@@ -2774,6 +2775,19 @@ function runSetupInternal(config, options = {}) {
|
|
|
2774
2775
|
}
|
|
2775
2776
|
|
|
2776
2777
|
for (const cliBin of clients) {
|
|
2778
|
+
if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase()) && cliBin !== "cursor") {
|
|
2779
|
+
for (const target of activeTargets) {
|
|
2780
|
+
results.push({
|
|
2781
|
+
cliBin,
|
|
2782
|
+
serverName: target.serverName,
|
|
2783
|
+
ok: false,
|
|
2784
|
+
action: "manual configuration required",
|
|
2785
|
+
detail: `${cliBin} CLI mcp subcommands are unavailable in automation mode; configure MCP server in ${cliBin} client settings`
|
|
2786
|
+
});
|
|
2787
|
+
}
|
|
2788
|
+
continue;
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2777
2791
|
for (const target of activeTargets) {
|
|
2778
2792
|
const alreadyRegistered = isRegistered(cliBin, target.serverName, target);
|
|
2779
2793
|
if (config.force || !ensureOnly || alreadyRegistered) {
|
|
@@ -2871,6 +2885,13 @@ function runDoctor(config) {
|
|
|
2871
2885
|
}
|
|
2872
2886
|
|
|
2873
2887
|
foundClient = true;
|
|
2888
|
+
if (EDITOR_STYLE_CLIENTS.has(String(cliBin || "").toLowerCase()) && cliBin !== "cursor") {
|
|
2889
|
+
hasIssue = true;
|
|
2890
|
+
process.stdout.write(`${cliBin}: manual MCP configuration required\n`);
|
|
2891
|
+
process.stdout.write(` action: register mcp-aws-manager in ${cliBin} settings (CLI mcp subcommands unavailable)\n`);
|
|
2892
|
+
continue;
|
|
2893
|
+
}
|
|
2894
|
+
|
|
2874
2895
|
for (const target of targets) {
|
|
2875
2896
|
const registered = isRegistered(cliBin, target.serverName, target);
|
|
2876
2897
|
if (registered) {
|
package/package.json
CHANGED