@maxwellmezadre/kotas-mcp 0.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/docs/TOOLS.md ADDED
@@ -0,0 +1,216 @@
1
+ # Tools
2
+
3
+ > Gerado por `bun run docs:tools` a partir de `src/tools/registry.ts`. Não edite à mão.
4
+
5
+ O servidor expõe **16 tools**. Com `KOTAS_READ_ONLY=1` as 3 que escrevem algo (sessão, cache, arquivo) não são registradas.
6
+
7
+ | Tool | Escreve | O que faz |
8
+ | --- | --- | --- |
9
+ | [`auth_status`](#authstatus) | — | Diz se há uma sessão do Kotas salva, de quem ela é e até quando o token vale, e o que já está no cache local. … |
10
+ | [`login`](#login) | sim | Salva uma sessão do Kotas em disco, cifrada. Três caminhos: e-mail e senha (`email`+`password`, ou as variávei… |
11
+ | [`doctor`](#doctor) | — | Diagnóstico camada a camada: configuração, sessão salva, renovação do token, versão do front, grupos, faturas,… |
12
+ | [`sync`](#sync) | sim | Baixa o histórico do Kotas para o cache local. Trabalha em blocos: faz até max_requests chamadas e devolve `do… |
13
+ | [`list_subscriptions`](#listsubscriptions) | — | Lista as assinaturas compartilhadas (grupos) do Kotas a partir do cache local, com o que você paga em cada uma… |
14
+ | [`get_subscription`](#getsubscription) | — | Detalha uma assinatura: plano, o que você paga, o valor cheio do serviço, a taxa da Kotas, vagas, fidelidade e… |
15
+ | [`list_invoices`](#listinvoices) | — | Lista as faturas do Kotas a partir do cache local, da mais recente para a mais antiga. Não usa a rede. ATENÇÃO… |
16
+ | [`get_invoice`](#getinvoice) | — | Detalha uma fatura, com os itens que a compõem. Lê o cache; se os itens ainda não estiverem lá, busca 1 vez na… |
17
+ | [`list_credits`](#listcredits) | — | Lista os lançamentos de crédito do cache com o significado de cada tipo traduzido: adição de saldo, caução da … |
18
+ | [`balance`](#balance) | — | Saldo da carteira Kotas ao vivo (1–2 requisições): disponível, bloqueado (as cauções das inscrições) e pendent… |
19
+ | [`list_payouts`](#listpayouts) | — | Lista os recebimentos como administrador: quanto cada grupo repassa por ciclo, quanto cada membro paga e a dat… |
20
+ | [`purchase_history`](#purchasehistory) | — | Reconstrói a linha do tempo de TODAS as assinaturas já pagas, inclusive as encerradas, a partir das faturas — … |
21
+ | [`spending_summary`](#spendingsummary) | — | Soma os gastos no Kotas agrupados por mês, ano, produto ou situação. Conta apenas faturas PAGAS por padrão: ca… |
22
+ | [`search_services`](#searchservices) | — | Busca serviços no catálogo do Kotas pelo nome (Netflix, Spotify, Google One…) e devolve os planos disponíveis … |
23
+ | [`export`](#export) | sim | Exporta o cache para CSV ou JSON dentro de KOTAS_EXPORT_DIR (por padrão ~/Downloads/kotas-export). Não usa a r… |
24
+ | [`raw_get`](#rawget) | — | Chama uma rota GET da API do Kotas diretamente, com a mesma sessão, o mesmo ritmo e os mesmos headers das outr… |
25
+
26
+ ## `auth_status`
27
+
28
+ Diz se há uma sessão do Kotas salva, de quem ela é e até quando o token vale, e o que já está no cache local. Não usa a rede por padrão. Com verify=true gasta 1 requisição para confirmar que o Kotas ainda aceita a sessão (renovando o token se preciso). Comece por aqui quando outra tool reclamar de sessão. Nunca devolve o valor de um token.
29
+
30
+ **Escreve em disco/cache:** não
31
+
32
+ | Parâmetro | Tipo | Obrigatório | Descrição |
33
+ | --- | --- | --- | --- |
34
+ | `verify` | boolean | — | Também faz 1 chamada ao Kotas para confirmar que a sessão é aceita |
35
+
36
+ ## `login`
37
+
38
+ Salva uma sessão do Kotas em disco, cifrada. Três caminhos: e-mail e senha (`email`+`password`, ou as variáveis KOTAS_EMAIL/KOTAS_SENHA); importando de um navegador já logado (`from_browser`); ou colando os três valores do localStorage (`tokens`). A senha é usada uma vez e nunca é gravada. Se a conta tiver verificação em duas etapas, passe `pin`.
39
+
40
+ **Escreve em disco/cache:** sim
41
+
42
+ | Parâmetro | Tipo | Obrigatório | Descrição |
43
+ | --- | --- | --- | --- |
44
+ | `email` | string (min 3 chars) | — | E-mail da conta Kotas |
45
+ | `password` | string (min 1 chars) | — | Senha; usada uma vez, nunca gravada |
46
+ | `pin` | string (`^\d{4,8}$`) | — | Código de 6 dígitos da verificação em duas etapas |
47
+ | `from_browser` | `arc` \| `chrome` \| `chromium` \| `brave` \| `edge` | — | Importa a sessão do localStorage deste navegador (macOS) |
48
+ | `tokens` | object | — | Sessão colada à mão, do DevTools do navegador |
49
+
50
+ ## `doctor`
51
+
52
+ Diagnóstico camada a camada: configuração, sessão salva, renovação do token, versão do front, grupos, faturas, créditos, recebimentos e cache. Use quando algo falhar de um jeito estranho: ele diz qual camada quebrou. Gasta cerca de 6 requisições (2 com deep=false).
53
+
54
+ **Escreve em disco/cache:** não
55
+
56
+ | Parâmetro | Tipo | Obrigatório | Descrição |
57
+ | --- | --- | --- | --- |
58
+ | `deep` | boolean | — | Também testa grupos, créditos e recebimentos (default true) |
59
+
60
+ ## `sync`
61
+
62
+ Baixa o histórico do Kotas para o cache local. Trabalha em blocos: faz até max_requests chamadas e devolve `done: false` com um `hint`. CHAME DE NOVO com os mesmos parâmetros até `done: true`. Nunca chame em paralelo nem dispare outras tools de rede junto. Varre as faturas dos cinco status (é a única fonte do histórico), depois grupos, créditos e recebimentos. `mode: reparse` reprocessa o que já está no cache sem usar a rede.
63
+
64
+ **Escreve em disco/cache:** sim
65
+
66
+ | Parâmetro | Tipo | Obrigatório | Descrição |
67
+ | --- | --- | --- | --- |
68
+ | `mode` | `incremental` \| `full` \| `reparse` | — | incremental (default depois do primeiro full) para no primeiro bloco sem novidade; full varre tudo; reparse não usa a rede |
69
+ | `max_requests` | integer (≥ 1, ≤ 200) | — | Orçamento de requisições do bloco (default 40) |
70
+ | `with_groups` | boolean | — | Também sincroniza os grupos (default true) |
71
+ | `with_credits` | boolean | — | Também sincroniza os créditos (default true) |
72
+ | `with_payouts` | boolean | — | Também sincroniza os recebimentos de administrador (default true) |
73
+ | `with_invoice_items` | boolean | — | Também busca os itens de cada fatura, 1 requisição por fatura (default true) |
74
+
75
+ ## `list_subscriptions`
76
+
77
+ Lista as assinaturas compartilhadas (grupos) do Kotas a partir do cache local, com o que você paga em cada uma, quantas vagas tem e se você é membro ou administrador. Não usa a rede. Só aparecem grupos que ainda existem na API: um grupo encerrado some do Kotas e só sobrevive nas faturas — para o histórico completo use `purchase_history`.
78
+
79
+ **Escreve em disco/cache:** não
80
+
81
+ | Parâmetro | Tipo | Obrigatório | Descrição |
82
+ | --- | --- | --- | --- |
83
+ | `role` | `todos` \| `membro` \| `administrador` | — | Filtra pelo seu papel no grupo (default todos) |
84
+ | `limit` | integer (≥ 1, ≤ 200) | — | Máximo de itens (default 100) |
85
+ | `compact` | boolean | — | Devolve apenas os campos essenciais, para economizar contexto (default KOTAS_COMPACT) |
86
+
87
+ ## `get_subscription`
88
+
89
+ Detalha uma assinatura: plano, o que você paga, o valor cheio do serviço, a taxa da Kotas, vagas, fidelidade e os participantes com o que cada um paga — a API devolve os participantes tanto para membro quanto para administrador. Lê o cache; se o grupo não estiver lá, busca 1 vez na API. NÃO devolve login nem senha do serviço compartilhado: o kotas-mcp nunca expõe essas credenciais.
90
+
91
+ **Escreve em disco/cache:** não
92
+
93
+ | Parâmetro | Tipo | Obrigatório | Descrição |
94
+ | --- | --- | --- | --- |
95
+ | `group_id` | integer (≥ 1) | sim | Id do grupo no Kotas, como aparece em `list_subscriptions` ou na descrição da fatura |
96
+ | `compact` | boolean | — | Devolve apenas os campos essenciais, para economizar contexto (default KOTAS_COMPACT) |
97
+
98
+ ## `list_invoices`
99
+
100
+ Lista as faturas do Kotas a partir do cache local, da mais recente para a mais antiga. Não usa a rede. ATENÇÃO ao somar: só fatura com status `pago` é dinheiro que saiu da conta — cancelada e estornada não são gasto. O campo a somar é `total`, nunca `amount`. Use `product` para saber de qual assinatura a cobrança era, inclusive de grupos que já foram encerrados.
101
+
102
+ **Escreve em disco/cache:** não
103
+
104
+ | Parâmetro | Tipo | Obrigatório | Descrição |
105
+ | --- | --- | --- | --- |
106
+ | `status` | `pago` \| `pendente` \| `cancelado` \| `atraso` \| `estornado` | — | Filtra por situação da fatura |
107
+ | `from` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Data inicial (YYYY-MM-DD), sobre a data de pagamento ou vencimento |
108
+ | `to` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Data final (YYYY-MM-DD) |
109
+ | `group_id` | integer (≥ 1) | — | Só as faturas deste grupo |
110
+ | `product` | string (min 1 chars) | — | Nome exato do produto, como aparece em `product` |
111
+ | `limit` | integer (≥ 1, ≤ 500) | — | Máximo de itens (default 50) |
112
+ | `offset` | integer (≥ 0) | — | Itens a pular (paginação) |
113
+ | `compact` | boolean | — | Devolve apenas os campos essenciais, para economizar contexto (default KOTAS_COMPACT) |
114
+
115
+ ## `get_invoice`
116
+
117
+ Detalha uma fatura, com os itens que a compõem. Lê o cache; se os itens ainda não estiverem lá, busca 1 vez na API (`fatura/extrato`), porque a listagem devolve `itens: null`.
118
+
119
+ **Escreve em disco/cache:** não
120
+
121
+ | Parâmetro | Tipo | Obrigatório | Descrição |
122
+ | --- | --- | --- | --- |
123
+ | `invoice_id` | integer (≥ 1) | sim | Id da fatura no Kotas, como aparece em `list_invoices` |
124
+
125
+ ## `list_credits`
126
+
127
+ Lista os lançamentos de crédito do cache com o significado de cada tipo traduzido: adição de saldo, caução da inscrição (fica bloqueada), repasse recebido como administrador e estorno de cancelamento. Não usa a rede. É aqui que aparece o dinheiro que ENTROU — as faturas só mostram o que saiu. ATENÇÃO: use `available`, não `amount`. A API zera o valor de face de todo lançamento já consumido, então `amount` vem 0 em quase tudo; `available` é a cifra que existe de verdade e é a que soma com o saldo da carteira.
128
+
129
+ **Escreve em disco/cache:** não
130
+
131
+ | Parâmetro | Tipo | Obrigatório | Descrição |
132
+ | --- | --- | --- | --- |
133
+ | `kind` | `adicaoDeSaldo` \| `caucaoDaInscricao` \| `repasseAdministrador` \| `estornoCancelamento` | — | Filtra pelo tipo do lançamento |
134
+ | `limit` | integer (≥ 1, ≤ 500) | — | Máximo de itens (default 100) |
135
+
136
+ ## `balance`
137
+
138
+ Saldo da carteira Kotas ao vivo (1–2 requisições): disponível, bloqueado (as cauções das inscrições) e pendente, mais a economia acumulada que a própria Kotas calcula. O saldo bloqueado não é dinheiro perdido: volta quando a assinatura é encerrada.
139
+
140
+ **Escreve em disco/cache:** não
141
+
142
+ | Parâmetro | Tipo | Obrigatório | Descrição |
143
+ | --- | --- | --- | --- |
144
+ | `with_savings` | boolean | — | Também busca a economia acumulada (1 requisição extra, default true) |
145
+
146
+ ## `list_payouts`
147
+
148
+ Lista os recebimentos como administrador: quanto cada grupo repassa por ciclo, quanto cada membro paga e a data do próximo pagamento. Lê o cache, não usa a rede. Com group_id devolve também o extrato daquele grupo, participante por participante. Status `Cancelado` significa que o repasse não vai mais acontecer — não some no previsto.
149
+
150
+ **Escreve em disco/cache:** não
151
+
152
+ | Parâmetro | Tipo | Obrigatório | Descrição |
153
+ | --- | --- | --- | --- |
154
+ | `group_id` | integer (≥ 1) | — | Também traz o extrato deste grupo |
155
+ | `only_scheduled` | boolean | — | Só os repasses agendados (default false) |
156
+
157
+ ## `purchase_history`
158
+
159
+ Reconstrói a linha do tempo de TODAS as assinaturas já pagas, inclusive as encerradas, a partir das faturas — que é a única fonte que sobra, porque um grupo cancelado some da API. Para cada produto devolve a primeira e a última fatura, quantos meses foram pagos, o total pago, se ainda está ativo, a caução retida e o que foi recebido como administrador. Grupos que o usuário ADMINISTRA aparecem com `monthsPaid: 0` e `totalPaid: null`: neles não há fatura, o administrador paga o serviço por fora e recebe o rateio dos membros. Não usa a rede.
160
+
161
+ **Escreve em disco/cache:** não
162
+
163
+ | Parâmetro | Tipo | Obrigatório | Descrição |
164
+ | --- | --- | --- | --- |
165
+ | `include_credit_purchases` | boolean | — | Inclui as compras de crédito avulso, que não pertencem a nenhum grupo (default false) |
166
+ | `active_only` | boolean | — | Só as assinaturas que ainda existem hoje (default false) |
167
+
168
+ ## `spending_summary`
169
+
170
+ Soma os gastos no Kotas agrupados por mês, ano, produto ou situação. Conta apenas faturas PAGAS por padrão: cancelada e estornada não são dinheiro que saiu. Não usa a rede. A data usada é a do pagamento e, na falta dela, a do vencimento.
171
+
172
+ **Escreve em disco/cache:** não
173
+
174
+ | Parâmetro | Tipo | Obrigatório | Descrição |
175
+ | --- | --- | --- | --- |
176
+ | `by` | `month` \| `year` \| `product` \| `status` | sim | Como agrupar |
177
+ | `from` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Data inicial (YYYY-MM-DD) |
178
+ | `to` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Data final (YYYY-MM-DD) |
179
+ | `include_unpaid` | boolean | — | Inclui faturas não pagas — só faz sentido com by=status (default false) |
180
+
181
+ ## `search_services`
182
+
183
+ Busca serviços no catálogo do Kotas pelo nome (Netflix, Spotify, Google One…) e devolve os planos disponíveis com o valor cheio e quantas kotas cada um tem. Gasta 1 requisição. Isto é o CATÁLOGO: para o que você já assinou ou pagou, use `purchase_history` ou `list_invoices`.
184
+
185
+ **Escreve em disco/cache:** não
186
+
187
+ | Parâmetro | Tipo | Obrigatório | Descrição |
188
+ | --- | --- | --- | --- |
189
+ | `query` | string (min 2 chars) | sim | Nome ou parte do nome do serviço |
190
+ | `limit` | integer (≥ 1, ≤ 50) | — | Máximo de serviços (default 10) |
191
+
192
+ ## `export`
193
+
194
+ Exporta o cache para CSV ou JSON dentro de KOTAS_EXPORT_DIR (por padrão ~/Downloads/kotas-export). Não usa a rede e não altera nada na conta. Valores saem em reais com 4 casas, do jeito que a Kotas calcula o rateio.
195
+
196
+ **Escreve em disco/cache:** sim
197
+
198
+ | Parâmetro | Tipo | Obrigatório | Descrição |
199
+ | --- | --- | --- | --- |
200
+ | `scope` | `invoices` \| `subscriptions` \| `credits` \| `payouts` \| `history` | sim | O que exportar |
201
+ | `format` | `csv` \| `json` | — | Formato (default csv) |
202
+ | `from` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Só para invoices: data inicial (YYYY-MM-DD) |
203
+ | `to` | string (`^\d{4}-\d{2}-\d{2}$`) | — | Só para invoices: data final (YYYY-MM-DD) |
204
+ | `filename` | string | — | Nome do arquivo, sem caminho; default kotas-<scope>-<data>.<formato> |
205
+
206
+ ## `raw_get`
207
+
208
+ Chama uma rota GET da API do Kotas diretamente, com a mesma sessão, o mesmo ritmo e os mesmos headers das outras tools. Serve para redescobrir um endpoint quando a API muda. Use com parcimônia e nunca em rajada. Somente leitura: qualquer rota com verbo de escrita (cancelar, pagar, retirar, alterar…) é recusada, e as credenciais do serviço compartilhado (`grupo/obter-dados-acesso`) são bloqueadas em qualquer forma.
209
+
210
+ **Escreve em disco/cache:** não
211
+
212
+ | Parâmetro | Tipo | Obrigatório | Descrição |
213
+ | --- | --- | --- | --- |
214
+ | `path` | string (`^[A-Za-z0-9][A-Za-z0-9_/.-]*$`) | sim | Rota relativa, sem barra inicial (ex.: grupo/categorias) |
215
+ | `query` | object | — | Parâmetros de query (ex.: { "page": 1, "pageSize": 50 }) |
216
+ | `max_bytes` | integer (≥ 1024, ≤ 65536) | — | Corta a resposta neste tamanho (default 65536) |
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@maxwellmezadre/kotas-mcp",
3
+ "version": "0.1.0",
4
+ "description": "CLI + servidor MCP para as assinaturas compartilhadas do Kotas (grupos, faturas, créditos, recebimentos e histórico) sobre um núcleo compartilhado",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": { "type": "git", "url": "git+https://github.com/maxwellmezadre/kotas-mcp.git" },
8
+ "homepage": "https://github.com/maxwellmezadre/kotas-mcp#readme",
9
+ "keywords": ["kotas", "cli", "mcp", "subscriptions", "invoices", "assinaturas", "claude"],
10
+ "bin": { "kotas": "dist/bin.js", "kotas-mcp": "dist/mcp-bin.js" },
11
+ "files": ["dist", "SKILL.md", "docs/TOOLS.md", "README.md", "LICENSE"],
12
+ "exports": "./dist/bin.js",
13
+ "publishConfig": { "access": "public" },
14
+ "engines": { "bun": ">=1.3" },
15
+ "scripts": {
16
+ "start": "bun run src/bin.ts",
17
+ "login": "bun run src/bin.ts login",
18
+ "typecheck": "tsc --noEmit",
19
+ "test": "bun test",
20
+ "verify": "bun run scripts/verify.ts",
21
+ "docs:tools": "bun run scripts/gen-tools-doc.ts",
22
+ "build:dist": "bun build src/bin.ts src/mcp-bin.ts --target=bun --packages external --outdir dist",
23
+ "build:binary": "bun build --compile src/bin.ts --outfile kotas",
24
+ "prepublishOnly": "bun run build:dist",
25
+ "setup": "bun run scripts/install.ts"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.30.0",
29
+ "@sinclair/typebox": "^0.34.52",
30
+ "commander": "^15.0.0"
31
+ },
32
+ "devDependencies": { "@types/bun": "^1.4.1", "typescript": "^5" }
33
+ }