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.
- package/dist/call-shape.d.ts +25 -0
- package/dist/call-shape.d.ts.map +1 -1
- package/dist/call-shape.js +31 -0
- package/dist/call-shape.js.map +1 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +5 -2
- package/dist/register.js.map +1 -1
- package/dist/shared.d.ts +23 -0
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +71 -6
- package/dist/shared.js.map +1 -1
- package/dist/vocabulario.d.ts +12 -27
- package/dist/vocabulario.d.ts.map +1 -1
- package/dist/vocabulario.js +23 -87
- package/dist/vocabulario.js.map +1 -1
- package/package.json +4 -4
package/dist/call-shape.d.ts
CHANGED
|
@@ -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
|
package/dist/call-shape.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/call-shape.js
CHANGED
|
@@ -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
|
package/dist/call-shape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-shape.js","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"call-shape.js","sourceRoot":"","sources":["../src/call-shape.ts"],"names":[],"mappings":"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"}
|
package/dist/register.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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 {
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACL,SAAS,EACT,cAAc,EAMf,MAAM,8BAA8B,CAAC;AACtC,yEAAyE;AACzE,uEAAuE;AACvE,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,yDAAyD;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
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;
|
package/dist/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,MAAM;IACjB,UAAU;IACV,WAAW;IACX,cAAc;CACf,CAAC;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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";
|
package/dist/shared.js.map
CHANGED
|
@@ -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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"}
|
package/dist/vocabulario.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
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
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
|
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"}
|
package/dist/vocabulario.js
CHANGED
|
@@ -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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
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 {
|
|
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
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
|
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
|
package/dist/vocabulario.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vocabulario.js","sourceRoot":"","sources":["../src/vocabulario.ts"],"names":[],"mappings":"AAAA
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
77
|
+
"vitest": "^5.0.1"
|
|
78
78
|
}
|
|
79
79
|
}
|