opf-br-mcp 0.6.1 → 0.8.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.
- package/README.md +34 -10
- package/dist/index.js +185 -112
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,6 +21,10 @@ acesso token-eficiente às regras do Open Finance Brasil.
|
|
|
21
21
|
| `payments-common-rules` | Confluence público OFB (Serviços - SV) | Conteúdo comum aos produtos de Iniciação de Pagamentos (atores, Idempotência, Como Assinar o Payload, Convenções de data/fuso, Polling) — item por seção |
|
|
22
22
|
| `payments-implementation-guides` | Confluence público OFB (Serviços - SV) | Guias de Implementação (Pix Automático, Agendamento Recorrente, Transferências Inteligentes, Liquidação de QR Codes) — item por seção |
|
|
23
23
|
| `consents-v3-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 3.3.1 da API de Consentimentos (Dados Cadastrais e Transacionais) |
|
|
24
|
+
| `resources-v3-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 3.1.0 da API de Recursos (`GET /resources`: status dos recursos compartilhados) |
|
|
25
|
+
| `resources-v3-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Recursos 3.1.0 (Informações Gerais, Orientações) — item por seção |
|
|
26
|
+
| `accounts-v2-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 2.4.2 da API de Contas (listagem, saldos, transações, limites de cheque especial) |
|
|
27
|
+
| `accounts-v2-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Contas 2.4.2 (Informações Gerais, Orientações — contraparte/IN BCB nº 371) — item por seção |
|
|
24
28
|
| `pcm-openapi` | GitHub OpenBanking-Brasil/pcm-specs | Spec OpenAPI da PCM (reportes, hybrid-flow, opendata, consents/stock, credit-portabilities, payments/status) |
|
|
25
29
|
| `pcm-business-rules` | Confluence público OFB | Regras de negócio da PCM (Reporte, Processamento, Divergências, Especificação Técnica, Manual de Integração) — item por seção |
|
|
26
30
|
| `jornada-otimizada` | Confluence público OFB | Regras da Jornada Otimizada (Orientações Gerais, Transferências Inteligentes, Jornada sem Redirecionamento) — item por seção |
|
|
@@ -32,13 +36,25 @@ acesso token-eficiente às regras do Open Finance Brasil.
|
|
|
32
36
|
|
|
33
37
|
## Tools
|
|
34
38
|
|
|
35
|
-
- `list_domains()` — descoberta: domínios, filtros e estado do cache
|
|
39
|
+
- `list_domains()` — descoberta: domínios, filtros, versão da spec de origem e estado do cache
|
|
36
40
|
- `search(domain, query?, filters?, limit?, offset?)` — busca filtrada, retorno compacto
|
|
37
41
|
- `get_item(domain, id)` — registro completo
|
|
38
42
|
- `refresh(domain?)` — força re-extração das fontes
|
|
39
43
|
|
|
40
44
|
Fluxo recomendado para o agente: `list_domains` → `search` → `get_item`.
|
|
41
45
|
|
|
46
|
+
### Qual versão estou usando?
|
|
47
|
+
|
|
48
|
+
`list_domains` devolve `server: { name, version }` junto do catálogo, então o
|
|
49
|
+
agente descobre a versão do server na mesma chamada com que descobre os domínios.
|
|
50
|
+
Cada domínio que embrulha uma spec traz também o seu `specVersion`.
|
|
51
|
+
|
|
52
|
+
Pela linha de comando:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx opf-br-mcp --version
|
|
56
|
+
```
|
|
57
|
+
|
|
42
58
|
Domínios marcados como `live` (ex.: `portal`) consultam a fonte a cada chamada:
|
|
43
59
|
não têm cache nem `refresh`, e `search` exige `query`. Quando um `search` em
|
|
44
60
|
domínio comum retorna 0 resultados, a resposta inclui um `hint` sugerindo o
|
|
@@ -52,20 +68,28 @@ bem na janela de contexto de um agente, e despejá-la desperdiça tokens. A solu
|
|
|
52
68
|
apenas o mínimo necessário em cada etapa do funil:
|
|
53
69
|
|
|
54
70
|
1. **`list_domains`** — catálogo barato: quais domínios e filtros existem.
|
|
55
|
-
2. **`search`** — índice **pesquisável e resumido**. Cada resultado traz só
|
|
56
|
-
`id`, `path`, `method`, `summary`/`name
|
|
57
|
-
|
|
58
|
-
e arrays vazios).
|
|
71
|
+
2. **`search`** — índice **pesquisável e resumido**. Cada resultado traz só os
|
|
72
|
+
campos leves (`id`, `type`, `path`, `method`, `summary`/`name`, `required`,
|
|
73
|
+
`in`); o nó pesado da spec (`detail`) e a lista `refs` são removidos do
|
|
74
|
+
resumo, e o retorno ainda é compactado (omite `null` e arrays vazios).
|
|
59
75
|
3. **`get_item`** — só aqui o nó integral da spec é entregue, e apenas para o
|
|
60
76
|
`id` que o agente escolheu.
|
|
61
77
|
|
|
62
78
|
Como o Swagger/OpenAPI vira dados pesquisáveis: o parser "achata" a spec em itens
|
|
63
79
|
com `id` estável — um por endpoint (`type: operation`, ex.
|
|
64
|
-
`payments-v4:POST /pix/payments`) e um por
|
|
65
|
-
`payments-v4:schema:PixPayment`)
|
|
66
|
-
`
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
`payments-v4:POST /pix/payments`) e um por component reutilizável: `type: schema`
|
|
81
|
+
(`payments-v4:schema:PixPayment`), `type: response` (`webhook:response:202Webhook`),
|
|
82
|
+
`type: parameter` (`webhook:parameter:xWebhookInteractionId`) e `type: header`
|
|
83
|
+
(`payments:header:X-V`). O JSON completo de
|
|
84
|
+
cada nó fica retido em `detail` até um `get_item` explícito. Os `id`s não são
|
|
85
|
+
adivinháveis: sempre vêm de um `search`. Assim o agente localiza o endpoint/schema
|
|
86
|
+
certo pagando poucos tokens e só "paga" o payload integral quando pede um item nomeado.
|
|
87
|
+
|
|
88
|
+
Os `$ref` não são expandidos em linha (medimos 3–7x mais tokens por operação):
|
|
89
|
+
em vez disso, o `get_item` de um item traz `refs` com os `id`s dos components que
|
|
90
|
+
ele referencia — todos resolvíveis por `get_item`. Resolver
|
|
91
|
+
`responses.202.$ref: '#/components/responses/202Webhook'` é uma chamada a mais,
|
|
92
|
+
não uma ida ao YAML da fonte.
|
|
69
93
|
|
|
70
94
|
Dados: extraídos das fontes públicas na primeira consulta (lazy), cache em
|
|
71
95
|
`~/.cache/opf-br-mcp/` com TTL de 72h. Sem rede, serve cache expirado com aviso.
|
package/dist/index.js
CHANGED
|
@@ -46,7 +46,7 @@ function isFresh(entry, ttlHours, now = /* @__PURE__ */ new Date()) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// src/core/version.ts
|
|
49
|
-
var PACKAGE_VERSION = "0.
|
|
49
|
+
var PACKAGE_VERSION = "0.8.0";
|
|
50
50
|
|
|
51
51
|
// src/core/data.ts
|
|
52
52
|
async function getDomainData(domain, force = false, ctx) {
|
|
@@ -352,6 +352,33 @@ var pcmDomain = {
|
|
|
352
352
|
// src/domains/_openapi/parser.ts
|
|
353
353
|
import { parse } from "yaml";
|
|
354
354
|
var HTTP_METHODS = ["get", "post", "put", "patch", "delete"];
|
|
355
|
+
var COMPONENT_KINDS = {
|
|
356
|
+
schemas: "schema",
|
|
357
|
+
responses: "response",
|
|
358
|
+
parameters: "parameter",
|
|
359
|
+
headers: "header"
|
|
360
|
+
};
|
|
361
|
+
var REF_PATTERN = /^#\/components\/(schemas|responses|parameters|headers)\/(.+)$/;
|
|
362
|
+
function collectRefs(node, specName, out) {
|
|
363
|
+
if (Array.isArray(node)) {
|
|
364
|
+
for (const child of node) collectRefs(child, specName, out);
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (node === null || typeof node !== "object") return;
|
|
368
|
+
for (const [key, value] of Object.entries(node)) {
|
|
369
|
+
if (key === "$ref" && typeof value === "string") {
|
|
370
|
+
const match = REF_PATTERN.exec(value);
|
|
371
|
+
if (match) out.add(`${specName}:${COMPONENT_KINDS[match[1]]}:${match[2]}`);
|
|
372
|
+
continue;
|
|
373
|
+
}
|
|
374
|
+
collectRefs(value, specName, out);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
function refsOf(node, specName) {
|
|
378
|
+
const out = /* @__PURE__ */ new Set();
|
|
379
|
+
collectRefs(node, specName, out);
|
|
380
|
+
return [...out];
|
|
381
|
+
}
|
|
355
382
|
function parseOpenApiSpec(yamlText, specName) {
|
|
356
383
|
const spec = parse(yamlText);
|
|
357
384
|
const items = [];
|
|
@@ -367,26 +394,38 @@ function parseOpenApiSpec(yamlText, specName) {
|
|
|
367
394
|
summary: op.summary ?? null,
|
|
368
395
|
description: op.description ?? null,
|
|
369
396
|
tags: op.tags ?? [],
|
|
397
|
+
refs: refsOf(op, specName),
|
|
370
398
|
detail: op
|
|
371
399
|
});
|
|
372
400
|
}
|
|
373
401
|
}
|
|
374
|
-
for (const [
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
402
|
+
for (const [section, kind] of Object.entries(COMPONENT_KINDS)) {
|
|
403
|
+
for (const [name, node] of Object.entries(spec.components?.[section] ?? {})) {
|
|
404
|
+
items.push({
|
|
405
|
+
id: `${specName}:${kind}:${name}`,
|
|
406
|
+
type: kind,
|
|
407
|
+
name,
|
|
408
|
+
description: node.description ?? null,
|
|
409
|
+
...kind === "schema" ? { required: node.required ?? [] } : {},
|
|
410
|
+
...kind === "header" ? { required: node.required ?? null } : {},
|
|
411
|
+
// Em parameters a chave do componente (usada no $ref) difere do nome real
|
|
412
|
+
// do header/query; `paramName` e `in` preservam o nome usado na requisição.
|
|
413
|
+
...kind === "parameter" ? { paramName: node.name ?? null, in: node.in ?? null, required: node.required ?? null } : {},
|
|
414
|
+
refs: refsOf(node, specName),
|
|
415
|
+
detail: node
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const ids = new Set(items.map((i) => i.id));
|
|
420
|
+
for (const item of items) {
|
|
421
|
+
item.refs = item.refs.filter((ref) => ref !== item.id && ids.has(ref));
|
|
383
422
|
}
|
|
384
423
|
return items;
|
|
385
424
|
}
|
|
386
425
|
|
|
387
426
|
// src/domains/_openapi/domain.ts
|
|
388
427
|
function summarize(item) {
|
|
389
|
-
const { detail: _detail, ...rest } = item;
|
|
428
|
+
const { detail: _detail, refs: _refs, ...rest } = item;
|
|
390
429
|
return rest;
|
|
391
430
|
}
|
|
392
431
|
function createOpenApiDomain(config) {
|
|
@@ -394,11 +433,24 @@ function createOpenApiDomain(config) {
|
|
|
394
433
|
id: config.id,
|
|
395
434
|
title: config.title,
|
|
396
435
|
description: config.description,
|
|
436
|
+
specVersion: config.specVersion,
|
|
397
437
|
ttlHours: 72,
|
|
398
438
|
filters: [
|
|
399
439
|
{ name: "path", description: `Substring no path do endpoint (ex.: ${config.pathExample})` },
|
|
400
440
|
{ name: "method", description: "Verbo HTTP exato (ex.: POST)" },
|
|
401
|
-
{ name: "schema", description: "Substring no nome do schema (case-insensitive)" }
|
|
441
|
+
{ name: "schema", description: "Substring no nome do schema (case-insensitive)" },
|
|
442
|
+
{
|
|
443
|
+
name: "response",
|
|
444
|
+
description: "Substring no nome do components.responses, a chave usada no $ref (ex.: 202Webhook)"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
name: "parameter",
|
|
448
|
+
description: "Substring no nome do components.parameters, a chave usada no $ref (ex.: xFapiInteractionId)"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
name: "header",
|
|
452
|
+
description: "Substring no nome do components.headers, a chave usada no $ref (ex.: X-V)"
|
|
453
|
+
}
|
|
402
454
|
],
|
|
403
455
|
async extract(ctx) {
|
|
404
456
|
if (ctx?.signal?.aborted) throw new Error("Extra\xE7\xE3o cancelada pelo cliente");
|
|
@@ -414,13 +466,17 @@ function createOpenApiDomain(config) {
|
|
|
414
466
|
search(data, query, filters = {}) {
|
|
415
467
|
const path = filters.path ? normalize(filters.path) : void 0;
|
|
416
468
|
const method = filters.method?.toUpperCase();
|
|
417
|
-
const schema = filters.schema ? normalize(filters.schema) : void 0;
|
|
418
469
|
return data.items.filter((item) => {
|
|
419
470
|
if (path && !normalize(String(item.path ?? "")).includes(path)) return false;
|
|
420
471
|
if (method && item.method !== method) return false;
|
|
421
|
-
|
|
472
|
+
for (const type of ["schema", "response", "parameter", "header"]) {
|
|
473
|
+
const name = filters[type];
|
|
474
|
+
if (!name) continue;
|
|
475
|
+
if (item.type !== type) return false;
|
|
476
|
+
if (!normalize(String(item.name ?? "")).includes(normalize(name))) return false;
|
|
477
|
+
}
|
|
422
478
|
if (query?.trim()) {
|
|
423
|
-
const haystack = [item.path, item.summary, item.description, item.name].map((v) => String(v ?? "")).join(" ");
|
|
479
|
+
const haystack = [item.path, item.summary, item.description, item.name, item.paramName].map((v) => String(v ?? "")).join(" ");
|
|
424
480
|
if (!matchesQuery(haystack, query)) return false;
|
|
425
481
|
}
|
|
426
482
|
return true;
|
|
@@ -436,7 +492,7 @@ function createOpenApiDomain(config) {
|
|
|
436
492
|
var paymentsConfig = {
|
|
437
493
|
id: "payments-v4-openapi",
|
|
438
494
|
title: "API de Pagamentos \u2014 spec OpenAPI 4.1.0",
|
|
439
|
-
description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 4. Mesma fam\xEDlia da payments-v5-openapi (major mais recente); escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path)
|
|
495
|
+
description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 4. Mesma fam\xEDlia da payments-v5-openapi (major mais recente); escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response e type=parameter. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
440
496
|
pathExample: "/pix/payments",
|
|
441
497
|
specName: "payments",
|
|
442
498
|
specVersion: "4.1.0",
|
|
@@ -451,7 +507,7 @@ var paymentsDomain = createOpenApiDomain(paymentsConfig);
|
|
|
451
507
|
var paymentsV5Config = {
|
|
452
508
|
id: "payments-v5-openapi",
|
|
453
509
|
title: "API de Pagamentos \u2014 spec OpenAPI 5.0.0",
|
|
454
|
-
description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 5 (major mais recente). Mesma fam\xEDlia da payments-v4-openapi; escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path)
|
|
510
|
+
description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 5 (major mais recente). Mesma fam\xEDlia da payments-v4-openapi; escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response, type=parameter e type=header. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
455
511
|
pathExample: "/pix/payments",
|
|
456
512
|
specName: "payments",
|
|
457
513
|
specVersion: "5.0.0",
|
|
@@ -534,6 +590,7 @@ function createConfluenceSectionsDomain(config) {
|
|
|
534
590
|
id: config.id,
|
|
535
591
|
title: config.title,
|
|
536
592
|
description: config.description,
|
|
593
|
+
specVersion: config.specVersion,
|
|
537
594
|
ttlHours: 72,
|
|
538
595
|
filters: [
|
|
539
596
|
{ name: "page", description: "Substring no t\xEDtulo da p\xE1gina Confluence" },
|
|
@@ -582,6 +639,7 @@ function createConfluenceSectionsDomain(config) {
|
|
|
582
639
|
var paymentsV5BusinessRulesConfig = {
|
|
583
640
|
id: "payments-v5-business-rules",
|
|
584
641
|
title: "API de Pagamentos v5 \u2014 Regras de neg\xF3cio (SV)",
|
|
642
|
+
specVersion: "5.0.0",
|
|
585
643
|
description: "Regras de neg\xF3cio da API de Inicia\xE7\xE3o de Pagamentos (Pix) vers\xE3o 5.0.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Servi\xE7os (SV): Informa\xE7\xF5es Gerais (vis\xE3o geral dos endpoints e dicion\xE1rio de dados), Escopo da API (formas de inicia\xE7\xE3o suportadas: Pix imediato, agendado, agendado recorrente, QR Code est\xE1tico/din\xE2mico, Pix Saque, Pix Troco, Pix Composto), M\xE1quina de Estados (status do consentimento e do pagamento), Diagrama de Sequ\xEAncia, Valida\xE7\xE3o de informa\xE7\xF5es no DICT e Adapta\xE7\xF5es para consultas de recursos entre 4.0.1 e 5.0.0. Complementa payments-v5-openapi, que traz a spec (endpoints e schemas) da mesma vers\xE3o. Conte\xFAdo que vale para todos os produtos de inicia\xE7\xE3o (idempot\xEAncia, assinatura de payload, polling, formatos de data) est\xE1 em payments-common-rules. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
|
|
586
644
|
confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
|
|
587
645
|
interRequestDelayMs: 2e3,
|
|
@@ -603,7 +661,7 @@ var paymentsV5BusinessRulesDomain = createConfluenceSectionsDomain(paymentsV5Bus
|
|
|
603
661
|
var enrollmentsV2Config = {
|
|
604
662
|
id: "enrollments-v2-openapi",
|
|
605
663
|
title: "API de V\xEDnculo de Dispositivo (Enrollments) \u2014 spec OpenAPI 2.3.0",
|
|
606
|
-
description: "Spec OpenAPI oficial da API de Enrollments (V\xEDnculo de Dispositivo) do Open Finance Brasil, vers\xE3o 2. Cobre o pagamento sem redirecionamento: v\xEDnculo de dispositivos (FIDO), autoriza\xE7\xE3o de consentimentos e Pix Autom\xE1tico. Endpoints /enrollments, /consents/{consentId}/authorise e /recurring-consents/{recurringConsentId}/authorise. Itens type=operation (endpoints, um por m\xE9todo+path)
|
|
664
|
+
description: "Spec OpenAPI oficial da API de Enrollments (V\xEDnculo de Dispositivo) do Open Finance Brasil, vers\xE3o 2. Cobre o pagamento sem redirecionamento: v\xEDnculo de dispositivos (FIDO), autoriza\xE7\xE3o de consentimentos e Pix Autom\xE1tico. Endpoints /enrollments, /consents/{consentId}/authorise e /recurring-consents/{recurringConsentId}/authorise. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response, type=parameter e type=header. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
607
665
|
pathExample: "/enrollments",
|
|
608
666
|
specName: "enrollments",
|
|
609
667
|
specVersion: "2.3.0",
|
|
@@ -618,6 +676,7 @@ var enrollmentsV2Domain = createOpenApiDomain(enrollmentsV2Config);
|
|
|
618
676
|
var enrollmentsV2BusinessRulesConfig = {
|
|
619
677
|
id: "enrollments-v2-business-rules",
|
|
620
678
|
title: "API de V\xEDnculo de Dispositivo v2 \u2014 Regras de neg\xF3cio (SV)",
|
|
679
|
+
specVersion: "2.2.0",
|
|
621
680
|
description: "Regras de neg\xF3cio da API de V\xEDnculo de Dispositivo (Enrollments / Jornada Sem Redirecionamento) vers\xE3o 2.2.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Servi\xE7os (SV): Informa\xE7\xF5es Gerais, M\xE1quina de estados (vincula\xE7\xE3o de conta, autoriza\xE7\xE3o de consentimento e do consentimento recorrente), Edi\xE7\xE3o do v\xEDnculo de dispositivo (campos edit\xE1veis e condi\xE7\xF5es) e FAQ - JSR (perguntas e respostas por categoria). Complementa enrollments-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major \u2014 hoje na 2.3.0, enquanto estas p\xE1ginas do Confluence ainda s\xE3o as da 2.2.0. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
|
|
622
681
|
confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
|
|
623
682
|
interRequestDelayMs: 2e3,
|
|
@@ -639,7 +698,7 @@ var enrollmentsV2BusinessRulesDomain = createConfluenceSectionsDomain(
|
|
|
639
698
|
var automaticPaymentsV2Config = {
|
|
640
699
|
id: "automatic-payments-v2-openapi",
|
|
641
700
|
title: "API de Pagamentos Autom\xE1ticos (Automatic Payments) \u2014 spec OpenAPI 2.2.0",
|
|
642
|
-
description: "Spec OpenAPI oficial da API de Automatic Payments do Open Finance Brasil, vers\xE3o 2. Cobre a inicia\xE7\xE3o de pagamentos autom\xE1ticos (Pix Autom\xE1tico e Transfer\xEAncias Inteligentes) mediante consentimento recorrente. Endpoints /recurring-consents (cria\xE7\xE3o, consulta e edi\xE7\xE3o/revoga\xE7\xE3o) e /pix/recurring-payments (cria\xE7\xE3o, retry, consulta e cancelamento); scope recurring-payments. Itens type=operation (endpoints, um por m\xE9todo+path)
|
|
701
|
+
description: "Spec OpenAPI oficial da API de Automatic Payments do Open Finance Brasil, vers\xE3o 2. Cobre a inicia\xE7\xE3o de pagamentos autom\xE1ticos (Pix Autom\xE1tico e Transfer\xEAncias Inteligentes) mediante consentimento recorrente. Endpoints /recurring-consents (cria\xE7\xE3o, consulta e edi\xE7\xE3o/revoga\xE7\xE3o) e /pix/recurring-payments (cria\xE7\xE3o, retry, consulta e cancelamento); scope recurring-payments. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response, type=parameter e type=header. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
643
702
|
pathExample: "/pix/recurring-payments",
|
|
644
703
|
specName: "automatic-payments",
|
|
645
704
|
specVersion: "2.2.0",
|
|
@@ -654,6 +713,7 @@ var automaticPaymentsV2Domain = createOpenApiDomain(automaticPaymentsV2Config);
|
|
|
654
713
|
var automaticPaymentsV2BusinessRulesConfig = {
|
|
655
714
|
id: "automatic-payments-v2-business-rules",
|
|
656
715
|
title: "API de Pagamentos Autom\xE1ticos v2 \u2014 Regras de neg\xF3cio (SV)",
|
|
716
|
+
specVersion: "2.2.0",
|
|
657
717
|
description: "Regras de neg\xF3cio da API de Pagamentos Autom\xE1ticos (Pix Autom\xE1tico e Transfer\xEAncias Inteligentes) vers\xE3o 2.2.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Servi\xE7os (SV): Informa\xE7\xF5es Gerais (vis\xE3o geral dos endpoints e dicion\xE1rio de dados), M\xE1quina de Estados (status do consentimento recorrente e do pagamento), Edi\xE7\xE3o do consentimento (campos edit\xE1veis e condi\xE7\xF5es), Tentativas Intradia e Extradia para Pix Autom\xE1tico (janelas de liquida\xE7\xE3o, retentativas, e2eID) e Adapta\xE7\xF5es para consultas de recursos entre 1.0.0 e 2.2.0. Complementa automatic-payments-v2-openapi, que traz a spec (endpoints e schemas) da mesma vers\xE3o. O guia de implementa\xE7\xE3o passo a passo do Pix Autom\xE1tico est\xE1 em payments-implementation-guides. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
|
|
658
718
|
confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
|
|
659
719
|
interRequestDelayMs: 2e3,
|
|
@@ -718,7 +778,7 @@ var paymentsImplementationGuidesDomain = createConfluenceSectionsDomain(
|
|
|
718
778
|
var consentsV3Config = {
|
|
719
779
|
id: "consents-v3-openapi",
|
|
720
780
|
title: "API de Consentimentos \u2014 spec OpenAPI 3.3.1",
|
|
721
|
-
description: "Spec OpenAPI oficial da API de Consentimentos de compartilhamento de dados (Dados Cadastrais e Transacionais) do Open Finance Brasil, vers\xE3o 3.3.1. \xC9 o consentimento de dados \u2014 n\xE3o cobre consentimento de pagamento, que fica em payments-v4/v5-openapi (/consents) e automatic-payments-v2-openapi (/recurring-consents). Cobre cria\xE7\xE3o (POST /consents), consulta (GET /consents/{consentId}), revoga\xE7\xE3o (DELETE /consents/{consentId}), renova\xE7\xE3o (POST /consents/{consentId}/extends) e hist\xF3rico de renova\xE7\xF5es (GET /consents/{consentId}/extensions). Itens type=operation (um por m\xE9todo+path)
|
|
781
|
+
description: "Spec OpenAPI oficial da API de Consentimentos de compartilhamento de dados (Dados Cadastrais e Transacionais) do Open Finance Brasil, vers\xE3o 3.3.1. \xC9 o consentimento de dados \u2014 n\xE3o cobre consentimento de pagamento, que fica em payments-v4/v5-openapi (/consents) e automatic-payments-v2-openapi (/recurring-consents). Cobre cria\xE7\xE3o (POST /consents), consulta (GET /consents/{consentId}), revoga\xE7\xE3o (DELETE /consents/{consentId}), renova\xE7\xE3o (POST /consents/{consentId}/extends) e hist\xF3rico de renova\xE7\xF5es (GET /consents/{consentId}/extensions). Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: CreateConsent, ResponseConsent, LoggedUser, BusinessEntity) e os components reutiliz\xE1veis alvos dos $ref: type=response (BadRequest, UnprocessableEntity, ...) e type=parameter (Authorization, xFapiInteractionId, ...). search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
722
782
|
pathExample: "/consents/{consentId}",
|
|
723
783
|
specName: "consents",
|
|
724
784
|
specVersion: "3.3.1",
|
|
@@ -729,94 +789,95 @@ var consentsV3Config = {
|
|
|
729
789
|
// src/domains/consents-v3-openapi/index.ts
|
|
730
790
|
var consentsV3Domain = createOpenApiDomain(consentsV3Config);
|
|
731
791
|
|
|
792
|
+
// src/domains/resources-v3-openapi/config.ts
|
|
793
|
+
var resourcesV3Config = {
|
|
794
|
+
id: "resources-v3-openapi",
|
|
795
|
+
title: "API de Recursos \u2014 spec OpenAPI 3.1.0",
|
|
796
|
+
description: "Spec OpenAPI oficial da API de Recursos (Resources) do Open Finance Brasil, vers\xE3o 3.1.0. Endpoint \xFAnico (GET /resources) que lista os recursos compartilhados pelo cliente e o status de cada um, considerando a disponibilidade do recurso e o status do consentimento relacionado \u2014 \xE9 o ponto de partida de qualquer jornada de Dados Cadastrais e Transacionais, pois diz o que a receptora pode de fato consultar. O consentimento que a habilita fica em consents-v3-openapi; as contas em si, em accounts-v2-openapi. Itens type=operation, type=schema (ex.: ResponseResourceList, ResourceData com enum de status) e os components alvos dos $ref: type=response e type=parameter. Regras de neg\xF3cio da mesma API em resources-v3-business-rules. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
797
|
+
pathExample: "/resources",
|
|
798
|
+
specName: "resources",
|
|
799
|
+
specVersion: "3.1.0",
|
|
800
|
+
url: "https://openbanking-brasil.github.io/openapi/swagger-apis/resources/3.1.0.yml",
|
|
801
|
+
retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
|
|
802
|
+
};
|
|
803
|
+
|
|
804
|
+
// src/domains/resources-v3-openapi/index.ts
|
|
805
|
+
var resourcesV3Domain = createOpenApiDomain(resourcesV3Config);
|
|
806
|
+
|
|
807
|
+
// src/domains/resources-v3-business-rules/config.ts
|
|
808
|
+
var resourcesV3BusinessRulesConfig = {
|
|
809
|
+
id: "resources-v3-business-rules",
|
|
810
|
+
title: "API de Recursos v3 \u2014 Regras de neg\xF3cio (DC)",
|
|
811
|
+
specVersion: "3.1.0",
|
|
812
|
+
description: "Regras de neg\xF3cio da API de Recursos (Resources) vers\xE3o 3.1.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): Informa\xE7\xF5es Gerais (vis\xE3o geral do GET /resources/v3/resources, status do recurso versus status do consentimento) e Orienta\xE7\xF5es - [DC] Recursos (quando um recurso volta a ficar dispon\xEDvel, uso do status code de erro apropriado quando a transmissora n\xE3o retorna as informa\xE7\xF5es) \u2014 esta \xFAltima n\xE3o \xE9 versionada e vale para todo o major v3. Complementa resources-v3-openapi, que traz a spec (endpoints e schemas) do mesmo major. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
|
|
813
|
+
confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
|
|
814
|
+
interRequestDelayMs: 2e3,
|
|
815
|
+
retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
|
|
816
|
+
pages: [
|
|
817
|
+
{ pageId: "1267990545", title: "Informa\xE7\xF5es Gerais - [DC] Recursos - v3.1.0" },
|
|
818
|
+
{ pageId: "219512943", title: "Orienta\xE7\xF5es - [DC] Recursos" }
|
|
819
|
+
]
|
|
820
|
+
};
|
|
821
|
+
|
|
822
|
+
// src/domains/resources-v3-business-rules/index.ts
|
|
823
|
+
var resourcesV3BusinessRulesDomain = createConfluenceSectionsDomain(
|
|
824
|
+
resourcesV3BusinessRulesConfig
|
|
825
|
+
);
|
|
826
|
+
|
|
827
|
+
// src/domains/accounts-v2-openapi/config.ts
|
|
828
|
+
var accountsV2Config = {
|
|
829
|
+
id: "accounts-v2-openapi",
|
|
830
|
+
title: "API de Contas \u2014 spec OpenAPI 2.4.2",
|
|
831
|
+
description: "Spec OpenAPI oficial da API de Contas (Accounts) do Open Finance Brasil, vers\xE3o 2.4.2 \u2014 compartilhamento de contas de dep\xF3sito \xE0 vista, poupan\xE7a e pagamento pr\xE9-paga. Cobre listagem (GET /accounts), identifica\xE7\xE3o (GET /accounts/{accountId}), saldos (GET /accounts/{accountId}/balances), transa\xE7\xF5es (GET /accounts/{accountId}/transactions e /transactions-current) e limites de cheque especial (GET /accounts/{accountId}/overdraft-limits). \xC9 API de Dados Cadastrais e Transacionais: o consentimento que a habilita fica em consents-v3-openapi, e a listagem de recursos compartilhados em resources-v3-openapi. Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: AccountData, AccountBalancesData, AccountTransactionsData) e os components alvos dos $ref: type=response e type=parameter. Regras de neg\xF3cio da mesma API em accounts-v2-business-rules. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
832
|
+
pathExample: "/accounts/{accountId}/transactions",
|
|
833
|
+
specName: "accounts",
|
|
834
|
+
specVersion: "2.4.2",
|
|
835
|
+
url: "https://openbanking-brasil.github.io/openapi/swagger-apis/accounts/2.4.2.yml",
|
|
836
|
+
retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
|
|
837
|
+
};
|
|
838
|
+
|
|
839
|
+
// src/domains/accounts-v2-openapi/index.ts
|
|
840
|
+
var accountsV2Domain = createOpenApiDomain(accountsV2Config);
|
|
841
|
+
|
|
842
|
+
// src/domains/accounts-v2-business-rules/config.ts
|
|
843
|
+
var accountsV2BusinessRulesConfig = {
|
|
844
|
+
id: "accounts-v2-business-rules",
|
|
845
|
+
title: "API de Contas v2 \u2014 Regras de neg\xF3cio (DC)",
|
|
846
|
+
specVersion: "2.4.2",
|
|
847
|
+
description: "Regras de neg\xF3cio da API de Contas (Accounts) vers\xE3o 2.4.2 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): Informa\xE7\xF5es Gerais (vis\xE3o geral dos endpoints, contas de dep\xF3sito \xE0 vista/poupan\xE7a/pagamento pr\xE9-paga, saldos, transa\xE7\xF5es e limites) e Orienta\xE7\xF5es - [DC] Contas (obrigatoriedade de informa\xE7\xF5es de contraparte pela IN BCB n\xBA 371, tratamento de transa\xE7\xF5es e casos de borda) \u2014 esta \xFAltima n\xE3o \xE9 versionada e vale para todo o major v2. Complementa accounts-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
|
|
848
|
+
confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
|
|
849
|
+
interRequestDelayMs: 2e3,
|
|
850
|
+
retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
|
|
851
|
+
pages: [
|
|
852
|
+
{ pageId: "979566625", title: "Informa\xE7\xF5es Gerais - [DC] Contas - v2.4.2" },
|
|
853
|
+
{ pageId: "1739096252", title: "Orienta\xE7\xF5es - [DC] Contas" }
|
|
854
|
+
]
|
|
855
|
+
};
|
|
856
|
+
|
|
857
|
+
// src/domains/accounts-v2-business-rules/index.ts
|
|
858
|
+
var accountsV2BusinessRulesDomain = createConfluenceSectionsDomain(
|
|
859
|
+
accountsV2BusinessRulesConfig
|
|
860
|
+
);
|
|
861
|
+
|
|
732
862
|
// src/domains/pcm-openapi/config.ts
|
|
733
863
|
var pcmOpenapiConfig = {
|
|
734
864
|
specName: "pcm",
|
|
735
|
-
|
|
736
|
-
|
|
865
|
+
// A spec da PCM não declara `info.version` (o campo `openapi:` traz um valor
|
|
866
|
+
// fora do padrão). Identificar pelo commit é o único rótulo verificável — e
|
|
867
|
+
// deixa explícito, em list_domains, que este domínio está congelado no SHA.
|
|
868
|
+
specVersion: "commit 8a7f7b0",
|
|
869
|
+
url: "https://raw.githubusercontent.com/OpenBanking-Brasil/pcm-specs/8a7f7b03ddfab7eaf97bcfe68e67fac22a5eeb68/PCM-current.openapi.yaml",
|
|
737
870
|
retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
|
|
738
871
|
};
|
|
739
872
|
|
|
740
|
-
// src/domains/pcm-openapi/parser.ts
|
|
741
|
-
import { parse as parse2 } from "yaml";
|
|
742
|
-
var HTTP_METHODS2 = ["get", "post", "put", "patch", "delete"];
|
|
743
|
-
function parseOpenApiSpec2(yamlText, specName) {
|
|
744
|
-
const spec = parse2(yamlText);
|
|
745
|
-
const items = [];
|
|
746
|
-
for (const [path, pathItem] of Object.entries(spec.paths ?? {})) {
|
|
747
|
-
for (const method of HTTP_METHODS2) {
|
|
748
|
-
const op = pathItem[method];
|
|
749
|
-
if (!op) continue;
|
|
750
|
-
items.push({
|
|
751
|
-
id: `${specName}:${method.toUpperCase()} ${path}`,
|
|
752
|
-
type: "operation",
|
|
753
|
-
path,
|
|
754
|
-
method: method.toUpperCase(),
|
|
755
|
-
summary: op.summary ?? null,
|
|
756
|
-
description: op.description ?? null,
|
|
757
|
-
tags: op.tags ?? [],
|
|
758
|
-
detail: op
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
for (const [name, schema] of Object.entries(spec.components?.schemas ?? {})) {
|
|
763
|
-
items.push({
|
|
764
|
-
id: `${specName}:schema:${name}`,
|
|
765
|
-
type: "schema",
|
|
766
|
-
name,
|
|
767
|
-
description: schema.description ?? null,
|
|
768
|
-
required: schema.required ?? [],
|
|
769
|
-
detail: schema
|
|
770
|
-
});
|
|
771
|
-
}
|
|
772
|
-
return items;
|
|
773
|
-
}
|
|
774
|
-
|
|
775
873
|
// src/domains/pcm-openapi/index.ts
|
|
776
|
-
|
|
777
|
-
const { detail: _detail, ...rest } = item;
|
|
778
|
-
return rest;
|
|
779
|
-
}
|
|
780
|
-
var pcmOpenapiDomain = {
|
|
874
|
+
var pcmOpenapiDomain = createOpenApiDomain({
|
|
781
875
|
id: "pcm-openapi",
|
|
782
|
-
title: `PCM \u2014 spec OpenAPI ${pcmOpenapiConfig.specVersion}`,
|
|
783
|
-
description: "Spec OpenAPI oficial da PCM (Plataforma de Coleta de M\xE9tricas) do Open Finance Brasil \u2014 a faceta swagger. Cobre os endpoints de reporte (report-api v1/v2), hybrid-flow, opendata, consents/stock, credit-portabilities, payments/status e token. Itens type=operation (um por m\xE9todo+path)
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
{ name: "method", description: "Verbo HTTP exato (ex.: POST)" },
|
|
788
|
-
{ name: "schema", description: "Substring no nome do schema (case-insensitive)" }
|
|
789
|
-
],
|
|
790
|
-
async extract(ctx) {
|
|
791
|
-
if (ctx?.signal?.aborted) throw new Error("Extra\xE7\xE3o cancelada pelo cliente");
|
|
792
|
-
ctx?.onProgress?.(0, 1, `Baixando spec ${pcmOpenapiConfig.specName} ${pcmOpenapiConfig.specVersion}`);
|
|
793
|
-
const response = await fetchWithRetry(pcmOpenapiConfig.url, {
|
|
794
|
-
retryDelaysMs: pcmOpenapiConfig.retryDelaysMs,
|
|
795
|
-
signal: ctx?.signal
|
|
796
|
-
});
|
|
797
|
-
const yamlText = await response.text();
|
|
798
|
-
ctx?.onProgress?.(1, 1);
|
|
799
|
-
return { items: parseOpenApiSpec2(yamlText, pcmOpenapiConfig.specName) };
|
|
800
|
-
},
|
|
801
|
-
search(data, query, filters = {}) {
|
|
802
|
-
const path = filters.path ? normalize(filters.path) : void 0;
|
|
803
|
-
const method = filters.method?.toUpperCase();
|
|
804
|
-
const schema = filters.schema ? normalize(filters.schema) : void 0;
|
|
805
|
-
return data.items.filter((item) => {
|
|
806
|
-
if (path && !normalize(String(item.path ?? "")).includes(path)) return false;
|
|
807
|
-
if (method && item.method !== method) return false;
|
|
808
|
-
if (schema && !normalize(String(item.name ?? "")).includes(schema)) return false;
|
|
809
|
-
if (query?.trim()) {
|
|
810
|
-
const haystack = [item.path, item.summary, item.description, item.name].map((v) => String(v ?? "")).join(" ");
|
|
811
|
-
if (!matchesQuery(haystack, query)) return false;
|
|
812
|
-
}
|
|
813
|
-
return true;
|
|
814
|
-
}).map(summarize3);
|
|
815
|
-
},
|
|
816
|
-
getItem(data, id) {
|
|
817
|
-
return data.items.find((i) => i.id === id) ?? null;
|
|
818
|
-
}
|
|
819
|
-
};
|
|
876
|
+
title: `PCM \u2014 spec OpenAPI (${pcmOpenapiConfig.specVersion})`,
|
|
877
|
+
description: "Spec OpenAPI oficial da PCM (Plataforma de Coleta de M\xE9tricas) do Open Finance Brasil \u2014 a faceta swagger. Cobre os endpoints de reporte (report-api v1/v2), hybrid-flow, opendata, consents/stock, credit-portabilities, payments/status e token. Itens type=operation (um por m\xE9todo+path), type=schema (payloads) e type=response (components reutiliz\xE1veis, alvos dos $ref). Outras facetas da PCM: tabelas de obrigatoriedade do campo additionalInfo em pcm-additional-info; regras de neg\xF3cio (reporte, processamento, diverg\xEAncias) em pcm-business-rules. search devolve resumos; use get_item para o n\xF3 completo da spec (opera\xE7\xF5es trazem `refs` com os ids dos components que referenciam).",
|
|
878
|
+
pathExample: "/report-api/v1/private/report",
|
|
879
|
+
...pcmOpenapiConfig
|
|
880
|
+
});
|
|
820
881
|
|
|
821
882
|
// src/domains/pcm-business-rules/config.ts
|
|
822
883
|
var pcmBusinessRulesConfig = {
|
|
@@ -883,7 +944,7 @@ var mqdDomain = createConfluenceSectionsDomain(mqdConfig);
|
|
|
883
944
|
var webhookConfig = {
|
|
884
945
|
id: "webhook-v1-openapi",
|
|
885
946
|
title: "API de Webhook \u2014 spec OpenAPI 1.3.0",
|
|
886
|
-
description: "Spec OpenAPI oficial da API de Webhook do Open Finance Brasil, que notifica mudan\xE7as de estado das demais APIs. 5 opera\xE7\xF5es POST (type=operation): consentNotification e pixPaymentNotification (Pagamentos), enrollmentIdNotification (Enrollments), recurringConsentIdNotification e recurringPaymentIdNotification (Pagamentos Autom\xE1ticos);
|
|
947
|
+
description: "Spec OpenAPI oficial da API de Webhook do Open Finance Brasil, que notifica mudan\xE7as de estado das demais APIs. 5 opera\xE7\xF5es POST (type=operation): consentNotification e pixPaymentNotification (Pagamentos), enrollmentIdNotification (Enrollments), recurringConsentIdNotification e recurringPaymentIdNotification (Pagamentos Autom\xE1ticos); schemas type=schema (RequestBodyWebhook, RequestBodyWebhookEvents, EventType, Timestamp, xWebhookInteractionId); e os components reutiliz\xE1veis alvos dos $ref: type=response (202Webhook, 202WebhookPayments) e type=parameter (consentId, versionApi, xWebhookInteractionId, ...). search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
|
|
887
948
|
pathExample: "/payments/{versionApi}/consents/{consentId}",
|
|
888
949
|
specName: "webhook",
|
|
889
950
|
specVersion: "1.3.0",
|
|
@@ -964,7 +1025,7 @@ function parseParticipants(jsonText) {
|
|
|
964
1025
|
}
|
|
965
1026
|
|
|
966
1027
|
// src/domains/participantes/index.ts
|
|
967
|
-
function
|
|
1028
|
+
function summarize3(item) {
|
|
968
1029
|
const { detail: _detail, ...rest } = item;
|
|
969
1030
|
return rest;
|
|
970
1031
|
}
|
|
@@ -1005,7 +1066,7 @@ var participantesDomain = {
|
|
|
1005
1066
|
if (!matchesQuery(haystack, query)) return false;
|
|
1006
1067
|
}
|
|
1007
1068
|
return true;
|
|
1008
|
-
}).map(
|
|
1069
|
+
}).map(summarize3);
|
|
1009
1070
|
},
|
|
1010
1071
|
getItem(data, id) {
|
|
1011
1072
|
return data.items.find((i) => i.id === id) ?? null;
|
|
@@ -1086,6 +1147,10 @@ var domains = [
|
|
|
1086
1147
|
paymentsCommonRulesDomain,
|
|
1087
1148
|
paymentsImplementationGuidesDomain,
|
|
1088
1149
|
consentsV3Domain,
|
|
1150
|
+
resourcesV3Domain,
|
|
1151
|
+
resourcesV3BusinessRulesDomain,
|
|
1152
|
+
accountsV2Domain,
|
|
1153
|
+
accountsV2BusinessRulesDomain,
|
|
1089
1154
|
pcmOpenapiDomain,
|
|
1090
1155
|
pcmBusinessRulesDomain,
|
|
1091
1156
|
jornadaOtimizadaDomain,
|
|
@@ -1141,7 +1206,7 @@ function createServer() {
|
|
|
1141
1206
|
"list_domains",
|
|
1142
1207
|
{
|
|
1143
1208
|
title: "Listar dom\xEDnios",
|
|
1144
|
-
description: "Lista os dom\xEDnios de conhecimento do Open Finance Brasil dispon\xEDveis neste server, com os filtros aceitos por cada um e o estado do cache local. Comece por aqui; depois use search(domain, ...) e get_item(domain, id).",
|
|
1209
|
+
description: "Lista os dom\xEDnios de conhecimento do Open Finance Brasil dispon\xEDveis neste server, com os filtros aceitos por cada um, a vers\xE3o da spec de origem e o estado do cache local. Devolve tamb\xE9m a vers\xE3o deste server em `server.version`. Comece por aqui; depois use search(domain, ...) e get_item(domain, id).",
|
|
1145
1210
|
annotations: {
|
|
1146
1211
|
readOnlyHint: true,
|
|
1147
1212
|
destructiveHint: false,
|
|
@@ -1151,20 +1216,24 @@ function createServer() {
|
|
|
1151
1216
|
},
|
|
1152
1217
|
async () => {
|
|
1153
1218
|
const out = domains.map((d) => {
|
|
1154
|
-
|
|
1155
|
-
return { id: d.id, title: d.title, description: d.description, filters: d.filters, live: true };
|
|
1156
|
-
}
|
|
1157
|
-
const cached = readCache(d.id);
|
|
1158
|
-
return {
|
|
1219
|
+
const base = {
|
|
1159
1220
|
id: d.id,
|
|
1160
1221
|
title: d.title,
|
|
1161
1222
|
description: d.description,
|
|
1162
1223
|
filters: d.filters,
|
|
1224
|
+
...d.specVersion ? { specVersion: d.specVersion } : {}
|
|
1225
|
+
};
|
|
1226
|
+
if (d.live) {
|
|
1227
|
+
return { ...base, live: true };
|
|
1228
|
+
}
|
|
1229
|
+
const cached = readCache(d.id);
|
|
1230
|
+
return {
|
|
1231
|
+
...base,
|
|
1163
1232
|
cachedItems: cached?.data.items.length ?? 0,
|
|
1164
1233
|
extractedAt: cached?.extractedAt ?? null
|
|
1165
1234
|
};
|
|
1166
1235
|
});
|
|
1167
|
-
return text(out);
|
|
1236
|
+
return text({ server: { name: "opf-br-mcp", version: PACKAGE_VERSION }, domains: out });
|
|
1168
1237
|
}
|
|
1169
1238
|
);
|
|
1170
1239
|
server2.registerTool(
|
|
@@ -1238,7 +1307,7 @@ function createServer() {
|
|
|
1238
1307
|
"get_item",
|
|
1239
1308
|
{
|
|
1240
1309
|
title: "Detalhar um item",
|
|
1241
|
-
description: "Devolve o registro completo de um item pelo `id` retornado por search (nos dom\xEDnios *-openapi e participantes inclui o n\xF3 integral da spec em `detail`; em pcm-additional-info devolve o registro completo, enquanto search devolve apenas um resumo).",
|
|
1310
|
+
description: "Devolve o registro completo de um item pelo `id` retornado por search (nos dom\xEDnios *-openapi e participantes inclui o n\xF3 integral da spec em `detail`; em pcm-additional-info devolve o registro completo, enquanto search devolve apenas um resumo). Nos dom\xEDnios *-openapi os `$ref` n\xE3o v\xEAm expandidos: o campo `refs` lista os ids dos components referenciados (responses, parameters, schemas) \u2014 chame get_item neles para resolver.",
|
|
1242
1311
|
inputSchema: {
|
|
1243
1312
|
domain: domainIdSchema,
|
|
1244
1313
|
id: z.string().describe("Id do item (vindo de search)")
|
|
@@ -1311,6 +1380,10 @@ function createServer() {
|
|
|
1311
1380
|
}
|
|
1312
1381
|
|
|
1313
1382
|
// src/index.ts
|
|
1383
|
+
if (process.argv.includes("--version") || process.argv.includes("-v")) {
|
|
1384
|
+
console.log(PACKAGE_VERSION);
|
|
1385
|
+
process.exit(0);
|
|
1386
|
+
}
|
|
1314
1387
|
var server = createServer();
|
|
1315
1388
|
await server.connect(new StdioServerTransport());
|
|
1316
|
-
console.error(
|
|
1389
|
+
console.error(`[opf-br-mcp] server pronto (stdio) \u2014 v${PACKAGE_VERSION}`);
|