bcb-br-mcp 1.12.0 → 1.12.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.
@@ -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 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 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.12.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,7 +64,7 @@
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.5.0",
68
68
  "@sbissoli/mcp-stats": "^0.3.0"
69
69
  },
70
70
  "devDependencies": {