opf-br-mcp 0.7.0 → 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.
Files changed (3) hide show
  1. package/README.md +17 -1
  2. package/dist/index.js +102 -12
  3. 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
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.7.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) {
@@ -433,6 +433,7 @@ function createOpenApiDomain(config) {
433
433
  id: config.id,
434
434
  title: config.title,
435
435
  description: config.description,
436
+ specVersion: config.specVersion,
436
437
  ttlHours: 72,
437
438
  filters: [
438
439
  { name: "path", description: `Substring no path do endpoint (ex.: ${config.pathExample})` },
@@ -589,6 +590,7 @@ function createConfluenceSectionsDomain(config) {
589
590
  id: config.id,
590
591
  title: config.title,
591
592
  description: config.description,
593
+ specVersion: config.specVersion,
592
594
  ttlHours: 72,
593
595
  filters: [
594
596
  { name: "page", description: "Substring no t\xEDtulo da p\xE1gina Confluence" },
@@ -637,6 +639,7 @@ function createConfluenceSectionsDomain(config) {
637
639
  var paymentsV5BusinessRulesConfig = {
638
640
  id: "payments-v5-business-rules",
639
641
  title: "API de Pagamentos v5 \u2014 Regras de neg\xF3cio (SV)",
642
+ specVersion: "5.0.0",
640
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.",
641
644
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
642
645
  interRequestDelayMs: 2e3,
@@ -673,6 +676,7 @@ var enrollmentsV2Domain = createOpenApiDomain(enrollmentsV2Config);
673
676
  var enrollmentsV2BusinessRulesConfig = {
674
677
  id: "enrollments-v2-business-rules",
675
678
  title: "API de V\xEDnculo de Dispositivo v2 \u2014 Regras de neg\xF3cio (SV)",
679
+ specVersion: "2.2.0",
676
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.",
677
681
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
678
682
  interRequestDelayMs: 2e3,
@@ -709,6 +713,7 @@ var automaticPaymentsV2Domain = createOpenApiDomain(automaticPaymentsV2Config);
709
713
  var automaticPaymentsV2BusinessRulesConfig = {
710
714
  id: "automatic-payments-v2-business-rules",
711
715
  title: "API de Pagamentos Autom\xE1ticos v2 \u2014 Regras de neg\xF3cio (SV)",
716
+ specVersion: "2.2.0",
712
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.",
713
718
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
714
719
  interRequestDelayMs: 2e3,
@@ -784,18 +789,91 @@ var consentsV3Config = {
784
789
  // src/domains/consents-v3-openapi/index.ts
785
790
  var consentsV3Domain = createOpenApiDomain(consentsV3Config);
786
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
+
787
862
  // src/domains/pcm-openapi/config.ts
788
863
  var pcmOpenapiConfig = {
789
864
  specName: "pcm",
790
- specVersion: "1.0.0",
791
- url: "https://raw.githubusercontent.com/OpenBanking-Brasil/pcm-specs/refs/heads/feature/correct-paths/PCM-current.openapi.yaml",
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",
792
870
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
793
871
  };
794
872
 
795
873
  // src/domains/pcm-openapi/index.ts
796
874
  var pcmOpenapiDomain = createOpenApiDomain({
797
875
  id: "pcm-openapi",
798
- title: `PCM \u2014 spec OpenAPI ${pcmOpenapiConfig.specVersion}`,
876
+ title: `PCM \u2014 spec OpenAPI (${pcmOpenapiConfig.specVersion})`,
799
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).",
800
878
  pathExample: "/report-api/v1/private/report",
801
879
  ...pcmOpenapiConfig
@@ -1069,6 +1147,10 @@ var domains = [
1069
1147
  paymentsCommonRulesDomain,
1070
1148
  paymentsImplementationGuidesDomain,
1071
1149
  consentsV3Domain,
1150
+ resourcesV3Domain,
1151
+ resourcesV3BusinessRulesDomain,
1152
+ accountsV2Domain,
1153
+ accountsV2BusinessRulesDomain,
1072
1154
  pcmOpenapiDomain,
1073
1155
  pcmBusinessRulesDomain,
1074
1156
  jornadaOtimizadaDomain,
@@ -1124,7 +1206,7 @@ function createServer() {
1124
1206
  "list_domains",
1125
1207
  {
1126
1208
  title: "Listar dom\xEDnios",
1127
- 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).",
1128
1210
  annotations: {
1129
1211
  readOnlyHint: true,
1130
1212
  destructiveHint: false,
@@ -1134,20 +1216,24 @@ function createServer() {
1134
1216
  },
1135
1217
  async () => {
1136
1218
  const out = domains.map((d) => {
1137
- if (d.live) {
1138
- return { id: d.id, title: d.title, description: d.description, filters: d.filters, live: true };
1139
- }
1140
- const cached = readCache(d.id);
1141
- return {
1219
+ const base = {
1142
1220
  id: d.id,
1143
1221
  title: d.title,
1144
1222
  description: d.description,
1145
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,
1146
1232
  cachedItems: cached?.data.items.length ?? 0,
1147
1233
  extractedAt: cached?.extractedAt ?? null
1148
1234
  };
1149
1235
  });
1150
- return text(out);
1236
+ return text({ server: { name: "opf-br-mcp", version: PACKAGE_VERSION }, domains: out });
1151
1237
  }
1152
1238
  );
1153
1239
  server2.registerTool(
@@ -1294,6 +1380,10 @@ function createServer() {
1294
1380
  }
1295
1381
 
1296
1382
  // src/index.ts
1383
+ if (process.argv.includes("--version") || process.argv.includes("-v")) {
1384
+ console.log(PACKAGE_VERSION);
1385
+ process.exit(0);
1386
+ }
1297
1387
  var server = createServer();
1298
1388
  await server.connect(new StdioServerTransport());
1299
- console.error("[opf-br-mcp] server pronto (stdio)");
1389
+ console.error(`[opf-br-mcp] server pronto (stdio) \u2014 v${PACKAGE_VERSION}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opf-br-mcp",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server local com as regras do Open Finance Brasil (PCM additionalInfo, specs OpenAPI de Pagamentos)",
5
5
  "type": "module",
6
6
  "license": "MIT",