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 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
- export declare function obterExtratoOpenFinance(nomeConta: string, dataInicio: string, dataFim: string): Promise<{
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
- export async function obterExtratoOpenFinance(nomeConta, dataInicio, dataFim) {
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 today = new Date();
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 today = new Date();
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 today = new Date();
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.13" }, { capabilities: { tools: {} } });
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: do mês atual)" },
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 completo de uma conta no período. " +
163
- "Diferente de 'atualizar_open_finance' (que só pega o mais recente), este endpoint " +
164
- "permite especificar um intervalo de datas. Após sucesso, use 'buscar_lancamentos' " +
165
- "para ver os lançamentos importados.",
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", "data_inicio", "data_fim"],
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: do mês atual)" },
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.13",
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",