next-finance-mcp 0.9.13 → 0.9.14
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/dist/client.d.ts +3 -2
- package/dist/client.js +19 -11
- package/dist/index.js +10 -10
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -113,8 +113,9 @@ export declare function atualizarOpenFinance(nomeConta: string): Promise<{
|
|
|
113
113
|
sucesso: boolean;
|
|
114
114
|
mensagem: string;
|
|
115
115
|
}>;
|
|
116
|
-
/** Solicita o extrato OF (faz pull do banco para o período) — POST JSON web.
|
|
117
|
-
|
|
116
|
+
/** Solicita o extrato OF (faz pull do banco para o período) — POST JSON web.
|
|
117
|
+
* Período default: últimos 30 dias. */
|
|
118
|
+
export declare function obterExtratoOpenFinance(nomeConta: string, dataInicioOpt?: string, dataFimOpt?: string): Promise<{
|
|
118
119
|
conta: string;
|
|
119
120
|
sucesso: boolean;
|
|
120
121
|
mensagem: string;
|
package/dist/client.js
CHANGED
|
@@ -646,6 +646,18 @@ export async function listarTiposConta() {
|
|
|
646
646
|
const tipos = arr.map(t => ({ nome: String(t["Nome"] ?? t["Descricao"] ?? "") })).filter(t => t.nome);
|
|
647
647
|
return { tipos };
|
|
648
648
|
}
|
|
649
|
+
// ── Helpers de datas padrão ──────────────────────────────────────────────────
|
|
650
|
+
// Default consistente em toda a API: últimos 30 dias terminando hoje.
|
|
651
|
+
function isoDate(d) { return d.toISOString().slice(0, 10); }
|
|
652
|
+
function defaultsUltimos30Dias(opts) {
|
|
653
|
+
const hoje = new Date();
|
|
654
|
+
const dataFim = opts.dataFim ?? isoDate(hoje);
|
|
655
|
+
// 30 dias atrás = hoje - 30 (inclusive)
|
|
656
|
+
const trintaDiasAtras = new Date(hoje);
|
|
657
|
+
trintaDiasAtras.setDate(trintaDiasAtras.getDate() - 30);
|
|
658
|
+
const dataInicio = opts.dataInicio ?? isoDate(trintaDiasAtras);
|
|
659
|
+
return { dataInicio, dataFim };
|
|
660
|
+
}
|
|
649
661
|
/** Resolve um nome de conta → IdConta interno, exigindo match único (não expõe ID). */
|
|
650
662
|
async function resolverIdConta(nome) {
|
|
651
663
|
const { contas } = await fetchContas();
|
|
@@ -709,9 +721,11 @@ export async function atualizarOpenFinance(nomeConta) {
|
|
|
709
721
|
}
|
|
710
722
|
return { conta: nome, sucesso: true, mensagem: r.text?.trim() || "Sincronização iniciada." };
|
|
711
723
|
}
|
|
712
|
-
/** Solicita o extrato OF (faz pull do banco para o período) — POST JSON web.
|
|
713
|
-
|
|
724
|
+
/** Solicita o extrato OF (faz pull do banco para o período) — POST JSON web.
|
|
725
|
+
* Período default: últimos 30 dias. */
|
|
726
|
+
export async function obterExtratoOpenFinance(nomeConta, dataInicioOpt, dataFimOpt) {
|
|
714
727
|
const { id, nome } = await resolverIdConta(nomeConta);
|
|
728
|
+
const { dataInicio, dataFim } = defaultsUltimos30Dias({ dataInicio: dataInicioOpt, dataFim: dataFimOpt });
|
|
715
729
|
// Endpoint web real (verificado): POST application/json com DataInicio/DataFim em ISO datetime
|
|
716
730
|
const body = JSON.stringify({
|
|
717
731
|
DataInicio: `${dataInicio}T00:00:00`,
|
|
@@ -819,9 +833,7 @@ function slimDespesa(d, comItens) {
|
|
|
819
833
|
return result;
|
|
820
834
|
}
|
|
821
835
|
export async function buscarDespesas(opts = {}) {
|
|
822
|
-
const
|
|
823
|
-
const dataInicio = opts.dataInicio ?? `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, "0")}-01`;
|
|
824
|
-
const dataFim = opts.dataFim ?? today.toISOString().slice(0, 10);
|
|
836
|
+
const { dataInicio, dataFim } = defaultsUltimos30Dias(opts);
|
|
825
837
|
// API exige formato ISO completo com hora
|
|
826
838
|
const raw = await apiPost("/api/Despesa/Filtrar", {
|
|
827
839
|
DataInicio: dataInicio + "T00:00:00.000Z",
|
|
@@ -855,9 +867,7 @@ export async function buscarDespesas(opts = {}) {
|
|
|
855
867
|
};
|
|
856
868
|
}
|
|
857
869
|
export async function buscarItensDespesa(opts = {}) {
|
|
858
|
-
const
|
|
859
|
-
const dataInicio = opts.dataInicio ?? `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, "0")}-01`;
|
|
860
|
-
const dataFim = opts.dataFim ?? today.toISOString().slice(0, 10);
|
|
870
|
+
const { dataInicio, dataFim } = defaultsUltimos30Dias(opts);
|
|
861
871
|
// Resolve nome do fornecedor → ID interno (nunca exposto)
|
|
862
872
|
let pessoaId;
|
|
863
873
|
if (opts.nomeFornecedor?.trim()) {
|
|
@@ -982,9 +992,7 @@ const TIPOS_CONTA_MOVIMENTO = new Set([
|
|
|
982
992
|
"contas em cobrança", "contas em cobranca",
|
|
983
993
|
]);
|
|
984
994
|
export async function buscarLancamentos(opts) {
|
|
985
|
-
const
|
|
986
|
-
const dataInicio = opts.dataInicio ?? `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, "0")}-01`;
|
|
987
|
-
const dataFim = opts.dataFim ?? today.toISOString().slice(0, 10);
|
|
995
|
+
const { dataInicio, dataFim } = defaultsUltimos30Dias(opts);
|
|
988
996
|
const pagina = Math.max(1, opts.pagina ?? 1);
|
|
989
997
|
const limite = Math.min(200, Math.max(1, opts.limite ?? 50));
|
|
990
998
|
// Resolve nome da conta → ID interno (nunca exposto ao usuário)
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
8
8
|
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
9
9
|
import * as client from "./client.js";
|
|
10
10
|
import { openLoginUI } from "./login-server.js";
|
|
11
|
-
const server = new Server({ name: "next-finance-mcp", version: "0.9.
|
|
11
|
+
const server = new Server({ name: "next-finance-mcp", version: "0.9.14" }, { capabilities: { tools: {} } });
|
|
12
12
|
// ── Ferramentas ─────────────────────────────────────────────────────────────
|
|
13
13
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
14
14
|
tools: [
|
|
@@ -100,7 +100,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
100
100
|
type: "object",
|
|
101
101
|
properties: {
|
|
102
102
|
nome_conta: { type: "string", description: "Nome da conta (opcional — omitir busca em todas as contas, ex: 'Nubank', 'Inter')" },
|
|
103
|
-
data_inicio: { type: "string", description: "Data início YYYY-MM-DD (padrão:
|
|
103
|
+
data_inicio: { type: "string", description: "Data início YYYY-MM-DD (padrão: 30 dias atrás)" },
|
|
104
104
|
data_fim: { type: "string", description: "Data fim YYYY-MM-DD (padrão: hoje)" },
|
|
105
105
|
plano_de_contas: { type: "string", description: "Filtra por categoria/plano de contas (ex: 'Restaurante')" },
|
|
106
106
|
centro_de_custo: { type: "string", description: "Filtra por centro de custo" },
|
|
@@ -159,18 +159,18 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
name: "obter_extrato_open_finance",
|
|
162
|
-
description: "Solicita ao banco (via Open Finance) o extrato
|
|
163
|
-
"Diferente de 'atualizar_open_finance' (que só pega o mais recente),
|
|
164
|
-
"
|
|
165
|
-
"para
|
|
162
|
+
description: "Solicita ao banco (via Open Finance) o extrato de uma conta no período. " +
|
|
163
|
+
"Diferente de 'atualizar_open_finance' (que só pega o mais recente), permite " +
|
|
164
|
+
"especificar um intervalo de datas. Default: últimos 30 dias. Após sucesso, " +
|
|
165
|
+
"a conciliação fica pendente no NEXT — finalize no app para os lançamentos aparecerem em 'buscar_lancamentos'.",
|
|
166
166
|
inputSchema: {
|
|
167
167
|
type: "object",
|
|
168
168
|
properties: {
|
|
169
169
|
nome_conta: { type: "string", description: "Nome da conta (ex: 'Inter CC 651549')" },
|
|
170
|
-
data_inicio: { type: "string", description: "Data início YYYY-MM-DD" },
|
|
171
|
-
data_fim: { type: "string", description: "Data fim YYYY-MM-DD" },
|
|
170
|
+
data_inicio: { type: "string", description: "Data início YYYY-MM-DD (padrão: 30 dias atrás)" },
|
|
171
|
+
data_fim: { type: "string", description: "Data fim YYYY-MM-DD (padrão: hoje)" },
|
|
172
172
|
},
|
|
173
|
-
required: ["nome_conta"
|
|
173
|
+
required: ["nome_conta"],
|
|
174
174
|
},
|
|
175
175
|
},
|
|
176
176
|
{
|
|
@@ -182,7 +182,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
182
182
|
inputSchema: {
|
|
183
183
|
type: "object",
|
|
184
184
|
properties: {
|
|
185
|
-
data_inicio: { type: "string", description: "Data início YYYY-MM-DD (padrão:
|
|
185
|
+
data_inicio: { type: "string", description: "Data início YYYY-MM-DD (padrão: 30 dias atrás)" },
|
|
186
186
|
data_fim: { type: "string", description: "Data fim YYYY-MM-DD (padrão: hoje)" },
|
|
187
187
|
nome_fornecedor: { type: "string", description: "Filtra por nome do fornecedor (ex: 'Supermercados BH', 'Epa')" },
|
|
188
188
|
busca: { type: "string", description: "Filtra por número do documento ou tipo" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-finance-mcp",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.14",
|
|
4
4
|
"mcpName": "io.github.paivapiovesan/next-finance",
|
|
5
5
|
"description": "MCP Server para o NEXT Finance (finance.net.br) — login via browser, listagem de carteiras, contas e lançamentos",
|
|
6
6
|
"type": "module",
|