opf-br-mcp 0.4.0 → 0.5.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 +21 -0
- package/dist/index.js +22 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -81,6 +81,27 @@ GitHub Copilot (VS Code) — `.vscode/mcp.json`:
|
|
|
81
81
|
{ "servers": { "opf-br": { "command": "npx", "args": ["-y", "opf-br-mcp"] } } }
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
Claude Desktop — `claude_desktop_config.json` (Settings → Developer → Edit Config):
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{ "mcpServers": { "opf-br": { "command": "npx", "args": ["-y", "opf-br-mcp"] } } }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Windows
|
|
91
|
+
|
|
92
|
+
No Windows, o client não consegue executar `npx` diretamente (é o shim
|
|
93
|
+
`npx.cmd`) e acaba abrindo um `cmd.exe` interativo, cujo banner
|
|
94
|
+
(`Microsoft Windows [Version ...]`) vaza para o canal stdio e corrompe o
|
|
95
|
+
protocolo JSON-RPC — o servidor falha na conexão com erros de JSON inválido.
|
|
96
|
+
Envolva o comando em `cmd /c` para rodá-lo sem shell interativo:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{ "mcpServers": { "opf-br": { "command": "cmd", "args": ["/c", "npx", "-y", "opf-br-mcp"] } } }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Vale para qualquer client no Windows (Claude Desktop, Claude Code, VS Code) —
|
|
103
|
+
ajuste apenas a chave externa (`mcpServers` ou `servers`).
|
|
104
|
+
|
|
84
105
|
### Uso local (a partir do fonte)
|
|
85
106
|
|
|
86
107
|
```bash
|
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.5.0";
|
|
50
50
|
|
|
51
51
|
// src/core/data.ts
|
|
52
52
|
async function getDomainData(domain, force = false, ctx) {
|
|
@@ -254,6 +254,25 @@ function parseAdditionalInfoTables(html) {
|
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
// src/domains/pcm-additional-info/index.ts
|
|
257
|
+
function definicaoSnippet(text2, max = 120) {
|
|
258
|
+
if (text2.length <= max) return text2;
|
|
259
|
+
const slice = text2.slice(0, max);
|
|
260
|
+
const lastSpace = slice.lastIndexOf(" ");
|
|
261
|
+
const cut = lastSpace > 0 ? slice.slice(0, lastSpace) : slice;
|
|
262
|
+
return `${cut.trimEnd()}\u2026`;
|
|
263
|
+
}
|
|
264
|
+
function summarizePcm(item) {
|
|
265
|
+
const summary = {
|
|
266
|
+
campo: item.campo,
|
|
267
|
+
tipo: item.tipo ?? null,
|
|
268
|
+
versoes: item.versoes,
|
|
269
|
+
roles: item.roles,
|
|
270
|
+
id: item.id,
|
|
271
|
+
page: item.page
|
|
272
|
+
};
|
|
273
|
+
if (item.definicao) summary.definicaoSnippet = definicaoSnippet(item.definicao);
|
|
274
|
+
return summary;
|
|
275
|
+
}
|
|
257
276
|
function slugify(text2) {
|
|
258
277
|
return text2.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
259
278
|
}
|
|
@@ -278,7 +297,7 @@ function buildItems(pages) {
|
|
|
278
297
|
var pcmDomain = {
|
|
279
298
|
id: "pcm-additional-info",
|
|
280
299
|
title: "PCM \u2014 Regras de obrigatoriedade do additionalInfo",
|
|
281
|
-
description: "Regras de preenchimento do campo additionalInfo das p\xE1ginas PCM (Plataforma de Coleta de M\xE9tricas) do Confluence do Open Finance Brasil (Inicia\xE7\xE3o de Pagamentos, Pagamentos Autom\xE1ticos, Sem Redirecionamento, DC-*). Cada item \xE9 um campo com regra, m\xE9todos, endpoints, vers\xF5es, tamanho m\xE1ximo e exemplo.",
|
|
300
|
+
description: "Regras de preenchimento do campo additionalInfo das p\xE1ginas PCM (Plataforma de Coleta de M\xE9tricas) do Confluence do Open Finance Brasil (Inicia\xE7\xE3o de Pagamentos, Pagamentos Autom\xE1ticos, Sem Redirecionamento, DC-*). Cada item \xE9 um campo com regra, m\xE9todos, endpoints, vers\xF5es, tamanho m\xE1ximo e exemplo. search devolve resumos; use get_item para o registro completo.",
|
|
282
301
|
ttlHours: 24,
|
|
283
302
|
filters: [
|
|
284
303
|
{ name: "field", description: "Match exato no nome do campo (case-insensitive)" },
|
|
@@ -323,7 +342,7 @@ var pcmDomain = {
|
|
|
323
342
|
if (!matchesQuery(haystack, query)) return false;
|
|
324
343
|
}
|
|
325
344
|
return true;
|
|
326
|
-
});
|
|
345
|
+
}).map(summarizePcm);
|
|
327
346
|
},
|
|
328
347
|
getItem(data, id) {
|
|
329
348
|
return data.items.find((i) => i.id === id) ?? null;
|