fin-app-mcp 2.0.0 → 2.1.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.
Files changed (3) hide show
  1. package/README.md +71 -42
  2. package/index.mjs +36 -9
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,13 +14,31 @@ MCP server que expõe as operações do FIN (finanças pessoais) para qualquer L
14
14
  - Uma instância do FIN rodando (local ou na nuvem)
15
15
  - Service token configurado no FIN (endpoint `/api/genius/*`)
16
16
 
17
- ## Setup
17
+ ## Setup (recomendado) — com API Key
18
18
 
19
- ### Opção A: via npx (recomendado zero instalação)
19
+ Cada usuário gera sua própria chave no app FIN. Zero fricção, nada de tokens compartilhados.
20
20
 
21
- Não precisa clonar nem instalar nada. O `npx` baixa e executa automaticamente.
21
+ ### Passo 1: Gerar uma API Key
22
22
 
23
- #### Claude Code (settings.json)
23
+ 1. Acesse o app FIN (web ou mobile)
24
+ 2. Vá em **Configurações → Chaves de API**
25
+ 3. Clique em **"Nova chave"**
26
+ 4. Dê um nome (ex: "Claude Code", "Personal Genius")
27
+ 5. Copie a chave gerada (`fin_live_xxx`) — **ela só é mostrada uma vez**
28
+
29
+ ### Passo 2: Configurar o Claude Code
30
+
31
+ Um único comando:
32
+
33
+ ```bash
34
+ claude mcp add fin-app \
35
+ -s user \
36
+ -e FIN_BASE_URL=https://fin-app-wine.vercel.app \
37
+ -e FIN_API_KEY=fin_live_xxx \
38
+ -- npx -y fin-app-mcp
39
+ ```
40
+
41
+ Ou edite manualmente o `settings.json` do Claude Code:
24
42
 
25
43
  ```json
26
44
  {
@@ -29,40 +47,74 @@ Não precisa clonar nem instalar nada. O `npx` baixa e executa automaticamente.
29
47
  "command": "npx",
30
48
  "args": ["-y", "fin-app-mcp"],
31
49
  "env": {
32
- "FIN_BASE_URL": "https://fin.example.com",
33
- "FIN_SERVICE_TOKEN": "seu-token-aqui",
34
- "FIN_USER_ID": "seu-user-id-aqui"
50
+ "FIN_BASE_URL": "https://fin-app-wine.vercel.app",
51
+ "FIN_API_KEY": "fin_live_xxx"
35
52
  }
36
53
  }
37
54
  }
38
55
  }
39
56
  ```
40
57
 
41
- Reinicie o client MCP. O server deve aparecer com as tools disponíveis.
58
+ ### Passo 3: Testar
42
59
 
43
- ### Opção B: instalação global
60
+ Reinicie o Claude Code. Rode `claude mcp list` — o `fin-app` deve aparecer como conectado. As tools do FIN ficam disponíveis automaticamente.
44
61
 
45
- ```bash
46
- npm install -g fin-app-mcp
47
- ```
62
+ ### Variáveis de ambiente
63
+
64
+ | Variável | Descrição |
65
+ |----------|-----------|
66
+ | `FIN_BASE_URL` | URL base da instância do FIN (ex: `https://fin-app-wine.vercel.app`) |
67
+ | `FIN_API_KEY` | API key pessoal (`fin_live_xxx`) gerada em `/settings/api-keys` |
68
+
69
+ ---
70
+
71
+ ## Setup legado — com Service Token (backward-compat)
72
+
73
+ Modo antigo, ainda suportado. Requer conhecer o `FIN_SERVICE_TOKEN` (env var do deploy) e o UUID do usuário no Supabase.
48
74
 
49
- Claude Code (settings.json):
50
75
  ```json
51
76
  {
52
77
  "mcpServers": {
53
78
  "fin-app": {
54
- "command": "fin-app-mcp",
79
+ "command": "npx",
80
+ "args": ["-y", "fin-app-mcp"],
55
81
  "env": {
56
- "FIN_BASE_URL": "https://fin.example.com",
57
- "FIN_SERVICE_TOKEN": "seu-token-aqui",
58
- "FIN_USER_ID": "seu-user-id-aqui"
82
+ "FIN_BASE_URL": "https://fin-app-wine.vercel.app",
83
+ "FIN_SERVICE_TOKEN": "shared-secret",
84
+ "FIN_USER_ID": "uuid-do-usuario"
59
85
  }
60
86
  }
61
87
  }
62
88
  }
63
89
  ```
64
90
 
65
- ### Opção C: clone local (para desenvolvimento)
91
+ Variáveis:
92
+
93
+ | Variável | Descrição |
94
+ |----------|-----------|
95
+ | `FIN_BASE_URL` | URL base da instância do FIN |
96
+ | `FIN_SERVICE_TOKEN` | Service token compartilhado |
97
+ | `FIN_USER_ID` | UUID do usuário no Supabase |
98
+
99
+ Se `FIN_API_KEY` e as variáveis legadas estiverem setadas juntas, `FIN_API_KEY` tem precedência.
100
+
101
+ ---
102
+
103
+ ## Opções de instalação
104
+
105
+ ### Via npx (padrão)
106
+
107
+ O `npx -y fin-app-mcp` baixa e executa automaticamente. Updates automáticos na próxima invocação.
108
+
109
+ ### Instalação global
110
+
111
+ ```bash
112
+ npm install -g fin-app-mcp
113
+ ```
114
+
115
+ Depois use `"command": "fin-app-mcp"` na config (sem `npx`).
116
+
117
+ ### Clone local (desenvolvimento)
66
118
 
67
119
  ```bash
68
120
  git clone https://github.com/pe-menezes/fin-app.git
@@ -70,30 +122,7 @@ cd fin-app/mcp-server
70
122
  npm install
71
123
  ```
72
124
 
73
- Claude Code (settings.json):
74
- ```json
75
- {
76
- "mcpServers": {
77
- "fin-app": {
78
- "command": "node",
79
- "args": ["/caminho/para/fin-app/mcp-server/index.mjs"],
80
- "env": {
81
- "FIN_BASE_URL": "https://fin.example.com",
82
- "FIN_SERVICE_TOKEN": "seu-token-aqui",
83
- "FIN_USER_ID": "seu-user-id-aqui"
84
- }
85
- }
86
- }
87
- }
88
- ```
89
-
90
- ### Variáveis de ambiente
91
-
92
- | Variável | Descrição |
93
- |----------|-----------|
94
- | `FIN_BASE_URL` | URL base da instância do FIN (ex: `https://fin.example.com` ou `http://localhost:3000`) |
95
- | `FIN_SERVICE_TOKEN` | Service token para autenticação na API Genius |
96
- | `FIN_USER_ID` | UUID do usuário no FIN |
125
+ Aponte o `command` pro `index.mjs` local.
97
126
 
98
127
  ## Resource: Guia do FIN
99
128
 
package/index.mjs CHANGED
@@ -12,20 +12,47 @@ import { join, dirname } from "path";
12
12
  import { fileURLToPath } from "url";
13
13
 
14
14
  // ── Config ──────────────────────────────────────────────────────────
15
+ //
16
+ // Auth modes (in order of preference):
17
+ //
18
+ // 1. Per-user API key (recommended):
19
+ // FIN_BASE_URL=https://fin-app-wine.vercel.app
20
+ // FIN_API_KEY=fin_live_xxx ← gerada em /settings/api-keys no app
21
+ //
22
+ // 2. Legacy shared service token (backward-compat):
23
+ // FIN_BASE_URL=https://fin-app-wine.vercel.app
24
+ // FIN_SERVICE_TOKEN=<shared secret>
25
+ // FIN_USER_ID=<supabase uuid>
26
+ //
15
27
  const BASE_URL = process.env.FIN_BASE_URL;
16
- const TOKEN = process.env.FIN_SERVICE_TOKEN;
17
- const USER_ID = process.env.FIN_USER_ID;
28
+ const API_KEY = process.env.FIN_API_KEY;
29
+ const LEGACY_TOKEN = process.env.FIN_SERVICE_TOKEN;
30
+ const LEGACY_USER_ID = process.env.FIN_USER_ID;
18
31
 
19
- if (!BASE_URL || !TOKEN || !USER_ID) {
20
- console.error("Missing env: FIN_BASE_URL, FIN_SERVICE_TOKEN, FIN_USER_ID");
32
+ if (!BASE_URL) {
33
+ console.error("Missing env: FIN_BASE_URL");
21
34
  process.exit(1);
22
35
  }
23
36
 
24
- const headers = {
25
- Authorization: `Bearer ${TOKEN}`,
26
- "X-Genius-User-Id": USER_ID,
27
- "Content-Type": "application/json",
28
- };
37
+ if (!API_KEY && !(LEGACY_TOKEN && LEGACY_USER_ID)) {
38
+ console.error(
39
+ "Missing auth config. Set FIN_API_KEY (recomendado) ou " +
40
+ "FIN_SERVICE_TOKEN + FIN_USER_ID (legado).\n" +
41
+ "Gere uma API key em: " + BASE_URL + "/settings/api-keys"
42
+ );
43
+ process.exit(1);
44
+ }
45
+
46
+ const headers = API_KEY
47
+ ? {
48
+ Authorization: `Bearer ${API_KEY}`,
49
+ "Content-Type": "application/json",
50
+ }
51
+ : {
52
+ Authorization: `Bearer ${LEGACY_TOKEN}`,
53
+ "X-Genius-User-Id": LEGACY_USER_ID,
54
+ "Content-Type": "application/json",
55
+ };
29
56
 
30
57
  // ── Resource content ────────────────────────────────────────────────
31
58
  const __dirname = dirname(fileURLToPath(import.meta.url));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fin-app-mcp",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "MCP server para o FIN App — finanças pessoais. Expõe tools para agents LLM operarem contas, despesas, faturas de cartão, bills recorrentes e mais.",
5
5
  "type": "module",
6
6
  "main": "index.mjs",