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.
- package/README.md +71 -42
- package/index.mjs +36 -9
- 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
|
-
|
|
19
|
+
Cada usuário gera sua própria chave no app FIN. Zero fricção, nada de tokens compartilhados.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
### Passo 1: Gerar uma API Key
|
|
22
22
|
|
|
23
|
-
|
|
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.
|
|
33
|
-
"
|
|
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
|
-
|
|
58
|
+
### Passo 3: Testar
|
|
42
59
|
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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": "
|
|
79
|
+
"command": "npx",
|
|
80
|
+
"args": ["-y", "fin-app-mcp"],
|
|
55
81
|
"env": {
|
|
56
|
-
"FIN_BASE_URL": "https://fin.
|
|
57
|
-
"FIN_SERVICE_TOKEN": "
|
|
58
|
-
"FIN_USER_ID": "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
17
|
-
const
|
|
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
|
|
20
|
-
console.error("Missing env: FIN_BASE_URL
|
|
32
|
+
if (!BASE_URL) {
|
|
33
|
+
console.error("Missing env: FIN_BASE_URL");
|
|
21
34
|
process.exit(1);
|
|
22
35
|
}
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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.
|
|
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",
|