ilumin-cli 1.0.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/README.md +56 -0
- package/dist/clients/claude-code.d.ts +12 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +18 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/claude-desktop.d.ts +14 -0
- package/dist/clients/claude-desktop.d.ts.map +1 -0
- package/dist/clients/claude-desktop.js +13 -0
- package/dist/clients/claude-desktop.js.map +1 -0
- package/dist/clients/codex.d.ts +17 -0
- package/dist/clients/codex.d.ts.map +1 -0
- package/dist/clients/codex.js +37 -0
- package/dist/clients/codex.js.map +1 -0
- package/dist/clients/config.d.ts +30 -0
- package/dist/clients/config.d.ts.map +1 -0
- package/dist/clients/config.js +63 -0
- package/dist/clients/config.js.map +1 -0
- package/dist/clients/cursor.d.ts +11 -0
- package/dist/clients/cursor.d.ts.map +1 -0
- package/dist/clients/cursor.js +10 -0
- package/dist/clients/cursor.js.map +1 -0
- package/dist/clients/gemini.d.ts +11 -0
- package/dist/clients/gemini.d.ts.map +1 -0
- package/dist/clients/gemini.js +14 -0
- package/dist/clients/gemini.js.map +1 -0
- package/dist/commands/mcp-add.d.ts +13 -0
- package/dist/commands/mcp-add.d.ts.map +1 -0
- package/dist/commands/mcp-add.js +95 -0
- package/dist/commands/mcp-add.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +21 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +47 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/toml.d.ts +15 -0
- package/dist/utils/toml.d.ts.map +1 -0
- package/dist/utils/toml.js +35 -0
- package/dist/utils/toml.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# @iluminapp/cli
|
|
2
|
+
|
|
3
|
+
CLI oficial da [Ilumin Cloud](https://ilumin.app) para instalar o MCP server em clientes de IA com **um único comando**.
|
|
4
|
+
|
|
5
|
+
## Instalação rápida do MCP
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code --x-api-key SUA_CHAVE
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### Clientes suportados
|
|
12
|
+
|
|
13
|
+
| Flag `--client` | Cliente de IA | Arquivo modificado |
|
|
14
|
+
|-------------------|---------------------|---------------------------------------------------------|
|
|
15
|
+
| `claude-code` | Claude Code (CLI) | `~/.claude.json` |
|
|
16
|
+
| `claude-desktop` | Claude Desktop | `~/Library/Application Support/Claude/...` (macOS/Win) |
|
|
17
|
+
| `gemini` | Gemini CLI | `~/.gemini/settings.json` |
|
|
18
|
+
| `cursor` | Cursor Editor | `~/.cursor/mcp.json` |
|
|
19
|
+
| `codex` | OpenAI Codex | `~/.codex/config.toml` |
|
|
20
|
+
|
|
21
|
+
### Exemplos
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Claude Code
|
|
25
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code --x-api-key ilu_...
|
|
26
|
+
|
|
27
|
+
# Gemini
|
|
28
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client gemini --x-api-key ilu_...
|
|
29
|
+
|
|
30
|
+
# Cursor
|
|
31
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client cursor --x-api-key ilu_...
|
|
32
|
+
|
|
33
|
+
# OpenAI Codex
|
|
34
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client codex --x-api-key ilu_...
|
|
35
|
+
|
|
36
|
+
# Todos os clientes de uma vez
|
|
37
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --x-api-key ilu_...
|
|
38
|
+
|
|
39
|
+
# Múltiplos clientes específicos
|
|
40
|
+
npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code,gemini --x-api-key ilu_...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## O que o comando faz?
|
|
44
|
+
|
|
45
|
+
1. Lê o arquivo de configuração do cliente de IA (se existir)
|
|
46
|
+
2. Injeta (ou atualiza) a entrada `IluminMCP` em `mcpServers`
|
|
47
|
+
3. Preserva todo o restante do arquivo intacto
|
|
48
|
+
4. Exibe o status (`instalado` ou `atualizado`) por cliente
|
|
49
|
+
|
|
50
|
+
## Obter sua API Key
|
|
51
|
+
|
|
52
|
+
Acesse [ilumin.app](https://ilumin.app) e gere sua chave em **Configurações → API Keys**.
|
|
53
|
+
|
|
54
|
+
## Documentação
|
|
55
|
+
|
|
56
|
+
→ https://ilumin.app/docs/mcp
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/claude-code.ts
|
|
3
|
+
*
|
|
4
|
+
* Claude Code armazena os MCPs dentro de ~/.claude.json (arquivo grande com sessões).
|
|
5
|
+
* A estratégia segura é ler, mesclar apenas a chave mcpServers e reescrever.
|
|
6
|
+
*/
|
|
7
|
+
export interface InstallResult {
|
|
8
|
+
filePath: string;
|
|
9
|
+
isNew: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function installClaudeCode(apiKey: string): InstallResult;
|
|
12
|
+
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAM/D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/claude-code.ts
|
|
3
|
+
*
|
|
4
|
+
* Claude Code armazena os MCPs dentro de ~/.claude.json (arquivo grande com sessões).
|
|
5
|
+
* A estratégia segura é ler, mesclar apenas a chave mcpServers e reescrever.
|
|
6
|
+
*/
|
|
7
|
+
import path from "path";
|
|
8
|
+
import { homeDir, readJsonSafe, writeJsonSafe } from "../utils/fs.js";
|
|
9
|
+
import { upsertMcpServer } from "./config.js";
|
|
10
|
+
const CLAUDE_JSON_PATH = path.join(homeDir(), ".claude.json");
|
|
11
|
+
export function installClaudeCode(apiKey) {
|
|
12
|
+
// Lê o arquivo inteiro (preserva sessões, histórico, etc.)
|
|
13
|
+
const existing = readJsonSafe(CLAUDE_JSON_PATH);
|
|
14
|
+
const { data, isNew } = upsertMcpServer(existing, apiKey);
|
|
15
|
+
writeJsonSafe(CLAUDE_JSON_PATH, data);
|
|
16
|
+
return { filePath: CLAUDE_JSON_PATH, isNew };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAO9D,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC5C,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,YAAY,CAA0B,gBAAgB,CAAC,CAAC;IACzE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/claude-desktop.ts
|
|
3
|
+
*
|
|
4
|
+
* Claude Desktop usa arquivos de config diferentes por OS:
|
|
5
|
+
* - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
6
|
+
* - Windows: %APPDATA%\Claude\claude_desktop_config.json
|
|
7
|
+
* - Linux: ~/.config/Claude/claude_desktop_config.json
|
|
8
|
+
*/
|
|
9
|
+
export interface InstallResult {
|
|
10
|
+
filePath: string;
|
|
11
|
+
isNew: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function installClaudeDesktop(apiKey: string): InstallResult;
|
|
14
|
+
//# sourceMappingURL=claude-desktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAElE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/claude-desktop.ts
|
|
3
|
+
*
|
|
4
|
+
* Claude Desktop usa arquivos de config diferentes por OS:
|
|
5
|
+
* - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
6
|
+
* - Windows: %APPDATA%\Claude\claude_desktop_config.json
|
|
7
|
+
* - Linux: ~/.config/Claude/claude_desktop_config.json
|
|
8
|
+
*/
|
|
9
|
+
import { claudeDesktopConfigPath, installToJsonFile } from "./config.js";
|
|
10
|
+
export function installClaudeDesktop(apiKey) {
|
|
11
|
+
return installToJsonFile(claudeDesktopConfigPath(), apiKey);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=claude-desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOzE,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,OAAO,iBAAiB,CAAC,uBAAuB,EAAE,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clients/codex.ts
|
|
3
|
+
*
|
|
4
|
+
* OpenAI Codex usa ~/.codex/config.toml com a estrutura:
|
|
5
|
+
*
|
|
6
|
+
* [mcp_servers.IluminMCP]
|
|
7
|
+
* command = "npx"
|
|
8
|
+
* args = ["-y", "ilumin-mcp", "--x-api-key", "SUA_CHAVE"]
|
|
9
|
+
*
|
|
10
|
+
* O arquivo pode conter outras configurações do Codex que devem ser preservadas.
|
|
11
|
+
*/
|
|
12
|
+
export interface InstallResult {
|
|
13
|
+
filePath: string;
|
|
14
|
+
isNew: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function installCodex(apiKey: string): InstallResult;
|
|
17
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/clients/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAuB1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clients/codex.ts
|
|
3
|
+
*
|
|
4
|
+
* OpenAI Codex usa ~/.codex/config.toml com a estrutura:
|
|
5
|
+
*
|
|
6
|
+
* [mcp_servers.IluminMCP]
|
|
7
|
+
* command = "npx"
|
|
8
|
+
* args = ["-y", "ilumin-mcp", "--x-api-key", "SUA_CHAVE"]
|
|
9
|
+
*
|
|
10
|
+
* O arquivo pode conter outras configurações do Codex que devem ser preservadas.
|
|
11
|
+
*/
|
|
12
|
+
import path from "path";
|
|
13
|
+
import { homeDir } from "../utils/fs.js";
|
|
14
|
+
import { readTomlSafe, writeTomlSafe } from "../utils/toml.js";
|
|
15
|
+
const SERVER_NAME = "IluminMCP";
|
|
16
|
+
const CODEX_CONFIG_PATH = path.join(homeDir(), ".codex", "config.toml");
|
|
17
|
+
export function installCodex(apiKey) {
|
|
18
|
+
const existing = readTomlSafe(CODEX_CONFIG_PATH);
|
|
19
|
+
// Garante que mcp_servers existe
|
|
20
|
+
const mcpServers = existing.mcp_servers ?? {};
|
|
21
|
+
const isNew = !(SERVER_NAME in mcpServers);
|
|
22
|
+
// Estrutura exigida pelo Codex (STDIO server)
|
|
23
|
+
const iluminEntry = {
|
|
24
|
+
command: "npx",
|
|
25
|
+
args: ["-y", "ilumin-mcp", "--x-api-key", apiKey],
|
|
26
|
+
};
|
|
27
|
+
const updated = {
|
|
28
|
+
...existing,
|
|
29
|
+
mcp_servers: {
|
|
30
|
+
...mcpServers,
|
|
31
|
+
[SERVER_NAME]: iluminEntry,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
writeTomlSafe(CODEX_CONFIG_PATH, updated);
|
|
35
|
+
return { filePath: CODEX_CONFIG_PATH, isNew };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/clients/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAOxE,MAAM,UAAU,YAAY,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEjD,iCAAiC;IACjC,MAAM,UAAU,GAAI,QAAQ,CAAC,WAAuC,IAAI,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC,CAAC;IAE3C,8CAA8C;IAC9C,MAAM,WAAW,GAAG;QAChB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC;KACpD,CAAC;IAEF,MAAM,OAAO,GAAG;QACZ,GAAG,QAAQ;QACX,WAAW,EAAE;YACT,GAAG,UAAU;YACb,CAAC,WAAW,CAAC,EAAE,WAAW;SAC7B;KACJ,CAAC;IAEF,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { McpServerConfig } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Constrói a config do IluminMCP com a chave API fornecida
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildIluminConfig(apiKey: string): McpServerConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Injeta ou atualiza a entrada IluminMCP em um mapa mcpServers existente.
|
|
8
|
+
* Retorna { data, isNew } onde isNew indica se foi inserção ou atualização.
|
|
9
|
+
*/
|
|
10
|
+
export declare function upsertMcpServer(existing: Record<string, unknown>, apiKey: string): {
|
|
11
|
+
data: Record<string, unknown>;
|
|
12
|
+
isNew: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Lê, atualiza e escreve uma config JSON de MCP genérica (cursor, claude-desktop).
|
|
16
|
+
* Retorna { filePath, isNew }
|
|
17
|
+
*/
|
|
18
|
+
export declare function installToJsonFile(filePath: string, apiKey: string): {
|
|
19
|
+
filePath: string;
|
|
20
|
+
isNew: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Retorna o caminho global do config do Cursor
|
|
24
|
+
*/
|
|
25
|
+
export declare function cursorConfigPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Retorna o caminho global do config do Claude Desktop por OS
|
|
28
|
+
*/
|
|
29
|
+
export declare function claudeDesktopConfigPath(): string;
|
|
30
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/clients/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAanD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAKxG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAYhD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { homeDir, readJsonSafe, writeJsonSafe } from "../utils/fs.js";
|
|
3
|
+
const SERVER_NAME = "IluminMCP";
|
|
4
|
+
/**
|
|
5
|
+
* Constrói a config do IluminMCP com a chave API fornecida
|
|
6
|
+
*/
|
|
7
|
+
export function buildIluminConfig(apiKey) {
|
|
8
|
+
return {
|
|
9
|
+
command: "npx",
|
|
10
|
+
args: ["-y", "ilumin-mcp", "--x-api-key", apiKey],
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Injeta ou atualiza a entrada IluminMCP em um mapa mcpServers existente.
|
|
15
|
+
* Retorna { data, isNew } onde isNew indica se foi inserção ou atualização.
|
|
16
|
+
*/
|
|
17
|
+
export function upsertMcpServer(existing, apiKey) {
|
|
18
|
+
const servers = existing.mcpServers ?? {};
|
|
19
|
+
const isNew = !(SERVER_NAME in servers);
|
|
20
|
+
return {
|
|
21
|
+
data: {
|
|
22
|
+
...existing,
|
|
23
|
+
mcpServers: {
|
|
24
|
+
...servers,
|
|
25
|
+
[SERVER_NAME]: buildIluminConfig(apiKey),
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
isNew,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Lê, atualiza e escreve uma config JSON de MCP genérica (cursor, claude-desktop).
|
|
33
|
+
* Retorna { filePath, isNew }
|
|
34
|
+
*/
|
|
35
|
+
export function installToJsonFile(filePath, apiKey) {
|
|
36
|
+
const existing = readJsonSafe(filePath);
|
|
37
|
+
const { data, isNew } = upsertMcpServer(existing, apiKey);
|
|
38
|
+
writeJsonSafe(filePath, data);
|
|
39
|
+
return { filePath, isNew };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Retorna o caminho global do config do Cursor
|
|
43
|
+
*/
|
|
44
|
+
export function cursorConfigPath() {
|
|
45
|
+
return path.join(homeDir(), ".cursor", "mcp.json");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Retorna o caminho global do config do Claude Desktop por OS
|
|
49
|
+
*/
|
|
50
|
+
export function claudeDesktopConfigPath() {
|
|
51
|
+
const home = homeDir();
|
|
52
|
+
if (process.platform === "darwin") {
|
|
53
|
+
return path.join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
54
|
+
}
|
|
55
|
+
if (process.platform === "win32") {
|
|
56
|
+
const appData = process.env.APPDATA ?? path.join(home, "AppData", "Roaming");
|
|
57
|
+
return path.join(appData, "Claude", "claude_desktop_config.json");
|
|
58
|
+
}
|
|
59
|
+
// Linux: XDG ou fallback
|
|
60
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME ?? path.join(home, ".config");
|
|
61
|
+
return path.join(xdgConfig, "Claude", "claude_desktop_config.json");
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/clients/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGtE,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC5C,OAAO;QACH,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC;KACpD,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAiC,EACjC,MAAc;IAEd,MAAM,OAAO,GAAI,QAAQ,CAAC,UAAsC,IAAI,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC;IACxC,OAAO;QACH,IAAI,EAAE;YACF,GAAG,QAAQ;YACX,UAAU,EAAE;gBACR,GAAG,OAAO;gBACV,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;aAC3C;SACJ;QACD,KAAK;KACR,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAc;IAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IACtE,CAAC;IACD,yBAAyB;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/cursor.ts
|
|
3
|
+
*
|
|
4
|
+
* Cursor usa ~/.cursor/mcp.json (global) com campo mcpServers.
|
|
5
|
+
*/
|
|
6
|
+
export interface InstallResult {
|
|
7
|
+
filePath: string;
|
|
8
|
+
isNew: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function installCursor(apiKey: string): InstallResult;
|
|
11
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAE3D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/cursor.ts
|
|
3
|
+
*
|
|
4
|
+
* Cursor usa ~/.cursor/mcp.json (global) com campo mcpServers.
|
|
5
|
+
*/
|
|
6
|
+
import { cursorConfigPath, installToJsonFile } from "./config.js";
|
|
7
|
+
export function installCursor(apiKey) {
|
|
8
|
+
return installToJsonFile(cursorConfigPath(), apiKey);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOlE,MAAM,UAAU,aAAa,CAAC,MAAc;IACxC,OAAO,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/gemini.ts
|
|
3
|
+
*
|
|
4
|
+
* Gemini CLI usa ~/.gemini/settings.json com campo mcpServers.
|
|
5
|
+
*/
|
|
6
|
+
export interface InstallResult {
|
|
7
|
+
filePath: string;
|
|
8
|
+
isNew: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function installGemini(apiKey: string): InstallResult;
|
|
11
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/clients/gemini.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAG3D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client/gemini.ts
|
|
3
|
+
*
|
|
4
|
+
* Gemini CLI usa ~/.gemini/settings.json com campo mcpServers.
|
|
5
|
+
*/
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { homeDir } from "../utils/fs.js";
|
|
8
|
+
import { installToJsonFile } from "./config.js";
|
|
9
|
+
const GEMINI_SETTINGS_PATH = path.join(homeDir(), ".gemini", "settings.json");
|
|
10
|
+
export function installGemini(apiKey) {
|
|
11
|
+
const result = installToJsonFile(GEMINI_SETTINGS_PATH, apiKey);
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/clients/gemini.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAO9E,MAAM,UAAU,aAAa,CAAC,MAAc;IACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* commands/mcp-add.ts
|
|
3
|
+
*
|
|
4
|
+
* Implementa o subcomando: ilumin mcp add <server> [--client <client>] [--x-api-key <key>]
|
|
5
|
+
* Suporta: claude-code, claude-desktop, gemini, cursor
|
|
6
|
+
*/
|
|
7
|
+
interface MpcAddOptions {
|
|
8
|
+
client?: string;
|
|
9
|
+
xApiKey?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runMcpAdd(server: string, options: MpcAddOptions): void;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=mcp-add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-add.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-add.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAmEtE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* commands/mcp-add.ts
|
|
3
|
+
*
|
|
4
|
+
* Implementa o subcomando: ilumin mcp add <server> [--client <client>] [--x-api-key <key>]
|
|
5
|
+
* Suporta: claude-code, claude-desktop, gemini, cursor
|
|
6
|
+
*/
|
|
7
|
+
import kleur from "kleur";
|
|
8
|
+
import { printSuccess, printError, printWarning, printInfo } from "../utils/logger.js";
|
|
9
|
+
import { installClaudeCode } from "../clients/claude-code.js";
|
|
10
|
+
import { installClaudeDesktop } from "../clients/claude-desktop.js";
|
|
11
|
+
import { installGemini } from "../clients/gemini.js";
|
|
12
|
+
import { installCursor } from "../clients/cursor.js";
|
|
13
|
+
import { installCodex } from "../clients/codex.js";
|
|
14
|
+
// Clientes disponíveis com metadados
|
|
15
|
+
const SUPPORTED_CLIENTS = {
|
|
16
|
+
"claude-code": { label: "Claude Code" },
|
|
17
|
+
"claude-desktop": { label: "Claude Desktop" },
|
|
18
|
+
"gemini": { label: "Gemini CLI" },
|
|
19
|
+
"cursor": { label: "Cursor" },
|
|
20
|
+
"codex": { label: "OpenAI Codex" },
|
|
21
|
+
};
|
|
22
|
+
// Servidor suportado (pode expandir no futuro)
|
|
23
|
+
const SUPPORTED_SERVERS = ["ilumin"];
|
|
24
|
+
export function runMcpAdd(server, options) {
|
|
25
|
+
// Valida o servidor
|
|
26
|
+
if (!SUPPORTED_SERVERS.includes(server.toLowerCase())) {
|
|
27
|
+
printError(`Servidor desconhecido: "${server}". Disponíveis: ${SUPPORTED_SERVERS.join(", ")}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// Valida a API key
|
|
31
|
+
const apiKey = options.xApiKey?.trim();
|
|
32
|
+
if (!apiKey) {
|
|
33
|
+
printError("A flag --x-api-key é obrigatória.");
|
|
34
|
+
console.log();
|
|
35
|
+
console.log(kleur.gray(" Exemplo:"));
|
|
36
|
+
console.log(kleur.cyan(" npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code --x-api-key SUA_CHAVE"));
|
|
37
|
+
console.log();
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// Resolve a lista de clientes
|
|
41
|
+
const clientsRaw = options.client?.trim().toLowerCase();
|
|
42
|
+
let targets = [];
|
|
43
|
+
if (!clientsRaw) {
|
|
44
|
+
// Sem --client: instala em todos
|
|
45
|
+
targets = Object.keys(SUPPORTED_CLIENTS);
|
|
46
|
+
printInfo("Nenhum cliente especificado — instalando em todos os clientes disponíveis...");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Suporta múltiplos: --client claude-code,gemini
|
|
50
|
+
targets = clientsRaw.split(",").map((c) => c.trim());
|
|
51
|
+
const invalid = targets.filter((c) => !(c in SUPPORTED_CLIENTS));
|
|
52
|
+
if (invalid.length > 0) {
|
|
53
|
+
printError(`Cliente(s) inválido(s): ${invalid.join(", ")}`);
|
|
54
|
+
console.log(kleur.gray(` Disponíveis: ${Object.keys(SUPPORTED_CLIENTS).join(", ")}`));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(kleur.bold(` Instalando ${kleur.magenta("IluminMCP")} para: ${targets.map((t) => SUPPORTED_CLIENTS[t].label).join(", ")}`));
|
|
60
|
+
console.log();
|
|
61
|
+
let hasError = false;
|
|
62
|
+
for (const client of targets) {
|
|
63
|
+
const label = SUPPORTED_CLIENTS[client].label;
|
|
64
|
+
try {
|
|
65
|
+
const result = installForClient(client, apiKey);
|
|
66
|
+
const action = result.isNew ? "instalado" : "atualizado";
|
|
67
|
+
printSuccess(`${label}: ${action} em ${kleur.gray(result.filePath)}`);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
hasError = true;
|
|
71
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
72
|
+
printError(`${label}: ${msg}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
console.log();
|
|
76
|
+
if (!hasError) {
|
|
77
|
+
printSuccess("Tudo pronto! Reinicie seu cliente de IA para carregar o novo MCP.");
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(kleur.gray(" Documentação: https://ilumin.app/docs/mcp"));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
printWarning("Instalação concluída com erros. Verifique as mensagens acima.");
|
|
83
|
+
}
|
|
84
|
+
console.log();
|
|
85
|
+
}
|
|
86
|
+
function installForClient(client, apiKey) {
|
|
87
|
+
switch (client) {
|
|
88
|
+
case "claude-code": return installClaudeCode(apiKey);
|
|
89
|
+
case "claude-desktop": return installClaudeDesktop(apiKey);
|
|
90
|
+
case "gemini": return installGemini(apiKey);
|
|
91
|
+
case "cursor": return installCursor(apiKey);
|
|
92
|
+
case "codex": return installCodex(apiKey);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=mcp-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-add.js","sourceRoot":"","sources":["../../src/commands/mcp-add.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @iluminapp/cli — Entry point
|
|
4
|
+
*
|
|
5
|
+
* Uso:
|
|
6
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code --x-api-key SUA_CHAVE
|
|
7
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client gemini --x-api-key SUA_CHAVE
|
|
8
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client cursor --x-api-key SUA_CHAVE
|
|
9
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --x-api-key SUA_CHAVE (todos os clientes)
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @iluminapp/cli — Entry point
|
|
4
|
+
*
|
|
5
|
+
* Uso:
|
|
6
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client claude-code --x-api-key SUA_CHAVE
|
|
7
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client gemini --x-api-key SUA_CHAVE
|
|
8
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --client cursor --x-api-key SUA_CHAVE
|
|
9
|
+
* npx -y @iluminapp/cli@latest mcp add ilumin --x-api-key SUA_CHAVE (todos os clientes)
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
import { printBrand } from "./utils/logger.js";
|
|
13
|
+
import { runMcpAdd } from "./commands/mcp-add.js";
|
|
14
|
+
const program = new Command();
|
|
15
|
+
program
|
|
16
|
+
.name("ilumin")
|
|
17
|
+
.description("Ilumin Cloud CLI")
|
|
18
|
+
.version("1.0.0");
|
|
19
|
+
// Comando: ilumin mcp
|
|
20
|
+
const mcp = program.command("mcp").description("Gerenciamento de MCP servers");
|
|
21
|
+
// Subcomando: ilumin mcp add <server>
|
|
22
|
+
mcp
|
|
23
|
+
.command("add <server>")
|
|
24
|
+
.description("Instala um MCP server da Ilumin em clientes de IA")
|
|
25
|
+
.option("--client <clients>", "Cliente(s) de IA alvo. Opções: claude-code, claude-desktop, gemini, cursor, codex. Use vírgula para múltiplos. Omita para instalar em todos.")
|
|
26
|
+
.option("--x-api-key <key>", "Sua chave de API da Ilumin Cloud (obrigatório)")
|
|
27
|
+
.action((server, options) => {
|
|
28
|
+
printBrand();
|
|
29
|
+
runMcpAdd(server, options);
|
|
30
|
+
});
|
|
31
|
+
program.parse(process.argv);
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kBAAkB,CAAC;KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,sBAAsB;AACtB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;AAE/E,sCAAsC;AACtC,GAAG;KACE,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CACH,oBAAoB,EACpB,8IAA8I,CACjJ;KACA,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;KAC7E,MAAM,CAAC,CAAC,MAAc,EAAE,OAAO,EAAE,EAAE;IAChC,UAAU,EAAE,CAAC;IACb,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface McpServerConfig {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
env?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export interface McpServersMap {
|
|
7
|
+
mcpServers: Record<string, McpServerConfig>;
|
|
8
|
+
}
|
|
9
|
+
export type SupportedClient = "claude-code" | "claude-desktop" | "gemini" | "cursor" | "codex";
|
|
10
|
+
export interface AddOptions {
|
|
11
|
+
client: SupportedClient | SupportedClient[];
|
|
12
|
+
xApiKey: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/C;AAED,MAAM,MAAM,eAAe,GACrB,aAAa,GACb,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,OAAO,CAAC;AAEd,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retorna o caminho do diretório home do usuário
|
|
3
|
+
*/
|
|
4
|
+
export declare function homeDir(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Lê um arquivo JSON com segurança; retorna {} se não existir ou for inválido
|
|
7
|
+
*/
|
|
8
|
+
export declare function readJsonSafe<T extends object = Record<string, unknown>>(filePath: string): T;
|
|
9
|
+
/**
|
|
10
|
+
* Escreve um objeto como JSON em um arquivo (cria diretórios se necessário)
|
|
11
|
+
*/
|
|
12
|
+
export declare function writeJsonSafe(filePath: string, data: unknown): void;
|
|
13
|
+
/**
|
|
14
|
+
* Verifica se o sistema operacional é Windows
|
|
15
|
+
*/
|
|
16
|
+
export declare function isWindows(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Verifica se o sistema operacional é macOS
|
|
19
|
+
*/
|
|
20
|
+
export declare function isMac(): boolean;
|
|
21
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAU5F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAE/B"}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
/**
|
|
5
|
+
* Retorna o caminho do diretório home do usuário
|
|
6
|
+
*/
|
|
7
|
+
export function homeDir() {
|
|
8
|
+
return os.homedir();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Lê um arquivo JSON com segurança; retorna {} se não existir ou for inválido
|
|
12
|
+
*/
|
|
13
|
+
export function readJsonSafe(filePath) {
|
|
14
|
+
if (!fs.existsSync(filePath)) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
19
|
+
return JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Escreve um objeto como JSON em um arquivo (cria diretórios se necessário)
|
|
27
|
+
*/
|
|
28
|
+
export function writeJsonSafe(filePath, data) {
|
|
29
|
+
const dir = path.dirname(filePath);
|
|
30
|
+
if (!fs.existsSync(dir)) {
|
|
31
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Verifica se o sistema operacional é Windows
|
|
37
|
+
*/
|
|
38
|
+
export function isWindows() {
|
|
39
|
+
return process.platform === "win32";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Verifica se o sistema operacional é macOS
|
|
43
|
+
*/
|
|
44
|
+
export function isMac() {
|
|
45
|
+
return process.platform === "darwin";
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,OAAO;IACnB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAA6C,QAAgB;IACrF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAO,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAO,CAAC;IACnB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAa;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK;IACjB,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const symbols: {
|
|
2
|
+
success: string;
|
|
3
|
+
error: string;
|
|
4
|
+
warning: string;
|
|
5
|
+
info: string;
|
|
6
|
+
arrow: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function printSuccess(msg: string): void;
|
|
9
|
+
export declare function printError(msg: string): void;
|
|
10
|
+
export declare function printWarning(msg: string): void;
|
|
11
|
+
export declare function printInfo(msg: string): void;
|
|
12
|
+
export declare function printBrand(): void;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO;;;;;;CAMnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAKjC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import kleur from "kleur";
|
|
2
|
+
// Símbolos visuais para outputs consistentes
|
|
3
|
+
export const symbols = {
|
|
4
|
+
success: "✅",
|
|
5
|
+
error: "❌",
|
|
6
|
+
warning: "⚠️ ",
|
|
7
|
+
info: "ℹ️ ",
|
|
8
|
+
arrow: "→",
|
|
9
|
+
};
|
|
10
|
+
export function printSuccess(msg) {
|
|
11
|
+
console.log(`${symbols.success} ${kleur.green(msg)}`);
|
|
12
|
+
}
|
|
13
|
+
export function printError(msg) {
|
|
14
|
+
console.error(`${symbols.error} ${kleur.red(msg)}`);
|
|
15
|
+
}
|
|
16
|
+
export function printWarning(msg) {
|
|
17
|
+
console.warn(`${symbols.warning} ${kleur.yellow(msg)}`);
|
|
18
|
+
}
|
|
19
|
+
export function printInfo(msg) {
|
|
20
|
+
console.log(`${symbols.info} ${kleur.cyan(msg)}`);
|
|
21
|
+
}
|
|
22
|
+
export function printBrand() {
|
|
23
|
+
console.log();
|
|
24
|
+
console.log(kleur.bold().magenta(" ⚡ Ilumin Cloud MCP Installer"));
|
|
25
|
+
console.log(kleur.gray(" https://ilumin.app"));
|
|
26
|
+
console.log();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,OAAO,EAAE,GAAG;IACZ,KAAK,EAAI,GAAG;IACZ,OAAO,EAAE,KAAK;IACd,IAAI,EAAK,KAAK;IACd,KAAK,EAAI,GAAG;CACf,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IAClC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils/toml.ts
|
|
3
|
+
*
|
|
4
|
+
* Lê e escreve arquivos TOML preservando o conteúdo existente.
|
|
5
|
+
* Usa smol-toml para parse/stringify.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Lê um arquivo TOML com segurança; retorna {} se não existir ou for inválido.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readTomlSafe<T extends Record<string, unknown> = Record<string, unknown>>(filePath: string): T;
|
|
11
|
+
/**
|
|
12
|
+
* Escreve um objeto como TOML (cria diretórios se necessário).
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeTomlSafe(filePath: string, data: Record<string, unknown>): void;
|
|
15
|
+
//# sourceMappingURL=toml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toml.d.ts","sourceRoot":"","sources":["../../src/utils/toml.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpF,QAAQ,EAAE,MAAM,GACjB,CAAC,CAUH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAMnF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils/toml.ts
|
|
3
|
+
*
|
|
4
|
+
* Lê e escreve arquivos TOML preservando o conteúdo existente.
|
|
5
|
+
* Usa smol-toml para parse/stringify.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { parse, stringify } from "smol-toml";
|
|
10
|
+
/**
|
|
11
|
+
* Lê um arquivo TOML com segurança; retorna {} se não existir ou for inválido.
|
|
12
|
+
*/
|
|
13
|
+
export function readTomlSafe(filePath) {
|
|
14
|
+
if (!fs.existsSync(filePath)) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
19
|
+
return parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Escreve um objeto como TOML (cria diretórios se necessário).
|
|
27
|
+
*/
|
|
28
|
+
export function writeTomlSafe(filePath, data) {
|
|
29
|
+
const dir = path.dirname(filePath);
|
|
30
|
+
if (!fs.existsSync(dir)) {
|
|
31
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
fs.writeFileSync(filePath, stringify(data), "utf-8");
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=toml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toml.js","sourceRoot":"","sources":["../../src/utils/toml.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,YAAY,CACxB,QAAgB;IAEhB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAO,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,GAAG,CAAM,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAO,CAAC;IACnB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAA6B;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ilumin-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Ilumin Cloud CLI — instala e gerencia o MCP da Ilumin em vários clientes de IA",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ilumin": "dist/index.js",
|
|
9
|
+
"ilumin-cli": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc && chmod +x dist/index.js",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"commander": "^14.0.2",
|
|
18
|
+
"kleur": "^4.1.5",
|
|
19
|
+
"smol-toml": "^1.6.1"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^20.11.0",
|
|
23
|
+
"typescript": "^5.3.3"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18.0.0"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"ilumin",
|
|
30
|
+
"mcp",
|
|
31
|
+
"cli",
|
|
32
|
+
"ai",
|
|
33
|
+
"claude",
|
|
34
|
+
"gemini",
|
|
35
|
+
"cursor"
|
|
36
|
+
],
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/iluminapp/ilumin-mcp"
|
|
41
|
+
}
|
|
42
|
+
}
|