bcb-br-mcp 1.12.0 → 1.14.1

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.
@@ -30,6 +30,8 @@ export type ErrorClass =
30
30
  | "nao_encontrado"
31
31
  /** A fonte falhou ou demorou: 5xx, timeout, payload grande demais. */
32
32
  | "fonte"
33
+ /** Exceção de runtime escapando do handler: é bug NOSSO, não condição da fonte. */
34
+ | "defeito"
33
35
  /** Falhou por outro motivo — se esta classe crescer, é sinal de que falta uma classe. */
34
36
  | "outro";
35
37
  /**
@@ -65,4 +67,27 @@ export declare function paramNames(args: unknown): string;
65
67
  * que é `nao_encontrado` por definição, foi gravada como `fonte`.
66
68
  */
67
69
  export declare function errorText(result: unknown): string;
70
+ /**
71
+ * Classifica uma exceção que ESCAPOU do handler, tendo o objeto do erro em mãos
72
+ * e não só a mensagem.
73
+ *
74
+ * Por que existe. Em 22/09/2026 o `ibge_cnae` respondia
75
+ * `Cannot read properties of undefined (reading 'divisao')` a um código de
76
+ * classe válido — um `TypeError` nosso, nascido de um `[]` da fonte que
77
+ * atravessou a camada de rede. Nenhum padrão de `classifyError` casa com essa
78
+ * frase, então ela caía em `outro`, que já era 13 dos 23 erros da ferramenta na
79
+ * semana. O comentário de `outro` avisava desde o início: *se esta classe
80
+ * crescer, é sinal de que falta uma classe*. Faltava esta. O conserto nasceu no
81
+ * `ibge-br-mcp` 5.1.2 e é o mesmo em toda a frota, porque a classe é a mesma.
82
+ *
83
+ * O sinal é o TIPO, não a frase, e é por isso que esta função existe separada
84
+ * de `classifyError`: `TypeError`, `RangeError`, `ReferenceError` e
85
+ * `SyntaxError` são erros de programa. A fonte não os produz — nós os
86
+ * produzimos ao supor a forma do que ela respondeu. Classificá-los por
87
+ * mensagem seria caçar o texto do motor de JS, que muda entre versões de Node.
88
+ *
89
+ * `classifyError` fica INTACTA: ela recebe mensagem e continua sendo o caminho
90
+ * do erro que NÓS escrevemos.
91
+ */
92
+ export declare function classifyThrown(error: unknown): ErrorClass;
68
93
  //# sourceMappingURL=call-shape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-shape.d.ts","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,qEAAqE;AACrE,MAAM,MAAM,UAAU;AACpB,gHAAgH;AAC9G,UAAU;AACZ,gFAAgF;GAC9E,gBAAgB;AAClB,sEAAsE;GACpE,OAAO;AACT,yFAAyF;GACvF,OAAO,CAAC;AAEZ;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAmEzD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOhD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAcjD"}
1
+ {"version":3,"file":"call-shape.d.ts","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,qEAAqE;AACrE,MAAM,MAAM,UAAU;AACpB,gHAAgH;AAC9G,UAAU;AACZ,gFAAgF;GAC9E,gBAAgB;AAClB,sEAAsE;GACpE,OAAO;AACT,mFAAmF;GACjF,SAAS;AACX,yFAAyF;GACvF,OAAO,CAAC;AAEZ;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAmEzD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOhD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAcjD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAUzD"}
@@ -135,4 +135,35 @@ export function errorText(result) {
135
135
  }
136
136
  return t;
137
137
  }
138
+ /**
139
+ * Classifica uma exceção que ESCAPOU do handler, tendo o objeto do erro em mãos
140
+ * e não só a mensagem.
141
+ *
142
+ * Por que existe. Em 22/09/2026 o `ibge_cnae` respondia
143
+ * `Cannot read properties of undefined (reading 'divisao')` a um código de
144
+ * classe válido — um `TypeError` nosso, nascido de um `[]` da fonte que
145
+ * atravessou a camada de rede. Nenhum padrão de `classifyError` casa com essa
146
+ * frase, então ela caía em `outro`, que já era 13 dos 23 erros da ferramenta na
147
+ * semana. O comentário de `outro` avisava desde o início: *se esta classe
148
+ * crescer, é sinal de que falta uma classe*. Faltava esta. O conserto nasceu no
149
+ * `ibge-br-mcp` 5.1.2 e é o mesmo em toda a frota, porque a classe é a mesma.
150
+ *
151
+ * O sinal é o TIPO, não a frase, e é por isso que esta função existe separada
152
+ * de `classifyError`: `TypeError`, `RangeError`, `ReferenceError` e
153
+ * `SyntaxError` são erros de programa. A fonte não os produz — nós os
154
+ * produzimos ao supor a forma do que ela respondeu. Classificá-los por
155
+ * mensagem seria caçar o texto do motor de JS, que muda entre versões de Node.
156
+ *
157
+ * `classifyError` fica INTACTA: ela recebe mensagem e continua sendo o caminho
158
+ * do erro que NÓS escrevemos.
159
+ */
160
+ export function classifyThrown(error) {
161
+ if (error instanceof TypeError ||
162
+ error instanceof RangeError ||
163
+ error instanceof ReferenceError ||
164
+ error instanceof SyntaxError) {
165
+ return "defeito";
166
+ }
167
+ return classifyError(error instanceof Error ? error.message : String(error));
168
+ }
138
169
  //# sourceMappingURL=call-shape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-shape.js","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAaH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAChC,mEAAmE;IACnE,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,wEAAwE;IACxE,YAAY;IACZ,MAAM,iBAAiB,GACrB,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,IACE,iBAAiB;QACjB,wJAAwJ,CAAC,IAAI,CAC3J,CAAC,CACF;QACD,wEAAwE;QACxE,4EAA4E;QAC5E,4EAA4E;QAC5E,qEAAqE;QACrE,2EAA2E;QAC3E,sEAAsE;QACtE,+GAA+G,CAAC,IAAI,CAClH,CAAC,CACF,EACD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IACE,gOAAgO,CAAC,IAAI,CACnO,CAAC,CACF;QACD,4EAA4E;QAC5E,oEAAoE;QACpE,oEAAoE,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5E,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,sEAAsE;IACtE,uCAAuC;IACvC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7C,6EAA6E;IAC7E,2EAA2E;IAC3E,mEAAmE;IACnE,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,uEAAuE;IACvE,IACE,kQAAkQ,CAAC,IAAI,CACrQ,CAAC,CACF,EACD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC;SACpD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA6B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;SAC9D,IAAI,EAAE,CAAC;IACV,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe;IACvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,CAAC,GAAG,MAA0F,CAAC;IACrG,MAAM,WAAW,GAAG,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC;IAC/C,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IACxD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAwB,CAAC;QAC/C,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"call-shape.js","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAC;AA4CtC;;;;;GAKG;AACH;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,IAAI,EAAE,WAAW,GAAG,YAAY,EAChC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,cAAc,KACnB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAgElF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,SAAS,CAiBtF"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAC;AA4CtC;;;;;GAKG;AACH;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,IAAI,EAAE,WAAW,GAAG,YAAY,EAChC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,cAAc,KACnB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAmElF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,SAAS,CAiBtF"}
package/dist/register.js CHANGED
@@ -39,7 +39,7 @@ import { McpServer, fromJsonSchema } from "@modelcontextprotocol/server";
39
39
  // interpreta o schema em vez de gerar código, funciona igual no Node, e assim
40
40
  // os dois transportes validam exatamente da mesma forma.
41
41
  import { CfWorkerJsonSchemaValidator } from "@modelcontextprotocol/server/validators/cf-worker";
42
- import { classifyError, errorText, paramNames } from "./call-shape.js";
42
+ import { classifyError, classifyThrown, errorText, paramNames } from "./call-shape.js";
43
43
  import { announceServedVersions } from "./discover.js";
44
44
  import { SERVER_IDENTITY, SERVER_INSTRUCTIONS } from "./identity.js";
45
45
  import { TOOL_DEFINITIONS, RESOURCE_DEFINITIONS, PROMPT_DEFINITIONS, dispatchTool, CONFIG } from "./tools.js";
@@ -95,7 +95,10 @@ export function registerAll(server, options = {}) {
95
95
  // Handlers already trap their own failures; this is the last resort
96
96
  // so an unexpected throw never breaks the transport.
97
97
  const message = error instanceof Error ? error.message : String(error);
98
- const forma = { params: paramNames(args), classe: classifyError(message) };
98
+ // `classifyThrown` e não `classifyError`: aqui o OBJETO do erro existe,
99
+ // e o tipo dele separa bug nosso (`TypeError` & cia. -> `defeito`) de
100
+ // condição da fonte. Pela mensagem, um `TypeError` caía em `outro`.
101
+ const forma = { params: paramNames(args), classe: classifyThrown(error) };
99
102
  record?.("tool_call", tool.name, forma);
100
103
  record?.("tool_error", tool.name, forma);
101
104
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
package/dist/shared.d.ts CHANGED
@@ -13,6 +13,29 @@ export declare const CONFIG: {
13
13
  MAX_RETRIES: number;
14
14
  RETRY_DELAY_MS: number;
15
15
  };
16
+ /**
17
+ * Orçamento de tempo do PEDIDO PEQUENO (`/dados/ultimos/N`, no máximo 20
18
+ * observações). Não é ajuste fino: é o que separa "não existe" de "demorou".
19
+ *
20
+ * Medido em 24/09/2026, 15 séries reais (432, 433, 11, 12, 13521, 7000, 189,
21
+ * 188, 4390, 20539, 24363, 21619, 1178, 28763, 25239): `ultimos/1` responde
22
+ * entre **0,18 s e 0,41 s**. Código inexistente (99999, 99999999, 999999999)
23
+ * responde `200 text/html` com a página de requisição inválida — mas depois de
24
+ * **~30,2 s**. São duas populações separadas por ~75×.
25
+ *
26
+ * Consequência que este valor conserta: os dois orçamentos do servidor (30 s no
27
+ * stdio, 10 s no Worker) ABORTAM antes dos 30,2 s, então a defesa que lê a
28
+ * página HTML (logo abaixo, medida em 13/08/2026) nunca chegava a rodar. Quem
29
+ * errava um dígito esperava duas tentativas inteiras para receber "Falha após 2
30
+ * tentativas: The operation was aborted" — mensagem que culpa a origem por um
31
+ * erro de digitação.
32
+ *
33
+ * 6 s dá ~15× de folga sobre a resposta real mais lenta já medida e corta a
34
+ * espera do código errado de ~25 s para ~6 s.
35
+ */
36
+ export declare const TIMEOUT_PEDIDO_PEQUENO_MS = 6000;
37
+ /** A forma de URL que pede no máximo 20 observações. */
38
+ export declare function ehPedidoPequeno(url: string): boolean;
16
39
  export declare const WORKER_CONFIG: {
17
40
  TIMEOUT_MS: number;
18
41
  MAX_RETRIES: number;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
package/dist/shared.js CHANGED
@@ -14,6 +14,31 @@ export const CONFIG = {
14
14
  MAX_RETRIES: 3,
15
15
  RETRY_DELAY_MS: 1000
16
16
  };
17
+ /**
18
+ * Orçamento de tempo do PEDIDO PEQUENO (`/dados/ultimos/N`, no máximo 20
19
+ * observações). Não é ajuste fino: é o que separa "não existe" de "demorou".
20
+ *
21
+ * Medido em 24/09/2026, 15 séries reais (432, 433, 11, 12, 13521, 7000, 189,
22
+ * 188, 4390, 20539, 24363, 21619, 1178, 28763, 25239): `ultimos/1` responde
23
+ * entre **0,18 s e 0,41 s**. Código inexistente (99999, 99999999, 999999999)
24
+ * responde `200 text/html` com a página de requisição inválida — mas depois de
25
+ * **~30,2 s**. São duas populações separadas por ~75×.
26
+ *
27
+ * Consequência que este valor conserta: os dois orçamentos do servidor (30 s no
28
+ * stdio, 10 s no Worker) ABORTAM antes dos 30,2 s, então a defesa que lê a
29
+ * página HTML (logo abaixo, medida em 13/08/2026) nunca chegava a rodar. Quem
30
+ * errava um dígito esperava duas tentativas inteiras para receber "Falha após 2
31
+ * tentativas: The operation was aborted" — mensagem que culpa a origem por um
32
+ * erro de digitação.
33
+ *
34
+ * 6 s dá ~15× de folga sobre a resposta real mais lenta já medida e corta a
35
+ * espera do código errado de ~25 s para ~6 s.
36
+ */
37
+ export const TIMEOUT_PEDIDO_PEQUENO_MS = 6000;
38
+ /** A forma de URL que pede no máximo 20 observações. */
39
+ export function ehPedidoPequeno(url) {
40
+ return /\/dados\/ultimos\/\d+/.test(url);
41
+ }
17
42
  // Worker uses shorter timeout (Cloudflare has its own limits)
18
43
  export const WORKER_CONFIG = {
19
44
  TIMEOUT_MS: 10000,
@@ -195,9 +220,14 @@ export async function fetchWithTimeout(url, timeoutMs) {
195
220
  }
196
221
  export async function fetchBcbApi(url, timeoutMs = CONFIG.TIMEOUT_MS, maxRetries = CONFIG.MAX_RETRIES) {
197
222
  let lastError = null;
223
+ // O pedido pequeno nunca precisa de 10 s, muito menos de 30: a resposta real
224
+ // mais lenta já medida levou 0,41 s. Encurtar o orçamento AQUI é o que faz a
225
+ // inexistência aparecer como inexistência em vez de como falha da origem.
226
+ const pequeno = ehPedidoPequeno(url);
227
+ const orcamentoMs = pequeno ? Math.min(timeoutMs, TIMEOUT_PEDIDO_PEQUENO_MS) : timeoutMs;
198
228
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
199
229
  try {
200
- const response = await fetchWithTimeout(url, timeoutMs);
230
+ const response = await fetchWithTimeout(url, orcamentoMs);
201
231
  if (!response.ok) {
202
232
  if (response.status === 404) {
203
233
  throw new ErroHttpBcb(404, `Série não encontrada ou sem dados para o período solicitado`);
@@ -223,11 +253,21 @@ export async function fetchBcbApi(url, timeoutMs = CONFIG.TIMEOUT_MS, maxRetries
223
253
  //
224
254
  // `ultimos/N` nunca é caso (b): pede no máximo 20 observações. Então a
225
255
  // forma da URL separa os dois sem uma requisição a mais.
226
- const pediuPoucasObservacoes = /\/dados\/ultimos\/\d+/.test(url);
256
+ //
257
+ // (c) DESCOBERTO em 24/09/2026, e derruba o "determinístico" que estava
258
+ // escrito aqui: a origem responde essa MESMA página, depois dos
259
+ // mesmos ~30 s, a uma série que EXISTE. Medido na 432 (meta Selic):
260
+ // 3 páginas HTML em 9 chamadas numa janela de poucos minutos e,
261
+ // logo depois, 20 chamadas seguidas devolvendo JSON em ≤ 0,4 s. Ou
262
+ // seja: a página não prova inexistência — prova que ESTA tentativa
263
+ // não trouxe dado. Tratá-la como veredito fazia o servidor dizer que
264
+ // a meta Selic não existe sempre que a origem soluçasse.
265
+ //
266
+ // Por isso a suspeita de inexistência agora é RESOLVIDA POR REPETIÇÃO,
267
+ // no `catch` abaixo: código que não existe falha em todas as tentativas;
268
+ // série boa volta na seguinte, em décimos de segundo.
269
+ const pediuPoucasObservacoes = pequeno;
227
270
  if (pediuPoucasObservacoes) {
228
- // Determinístico como um 4xx: o código não existe e não vai passar a
229
- // existir na tentativa seguinte. Repetir aqui gastava as retentativas
230
- // inteiras, com backoff, para chegar à mesma resposta.
231
271
  throw new ErroSerieInexistente("A API do BCB respondeu com a página de 'requisição inválida' a um pedido pequeno — " +
232
272
  "é assim que ela indica série INEXISTENTE (não usa 404). Confira o código da série.");
233
273
  }
@@ -238,7 +278,8 @@ export async function fetchBcbApi(url, timeoutMs = CONFIG.TIMEOUT_MS, maxRetries
238
278
  }
239
279
  catch (error) {
240
280
  lastError = error instanceof Error ? error : new Error(String(error));
241
- if (lastError instanceof ErroSerieInexistente || lastError.message.includes("não encontrada")) {
281
+ // 404 de verdade continua determinístico.
282
+ if (lastError.message.includes("não encontrada")) {
242
283
  throw lastError;
243
284
  }
244
285
  // Erro de cliente (4xx) é determinístico: repetir só gasta tempo e
@@ -250,6 +291,30 @@ export async function fetchBcbApi(url, timeoutMs = CONFIG.TIMEOUT_MS, maxRetries
250
291
  const isTimeout = lastError.name === "AbortError" ||
251
292
  lastError.message.includes("aborted") ||
252
293
  lastError.message.includes("timeout");
294
+ // SUSPEITA de inexistência, no pedido pequeno: ou a origem devolveu a
295
+ // página de 'requisição inválida', ou não devolveu nada dentro do
296
+ // orçamento curto. As duas são a mesma coisa vista de dois lados — a
297
+ // origem leva ~30 s para negar um código que não existe, e o orçamento
298
+ // de 6 s corta esse silêncio antes de a página chegar.
299
+ //
300
+ // A suspeita se RESOLVE POR REPETIÇÃO, não por veredito na primeira
301
+ // tentativa: a mesma página sai para série que EXISTE (medição de
302
+ // 24/09/2026, série 432 — ver o comentário no `catch` do JSON). Código
303
+ // inexistente falha em todas; série boa volta na seguinte em décimos de
304
+ // segundo. Com o orçamento curto, insistir custa ~6 s por tentativa em
305
+ // vez dos ~10–30 s de antes.
306
+ const suspeitaInexistencia = pequeno && (lastError instanceof ErroSerieInexistente || isTimeout);
307
+ if (suspeitaInexistencia && attempt >= maxRetries) {
308
+ // Só aqui vira afirmação — e ainda assim nomeia a alternativa, porque
309
+ // queda de rede e indisponibilidade da origem terminam igual. Dizer
310
+ // "não existe" de um código certo seria trocar erro alto por plausível.
311
+ throw new ErroSerieInexistente(`A API do BCB não trouxe dado em ${maxRetries} tentativas de um pedido de poucas ` +
312
+ `observações (orçamento de ${Math.round(orcamentoMs / 1000)}s cada). Série que existe ` +
313
+ "responde em menos de 0,5 s; é a série INEXISTENTE que fica ~30 s sem resposta antes de " +
314
+ "devolver a página de 'requisição inválida' (a origem não usa 404). Confira o código com " +
315
+ "`bcb_buscar_serie`. Se o código estiver certo, a origem está indisponível — repita em " +
316
+ "instantes.");
317
+ }
253
318
  if (attempt < maxRetries) {
254
319
  const delayMs = CONFIG.RETRY_DELAY_MS * Math.pow(2, attempt - 1);
255
320
  const reason = isTimeout ? "timeout" : "erro";
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
@@ -32,15 +32,12 @@
32
32
  * (0 / 0), bolsa/ibovespa (0 / 0 — não é do BCB), pix (0 / 0 no índice por
33
33
  * código), bitcoin, juro real, commodities/ic-br (0 / 0).
34
34
  *
35
- * Vale para os dois caminhos de busca, pelas duas pontas da mesma tabela:
36
- * `bcb_buscar_serie` expande o TERMO (OR dentro do termo, AND entre termos —
37
- * expandir só aumenta o recall, nunca perde casamento que já havia) e o acervo
38
- * de `search` (Deep Research) recebe a palavra perguntada como KEYWORD da
39
- * série cujo nome traz a palavra da fonte.
40
- *
41
- * Mesma receita de `src/ilostat/vocabulary.ts` (ilo 0.6.0), `src/uis/vocabulary.ts`
42
- * (uis 0.3.0), `src/vocabulario.ts` (ibge 5.1.0) e `src/clients/cid10-vocabulary.ts`
43
- * (medical 1.12.0) — cinco servidores com ela: candidata a `@sbissoli/mcp-search`.
35
+ * A MECÂNICA (frases da tabela antes da quebra em palavras, stopwords do
36
+ * pt-BR fora do AND, singular sem caco, OR das grafias do BCB, a nota dita e
37
+ * a ponta inversa para o acervo de `search`) mora em `@sbissoli/mcp-search`
38
+ * desde a 0.5.0 — cinco servidores a carregavam em cópia; aqui fica só a
39
+ * tabela. Os nomes exportados são os de sempre (em português), para quem
40
+ * chama não mudar.
44
41
  */
45
42
  export interface EntradaVocabulario {
46
43
  /** Como o usuário escreve — normalizado (sem acento, minúsculo); pode ser frase. */
@@ -49,32 +46,20 @@ export interface EntradaVocabulario {
49
46
  readonly fonte: readonly string[];
50
47
  }
51
48
  export declare const VOCABULARIO: readonly EntradaVocabulario[];
52
- /** Sem acento, caixa baixa, espaços colapsados — o `normalizeString` do servidor, mais o colapso. */
53
- export declare function normalizar(texto: string): string;
54
49
  export interface TermoExpandido {
55
50
  readonly termo: string;
56
51
  readonly padroes: readonly string[];
57
52
  /** A tabela (não a mera flexão de plural) mudou o que se procura. */
58
53
  readonly traduzido: boolean;
59
54
  }
60
- /**
61
- * A busca inteira, termo a termo. Uma frase da tabela ("conta corrente",
62
- * "juros basicos") vira UM termo antes da quebra em palavras — senão
63
- * "corrente" e "basicos" entrariam no AND e matariam o resultado. O que sobra
64
- * é quebrado em palavras, sem stopword, cada uma expandida.
65
- */
55
+ /** Sem acento, caixa baixa, espaços colapsados — o mesmo funil do ranking. */
56
+ export declare const normalizar: (text: string) => string;
57
+ /** A busca inteira, termo a termo (frases da tabela viram UM termo antes da quebra). */
66
58
  export declare function expandirBusca(busca: string): TermoExpandido[];
67
- /**
68
- * A frase que conta ao chamador que a palavra dele não é a do BCB — sem isto a
69
- * tradução é invisível e o resultado parece vir do que ele escreveu.
70
- */
59
+ /** A frase que conta ao chamador que a palavra dele não é a do BCB. */
71
60
  export declare function notasDeVocabulario(expandidos: readonly TermoExpandido[]): string[];
72
61
  /** Um texto (já normalizado) casa TODOS os termos expandidos? */
73
62
  export declare function casaBusca(textoNormalizado: string, expandidos: readonly TermoExpandido[]): boolean;
74
- /**
75
- * A ponta inversa da tabela: as palavras com que se PERGUNTA por este nome de
76
- * série — keywords do acervo de `search`, que ranqueia por relevância em vez
77
- * de casar substring.
78
- */
79
- export declare function palavrasPerguntadas(nome: string): string[];
63
+ /** A ponta inversa: as palavras com que se PERGUNTA por este nome — keywords do acervo de `search`. */
64
+ export declare const palavrasPerguntadas: (name: string) => string[];
80
65
  //# sourceMappingURL=vocabulario.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulario.d.ts","sourceRoot":"","sources":["../src/vocabulario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,kBAAkB,EAWpD,CAAC;AAmBF,qGAAqG;AACrG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAaD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAc7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAOlF;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAElG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D"}
1
+ {"version":3,"file":"vocabulario.d.ts","sourceRoot":"","sources":["../src/vocabulario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,kBAAkB,EAWpD,CAAC;AAQF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAKD,8EAA8E;AAC9E,eAAO,MAAM,UAAU,0BAAwB,CAAC;AAChD,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAE7D;AACD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAElF;AACD,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAElG;AACD,uGAAuG;AACvG,eAAO,MAAM,mBAAmB,4BAA4B,CAAC"}
@@ -32,17 +32,14 @@
32
32
  * (0 / 0), bolsa/ibovespa (0 / 0 — não é do BCB), pix (0 / 0 no índice por
33
33
  * código), bitcoin, juro real, commodities/ic-br (0 / 0).
34
34
  *
35
- * Vale para os dois caminhos de busca, pelas duas pontas da mesma tabela:
36
- * `bcb_buscar_serie` expande o TERMO (OR dentro do termo, AND entre termos —
37
- * expandir só aumenta o recall, nunca perde casamento que já havia) e o acervo
38
- * de `search` (Deep Research) recebe a palavra perguntada como KEYWORD da
39
- * série cujo nome traz a palavra da fonte.
40
- *
41
- * Mesma receita de `src/ilostat/vocabulary.ts` (ilo 0.6.0), `src/uis/vocabulary.ts`
42
- * (uis 0.3.0), `src/vocabulario.ts` (ibge 5.1.0) e `src/clients/cid10-vocabulary.ts`
43
- * (medical 1.12.0) — cinco servidores com ela: candidata a `@sbissoli/mcp-search`.
35
+ * A MECÂNICA (frases da tabela antes da quebra em palavras, stopwords do
36
+ * pt-BR fora do AND, singular sem caco, OR das grafias do BCB, a nota dita e
37
+ * a ponta inversa para o acervo de `search`) mora em `@sbissoli/mcp-search`
38
+ * desde a 0.5.0 — cinco servidores a carregavam em cópia; aqui fica só a
39
+ * tabela. Os nomes exportados são os de sempre (em português), para quem
40
+ * chama não mudar.
44
41
  */
45
- import { normalizeString } from "./shared.js";
42
+ import { createVocabulary } from "@sbissoli/mcp-search";
46
43
  export const VOCABULARIO = [
47
44
  { perguntado: "deficit", fonte: ["resultado primario", "resultado nominal"] },
48
45
  { perguntado: "superavit", fonte: ["resultado primario", "resultado nominal"] },
@@ -55,88 +52,27 @@ export const VOCABULARIO = [
55
52
  { perguntado: "investimento estrangeiro", fonte: ["investimento direto", "investimentos diretos"] },
56
53
  { perguntado: "conta corrente", fonte: ["transacoes correntes"] }
57
54
  ];
58
- const POR_PERGUNTADO = new Map(VOCABULARIO.map(e => [e.perguntado, e.fonte]));
59
- /** As frases da tabela (com espaço), da mais longa para a mais curta — casam antes da quebra em palavras. */
60
- const FRASES = VOCABULARIO.map(e => e.perguntado)
61
- .filter(p => p.includes(" "))
62
- .sort((a, b) => b.length - a.length);
63
- /**
64
- * Palavras que não carregam significado no nome de uma série e, em AND,
65
- * excluem resultado certo ("taxa de juros" não pode morrer no "de"). Só saem
66
- * quando sobra algum termo — busca feita só de stopword continua valendo.
67
- */
68
- const STOPWORDS = new Set([
69
- "a", "o", "as", "os", "um", "uma", "de", "da", "do", "das", "dos", "e", "em", "no", "na", "nos", "nas",
70
- "ao", "aos", "por", "para", "com", "sem", "que", "ou"
71
- ]);
72
- /** Sem acento, caixa baixa, espaços colapsados — o `normalizeString` do servidor, mais o colapso. */
73
- export function normalizar(texto) {
74
- return normalizeString(texto).replace(/\s+/g, " ").trim();
75
- }
76
- /**
77
- * Forma singular de um termo já normalizado — a substring mais curta casa o
78
- * plural também. Só as regras do português que não fabricam caco.
79
- */
80
- function singulares(termo) {
81
- if (termo.length > 4 && (termo.endsWith("oes") || termo.endsWith("aes")))
82
- return [`${termo.slice(0, -3)}ao`];
83
- if (termo.length > 4 && /(ais|eis|ois)$/.test(termo))
84
- return [`${termo.slice(0, -2)}l`];
85
- if (termo.length > 3 && termo.endsWith("s") && !termo.endsWith("ss"))
86
- return [termo.slice(0, -1)];
87
- return [];
88
- }
89
- function expandirUm(termo) {
90
- const padroes = [termo, ...(POR_PERGUNTADO.get(termo) ?? []), ...singulares(termo).flatMap(s => [s, ...(POR_PERGUNTADO.get(s) ?? [])])];
91
- const traduzido = POR_PERGUNTADO.has(termo) || singulares(termo).some(s => POR_PERGUNTADO.has(s));
92
- return { termo, padroes: [...new Set(padroes)], traduzido };
93
- }
94
- /**
95
- * A busca inteira, termo a termo. Uma frase da tabela ("conta corrente",
96
- * "juros basicos") vira UM termo antes da quebra em palavras — senão
97
- * "corrente" e "basicos" entrariam no AND e matariam o resultado. O que sobra
98
- * é quebrado em palavras, sem stopword, cada uma expandida.
99
- */
55
+ const vocabulario = createVocabulary({
56
+ entries: VOCABULARIO.map(e => ({ asked: e.perguntado, source: e.fonte })),
57
+ locale: "pt-BR",
58
+ sourceName: "o BCB"
59
+ });
60
+ const emPortugues = (e) => ({ termo: e.term, padroes: e.patterns, traduzido: e.translated });
61
+ const emIngles = (e) => ({ term: e.termo, patterns: e.padroes, translated: e.traduzido });
62
+ /** Sem acento, caixa baixa, espaços colapsados — o mesmo funil do ranking. */
63
+ export const normalizar = vocabulario.normalize;
64
+ /** A busca inteira, termo a termo (frases da tabela viram UM termo antes da quebra). */
100
65
  export function expandirBusca(busca) {
101
- let resto = ` ${normalizar(busca)} `;
102
- const saida = [];
103
- for (const frase of FRASES) {
104
- const agulha = ` ${frase} `;
105
- if (resto.includes(agulha)) {
106
- saida.push(expandirUm(frase));
107
- resto = resto.replace(agulha, " ");
108
- }
109
- }
110
- const palavras = resto.split(" ").filter(Boolean);
111
- const ficam = palavras.filter(p => !STOPWORDS.has(p));
112
- for (const p of ficam.length || saida.length ? ficam : palavras)
113
- saida.push(expandirUm(p));
114
- return saida;
66
+ return vocabulario.expandQuery(busca).map(emPortugues);
115
67
  }
116
- /**
117
- * A frase que conta ao chamador que a palavra dele não é a do BCB — sem isto a
118
- * tradução é invisível e o resultado parece vir do que ele escreveu.
119
- */
68
+ /** A frase que conta ao chamador que a palavra dele não é a do BCB. */
120
69
  export function notasDeVocabulario(expandidos) {
121
- return expandidos
122
- .filter(e => e.traduzido)
123
- .map(e => {
124
- const outros = e.padroes.filter(p => p !== e.termo);
125
- return `"${e.termo}" também foi buscado como ${outros.join(", ")} — a palavra que o BCB usa.`;
126
- });
70
+ return vocabulario.vocabularyNotes(expandidos.map(emIngles));
127
71
  }
128
72
  /** Um texto (já normalizado) casa TODOS os termos expandidos? */
129
73
  export function casaBusca(textoNormalizado, expandidos) {
130
- return expandidos.every(e => e.padroes.some(p => textoNormalizado.includes(p)));
131
- }
132
- /**
133
- * A ponta inversa da tabela: as palavras com que se PERGUNTA por este nome de
134
- * série — keywords do acervo de `search`, que ranqueia por relevância em vez
135
- * de casar substring.
136
- */
137
- export function palavrasPerguntadas(nome) {
138
- const n = normalizar(nome);
139
- const saida = VOCABULARIO.filter(e => e.fonte.some(f => n.includes(f))).map(e => e.perguntado);
140
- return [...new Set(saida)];
74
+ return vocabulario.matchesQuery(textoNormalizado, expandidos.map(emIngles));
141
75
  }
76
+ /** A ponta inversa: as palavras com que se PERGUNTA por este nome — keywords do acervo de `search`. */
77
+ export const palavrasPerguntadas = vocabulario.askedWordsFor;
142
78
  //# sourceMappingURL=vocabulario.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulario.js","sourceRoot":"","sources":["../src/vocabulario.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vocabulario.js","sourceRoot":"","sources":["../src/vocabulario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AAS3E,MAAM,CAAC,MAAM,WAAW,GAAkC;IACxD,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,EAAE;IAC7E,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,EAAE;IAC/E,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE;IAClD,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;IACjD,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;IAC/C,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE;IACpD,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;IACjD,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;IAC3C,EAAE,UAAU,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,EAAE;IACnG,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE;CAClE,CAAC;AAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,OAAO;CACpB,CAAC,CAAC;AASH,MAAM,WAAW,GAAG,CAAC,CAAe,EAAkB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3H,MAAM,QAAQ,GAAG,CAAC,CAAiB,EAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAExH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC;AAChD,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzD,CAAC;AACD,uEAAuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,UAAqC;IACtE,OAAO,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AACD,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,gBAAwB,EAAE,UAAqC;IACvF,OAAO,WAAW,CAAC,YAAY,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9E,CAAC;AACD,uGAAuG;AACvG,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bcb-br-mcp",
3
- "version": "1.12.0",
3
+ "version": "1.14.1",
4
4
  "mcpName": "io.github.SidneyBissoli/bcb-br-mcp",
5
5
  "description": "MCP server for the Brazilian Central Bank (Banco Central do Brasil, BCB): SGS time series (Selic, IPCA, exchange rates, GDP and a curated catalogue of indicators), Focus market expectations, PTAX exchange rates and the Olinda open-data platform, with a provenance block on every response.",
6
6
  "type": "module",
@@ -64,16 +64,16 @@
64
64
  "dependencies": {
65
65
  "@modelcontextprotocol/server": "^2.0.0",
66
66
  "@sbissoli/mcp-provenance": "^0.1.0",
67
- "@sbissoli/mcp-search": "^0.4.0",
67
+ "@sbissoli/mcp-search": "^0.6.0",
68
68
  "@sbissoli/mcp-stats": "^0.3.0"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@modelcontextprotocol/client": "^2.0.0",
72
72
  "@sbissoli/mcp-evals": "^0.1.0",
73
- "@types/node": "^26.5.1",
73
+ "@types/node": "^26.6.1",
74
74
  "tsx": "^4.23.13",
75
75
  "typescript": "^7.0.2",
76
76
  "vite": "^8.3.0",
77
- "vitest": "^5.0.0"
77
+ "vitest": "^5.0.1"
78
78
  }
79
79
  }