@mcpassure/mcp-anvisa-bulario 0.1.0 → 2.0.0

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.
Files changed (41) hide show
  1. package/dist/bootstrap.d.ts +11 -0
  2. package/dist/bootstrap.d.ts.map +1 -0
  3. package/dist/bootstrap.js +120 -0
  4. package/dist/bootstrap.js.map +1 -0
  5. package/dist/config.d.ts +10 -7
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +11 -12
  8. package/dist/config.js.map +1 -1
  9. package/dist/db/dataset.d.ts +15 -0
  10. package/dist/db/dataset.d.ts.map +1 -0
  11. package/dist/db/dataset.js +168 -0
  12. package/dist/db/dataset.js.map +1 -0
  13. package/dist/db/schema.d.ts +11 -0
  14. package/dist/db/schema.d.ts.map +1 -0
  15. package/dist/db/schema.js +48 -0
  16. package/dist/db/schema.js.map +1 -0
  17. package/dist/domain/repository.d.ts +11 -5
  18. package/dist/domain/repository.d.ts.map +1 -1
  19. package/dist/domain/repository.js +38 -58
  20. package/dist/domain/repository.js.map +1 -1
  21. package/dist/index.js +15 -14
  22. package/dist/index.js.map +1 -1
  23. package/dist/schemas/tools.d.ts +4 -4
  24. package/dist/server.js +1 -1
  25. package/dist/tools/consultar-bula.d.ts +10 -0
  26. package/dist/tools/consultar-bula.d.ts.map +1 -1
  27. package/dist/tools/consultar-bula.js +41 -23
  28. package/dist/tools/consultar-bula.js.map +1 -1
  29. package/dist/tools/listar-apresentacoes.d.ts +7 -0
  30. package/dist/tools/listar-apresentacoes.d.ts.map +1 -1
  31. package/dist/tools/listar-apresentacoes.js +26 -8
  32. package/dist/tools/listar-apresentacoes.js.map +1 -1
  33. package/dist/tools/shared.d.ts +20 -11
  34. package/dist/tools/shared.d.ts.map +1 -1
  35. package/dist/tools/shared.js +50 -10
  36. package/dist/tools/shared.js.map +1 -1
  37. package/dist/utils/http.d.ts +12 -33
  38. package/dist/utils/http.d.ts.map +1 -1
  39. package/dist/utils/http.js +15 -167
  40. package/dist/utils/http.js.map +1 -1
  41. package/package.json +4 -4
@@ -1,45 +1,24 @@
1
1
  /**
2
- * Interface mínima que um cliente HTTP deve expor para `AnvisaApiSource`.
3
- * Permite testar com mocks sem instanciar Playwright real.
2
+ * http.ts stub (v2.0)
3
+ *
4
+ * O HttpClient baseado em Playwright foi removido em v2.0.
5
+ * A fonte de dados agora é o CSV dados.anvisa.gov.br via SQLite local.
6
+ *
7
+ * Este arquivo existe apenas para backward compatibility de imports.
8
+ * Será removido em v2.1.
4
9
  */
5
10
  export interface HttpGet {
6
11
  get(path: string, params?: Record<string, string>): Promise<unknown>;
7
12
  close?(): Promise<void>;
8
13
  }
9
14
  /**
10
- * HttpClient que usa Playwright (Chromium real) por trás.
11
- *
12
- * A API ANVISA está atrás de Cloudflare em modo "detectar UA com 'Headless'
13
- * + sinais óbvios de webdriver". Fetch nativo do Node ou tls-client-node com
14
- * fingerprints conhecidos são bloqueados. Browser real (Chromium) com UA limpo
15
- * + initScript de masking passa direto. Confirmado experimentalmente em 2026-05-13.
16
- *
17
- * Estratégia:
18
- * - Browser singleton lazy-initialized na primeira chamada
19
- * - Page única reutilizada entre requests (cookies persistem na sessão)
20
- * - Cada request HTTP é executada como `fetch()` DENTRO do contexto JS da página
21
- * (herda cookies, UA, JS state do browser)
22
- * - `close()` deve ser chamado no shutdown (SIGINT/SIGTERM)
23
- *
24
- * Trade-offs:
25
- * - Primeira chamada: ~2-3s (boot Chromium + navegação warm-up)
26
- * - Chamadas subsequentes: ~100-300ms (apenas o page.evaluate)
27
- * - Memória: +150-250MB (Chromium em background)
15
+ * HttpClient stub removido em v2.0.
16
+ * Mantido apenas para evitar erros de import em código legado.
17
+ * @deprecated Use BularioDatasetSource em vez de HttpClient.
28
18
  */
29
19
  export declare class HttpClient implements HttpGet {
30
- private readonly baseUrl;
31
- private readonly maxRetries;
32
- private readonly baseDelayMs;
33
- private readonly timeoutMs;
34
- private browser;
35
- private context;
36
- private page;
37
- private startPromise;
38
- constructor(baseUrl: string, maxRetries: number, baseDelayMs: number, timeoutMs: number);
39
- get(path: string, params?: Record<string, string>): Promise<unknown>;
20
+ constructor(..._args: any[]);
21
+ get(_path: string, _params?: Record<string, string>): Promise<unknown>;
40
22
  close(): Promise<void>;
41
- private executeRequest;
42
- private ensurePage;
43
- private start;
44
23
  }
45
24
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAeD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,YAAW,OAAO;IAOtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,YAAY,CAA4B;gBAG7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;IAG9B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YASd,cAAc;YAiFd,UAAU;YAcV,KAAK;CAoCpB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,UAAW,YAAW,OAAO;gBAE5B,GAAG,KAAK,EAAE,GAAG,EAAE;IAE3B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
@@ -1,175 +1,23 @@
1
- import { chromium } from "playwright";
2
- import { SourceAuthError, withBackoff } from "./backoff.js";
3
1
  /**
4
- * User-Agent de Chrome estável (sem string "HeadlessChrome").
5
- * Cloudflare bloqueia qualquer UA contendo "Headless" — override é mandatório.
6
- */
7
- const CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.96 Safari/537.36";
8
- /**
9
- * URL de warm-up — navegar nessa página antes da primeira API call.
10
- * Estabelece contexto JS + cookies passivos de analytics (Dynatrace, etc.).
11
- */
12
- const WARMUP_URL = "https://consultas.anvisa.gov.br/#/bulario/";
13
- /**
14
- * HttpClient que usa Playwright (Chromium real) por trás.
15
- *
16
- * A API ANVISA está atrás de Cloudflare em modo "detectar UA com 'Headless'
17
- * + sinais óbvios de webdriver". Fetch nativo do Node ou tls-client-node com
18
- * fingerprints conhecidos são bloqueados. Browser real (Chromium) com UA limpo
19
- * + initScript de masking passa direto. Confirmado experimentalmente em 2026-05-13.
2
+ * http.ts stub (v2.0)
20
3
  *
21
- * Estratégia:
22
- * - Browser singleton lazy-initialized na primeira chamada
23
- * - Page única reutilizada entre requests (cookies persistem na sessão)
24
- * - Cada request HTTP é executada como `fetch()` DENTRO do contexto JS da página
25
- * (herda cookies, UA, JS state do browser)
26
- * - `close()` deve ser chamado no shutdown (SIGINT/SIGTERM)
4
+ * O HttpClient baseado em Playwright foi removido em v2.0.
5
+ * A fonte de dados agora é o CSV dados.anvisa.gov.br via SQLite local.
27
6
  *
28
- * Trade-offs:
29
- * - Primeira chamada: ~2-3s (boot Chromium + navegação warm-up)
30
- * - Chamadas subsequentes: ~100-300ms (apenas o page.evaluate)
31
- * - Memória: +150-250MB (Chromium em background)
7
+ * Este arquivo existe apenas para backward compatibility de imports.
8
+ * Será removido em v2.1.
9
+ */
10
+ /**
11
+ * HttpClient stub — removido em v2.0.
12
+ * Mantido apenas para evitar erros de import em código legado.
13
+ * @deprecated Use BularioDatasetSource em vez de HttpClient.
32
14
  */
33
15
  export class HttpClient {
34
- baseUrl;
35
- maxRetries;
36
- baseDelayMs;
37
- timeoutMs;
38
- browser;
39
- context;
40
- page;
41
- startPromise;
42
- constructor(baseUrl, maxRetries, baseDelayMs, timeoutMs) {
43
- this.baseUrl = baseUrl;
44
- this.maxRetries = maxRetries;
45
- this.baseDelayMs = baseDelayMs;
46
- this.timeoutMs = timeoutMs;
47
- }
48
- async get(path, params) {
49
- const url = new URL(path, this.baseUrl);
50
- if (params) {
51
- for (const [key, value] of Object.entries(params)) {
52
- url.searchParams.set(key, value);
53
- }
54
- }
55
- const urlString = url.toString();
56
- return withBackoff(() => this.executeRequest(urlString), this.maxRetries, this.baseDelayMs, urlString);
57
- }
58
- async close() {
59
- if (this.browser) {
60
- await this.browser.close().catch(() => undefined);
61
- this.browser = undefined;
62
- this.context = undefined;
63
- this.page = undefined;
64
- }
65
- }
66
- async executeRequest(urlString) {
67
- const page = await this.ensurePage();
68
- const result = await page.evaluate(async ({ url, timeoutMs }) => {
69
- const controller = new AbortController();
70
- const timer = setTimeout(() => controller.abort(), timeoutMs);
71
- try {
72
- const r = await fetch(url, {
73
- method: "GET",
74
- headers: {
75
- Accept: "application/json, text/plain, */*",
76
- Authorization: "Guest",
77
- },
78
- credentials: "include",
79
- signal: controller.signal,
80
- });
81
- const text = await r.text();
82
- return { status: r.status, statusText: r.statusText, body: text };
83
- }
84
- catch (err) {
85
- return {
86
- status: 0,
87
- statusText: "fetch failed",
88
- body: "",
89
- error: err instanceof Error ? err.message : String(err),
90
- };
91
- }
92
- finally {
93
- clearTimeout(timer);
94
- }
95
- }, { url: urlString, timeoutMs: this.timeoutMs });
96
- if (result.error || result.status === 0) {
97
- throw new Error(`Network error: ${result.error ?? "unknown"}`);
98
- }
99
- if (result.status === 401) {
100
- throw new SourceAuthError(`ANVISA API requires authentication (HTTP 401). The Authorization header may have changed.`);
101
- }
102
- if (result.status === 403) {
103
- const looksLikeCloudflareBlock = result.body.includes("Sorry, you have been blocked") ||
104
- result.body.includes("cf-error-details");
105
- if (looksLikeCloudflareBlock) {
106
- throw new Error(`Cloudflare blocked request (HTTP 403). Browser fingerprint may have been flagged.`);
107
- }
108
- throw new SourceAuthError(`ANVISA API returned HTTP 403 with non-Cloudflare body.`);
109
- }
110
- if (result.status === 429 || (result.status >= 500 && result.status < 600)) {
111
- const isBusinessException = result.body.includes("BusinessException");
112
- if (!isBusinessException) {
113
- throw new Error(`HTTP ${result.status}: ${result.statusText}`);
114
- }
115
- // BusinessException: API rejeitou parâmetro de negócio — não retriar
116
- throw new Error(`ANVISA BusinessException (HTTP ${result.status}): ${result.body.substring(0, 300)}`);
117
- }
118
- if (result.status !== 200 && result.status !== 201) {
119
- throw new Error(`HTTP ${result.status}: ${result.statusText}. Body: ${result.body.substring(0, 200)}`);
120
- }
121
- try {
122
- return JSON.parse(result.body);
123
- }
124
- catch {
125
- throw new Error(`Failed to parse JSON response. Body preview: ${result.body.substring(0, 200)}`);
126
- }
127
- }
128
- async ensurePage() {
129
- if (this.page)
130
- return this.page;
131
- if (!this.startPromise) {
132
- this.startPromise = this.start().finally(() => {
133
- this.startPromise = undefined;
134
- });
135
- }
136
- await this.startPromise;
137
- if (!this.page) {
138
- throw new Error("Playwright failed to initialize");
139
- }
140
- return this.page;
141
- }
142
- async start() {
143
- this.browser = await chromium.launch({
144
- headless: true,
145
- args: [
146
- "--disable-blink-features=AutomationControlled",
147
- "--disable-features=IsolateOrigins,site-per-process",
148
- ],
149
- });
150
- this.context = await this.browser.newContext({
151
- userAgent: CHROME_UA,
152
- locale: "pt-BR",
153
- timezoneId: "America/Sao_Paulo",
154
- viewport: { width: 1920, height: 1080 },
155
- deviceScaleFactor: 1,
156
- extraHTTPHeaders: {
157
- "Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
158
- },
159
- });
160
- await this.context.addInitScript(() => {
161
- Object.defineProperty(navigator, "webdriver", { get: () => undefined });
162
- Object.defineProperty(navigator, "plugins", { get: () => [1, 2, 3, 4, 5] });
163
- Object.defineProperty(navigator, "languages", {
164
- get: () => ["pt-BR", "pt", "en"],
165
- });
166
- });
167
- this.page = await this.context.newPage();
168
- await this.page.goto(WARMUP_URL, {
169
- waitUntil: "domcontentloaded",
170
- timeout: 30_000,
171
- });
172
- await this.page.waitForTimeout(2_000);
16
+ // biome-ignore lint/suspicious/noExplicitAny: stub — aceita qualquer arg para compatibilidade
17
+ constructor(..._args) { }
18
+ get(_path, _params) {
19
+ return Promise.reject(new Error("HttpClient foi removido em v2.0. Use BularioDatasetSource (SQLite)."));
173
20
  }
21
+ async close() { }
174
22
  }
175
23
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACrB,8FAA8F;IAC9F,YAAY,GAAG,KAAY,IAAG,CAAC;IAE/B,GAAG,CAAC,KAAa,EAAE,OAAgC;QACjD,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,qEAAqE,CAAC,CACjF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@mcpassure/mcp-anvisa-bulario",
3
- "version": "0.1.0",
3
+ "version": "2.0.0",
4
4
  "mcpName": "io.github.mcpassure/mcp-anvisa-bulario",
5
- "description": "MCP server para consulta ao Bulário Eletrônico da ANVISA",
5
+ "description": "MCP server para consulta do Bulário Eletrônico da ANVISA via CSV oficial",
6
6
  "license": "MIT",
7
7
  "author": "MCPAssure Brasil",
8
8
  "homepage": "https://github.com/mcpassure/mcp-anvisa-bulario",
@@ -44,16 +44,16 @@
44
44
  "lint:fix": "biome check --write src tests evals integration-tests test-utils",
45
45
  "format": "biome format --write src tests evals integration-tests test-utils",
46
46
  "typecheck": "tsc --noEmit",
47
+ "sync": "tsx src/scripts/sync.ts",
47
48
  "evals": "tsx evals/runner.ts",
48
49
  "canary": "tsx src/scripts/canary.ts",
49
50
  "demo": "tsx scripts/demo.ts",
50
- "postinstall": "playwright install chromium --with-deps || true",
51
51
  "prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build"
52
52
  },
53
53
  "dependencies": {
54
54
  "@modelcontextprotocol/sdk": "^1.29.0",
55
+ "aws4fetch": "^1.0.20",
55
56
  "better-sqlite3": "^12.10.0",
56
- "playwright": "^1.55.0",
57
57
  "zod": "^4.4.3"
58
58
  },
59
59
  "devDependencies": {