bling-docs-mcp 1.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.
- package/LICENSE +21 -0
- package/README.md +281 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +275 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/embeddings.d.ts +18 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +52 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/indexer.d.ts +13 -0
- package/dist/lib/indexer.d.ts.map +1 -0
- package/dist/lib/indexer.js +305 -0
- package/dist/lib/indexer.js.map +1 -0
- package/dist/lib/loader.d.ts +34 -0
- package/dist/lib/loader.d.ts.map +1 -0
- package/dist/lib/loader.js +267 -0
- package/dist/lib/loader.js.map +1 -0
- package/dist/lib/openapi-tools.d.ts +38 -0
- package/dist/lib/openapi-tools.d.ts.map +1 -0
- package/dist/lib/openapi-tools.js +63 -0
- package/dist/lib/openapi-tools.js.map +1 -0
- package/dist/lib/schema-resolver.d.ts +17 -0
- package/dist/lib/schema-resolver.d.ts.map +1 -0
- package/dist/lib/schema-resolver.js +173 -0
- package/dist/lib/schema-resolver.js.map +1 -0
- package/dist/lib/types.d.ts +207 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/vector-store.d.ts +46 -0
- package/dist/lib/vector-store.d.ts.map +1 -0
- package/dist/lib/vector-store.js +66 -0
- package/dist/lib/vector-store.js.map +1 -0
- package/dist/scripts/compare-extraction.d.ts +7 -0
- package/dist/scripts/compare-extraction.d.ts.map +1 -0
- package/dist/scripts/compare-extraction.js +223 -0
- package/dist/scripts/compare-extraction.js.map +1 -0
- package/dist/scripts/compare-with-docs-site.d.ts +7 -0
- package/dist/scripts/compare-with-docs-site.d.ts.map +1 -0
- package/dist/scripts/compare-with-docs-site.js +264 -0
- package/dist/scripts/compare-with-docs-site.js.map +1 -0
- package/dist/scripts/field-coverage-report.d.ts +14 -0
- package/dist/scripts/field-coverage-report.d.ts.map +1 -0
- package/dist/scripts/field-coverage-report.js +352 -0
- package/dist/scripts/field-coverage-report.js.map +1 -0
- package/dist/scripts/final-coverage-report.d.ts +1 -0
- package/dist/scripts/final-coverage-report.d.ts.map +1 -0
- package/dist/scripts/final-coverage-report.js +2 -0
- package/dist/scripts/final-coverage-report.js.map +1 -0
- package/dist/scripts/inspect-endpoint.d.ts +15 -0
- package/dist/scripts/inspect-endpoint.d.ts.map +1 -0
- package/dist/scripts/inspect-endpoint.js +292 -0
- package/dist/scripts/inspect-endpoint.js.map +1 -0
- package/dist/scripts/performance-validation.d.ts +10 -0
- package/dist/scripts/performance-validation.d.ts.map +1 -0
- package/dist/scripts/performance-validation.js +123 -0
- package/dist/scripts/performance-validation.js.map +1 -0
- package/dist/scripts/test-all.d.ts +7 -0
- package/dist/scripts/test-all.d.ts.map +1 -0
- package/dist/scripts/test-all.js +76 -0
- package/dist/scripts/test-all.js.map +1 -0
- package/dist/scripts/test-new-fields.d.ts +6 -0
- package/dist/scripts/test-new-fields.d.ts.map +1 -0
- package/dist/scripts/test-new-fields.js +243 -0
- package/dist/scripts/test-new-fields.js.map +1 -0
- package/dist/scripts/test-schema-fields.d.ts +7 -0
- package/dist/scripts/test-schema-fields.d.ts.map +1 -0
- package/dist/scripts/test-schema-fields.js +198 -0
- package/dist/scripts/test-schema-fields.js.map +1 -0
- package/dist/scripts/validate-extraction.d.ts +15 -0
- package/dist/scripts/validate-extraction.d.ts.map +1 -0
- package/dist/scripts/validate-extraction.js +294 -0
- package/dist/scripts/validate-extraction.js.map +1 -0
- package/dist/scripts/validate-full-extraction.d.ts +6 -0
- package/dist/scripts/validate-full-extraction.d.ts.map +1 -0
- package/dist/scripts/validate-full-extraction.js +399 -0
- package/dist/scripts/validate-full-extraction.js.map +1 -0
- package/dist/scripts/validate-phase1-fields.d.ts +6 -0
- package/dist/scripts/validate-phase1-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase1-fields.js +162 -0
- package/dist/scripts/validate-phase1-fields.js.map +1 -0
- package/dist/scripts/validate-phase2-fields.d.ts +6 -0
- package/dist/scripts/validate-phase2-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase2-fields.js +127 -0
- package/dist/scripts/validate-phase2-fields.js.map +1 -0
- package/dist/scripts/validate-phase3-fields.d.ts +6 -0
- package/dist/scripts/validate-phase3-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase3-fields.js +106 -0
- package/dist/scripts/validate-phase3-fields.js.map +1 -0
- package/dist/tools/compare-with-openapi-spec.d.ts +10 -0
- package/dist/tools/compare-with-openapi-spec.d.ts.map +1 -0
- package/dist/tools/compare-with-openapi-spec.js +266 -0
- package/dist/tools/compare-with-openapi-spec.js.map +1 -0
- package/dist/tools/compare-with-postman.d.ts +25 -0
- package/dist/tools/compare-with-postman.d.ts.map +1 -0
- package/dist/tools/compare-with-postman.js +257 -0
- package/dist/tools/compare-with-postman.js.map +1 -0
- package/dist/tools/describe.d.ts +39 -0
- package/dist/tools/describe.d.ts.map +1 -0
- package/dist/tools/describe.js +64 -0
- package/dist/tools/describe.js.map +1 -0
- package/dist/tools/get-auth-info.d.ts +33 -0
- package/dist/tools/get-auth-info.d.ts.map +1 -0
- package/dist/tools/get-auth-info.js +27 -0
- package/dist/tools/get-auth-info.js.map +1 -0
- package/dist/tools/get-endpoint-details.d.ts +27 -0
- package/dist/tools/get-endpoint-details.d.ts.map +1 -0
- package/dist/tools/get-endpoint-details.js +59 -0
- package/dist/tools/get-endpoint-details.js.map +1 -0
- package/dist/tools/get-schema.d.ts +34 -0
- package/dist/tools/get-schema.d.ts.map +1 -0
- package/dist/tools/get-schema.js +64 -0
- package/dist/tools/get-schema.js.map +1 -0
- package/dist/tools/list-tags.d.ts +29 -0
- package/dist/tools/list-tags.d.ts.map +1 -0
- package/dist/tools/list-tags.js +23 -0
- package/dist/tools/list-tags.js.map +1 -0
- package/dist/tools/read-documentation-page.d.ts +23 -0
- package/dist/tools/read-documentation-page.d.ts.map +1 -0
- package/dist/tools/read-documentation-page.js +73 -0
- package/dist/tools/read-documentation-page.js.map +1 -0
- package/dist/tools/search-documentation.d.ts +26 -0
- package/dist/tools/search-documentation.d.ts.map +1 -0
- package/dist/tools/search-documentation.js +91 -0
- package/dist/tools/search-documentation.js.map +1 -0
- package/dist/tools/search-endpoints.d.ts +35 -0
- package/dist/tools/search-endpoints.d.ts.map +1 -0
- package/dist/tools/search-endpoints.js +120 -0
- package/dist/tools/search-endpoints.js.map +1 -0
- package/dist/tools/search-schemas.d.ts +30 -0
- package/dist/tools/search-schemas.d.ts.map +1 -0
- package/dist/tools/search-schemas.js +36 -0
- package/dist/tools/search-schemas.js.map +1 -0
- package/dist/tools/validate-spec.d.ts +44 -0
- package/dist/tools/validate-spec.d.ts.map +1 -0
- package/dist/tools/validate-spec.js +186 -0
- package/dist/tools/validate-spec.js.map +1 -0
- package/docs/ajuda_como_gerar_o_access_token.md +8 -0
- package/docs/ajuda_como_gerar_o_client_id_e_o_client_secret.md +8 -0
- package/docs/ajuda_full.md +35 -0
- package/docs/ajuda_preciso_criar_uma_conta_no_bling_para_utilizar_a_api.md +9 -0
- package/docs/ajuda_quais_sao_os_limites_da_api.md +9 -0
- package/docs/ajuda_qual_e_a_utilidade_do_campo_state.md +9 -0
- package/docs/ajuda_qual_e_o_formato_de_retorno_das_respostas_da_api.md +18 -0
- package/docs/ajuda_quantos_registros_sao_retornados_por_pagina_em_cada_requisicao.md +9 -0
- package/docs/aplicativos_acesso_ao_modulo.md +12 -0
- package/docs/aplicativos_como_cadastrar.md +258 -0
- package/docs/aplicativos_full.md +276 -0
- package/docs/aplicativos_gerenciamento.md +9 -0
- package/docs/aplicativos_inscricao.md +8 -0
- package/docs/aplicativos_introducao.md +8 -0
- package/docs/changelogs-webhooks_2026.md +88 -0
- package/docs/changelogs-webhooks_full.md +90 -0
- package/docs/changelogs_2026.md +88 -0
- package/docs/changelogs_full.md +90 -0
- package/docs/guias_como_utilizar_os_tokens.md +20 -0
- package/docs/guias_full.md +72 -0
- package/docs/guias_fundamentos.md +11 -0
- package/docs/guias_introducao.md +9 -0
- package/docs/guias_o_que_e_api.md +10 -0
- package/docs/guias_oauth_e_tokens_de_acesso.md +9 -0
- package/docs/guias_padrao_rest.md +34 -0
- package/docs/guias_para_quem_e_destinada_a_api.md +9 -0
- package/docs/guias_sobre_o_bling.md +9 -0
- package/docs/limites_filtros.md +9 -0
- package/docs/limites_full.md +56 -0
- package/docs/limites_requisicoes.md +50 -0
- package/docs/migracao-jwt_estrutura_e_tamanho_do_token.md +9 -0
- package/docs/migracao-jwt_full.md +107 -0
- package/docs/migracao-jwt_ganhos_computacionais_e_de_infraestrutura.md +11 -0
- package/docs/migracao-jwt_introducao.md +15 -0
- package/docs/migracao-jwt_motivacao_da_alteracao.md +9 -0
- package/docs/migracao-jwt_tratamento_de_erros_comuns.md +13 -0
- package/docs/migracao-jwt_utilizando_jwt_no_bling.md +74 -0
- package/docs/publicando_full.md +118 -0
- package/docs/publicando_processo.md +9 -0
- package/docs/publicando_revisao.md +86 -0
- package/docs/publicando_situacoes.md +16 -0
- package/docs/publicando_validacao_de_dados.md +23 -0
- package/docs/webhooks_acoes.md +12 -0
- package/docs/webhooks_autenticacao.md +22 -0
- package/docs/webhooks_como_cadastrar.md +20 -0
- package/docs/webhooks_entrega_nao_ordenada.md +9 -0
- package/docs/webhooks_full.md +453 -0
- package/docs/webhooks_idempotencia.md +9 -0
- package/docs/webhooks_introducao.md +9 -0
- package/docs/webhooks_recebimento_de_eventos.md +8 -0
- package/docs/webhooks_recursos.md +374 -0
- package/docs/webhooks_retentativas.md +9 -0
- package/docs/webhooks_webhooks_vs_polling.md +13 -0
- package/package.json +67 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 João Vitor Labiak
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Bling Docs MCP
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/bling-docs-mcp)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://modelcontextprotocol.io/)
|
|
7
|
+
|
|
8
|
+
Servidor [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) que dá a assistentes de IA acesso especializado à **documentação da API do [Bling ERP](https://www.bling.com.br/)**. Em vez de carregar toda a especificação OpenAPI no contexto, a IA descobre e busca apenas o que precisa — endpoints, schemas, autenticação e guias — através de 6 ferramentas otimizadas.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## ✨ Funcionalidades
|
|
13
|
+
|
|
14
|
+
- **6 ferramentas especializadas** — `describe`, `search_endpoints`, `get_endpoint_details`, `get_schema`, `read_documentation_page`, `search_documentation`
|
|
15
|
+
- **Auto-descoberta** — encontra automaticamente a URL da spec OpenAPI mais recente no portal Bling (sem URLs hardcoded que quebram)
|
|
16
|
+
- **Busca semântica** — embeddings Google AI (`text-embedding-004`) opcionais para busca em linguagem natural
|
|
17
|
+
- **53 docs pré-incluídos** — guias, webhooks, changelogs, FAQs, migração JWT e mais — tudo disponível offline
|
|
18
|
+
- **Cache inteligente** — spec cacheada em disco por 15 dias; embeddings cacheados para evitar regeneração a cada startup
|
|
19
|
+
- **Zero configuração** — funciona direto via `npx`, nenhuma API key obrigatória (busca semântica é opcional)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 🚀 Início Rápido
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Clonar e buildar
|
|
27
|
+
git clone https://github.com/joaovitorlabiak-byte/bling-docs-mcp.git
|
|
28
|
+
cd bling-docs-mcp
|
|
29
|
+
npm install
|
|
30
|
+
npm run build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Ou instale direto do GitHub via npm:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install -g github:joaovitorlabiak-byte/bling-docs-mcp
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## ⚙️ Configuração
|
|
42
|
+
|
|
43
|
+
Adicione o servidor na configuração MCP do seu cliente de IA:
|
|
44
|
+
|
|
45
|
+
### Claude Desktop
|
|
46
|
+
|
|
47
|
+
Edite `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) ou `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"bling-docs": {
|
|
53
|
+
"command": "node",
|
|
54
|
+
"args": ["/caminho/para/bling-docs-mcp/dist/index.js"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### VS Code (Copilot)
|
|
61
|
+
|
|
62
|
+
Adicione em `.vscode/mcp.json` no seu workspace:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"servers": {
|
|
67
|
+
"bling-docs": {
|
|
68
|
+
"command": "node",
|
|
69
|
+
"args": ["/caminho/para/bling-docs-mcp/dist/index.js"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Cursor
|
|
76
|
+
|
|
77
|
+
Adicione em `~/.cursor/mcp.json`:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"mcpServers": {
|
|
82
|
+
"bling-docs": {
|
|
83
|
+
"command": "node",
|
|
84
|
+
"args": ["/caminho/para/bling-docs-mcp/dist/index.js"]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Windsurf / Codeium
|
|
91
|
+
|
|
92
|
+
Adicione em `~/.codeium/windsurf/mcp_config.json`:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"mcpServers": {
|
|
97
|
+
"bling-docs": {
|
|
98
|
+
"command": "node",
|
|
99
|
+
"args": ["/caminho/para/bling-docs-mcp/dist/index.js"]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Com Busca Semântica (opcional)
|
|
106
|
+
|
|
107
|
+
Para habilitar busca em linguagem natural nos endpoints, defina sua Google AI API key:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"mcpServers": {
|
|
112
|
+
"bling-docs": {
|
|
113
|
+
"command": "node",
|
|
114
|
+
"args": ["/caminho/para/bling-docs-mcp/dist/index.js"],
|
|
115
|
+
"env": {
|
|
116
|
+
"GOOGLE_API_KEY": "sua-google-api-key"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Obtenha uma API key gratuita em [Google AI Studio](https://aistudio.google.com/apikey).
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 🛠️ Ferramentas
|
|
128
|
+
|
|
129
|
+
| Ferramenta | Descrição |
|
|
130
|
+
|------------|-----------|
|
|
131
|
+
| **`describe`** | Visão geral da API: título, versão, URL base, autenticação OAuth2, todos os módulos com contagem de endpoints. **Chame primeiro.** |
|
|
132
|
+
| **`search_endpoints`** | Busca endpoints por palavra-chave, linguagem natural (com busca semântica), tag ou método HTTP. |
|
|
133
|
+
| **`get_endpoint_details`** | Detalhes completos do endpoint: parâmetros, schema do request body, respostas, escopos de segurança e payload de exemplo gerado automaticamente. |
|
|
134
|
+
| **`get_schema`** | Lista todos os schemas ou retorna um schema específico com definições completas de propriedades e JSON de exemplo. |
|
|
135
|
+
| **`read_documentation_page`** | Lê uma página específica da documentação Bling (guias, webhooks, limites, changelogs, migração JWT, FAQs). |
|
|
136
|
+
| **`search_documentation`** | Busca full-text em todas as 53 páginas de documentação incluídas. |
|
|
137
|
+
|
|
138
|
+
### Exemplos de Uso
|
|
139
|
+
|
|
140
|
+
Após configurar o servidor MCP, pergunte ao seu assistente de IA:
|
|
141
|
+
|
|
142
|
+
- *"Quais endpoints existem para gerenciar produtos no Bling?"*
|
|
143
|
+
- *"Como faço para criar um pedido de venda? Mostre os campos obrigatórios."*
|
|
144
|
+
- *"Qual é o schema do ProdutoDTO?"*
|
|
145
|
+
- *"Como funciona a autenticação OAuth2 na API do Bling?"*
|
|
146
|
+
- *"Quais são os limites de requisição da API?"*
|
|
147
|
+
- *"Mostre a estrutura do payload de webhook para pedidos"*
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 🏗️ Como Funciona
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
155
|
+
│ Bling Docs MCP Server │
|
|
156
|
+
│ │
|
|
157
|
+
│ 1. DESCOBERTA Encontra a URL da spec OpenAPI mais │
|
|
158
|
+
│ recente em developer.bling.com.br/referencia │
|
|
159
|
+
│ │
|
|
160
|
+
│ 2. CARGA Baixa + resolve $refs da spec │
|
|
161
|
+
│ (cacheado em disco por 15 dias) │
|
|
162
|
+
│ │
|
|
163
|
+
│ 3. INDEXAÇÃO Constrói índices de busca em memória: │
|
|
164
|
+
│ • Endpoints por tag, path, método │
|
|
165
|
+
│ • Schemas por nome │
|
|
166
|
+
│ • Embeddings vetoriais (opcional) │
|
|
167
|
+
│ │
|
|
168
|
+
│ 4. SERVE Responde às chamadas MCP do assistente │
|
|
169
|
+
│ │
|
|
170
|
+
│ 📄 docs/ 53 arquivos markdown pré-incluídos para │
|
|
171
|
+
│ guias, webhooks, changelogs, FAQs │
|
|
172
|
+
└─────────────────────────────────────────────────────────────┘
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
As páginas de documentação em `docs/` são **pré-incluídas** — vêm no pacote e são lidas localmente em runtime. Nenhum crawling ou fetch externo é necessário.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 💻 Desenvolvimento
|
|
180
|
+
|
|
181
|
+
### Pré-requisitos
|
|
182
|
+
|
|
183
|
+
- Node.js 18+
|
|
184
|
+
- npm
|
|
185
|
+
|
|
186
|
+
### Setup
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# Clonar o repositório
|
|
190
|
+
git clone https://github.com/joavitorlabiak-byte/bling-docs-mcp.git
|
|
191
|
+
cd bling-docs-mcp
|
|
192
|
+
|
|
193
|
+
# Instalar dependências
|
|
194
|
+
npm install
|
|
195
|
+
|
|
196
|
+
# Build
|
|
197
|
+
npm run build
|
|
198
|
+
|
|
199
|
+
# Executar localmente
|
|
200
|
+
npm start
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Testes
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Executar todos os testes
|
|
207
|
+
npm test
|
|
208
|
+
|
|
209
|
+
# Modo watch
|
|
210
|
+
npm run test:watch
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Estrutura do Projeto
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
bling-docs-mcp/
|
|
217
|
+
├── src/
|
|
218
|
+
│ ├── index.ts # Entry point do servidor
|
|
219
|
+
│ ├── lib/
|
|
220
|
+
│ │ ├── loader.ts # Auto-descoberta + carregamento da spec OpenAPI
|
|
221
|
+
│ │ ├── indexer.ts # Engine de indexação da spec
|
|
222
|
+
│ │ ├── schema-resolver.ts # Resolução de $ref + achatamento de schemas
|
|
223
|
+
│ │ ├── embeddings.ts # Integração Google AI embeddings
|
|
224
|
+
│ │ ├── vector-store.ts # Busca por similaridade de cosseno em memória
|
|
225
|
+
│ │ └── types.ts # Definições de tipos TypeScript
|
|
226
|
+
│ └── tools/
|
|
227
|
+
│ ├── describe.ts
|
|
228
|
+
│ ├── search-endpoints.ts
|
|
229
|
+
│ ├── get-endpoint-details.ts
|
|
230
|
+
│ ├── get-schema.ts
|
|
231
|
+
│ ├── read-documentation-page.ts
|
|
232
|
+
│ └── search-documentation.ts
|
|
233
|
+
├── docs/ # 53 páginas de documentação pré-incluídas
|
|
234
|
+
├── scripts/
|
|
235
|
+
│ └── fetch-bling-docs.js # Crawler de documentação (ferramenta de manutenção)
|
|
236
|
+
├── package.json
|
|
237
|
+
├── tsconfig.json
|
|
238
|
+
└── vitest.config.ts
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Atualizando as Páginas de Documentação
|
|
242
|
+
|
|
243
|
+
A pasta `docs/` contém markdown pré-extraído do [Portal do Desenvolvedor Bling](https://developer.bling.com.br). Para atualizar esses docs, use o script crawler (requer uma instância [Crawl4AI](https://github.com/unclecode/crawl4ai)):
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Defina a URL da sua instância Crawl4AI
|
|
247
|
+
export CRAWL4AI_URL=http://localhost:11235
|
|
248
|
+
|
|
249
|
+
# Buscar todos os docs (pula existentes por padrão)
|
|
250
|
+
npm run fetch-docs
|
|
251
|
+
|
|
252
|
+
# Forçar re-fetch de tudo
|
|
253
|
+
npm run fetch-docs -- --force
|
|
254
|
+
|
|
255
|
+
# Buscar apenas uma seção específica
|
|
256
|
+
npm run fetch-docs -- --section=webhooks
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 🤝 Contribuindo
|
|
262
|
+
|
|
263
|
+
Contribuições são bem-vindas! Por favor:
|
|
264
|
+
|
|
265
|
+
1. Faça um fork do repositório
|
|
266
|
+
2. Crie uma branch para sua feature (`git checkout -b feature/minha-feature`)
|
|
267
|
+
3. Commit suas alterações (`git commit -am 'Adiciona minha feature'`)
|
|
268
|
+
4. Push para a branch (`git push origin feature/minha-feature`)
|
|
269
|
+
5. Abra um Pull Request
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 📄 Licença
|
|
274
|
+
|
|
275
|
+
[MIT](LICENSE) © João Vitor Labiak
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## ⚠️ Aviso
|
|
280
|
+
|
|
281
|
+
Este projeto não é afiliado, endossado ou oficialmente conectado ao [Bling](https://www.bling.com.br/). Ele utiliza a especificação OpenAPI e documentação para desenvolvedores publicamente disponíveis.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Bling Docs MCP Server — Optimized Edition
|
|
4
|
+
*
|
|
5
|
+
* 6 tools with semantic search via Google text-embedding-004:
|
|
6
|
+
* 1. describe — API overview, auth, modules, usage guide
|
|
7
|
+
* 2. search_endpoints — Semantic/keyword/browse search over endpoints
|
|
8
|
+
* 3. get_endpoint_details — Full endpoint details + auto-generated example
|
|
9
|
+
* 4. get_schema — List all schemas OR get full schema + example
|
|
10
|
+
* 5. read_documentation_page — Read a specific Bling docs page by name
|
|
11
|
+
* 6. search_documentation — Full-text search across all docs pages
|
|
12
|
+
*
|
|
13
|
+
* Set GOOGLE_API_KEY env var to enable semantic search.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Bling Docs MCP Server — Optimized Edition
|
|
4
|
+
*
|
|
5
|
+
* 6 tools with semantic search via Google text-embedding-004:
|
|
6
|
+
* 1. describe — API overview, auth, modules, usage guide
|
|
7
|
+
* 2. search_endpoints — Semantic/keyword/browse search over endpoints
|
|
8
|
+
* 3. get_endpoint_details — Full endpoint details + auto-generated example
|
|
9
|
+
* 4. get_schema — List all schemas OR get full schema + example
|
|
10
|
+
* 5. read_documentation_page — Read a specific Bling docs page by name
|
|
11
|
+
* 6. search_documentation — Full-text search across all docs pages
|
|
12
|
+
*
|
|
13
|
+
* Set GOOGLE_API_KEY env var to enable semantic search.
|
|
14
|
+
*/
|
|
15
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
16
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
17
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
18
|
+
import { loadOpenAPISpec, discoverOpenAPIUrl } from './lib/loader.js';
|
|
19
|
+
import { indexOpenAPISpec } from './lib/indexer.js';
|
|
20
|
+
import { VectorStore } from './lib/vector-store.js';
|
|
21
|
+
import { embedTexts, embedText, isEmbeddingEnabled } from './lib/embeddings.js';
|
|
22
|
+
import { promises as fs } from 'node:fs';
|
|
23
|
+
import { join, resolve, dirname } from 'node:path';
|
|
24
|
+
import { tmpdir } from 'node:os';
|
|
25
|
+
import { fileURLToPath } from 'node:url';
|
|
26
|
+
import { describe as describeTool } from './tools/describe.js';
|
|
27
|
+
import { searchEndpoints, buildEndpointChunk } from './tools/search-endpoints.js';
|
|
28
|
+
import { getEndpointDetails } from './tools/get-endpoint-details.js';
|
|
29
|
+
import { getSchema } from './tools/get-schema.js';
|
|
30
|
+
import { readDocumentationPage } from './tools/read-documentation-page.js';
|
|
31
|
+
import { searchDocumentation } from './tools/search-documentation.js';
|
|
32
|
+
// Resolve docs path relative to project root
|
|
33
|
+
const __filename_local = fileURLToPath(import.meta.url);
|
|
34
|
+
const __dirname_local = dirname(__filename_local);
|
|
35
|
+
const DOCS_PATH = resolve(__dirname_local, '..', 'docs');
|
|
36
|
+
// Global state
|
|
37
|
+
let indexedData;
|
|
38
|
+
let openAPISpec;
|
|
39
|
+
let endpointVectorStore;
|
|
40
|
+
// ─────────────────────────────────────────────
|
|
41
|
+
// Tool definitions
|
|
42
|
+
// ─────────────────────────────────────────────
|
|
43
|
+
const TOOLS = [
|
|
44
|
+
{
|
|
45
|
+
name: 'describe',
|
|
46
|
+
description: 'Get a high-level overview of the Bling API: title, version, base URL, authentication (OAuth2 flows & scopes), all modules with endpoint counts, common parameters, and a usage guide. CALL THIS FIRST to understand the API structure before searching for endpoints.',
|
|
47
|
+
inputSchema: { type: 'object', properties: {} },
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'search_endpoints',
|
|
51
|
+
description: 'Search for API endpoints. Supports semantic search (natural language, e.g. "how to cancel an order"), keyword search, and browsing. Filter by tag/module or HTTP method. Returns path, method, summary, and similarity score when using semantic search.',
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
query: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: 'Natural language or keyword query (e.g., "criar produto", "emitir nota fiscal"). Enables semantic search when Google API key is configured.',
|
|
58
|
+
},
|
|
59
|
+
tag: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Filter by module/tag name (e.g., "Produtos", "Pedidos de Venda", "Nota Fiscal de Serviço"). Use describe to see all available tags.',
|
|
62
|
+
},
|
|
63
|
+
method: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Filter by HTTP method: GET, POST, PUT, DELETE, PATCH',
|
|
66
|
+
},
|
|
67
|
+
limit: {
|
|
68
|
+
type: 'number',
|
|
69
|
+
description: 'Maximum number of results to return (default: 20)',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'get_endpoint_details',
|
|
76
|
+
description: 'Get FULL details for a specific endpoint: all parameters (path, query, header), complete request body schema with field descriptions, all response schemas, required security scopes, and an auto-generated request body example. Use after finding an endpoint path with search_endpoints.',
|
|
77
|
+
inputSchema: {
|
|
78
|
+
type: 'object',
|
|
79
|
+
properties: {
|
|
80
|
+
path: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'The endpoint path, e.g. "/produtos" or "/pedidos/{idPedido}"',
|
|
83
|
+
},
|
|
84
|
+
method: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'The HTTP method: GET, POST, PUT, DELETE, PATCH',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
required: ['path', 'method'],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'get_schema',
|
|
94
|
+
description: 'List available data schemas OR get a specific schema with full field details and an example JSON. Without "ref": lists all schemas with names and types. With "ref": returns complete schema definition (properties, types, validation rules, required fields) plus auto-generated example payload.',
|
|
95
|
+
inputSchema: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
ref: {
|
|
99
|
+
type: 'string',
|
|
100
|
+
description: 'Schema name or $ref (e.g., "produtos", "#/components/schemas/produtos"). Omit to list all schemas.',
|
|
101
|
+
},
|
|
102
|
+
filter: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
description: 'Text filter when listing schemas (only used when "ref" is omitted)',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'read_documentation_page',
|
|
111
|
+
description: 'Read a specific Bling documentation page (Markdown). Use this to get detailed information about guides, webhooks, limits, changelogs, JWT migration, publishing, and FAQs. Supports partial/fuzzy name matching.',
|
|
112
|
+
inputSchema: {
|
|
113
|
+
type: 'object',
|
|
114
|
+
properties: {
|
|
115
|
+
page: {
|
|
116
|
+
type: 'string',
|
|
117
|
+
description: 'Name of the page/topic to read (e.g. "webhooks", "guias_introducao", "limites", "migracao-jwt"). Partial names are accepted.',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
required: ['page'],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'search_documentation',
|
|
125
|
+
description: 'Full-text search across all Bling documentation pages (Guides, Webhooks, Limits, Changelogs, FAQs, JWT Migration, Publishing). Returns matching files with a short text snippet. Use this to quickly find which documentation page contains a specific topic or keyword.',
|
|
126
|
+
inputSchema: {
|
|
127
|
+
type: 'object',
|
|
128
|
+
properties: {
|
|
129
|
+
query: {
|
|
130
|
+
type: 'string',
|
|
131
|
+
description: 'The keyword or phrase to search for inside the documentation content (e.g. "OAuth", "retentativas", "access token", "homologação").',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
required: ['query'],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
function makeHandlers() {
|
|
139
|
+
return {
|
|
140
|
+
describe: () => describeTool(indexedData, openAPISpec),
|
|
141
|
+
search_endpoints: async (args) => {
|
|
142
|
+
const input = args;
|
|
143
|
+
return searchEndpoints(input, indexedData, endpointVectorStore, isEmbeddingEnabled() ? embedText : undefined);
|
|
144
|
+
},
|
|
145
|
+
get_endpoint_details: (args) => {
|
|
146
|
+
const input = args;
|
|
147
|
+
return getEndpointDetails(input, indexedData, openAPISpec);
|
|
148
|
+
},
|
|
149
|
+
get_schema: (args) => {
|
|
150
|
+
const input = args;
|
|
151
|
+
return getSchema(input, indexedData, openAPISpec);
|
|
152
|
+
},
|
|
153
|
+
read_documentation_page: (args) => {
|
|
154
|
+
const input = args;
|
|
155
|
+
return readDocumentationPage(input, DOCS_PATH);
|
|
156
|
+
},
|
|
157
|
+
search_documentation: (args) => {
|
|
158
|
+
const input = args;
|
|
159
|
+
return searchDocumentation(input, DOCS_PATH);
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// ─────────────────────────────────────────────
|
|
164
|
+
// Embedding cache (disk) — avoids 254 API calls on every startup
|
|
165
|
+
// ─────────────────────────────────────────────
|
|
166
|
+
const EMBED_CACHE_FILE = join(tmpdir(), 'bling-mcp-cache', 'embeddings-cache.json');
|
|
167
|
+
async function loadEmbeddingsCache(specUrl) {
|
|
168
|
+
try {
|
|
169
|
+
const raw = await fs.readFile(EMBED_CACHE_FILE, 'utf-8');
|
|
170
|
+
const cache = JSON.parse(raw);
|
|
171
|
+
if (cache.specUrl === specUrl && cache.embeddings.length > 0) {
|
|
172
|
+
console.error(`⚡ Using cached embeddings (${cache.embeddings.length} vectors, spec unchanged)`);
|
|
173
|
+
return cache;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function saveEmbeddingsCache(specUrl, chunks, embeddings) {
|
|
182
|
+
try {
|
|
183
|
+
await fs.mkdir(join(tmpdir(), 'bling-mcp-cache'), { recursive: true });
|
|
184
|
+
const cache = { specUrl, chunks, embeddings };
|
|
185
|
+
await fs.writeFile(EMBED_CACHE_FILE, JSON.stringify(cache), 'utf-8');
|
|
186
|
+
console.error(`💾 Embeddings cached to disk (${embeddings.length} vectors)`);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
console.error(`⚠ Could not write embeddings cache: ${err.message}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ─────────────────────────────────────────────
|
|
193
|
+
// Embedding initialization
|
|
194
|
+
// ─────────────────────────────────────────────
|
|
195
|
+
async function initializeEmbeddings(specUrl) {
|
|
196
|
+
if (!isEmbeddingEnabled()) {
|
|
197
|
+
console.error('ℹ GOOGLE_API_KEY not set — semantic search disabled, using keyword search');
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const endpoints = indexedData.endpoints;
|
|
201
|
+
const chunks = endpoints.map(buildEndpointChunk);
|
|
202
|
+
// Try loading from disk cache first
|
|
203
|
+
const cached = await loadEmbeddingsCache(specUrl);
|
|
204
|
+
let embeddings;
|
|
205
|
+
if (cached && cached.embeddings.length === endpoints.length) {
|
|
206
|
+
embeddings = cached.embeddings;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.error(`🔢 Generating embeddings for ${endpoints.length} endpoints via Google API...`);
|
|
210
|
+
embeddings = await embedTexts(chunks);
|
|
211
|
+
await saveEmbeddingsCache(specUrl, chunks, embeddings);
|
|
212
|
+
}
|
|
213
|
+
endpointVectorStore = new VectorStore();
|
|
214
|
+
endpointVectorStore.addBatch(endpoints.map((ep, i) => ({
|
|
215
|
+
id: `${ep.method} ${ep.path}`,
|
|
216
|
+
embedding: embeddings[i],
|
|
217
|
+
metadata: ep,
|
|
218
|
+
})));
|
|
219
|
+
console.error(`✅ Vector store ready: ${endpointVectorStore.size} endpoints indexed`);
|
|
220
|
+
}
|
|
221
|
+
// ─────────────────────────────────────────────
|
|
222
|
+
// Server initialization
|
|
223
|
+
// ─────────────────────────────────────────────
|
|
224
|
+
async function initialize() {
|
|
225
|
+
console.error('📥 Loading Bling OpenAPI specification...');
|
|
226
|
+
const specUrl = await discoverOpenAPIUrl();
|
|
227
|
+
openAPISpec = await loadOpenAPISpec(specUrl);
|
|
228
|
+
console.error('🗂 Indexing API documentation...');
|
|
229
|
+
indexedData = indexOpenAPISpec(openAPISpec);
|
|
230
|
+
console.error(`✅ Indexed ${indexedData.endpoints.length} endpoints, ${indexedData.schemas.size} schemas, ${indexedData.tags.length} modules`);
|
|
231
|
+
// Initialize embeddings (non-blocking error — fallback to keyword)
|
|
232
|
+
try {
|
|
233
|
+
await initializeEmbeddings(specUrl);
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
console.error('⚠ Embeddings failed, falling back to keyword search:', err.message);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// ─────────────────────────────────────────────
|
|
240
|
+
// Main
|
|
241
|
+
// ─────────────────────────────────────────────
|
|
242
|
+
async function main() {
|
|
243
|
+
await initialize();
|
|
244
|
+
const server = new Server({ name: 'bling-docs-mcp', version: '3.0.0' }, { capabilities: { tools: {} } });
|
|
245
|
+
const handlers = makeHandlers();
|
|
246
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
247
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
248
|
+
const { name, arguments: args = {} } = request.params;
|
|
249
|
+
const handler = handlers[name];
|
|
250
|
+
if (!handler) {
|
|
251
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
const result = await handler(args);
|
|
255
|
+
return {
|
|
256
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
261
|
+
return {
|
|
262
|
+
content: [{ type: 'text', text: JSON.stringify({ error: { code: 'TOOL_ERROR', message } }, null, 2) }],
|
|
263
|
+
isError: true,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
const transport = new StdioServerTransport();
|
|
268
|
+
await server.connect(transport);
|
|
269
|
+
console.error(`🚀 Bling Docs MCP Server v3.0 running (6 tools, docs: ${DOCS_PATH})`);
|
|
270
|
+
}
|
|
271
|
+
main().catch((error) => {
|
|
272
|
+
console.error('Fatal error:', error);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Embeddings Module
|
|
3
|
+
* Uses Google's text-embedding-004 model to generate embeddings
|
|
4
|
+
* for semantic search over API endpoints and schemas
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generate an embedding for a single text
|
|
8
|
+
*/
|
|
9
|
+
export declare function embedText(text: string): Promise<number[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Generate embeddings for multiple texts in batches
|
|
12
|
+
*/
|
|
13
|
+
export declare function embedTexts(texts: string[]): Promise<number[][]>;
|
|
14
|
+
/**
|
|
15
|
+
* Check if the Google API key is configured
|
|
16
|
+
*/
|
|
17
|
+
export declare function isEmbeddingEnabled(): boolean;
|
|
18
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/lib/embeddings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK/D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAerE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
|