@po-ui/mcp 21.30.0 → 21.31.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 +287 -0
- package/docs-client.d.ts +29 -0
- package/docs-client.js +182 -2
- package/docs-client.js.map +1 -1
- package/llms-parser.js +1 -1
- package/llms-parser.js.map +1 -1
- package/package.json +1 -1
- package/server.js +235 -36
- package/server.js.map +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# @po-ui/mcp
|
|
2
|
+
|
|
3
|
+
Servidor [Model Context Protocol (MCP)](https://modelcontextprotocol.io) que disponibiliza a documentação oficial do [PO UI](https://po-ui.io) para assistentes de IA.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@po-ui/mcp)
|
|
6
|
+
[](https://github.com/po-ui/po-angular/blob/master/LICENSE)
|
|
7
|
+
[](https://nodejs.org)
|
|
8
|
+
|
|
9
|
+
## Visão geral
|
|
10
|
+
|
|
11
|
+
O `@po-ui/mcp` conecta clientes compatíveis com MCP à documentação pública do PO UI. Com ele, um agente pode listar APIs e guias, obter a documentação completa de um recurso e pesquisar termos em toda a documentação consolidada.
|
|
12
|
+
|
|
13
|
+
O conteúdo é consultado nas fontes oficiais do PO UI durante a execução. Assim, o cliente não depende de uma cópia da documentação incluída no pacote.
|
|
14
|
+
|
|
15
|
+
## Requisitos
|
|
16
|
+
|
|
17
|
+
- Node.js 18 ou superior;
|
|
18
|
+
- acesso a `po-ui.io` e `raw.githubusercontent.com`.
|
|
19
|
+
|
|
20
|
+
## Uso com `npx`
|
|
21
|
+
|
|
22
|
+
Não é necessário instalar o pacote globalmente. Configure o cliente MCP para executar:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx -y @po-ui/mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
O servidor utiliza o transporte `stdio`; normalmente, o próprio cliente MCP inicia e encerra o processo.
|
|
29
|
+
|
|
30
|
+
## Configuração
|
|
31
|
+
|
|
32
|
+
### Claude Desktop
|
|
33
|
+
|
|
34
|
+
Adicione o servidor ao arquivo `claude_desktop_config.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"po-ui": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "@po-ui/mcp"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Depois de salvar o arquivo, reinicie o Claude Desktop.
|
|
48
|
+
|
|
49
|
+
### Cursor
|
|
50
|
+
|
|
51
|
+
Adicione o servidor em **Settings > MCP** ou crie o arquivo `.cursor/mcp.json` no projeto:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"po-ui": {
|
|
57
|
+
"command": "npx",
|
|
58
|
+
"args": ["-y", "@po-ui/mcp"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Kiro
|
|
65
|
+
|
|
66
|
+
Abra a paleta de comandos e execute **Kiro: Open workspace MCP config (JSON)** ou crie o arquivo `.kiro/settings/mcp.json` no projeto:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"mcpServers": {
|
|
71
|
+
"po-ui": {
|
|
72
|
+
"command": "npx",
|
|
73
|
+
"args": ["-y", "@po-ui/mcp"],
|
|
74
|
+
"disabled": false
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Depois de salvar o arquivo, o Kiro reconecta o servidor automaticamente. Confirme a conexão na seção **MCP Servers** do painel do Kiro.
|
|
81
|
+
|
|
82
|
+
### VS Code com GitHub Copilot
|
|
83
|
+
|
|
84
|
+
Execute **MCP: Add Server** na paleta de comandos ou adicione o servidor ao arquivo `.vscode/mcp.json`:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"servers": {
|
|
89
|
+
"po-ui": {
|
|
90
|
+
"type": "stdio",
|
|
91
|
+
"command": "npx",
|
|
92
|
+
"args": ["-y", "@po-ui/mcp"]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Continue
|
|
99
|
+
|
|
100
|
+
Crie o arquivo `.continue/mcpServers/po-ui.yaml` no projeto:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
name: PO UI MCP
|
|
104
|
+
version: 0.0.1
|
|
105
|
+
schema: v1
|
|
106
|
+
mcpServers:
|
|
107
|
+
- name: PO UI
|
|
108
|
+
type: stdio
|
|
109
|
+
command: npx
|
|
110
|
+
args:
|
|
111
|
+
- -y
|
|
112
|
+
- "@po-ui/mcp"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
As ferramentas MCP ficam disponíveis no modo Agent do Continue.
|
|
116
|
+
|
|
117
|
+
### Outros clientes
|
|
118
|
+
|
|
119
|
+
Em clientes compatíveis com servidores MCP locais, configure um servidor `stdio` com o comando `npx` e os argumentos `-y` e `@po-ui/mcp`. Consulte a documentação do cliente para confirmar o formato e o local do arquivo de configuração.
|
|
120
|
+
|
|
121
|
+
## Ferramentas disponíveis
|
|
122
|
+
|
|
123
|
+
O servidor expõe seis ferramentas somente de leitura.
|
|
124
|
+
|
|
125
|
+
### `list_components`
|
|
126
|
+
|
|
127
|
+
Lista componentes, diretivas, serviços, interfaces, enums e guias disponíveis no índice do PO UI.
|
|
128
|
+
|
|
129
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
130
|
+
| --- | --- | --- | --- |
|
|
131
|
+
| `section` | `"components" \| "services" \| "interfaces" \| "enums" \| "guides" \| "all"` | não | Seção consultada. O padrão é `all`. |
|
|
132
|
+
| `filter` | `string` | não | Texto procurado no nome ou na descrição, sem diferenciar maiúsculas e minúsculas. |
|
|
133
|
+
|
|
134
|
+
Exemplo:
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{ "section": "components", "filter": "table" }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### `get_component_docs`
|
|
141
|
+
|
|
142
|
+
Retorna, em Markdown, a documentação de um componente, uma diretiva, um serviço, uma interface ou um enum.
|
|
143
|
+
|
|
144
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
145
|
+
| --- | --- | --- | --- |
|
|
146
|
+
| `slug` | `string` | sim | Identificador do recurso. Aceita um slug, como `po-button`; um seletor, como `<po-button>`; ou um nome de classe, como `PoButtonComponent`. |
|
|
147
|
+
|
|
148
|
+
O valor informado é normalizado antes da consulta. Seletores perdem os sinais de maior e menor, nomes em `CamelCase` são convertidos para `kebab-case` e o sufixo `Component` é removido.
|
|
149
|
+
|
|
150
|
+
Exemplo:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{ "slug": "PoButtonComponent" }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### `get_component_examples`
|
|
157
|
+
|
|
158
|
+
Retorna exemplos oficiais de um componente, buscados diretamente do repositório `po-ui/po-angular`. Cada exemplo inclui os arquivos que o compõem (TypeScript, HTML, estilos e configuração), com o conteúdo e o link para o código-fonte.
|
|
159
|
+
|
|
160
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
161
|
+
| --- | --- | --- | --- |
|
|
162
|
+
| `slug` | `string` | sim | Identificador do componente. Aceita slug (`po-button`), seletor (`<po-button>`) ou nome de classe (`PoButtonComponent`). |
|
|
163
|
+
| `example` | `string` | não | Filtro pelo nome do exemplo, sem diferenciar maiúsculas e minúsculas. Exemplos: `basic`, `labs`. |
|
|
164
|
+
| `max_examples` | número inteiro de 1 a 5 | não | Quantidade máxima de exemplos. O padrão é `3`. |
|
|
165
|
+
|
|
166
|
+
Quando o componente informado não possui exemplos próprios, o servidor procura os exemplos do componente pai (por exemplo, `po-tab` retorna exemplos de `po-tabs`) e sinaliza a origem na resposta.
|
|
167
|
+
|
|
168
|
+
Exemplo:
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{ "slug": "po-button", "example": "basic", "max_examples": 2 }
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
> Esta ferramenta consulta a API pública do GitHub. Consulte a seção [Limitação de taxa da API do GitHub](#limitação-de-taxa-da-api-do-github).
|
|
175
|
+
|
|
176
|
+
### `get_best_practices`
|
|
177
|
+
|
|
178
|
+
Retorna, em Markdown, um documento oficial de boas práticas do PO UI, junto com o título e o link da fonte.
|
|
179
|
+
|
|
180
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
181
|
+
| --- | --- | --- | --- |
|
|
182
|
+
| `topic` | `"contributing" \| "development-flow" \| "getting-started" \| "theme-service"` | sim | Tema das recomendações. |
|
|
183
|
+
|
|
184
|
+
Exemplo:
|
|
185
|
+
|
|
186
|
+
```json
|
|
187
|
+
{ "topic": "getting-started" }
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### `search_docs`
|
|
191
|
+
|
|
192
|
+
Realiza uma busca textual, sem diferenciar maiúsculas e minúsculas, no arquivo `llms-full.txt`.
|
|
193
|
+
|
|
194
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
195
|
+
| --- | --- | --- | --- |
|
|
196
|
+
| `query` | `string` com pelo menos 2 caracteres | sim | Texto procurado na documentação. |
|
|
197
|
+
| `max_results` | número inteiro de 1 a 50 | não | Quantidade máxima de resultados. O padrão é `10`. |
|
|
198
|
+
|
|
199
|
+
Cada resultado contém o título da seção encontrada e trechos de contexto ao redor das ocorrências.
|
|
200
|
+
|
|
201
|
+
Exemplo:
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{ "query": "lazy load", "max_results": 5 }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### `get_guide`
|
|
208
|
+
|
|
209
|
+
Retorna o conteúdo completo de um guia da documentação.
|
|
210
|
+
|
|
211
|
+
| Parâmetro | Tipo | Obrigatório | Descrição |
|
|
212
|
+
| --- | --- | --- | --- |
|
|
213
|
+
| `guide` | `string` | sim | Nome do guia, com ou sem a extensão `.md`. |
|
|
214
|
+
|
|
215
|
+
Para conhecer os guias disponíveis, use `list_components` com `section` igual a `guides`.
|
|
216
|
+
|
|
217
|
+
Exemplo:
|
|
218
|
+
|
|
219
|
+
```json
|
|
220
|
+
{ "guide": "getting-started" }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Exemplos de prompts
|
|
224
|
+
|
|
225
|
+
- “Quais componentes do PO UI permitem upload de arquivos?”
|
|
226
|
+
- “Mostre a documentação do `po-table`.”
|
|
227
|
+
- “Como usar o `PoThemeService`?”
|
|
228
|
+
- “Pesquise por `p-loading` na documentação do PO UI.”
|
|
229
|
+
- “Liste os guias disponíveis e traga o guia de schematics.”
|
|
230
|
+
- “Mostre exemplos oficiais do `po-table`.”
|
|
231
|
+
- “Quais são as boas práticas de customização de tema do PO UI?”
|
|
232
|
+
|
|
233
|
+
## Fontes de dados
|
|
234
|
+
|
|
235
|
+
| Conteúdo | Fonte principal | Fallback |
|
|
236
|
+
| --- | --- | --- |
|
|
237
|
+
| Índice de APIs e guias | `https://po-ui.io/llms.txt` | — |
|
|
238
|
+
| Documentação consolidada | `https://po-ui.io/llms-full.txt` | — |
|
|
239
|
+
| Documentação por recurso | `https://po-ui.io/llms-generated/{slug}.md` | `https://raw.githubusercontent.com/po-ui/po-angular/master/projects/portal/src/llms-generated/{slug}.md` |
|
|
240
|
+
| Guias | `https://raw.githubusercontent.com/po-ui/po-angular/master/docs/guides/{name}.md` | — |
|
|
241
|
+
| Índice de exemplos | `https://api.github.com/repos/po-ui/po-angular/git/trees/master?recursive=1` | — |
|
|
242
|
+
| Arquivos de exemplo | `https://raw.githubusercontent.com/po-ui/po-angular/master/{path}` | — |
|
|
243
|
+
| Boas práticas | `https://raw.githubusercontent.com/po-ui/po-angular/master/{doc}` | — |
|
|
244
|
+
|
|
245
|
+
O índice `llms.txt` é mantido em memória durante a execução do servidor. O índice de exemplos (árvore do repositório) também é mantido em cache durante a execução. Para forçar uma nova leitura de qualquer um deles, reinicie o servidor no cliente MCP.
|
|
246
|
+
|
|
247
|
+
## Solução de problemas
|
|
248
|
+
|
|
249
|
+
### O cliente não inicia o servidor
|
|
250
|
+
|
|
251
|
+
Confirme que o Node.js 18 ou superior está instalado e que `npx` está disponível no `PATH` do processo que executa o cliente. No Windows, alguns clientes podem exigir o caminho completo para `npx.cmd`.
|
|
252
|
+
|
|
253
|
+
### Erro ao carregar o índice ou a documentação
|
|
254
|
+
|
|
255
|
+
Verifique se o ambiente permite acesso HTTPS a `po-ui.io`, `raw.githubusercontent.com` e `api.github.com`. Cada requisição possui timeout de 10 segundos.
|
|
256
|
+
|
|
257
|
+
### Limitação de taxa da API do GitHub
|
|
258
|
+
|
|
259
|
+
A ferramenta `get_component_examples` consulta a API pública do GitHub para localizar os exemplos no repositório. Sem autenticação, o GitHub limita as requisições a 60 por hora por endereço IP. Ao atingir esse limite, a API responde com HTTP 403 e a ferramenta retorna uma mensagem de erro correspondente.
|
|
260
|
+
|
|
261
|
+
Para reduzir o consumo, o servidor mantém a árvore do repositório em cache durante a execução: apenas a primeira chamada a `get_component_examples` consulta a API do GitHub; as demais reutilizam o resultado em memória. Se você atingir o limite, aguarde a renovação da cota ou reinicie o servidor mais tarde. Ambientes com IP compartilhado (proxies corporativos, por exemplo) podem atingir o limite com mais frequência.
|
|
262
|
+
|
|
263
|
+
### Recurso não encontrado
|
|
264
|
+
|
|
265
|
+
Use `list_components` para localizar o slug aceito pelo servidor e, em seguida, informe esse valor a `get_component_docs`.
|
|
266
|
+
|
|
267
|
+
### As ferramentas não aparecem no cliente
|
|
268
|
+
|
|
269
|
+
Reinicie o servidor após alterar a configuração e verifique o painel ou o log de servidores MCP do cliente. Algumas aplicações também solicitam autorização antes de disponibilizar as ferramentas.
|
|
270
|
+
|
|
271
|
+
## Desenvolvimento
|
|
272
|
+
|
|
273
|
+
O código-fonte está no monorepo [`po-ui/po-angular`](https://github.com/po-ui/po-angular), em [`projects/mcp`](https://github.com/po-ui/po-angular/tree/master/projects/mcp).
|
|
274
|
+
|
|
275
|
+
Na raiz do repositório, execute:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
npm install
|
|
279
|
+
npm run build:mcp
|
|
280
|
+
npm run test:mcp
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Antes de contribuir, consulte o [guia de contribuição](https://github.com/po-ui/po-angular/blob/master/CONTRIBUTING.md).
|
|
284
|
+
|
|
285
|
+
## Licença
|
|
286
|
+
|
|
287
|
+
[MIT](https://github.com/po-ui/po-angular/blob/master/LICENSE) © PO UI
|
package/docs-client.d.ts
CHANGED
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
export declare const BEST_PRACTICE_TOPICS: readonly ["contributing", "development-flow", "getting-started", "theme-service"];
|
|
2
|
+
export type BestPracticeTopic = (typeof BEST_PRACTICE_TOPICS)[number];
|
|
3
|
+
export interface OfficialDocument {
|
|
4
|
+
content: string;
|
|
5
|
+
title: string;
|
|
6
|
+
url: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ComponentExampleFile {
|
|
9
|
+
content: string;
|
|
10
|
+
language: string;
|
|
11
|
+
name: string;
|
|
12
|
+
url: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ComponentExample {
|
|
15
|
+
files: Array<ComponentExampleFile>;
|
|
16
|
+
name: string;
|
|
17
|
+
url: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ComponentExamplesResult {
|
|
20
|
+
examples: Array<ComponentExample>;
|
|
21
|
+
sourceSlug: string;
|
|
22
|
+
status: 'available' | 'no_match' | 'not_available';
|
|
23
|
+
}
|
|
24
|
+
/** Resolve the highlight language of a sample file. Exported for direct unit testing. */
|
|
25
|
+
export declare function getLanguage(fileName: string): string;
|
|
26
|
+
/** Clear the session cache. Intended for tests that mock the GitHub tree. */
|
|
27
|
+
export declare function clearRepositoryTreeCache(): void;
|
|
28
|
+
export declare function fetchComponentExamples(slug: string, maxExamples: number, exampleFilter?: string): Promise<ComponentExamplesResult>;
|
|
29
|
+
export declare function fetchBestPractices(topic: BestPracticeTopic): Promise<OfficialDocument>;
|
|
1
30
|
export declare function fetchLlmsTxt(): Promise<string>;
|
|
2
31
|
export declare function fetchLlmsFullTxt(): Promise<string>;
|
|
3
32
|
export declare function fetchComponentDoc(slug: string): Promise<string>;
|
package/docs-client.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BEST_PRACTICE_TOPICS = void 0;
|
|
4
|
+
exports.getLanguage = getLanguage;
|
|
5
|
+
exports.clearRepositoryTreeCache = clearRepositoryTreeCache;
|
|
6
|
+
exports.fetchComponentExamples = fetchComponentExamples;
|
|
7
|
+
exports.fetchBestPractices = fetchBestPractices;
|
|
3
8
|
exports.fetchLlmsTxt = fetchLlmsTxt;
|
|
4
9
|
exports.fetchLlmsFullTxt = fetchLlmsFullTxt;
|
|
5
10
|
exports.fetchComponentDoc = fetchComponentDoc;
|
|
@@ -8,11 +13,64 @@ const https = require("node:https");
|
|
|
8
13
|
const http = require("node:http");
|
|
9
14
|
const BASE_URL = 'https://po-ui.io';
|
|
10
15
|
const GITHUB_RAW = 'https://raw.githubusercontent.com/po-ui/po-angular/master';
|
|
16
|
+
const GITHUB_REPOSITORY = 'https://github.com/po-ui/po-angular';
|
|
17
|
+
const GITHUB_API = 'https://api.github.com/repos/po-ui/po-angular';
|
|
11
18
|
const FETCH_TIMEOUT_MS = 10_000;
|
|
19
|
+
const COMPONENT_SOURCE_ROOTS = [
|
|
20
|
+
'projects/ui/src/lib/components',
|
|
21
|
+
'projects/templates/src/lib/components',
|
|
22
|
+
'projects/code-editor/src/lib/components'
|
|
23
|
+
];
|
|
24
|
+
const COMPONENT_EXAMPLE_PARENTS = {
|
|
25
|
+
'po-accordion-item': 'po-accordion',
|
|
26
|
+
'po-button-base': 'po-button',
|
|
27
|
+
'po-button-group-base': 'po-button-group',
|
|
28
|
+
'po-checkbox-base': 'po-checkbox',
|
|
29
|
+
'po-helper-base': 'po-helper',
|
|
30
|
+
'po-modal-footer': 'po-modal',
|
|
31
|
+
'po-page-slide-footer': 'po-page-slide',
|
|
32
|
+
'po-popover-base': 'po-popover',
|
|
33
|
+
'po-step': 'po-stepper',
|
|
34
|
+
'po-tab': 'po-tabs'
|
|
35
|
+
};
|
|
36
|
+
exports.BEST_PRACTICE_TOPICS = ['contributing', 'development-flow', 'getting-started', 'theme-service'];
|
|
37
|
+
let repositoryTreePromise;
|
|
38
|
+
const BEST_PRACTICE_SOURCES = {
|
|
39
|
+
contributing: {
|
|
40
|
+
title: 'Contribuindo com o PO UI',
|
|
41
|
+
url: `${GITHUB_REPOSITORY}/blob/master/CONTRIBUTING.md`,
|
|
42
|
+
rawUrl: `${GITHUB_RAW}/CONTRIBUTING.md`
|
|
43
|
+
},
|
|
44
|
+
'development-flow': {
|
|
45
|
+
title: 'Fluxo de desenvolvimento',
|
|
46
|
+
url: `${GITHUB_REPOSITORY}/blob/master/docs/guides/development-flow.md`,
|
|
47
|
+
rawUrl: `${GITHUB_RAW}/docs/guides/development-flow.md`
|
|
48
|
+
},
|
|
49
|
+
'getting-started': {
|
|
50
|
+
title: 'Primeiros passos',
|
|
51
|
+
url: `${GITHUB_REPOSITORY}/blob/master/docs/guides/getting-started.md`,
|
|
52
|
+
rawUrl: `${GITHUB_RAW}/docs/guides/getting-started.md`
|
|
53
|
+
},
|
|
54
|
+
'theme-service': {
|
|
55
|
+
title: 'Customização de temas com PoThemeService',
|
|
56
|
+
url: `${GITHUB_REPOSITORY}/blob/master/docs/guides/theme-service.md`,
|
|
57
|
+
rawUrl: `${GITHUB_RAW}/docs/guides/theme-service.md`
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
function buildRequestHeaders(url) {
|
|
61
|
+
const headers = { 'User-Agent': 'po-ui-mcp' };
|
|
62
|
+
if (url.startsWith(`${GITHUB_API}/`) || url === GITHUB_API) {
|
|
63
|
+
headers.Accept = 'application/vnd.github+json';
|
|
64
|
+
}
|
|
65
|
+
return headers;
|
|
66
|
+
}
|
|
12
67
|
function fetchUrl(url) {
|
|
13
68
|
return new Promise(resolve => {
|
|
14
69
|
const client = url.startsWith('https') ? https : http;
|
|
15
|
-
const req = client.get(url, {
|
|
70
|
+
const req = client.get(url, {
|
|
71
|
+
headers: buildRequestHeaders(url),
|
|
72
|
+
timeout: FETCH_TIMEOUT_MS
|
|
73
|
+
}, res => {
|
|
16
74
|
// Follow redirects (301/302)
|
|
17
75
|
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
18
76
|
resolve(fetchUrl(res.headers.location));
|
|
@@ -37,6 +95,129 @@ function fetchUrl(url) {
|
|
|
37
95
|
req.on('error', (err) => resolve({ ok: false, text: err.message }));
|
|
38
96
|
});
|
|
39
97
|
}
|
|
98
|
+
function parseJson(result, url) {
|
|
99
|
+
try {
|
|
100
|
+
return JSON.parse(result.text);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
throw new Error(`Resposta JSON inválida recebida de ${url}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Resolve the highlight language of a sample file. Exported for direct unit testing. */
|
|
107
|
+
function getLanguage(fileName) {
|
|
108
|
+
const extension = fileName.slice(fileName.lastIndexOf('.') + 1);
|
|
109
|
+
const languages = {
|
|
110
|
+
css: 'css',
|
|
111
|
+
html: 'html',
|
|
112
|
+
json: 'json',
|
|
113
|
+
scss: 'scss',
|
|
114
|
+
ts: 'typescript'
|
|
115
|
+
};
|
|
116
|
+
return languages[extension] ?? 'text';
|
|
117
|
+
}
|
|
118
|
+
function isWithinComponentSource(path) {
|
|
119
|
+
return COMPONENT_SOURCE_ROOTS.some(root => path.startsWith(`${root}/`));
|
|
120
|
+
}
|
|
121
|
+
function findSamplesLocation(tree, slug) {
|
|
122
|
+
const samplesMarker = `/${slug}/samples/`;
|
|
123
|
+
const locations = new Map();
|
|
124
|
+
for (const entry of tree) {
|
|
125
|
+
if (entry.type !== 'blob' || !isWithinComponentSource(entry.path))
|
|
126
|
+
continue;
|
|
127
|
+
const markerIndex = entry.path.indexOf(samplesMarker);
|
|
128
|
+
if (markerIndex === -1 || !/\.(?:css|html|json|scss|ts)$/.test(entry.path))
|
|
129
|
+
continue;
|
|
130
|
+
const rootPath = entry.path.slice(0, markerIndex + samplesMarker.length - 1);
|
|
131
|
+
const files = locations.get(rootPath) ?? [];
|
|
132
|
+
files.push(entry);
|
|
133
|
+
locations.set(rootPath, files);
|
|
134
|
+
}
|
|
135
|
+
const [rootPath, files] = [...locations.entries()].sort(([pathA], [pathB]) => pathA.length - pathB.length)[0] ?? [];
|
|
136
|
+
return rootPath && files ? { files, rootPath } : undefined;
|
|
137
|
+
}
|
|
138
|
+
function componentExists(tree, slug) {
|
|
139
|
+
const componentMarker = `/${slug}/`;
|
|
140
|
+
return tree.some(entry => isWithinComponentSource(entry.path) && `/${entry.path}/`.includes(componentMarker));
|
|
141
|
+
}
|
|
142
|
+
async function loadRepositoryTree() {
|
|
143
|
+
const url = `${GITHUB_API}/git/trees/master?recursive=1`;
|
|
144
|
+
const result = await fetchUrl(url);
|
|
145
|
+
if (!result.ok) {
|
|
146
|
+
throw new Error(`Falha ao carregar o índice de exemplos (HTTP ${result.statusCode ?? 'desconhecido'}).`);
|
|
147
|
+
}
|
|
148
|
+
const response = parseJson(result, url);
|
|
149
|
+
if (!Array.isArray(response.tree)) {
|
|
150
|
+
throw new TypeError(`Resposta inválida recebida de ${url}: campo "tree" ausente.`);
|
|
151
|
+
}
|
|
152
|
+
if (response.truncated) {
|
|
153
|
+
throw new Error('O índice de exemplos retornado pelo GitHub está incompleto. Tente novamente mais tarde.');
|
|
154
|
+
}
|
|
155
|
+
return response.tree;
|
|
156
|
+
}
|
|
157
|
+
async function getRepositoryTree() {
|
|
158
|
+
repositoryTreePromise ??= loadRepositoryTree().catch(error => {
|
|
159
|
+
repositoryTreePromise = undefined;
|
|
160
|
+
throw error;
|
|
161
|
+
});
|
|
162
|
+
return repositoryTreePromise;
|
|
163
|
+
}
|
|
164
|
+
/** Clear the session cache. Intended for tests that mock the GitHub tree. */
|
|
165
|
+
function clearRepositoryTreeCache() {
|
|
166
|
+
repositoryTreePromise = undefined;
|
|
167
|
+
}
|
|
168
|
+
async function fetchComponentExamples(slug, maxExamples, exampleFilter) {
|
|
169
|
+
const repositoryTree = await getRepositoryTree();
|
|
170
|
+
const directLocation = findSamplesLocation(repositoryTree, slug);
|
|
171
|
+
const sourceSlug = directLocation ? slug : (COMPONENT_EXAMPLE_PARENTS[slug] ?? slug);
|
|
172
|
+
const location = directLocation ?? findSamplesLocation(repositoryTree, sourceSlug);
|
|
173
|
+
if (!location) {
|
|
174
|
+
if (componentExists(repositoryTree, slug)) {
|
|
175
|
+
return { examples: [], sourceSlug: slug, status: 'not_available' };
|
|
176
|
+
}
|
|
177
|
+
throw new Error(`Componente "${slug}" não encontrado no repositório oficial.`);
|
|
178
|
+
}
|
|
179
|
+
const sampleNames = [
|
|
180
|
+
...new Set(location.files.map(entry => entry.path.slice(location.rootPath.length + 1).split('/')[0]))
|
|
181
|
+
]
|
|
182
|
+
.filter(name => !exampleFilter || name.toLowerCase().includes(exampleFilter.toLowerCase()))
|
|
183
|
+
.sort((nameA, nameB) => nameA.localeCompare(nameB))
|
|
184
|
+
.slice(0, maxExamples);
|
|
185
|
+
const examples = await Promise.all(sampleNames.map(async (name) => {
|
|
186
|
+
const entries = location.files.filter(entry => entry.path.startsWith(`${location.rootPath}/${name}/`));
|
|
187
|
+
const files = await Promise.all(entries.map(async (entry) => {
|
|
188
|
+
const path = entry.path;
|
|
189
|
+
const rawUrl = `${GITHUB_RAW}/${path}`;
|
|
190
|
+
const result = await fetchUrl(rawUrl);
|
|
191
|
+
if (!result.ok) {
|
|
192
|
+
throw new Error(`Falha ao buscar o arquivo de exemplo "${path}" (HTTP ${result.statusCode ?? 'desconhecido'}).`);
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
content: result.text,
|
|
196
|
+
language: getLanguage(entry.path),
|
|
197
|
+
name: path.slice(path.lastIndexOf('/') + 1),
|
|
198
|
+
url: `${GITHUB_REPOSITORY}/blob/master/${path}`
|
|
199
|
+
};
|
|
200
|
+
}));
|
|
201
|
+
return {
|
|
202
|
+
files,
|
|
203
|
+
name,
|
|
204
|
+
url: `${GITHUB_REPOSITORY}/tree/master/${location.rootPath}/${name}`
|
|
205
|
+
};
|
|
206
|
+
}));
|
|
207
|
+
return {
|
|
208
|
+
examples,
|
|
209
|
+
sourceSlug,
|
|
210
|
+
status: examples.length > 0 ? 'available' : 'no_match'
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async function fetchBestPractices(topic) {
|
|
214
|
+
const source = BEST_PRACTICE_SOURCES[topic];
|
|
215
|
+
const result = await fetchUrl(source.rawUrl);
|
|
216
|
+
if (!result.ok) {
|
|
217
|
+
throw new Error(`Falha ao buscar boas práticas de "${topic}" (HTTP ${result.statusCode ?? 'desconhecido'}).`);
|
|
218
|
+
}
|
|
219
|
+
return { content: result.text, title: source.title, url: source.url };
|
|
220
|
+
}
|
|
40
221
|
async function fetchLlmsTxt() {
|
|
41
222
|
const result = await fetchUrl(`${BASE_URL}/llms.txt`);
|
|
42
223
|
if (result.ok)
|
|
@@ -54,7 +235,6 @@ async function fetchComponentDoc(slug) {
|
|
|
54
235
|
const primary = await fetchUrl(primaryUrl);
|
|
55
236
|
if (primary.ok)
|
|
56
237
|
return primary.text;
|
|
57
|
-
// Fallback: GitHub raw
|
|
58
238
|
const fallbackUrl = `${GITHUB_RAW}/projects/portal/src/llms-generated/${slug}.md`;
|
|
59
239
|
const fallback = await fetchUrl(fallbackUrl);
|
|
60
240
|
if (fallback.ok)
|
package/docs-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-client.js","sourceRoot":"","sources":["../../projects/mcp/src/docs-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docs-client.js","sourceRoot":"","sources":["../../projects/mcp/src/docs-client.ts"],"names":[],"mappings":"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"}
|
package/llms-parser.js
CHANGED
|
@@ -27,7 +27,7 @@ function parseLlmsTxt(text) {
|
|
|
27
27
|
// Extract slug from URL path:
|
|
28
28
|
// https://po-ui.io/llms-generated/po-button.md → po-button
|
|
29
29
|
// https://po-ui.io/guides/getting-started → getting-started
|
|
30
|
-
const lastSegment = url.
|
|
30
|
+
const lastSegment = url.slice(url.lastIndexOf('/') + 1);
|
|
31
31
|
const slug = lastSegment.endsWith('.md') ? lastSegment.slice(0, -3) : lastSegment;
|
|
32
32
|
entries.push({
|
|
33
33
|
name,
|
package/llms-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llms-parser.js","sourceRoot":"","sources":["../../projects/mcp/src/llms-parser.ts"],"names":[],"mappings":";;AAmBA,oCAkCC;AA7CD,MAAM,WAAW,GAA2B;IAC1C,yBAAyB,EAAE,YAAY;IACvC,UAAU,EAAE,UAAU;IACtB,sBAAsB,EAAE,YAAY;IACpC,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,yDAAyD;AACzD,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AAEzD,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,cAAc,GAAG,SAAS,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACjD,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;QAE9C,8BAA8B;QAC9B,4DAA4D;QAC5D,mEAAmE;QACnE,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"llms-parser.js","sourceRoot":"","sources":["../../projects/mcp/src/llms-parser.ts"],"names":[],"mappings":";;AAmBA,oCAkCC;AA7CD,MAAM,WAAW,GAA2B;IAC1C,yBAAyB,EAAE,YAAY;IACvC,UAAU,EAAE,UAAU;IACtB,sBAAsB,EAAE,YAAY;IACpC,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,yDAAyD;AACzD,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AAEzD,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,cAAc,GAAG,SAAS,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACjD,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;QAE9C,8BAA8B;QAC9B,4DAA4D;QAC5D,mEAAmE;QACnE,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAElF,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE;YAC/B,OAAO,EAAE,cAAc;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -46,6 +46,43 @@ function normaliseSlug(input) {
|
|
|
46
46
|
}
|
|
47
47
|
return s;
|
|
48
48
|
}
|
|
49
|
+
const PO_UI_URL = 'https://po-ui.io';
|
|
50
|
+
function getComponentDocumentationUrl(slug) {
|
|
51
|
+
return `${PO_UI_URL}/documentation/${slug}`;
|
|
52
|
+
}
|
|
53
|
+
function getComponentSourceUrl(slug) {
|
|
54
|
+
return `${PO_UI_URL}/llms-generated/${slug}.md`;
|
|
55
|
+
}
|
|
56
|
+
function getGuideUrl(guide) {
|
|
57
|
+
return `https://github.com/po-ui/po-angular/blob/master/docs/guides/${guide}.md`;
|
|
58
|
+
}
|
|
59
|
+
function getErrorMessage(error) {
|
|
60
|
+
if (error instanceof Error) {
|
|
61
|
+
return error.message;
|
|
62
|
+
}
|
|
63
|
+
if (typeof error === 'string') {
|
|
64
|
+
return error;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
return JSON.stringify(error);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return 'Erro desconhecido.';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function createToolError(message) {
|
|
74
|
+
return { content: [{ type: 'text', text: message }], isError: true };
|
|
75
|
+
}
|
|
76
|
+
function formatExamples(examples) {
|
|
77
|
+
return examples
|
|
78
|
+
.map(example => {
|
|
79
|
+
const files = example.files
|
|
80
|
+
.map(file => `#### [${file.name}](${file.url})\n\n\`\`\`${file.language}\n${file.content}\n\`\`\``)
|
|
81
|
+
.join('\n\n');
|
|
82
|
+
return `### [${example.name}](${example.url})\n\n${files}`;
|
|
83
|
+
})
|
|
84
|
+
.join('\n\n');
|
|
85
|
+
}
|
|
49
86
|
/** Extract the heading text from the first `# ...` line, or fallback. */
|
|
50
87
|
function extractHeading(lines) {
|
|
51
88
|
return (lines
|
|
@@ -109,9 +146,9 @@ function createServer() {
|
|
|
109
146
|
name: 'po-ui',
|
|
110
147
|
version: '1.0.0'
|
|
111
148
|
});
|
|
149
|
+
const registerTool = server.registerTool.bind(server);
|
|
112
150
|
// ── list_components ─────────────────────────────────────────────────────────
|
|
113
|
-
|
|
114
|
-
server.registerTool('list_components', {
|
|
151
|
+
registerTool('list_components', {
|
|
115
152
|
description: 'Lista todos os componentes, diretivas, serviços, interfaces e enums do PO UI com descrições resumidas. ' +
|
|
116
153
|
'Use para descobrir quais APIs existem antes de buscar detalhes.',
|
|
117
154
|
inputSchema: {
|
|
@@ -120,6 +157,17 @@ function createServer() {
|
|
|
120
157
|
.optional()
|
|
121
158
|
.describe('Filtrar por seção: "components", "services", "interfaces", "enums", "guides" ou "all" (padrão).'),
|
|
122
159
|
filter: zod_1.z.string().optional().describe('Filtro de texto livre no nome ou descrição (case-insensitive).')
|
|
160
|
+
},
|
|
161
|
+
outputSchema: {
|
|
162
|
+
count: zod_1.z.number().int(),
|
|
163
|
+
items: zod_1.z.array(zod_1.z.object({
|
|
164
|
+
description: zod_1.z.string(),
|
|
165
|
+
name: zod_1.z.string(),
|
|
166
|
+
section: zod_1.z.string(),
|
|
167
|
+
slug: zod_1.z.string(),
|
|
168
|
+
url: zod_1.z.string()
|
|
169
|
+
})),
|
|
170
|
+
section: zod_1.z.string()
|
|
123
171
|
}
|
|
124
172
|
}, async ({ section, filter }) => {
|
|
125
173
|
const resolvedSection = section ?? 'all';
|
|
@@ -128,8 +176,7 @@ function createServer() {
|
|
|
128
176
|
entries = await getLlmsEntries();
|
|
129
177
|
}
|
|
130
178
|
catch (err) {
|
|
131
|
-
|
|
132
|
-
return { content: [{ type: 'text', text: `Erro ao carregar índice: ${msg}` }] };
|
|
179
|
+
return createToolError(`Erro ao carregar índice: ${getErrorMessage(err)}`);
|
|
133
180
|
}
|
|
134
181
|
let results = resolvedSection === 'all' ? entries : entries.filter(e => e.section === resolvedSection);
|
|
135
182
|
if (filter) {
|
|
@@ -137,7 +184,10 @@ function createServer() {
|
|
|
137
184
|
results = results.filter(e => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q));
|
|
138
185
|
}
|
|
139
186
|
if (results.length === 0) {
|
|
140
|
-
return {
|
|
187
|
+
return {
|
|
188
|
+
content: [{ type: 'text', text: 'Nenhum resultado encontrado.' }],
|
|
189
|
+
structuredContent: { count: 0, items: [], section: resolvedSection }
|
|
190
|
+
};
|
|
141
191
|
}
|
|
142
192
|
// Group by section
|
|
143
193
|
const grouped = new Map();
|
|
@@ -155,10 +205,23 @@ function createServer() {
|
|
|
155
205
|
}
|
|
156
206
|
lines.push('');
|
|
157
207
|
}
|
|
158
|
-
return {
|
|
208
|
+
return {
|
|
209
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
210
|
+
structuredContent: {
|
|
211
|
+
count: results.length,
|
|
212
|
+
items: results.map(item => ({
|
|
213
|
+
description: item.description,
|
|
214
|
+
name: item.name,
|
|
215
|
+
section: item.section,
|
|
216
|
+
slug: item.slug,
|
|
217
|
+
url: item.url
|
|
218
|
+
})),
|
|
219
|
+
section: resolvedSection
|
|
220
|
+
}
|
|
221
|
+
};
|
|
159
222
|
});
|
|
160
223
|
// ── get_component_docs ───────────────────────────────────────────────────────
|
|
161
|
-
|
|
224
|
+
registerTool('get_component_docs', {
|
|
162
225
|
description: 'Retorna a documentação completa em Markdown para um componente, serviço, interface ou enum do PO UI. ' +
|
|
163
226
|
'Inclui descrição, tabelas de inputs/outputs/propriedades, tipos e exemplos de uso.',
|
|
164
227
|
inputSchema: {
|
|
@@ -167,19 +230,41 @@ function createServer() {
|
|
|
167
230
|
.describe('Slug do componente. Exemplos: "po-button", "po-table", "po-dialog-service", "po-table-column". ' +
|
|
168
231
|
'Aceita também nomes de classe ("PoButtonComponent") e seletores HTML ("<po-button>"). ' +
|
|
169
232
|
'Use list_components para descobrir slugs disponíveis.')
|
|
233
|
+
},
|
|
234
|
+
outputSchema: {
|
|
235
|
+
content: zod_1.z.string(),
|
|
236
|
+
documentationUrl: zod_1.z.string(),
|
|
237
|
+
slug: zod_1.z.string(),
|
|
238
|
+
sourceUrl: zod_1.z.string()
|
|
170
239
|
}
|
|
171
240
|
}, async ({ slug }) => {
|
|
172
241
|
const normalised = normaliseSlug(slug);
|
|
173
242
|
try {
|
|
174
243
|
const markdown = await (0, docs_client_1.fetchComponentDoc)(normalised);
|
|
175
|
-
return {
|
|
244
|
+
return {
|
|
245
|
+
content: [{ type: 'text', text: markdown }],
|
|
246
|
+
structuredContent: {
|
|
247
|
+
content: markdown,
|
|
248
|
+
documentationUrl: getComponentDocumentationUrl(normalised),
|
|
249
|
+
slug: normalised,
|
|
250
|
+
sourceUrl: getComponentSourceUrl(normalised)
|
|
251
|
+
}
|
|
252
|
+
};
|
|
176
253
|
}
|
|
177
254
|
catch {
|
|
178
255
|
// If normalised slug failed, try the original input as-is
|
|
179
256
|
if (normalised !== slug) {
|
|
180
257
|
try {
|
|
181
258
|
const markdown = await (0, docs_client_1.fetchComponentDoc)(slug);
|
|
182
|
-
return {
|
|
259
|
+
return {
|
|
260
|
+
content: [{ type: 'text', text: markdown }],
|
|
261
|
+
structuredContent: {
|
|
262
|
+
content: markdown,
|
|
263
|
+
documentationUrl: getComponentDocumentationUrl(slug),
|
|
264
|
+
slug,
|
|
265
|
+
sourceUrl: getComponentSourceUrl(slug)
|
|
266
|
+
}
|
|
267
|
+
};
|
|
183
268
|
}
|
|
184
269
|
catch {
|
|
185
270
|
// Fall through to error with suggestions
|
|
@@ -190,37 +275,127 @@ function createServer() {
|
|
|
190
275
|
const entries = await getLlmsEntries();
|
|
191
276
|
const q = normalised.toLowerCase();
|
|
192
277
|
const suggestions = entries
|
|
193
|
-
.filter(e => e.slug.includes(q) || q.includes(e.slug.split('-')[0]
|
|
278
|
+
.filter(e => e.slug.includes(q) || q.includes(e.slug.split('-')[0]))
|
|
194
279
|
.slice(0, 5)
|
|
195
280
|
.map(e => `- ${e.name} (\`${e.slug}\`)`)
|
|
196
281
|
.join('\n');
|
|
282
|
+
return createToolError(`Componente "${slug}" não encontrado.\n\n` +
|
|
283
|
+
(suggestions
|
|
284
|
+
? `Sugestões:\n${suggestions}\n\nUse list_components para ver todos.`
|
|
285
|
+
: 'Use list_components para ver todos os slugs disponíveis.'));
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return createToolError(`Componente "${slug}" não encontrado. Use list_components para ver os slugs disponíveis.`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
// ── get_component_examples ──────────────────────────────────────────────────
|
|
293
|
+
registerTool('get_component_examples', {
|
|
294
|
+
description: 'Retorna exemplos oficiais de um componente PO UI diretamente do repositório. ' +
|
|
295
|
+
'Inclui os arquivos TypeScript, HTML e estilos necessários para compreender cada exemplo.',
|
|
296
|
+
inputSchema: {
|
|
297
|
+
slug: zod_1.z.string().describe('Slug do componente. Exemplos: "po-button", "po-table" ou "PoButtonComponent".'),
|
|
298
|
+
example: zod_1.z
|
|
299
|
+
.string()
|
|
300
|
+
.optional()
|
|
301
|
+
.describe('Filtro opcional pelo nome do exemplo. Exemplos: "basic", "labs" ou "airfare".'),
|
|
302
|
+
max_examples: zod_1.z
|
|
303
|
+
.number()
|
|
304
|
+
.int()
|
|
305
|
+
.min(1)
|
|
306
|
+
.max(5)
|
|
307
|
+
.optional()
|
|
308
|
+
.describe('Quantidade máxima de exemplos. Padrão: 3. Máximo: 5.')
|
|
309
|
+
},
|
|
310
|
+
outputSchema: {
|
|
311
|
+
documentationUrl: zod_1.z.string(),
|
|
312
|
+
examples: zod_1.z.array(zod_1.z.object({
|
|
313
|
+
files: zod_1.z.array(zod_1.z.object({ content: zod_1.z.string(), language: zod_1.z.string(), name: zod_1.z.string(), url: zod_1.z.string() })),
|
|
314
|
+
name: zod_1.z.string(),
|
|
315
|
+
url: zod_1.z.string()
|
|
316
|
+
})),
|
|
317
|
+
slug: zod_1.z.string(),
|
|
318
|
+
sourceSlug: zod_1.z.string(),
|
|
319
|
+
status: zod_1.z.enum(['available', 'no_match', 'not_available'])
|
|
320
|
+
}
|
|
321
|
+
}, async ({ slug, example, max_examples }) => {
|
|
322
|
+
const normalised = normaliseSlug(slug);
|
|
323
|
+
try {
|
|
324
|
+
const result = await (0, docs_client_1.fetchComponentExamples)(normalised, max_examples ?? 3, example);
|
|
325
|
+
const structuredContent = {
|
|
326
|
+
documentationUrl: getComponentDocumentationUrl(normalised),
|
|
327
|
+
examples: result.examples,
|
|
328
|
+
slug: normalised,
|
|
329
|
+
sourceSlug: result.sourceSlug,
|
|
330
|
+
status: result.status
|
|
331
|
+
};
|
|
332
|
+
if (result.status === 'not_available') {
|
|
197
333
|
return {
|
|
198
334
|
content: [
|
|
199
335
|
{
|
|
200
336
|
type: 'text',
|
|
201
|
-
text: `
|
|
202
|
-
(suggestions
|
|
203
|
-
? `Sugestões:\n${suggestions}\n\nUse list_components para ver todos.`
|
|
204
|
-
: 'Use list_components para ver todos os slugs disponíveis.')
|
|
337
|
+
text: `O componente "${normalised}" não possui exemplos oficiais próprios. Consulte ${structuredContent.documentationUrl}.`
|
|
205
338
|
}
|
|
206
|
-
]
|
|
339
|
+
],
|
|
340
|
+
structuredContent
|
|
207
341
|
};
|
|
208
342
|
}
|
|
209
|
-
|
|
343
|
+
if (result.status === 'no_match') {
|
|
210
344
|
return {
|
|
211
345
|
content: [
|
|
212
346
|
{
|
|
213
347
|
type: 'text',
|
|
214
|
-
text: `
|
|
348
|
+
text: `Nenhum exemplo de "${result.sourceSlug}" corresponde ao filtro "${example}".`
|
|
215
349
|
}
|
|
216
|
-
]
|
|
350
|
+
],
|
|
351
|
+
structuredContent
|
|
217
352
|
};
|
|
218
353
|
}
|
|
354
|
+
const parentNotice = result.sourceSlug === normalised
|
|
355
|
+
? ''
|
|
356
|
+
: `Os exemplos abaixo pertencem ao componente pai "${result.sourceSlug}".\n\n`;
|
|
357
|
+
return {
|
|
358
|
+
content: [{ type: 'text', text: `${parentNotice}${formatExamples(result.examples)}` }],
|
|
359
|
+
structuredContent
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
catch (err) {
|
|
363
|
+
return createToolError(`Erro ao carregar exemplos de "${slug}": ${getErrorMessage(err)}`);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
// ── get_best_practices ──────────────────────────────────────────────────────
|
|
367
|
+
registerTool('get_best_practices', {
|
|
368
|
+
description: 'Retorna recomendações oficiais do PO UI para contribuição, fluxo de desenvolvimento, ' +
|
|
369
|
+
'configuração inicial ou customização de temas.',
|
|
370
|
+
inputSchema: {
|
|
371
|
+
topic: zod_1.z
|
|
372
|
+
.enum(docs_client_1.BEST_PRACTICE_TOPICS)
|
|
373
|
+
.describe('Tema das recomendações: contributing, development-flow, getting-started ou theme-service.')
|
|
374
|
+
},
|
|
375
|
+
outputSchema: {
|
|
376
|
+
content: zod_1.z.string(),
|
|
377
|
+
source: zod_1.z.object({ title: zod_1.z.string(), url: zod_1.z.string() }),
|
|
378
|
+
topic: zod_1.z.string()
|
|
379
|
+
}
|
|
380
|
+
}, async ({ topic }) => {
|
|
381
|
+
try {
|
|
382
|
+
const document = await (0, docs_client_1.fetchBestPractices)(topic);
|
|
383
|
+
const text = `Fonte oficial: ${document.url}\n\n${document.content}`;
|
|
384
|
+
return {
|
|
385
|
+
content: [{ type: 'text', text }],
|
|
386
|
+
structuredContent: {
|
|
387
|
+
content: document.content,
|
|
388
|
+
source: { title: document.title, url: document.url },
|
|
389
|
+
topic
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
catch (err) {
|
|
394
|
+
return createToolError(`Erro ao carregar boas práticas de "${topic}": ${getErrorMessage(err)}`);
|
|
219
395
|
}
|
|
220
396
|
});
|
|
221
397
|
// ── search_docs ──────────────────────────────────────────────────────────────
|
|
222
|
-
|
|
223
|
-
server.registerTool('search_docs', {
|
|
398
|
+
registerTool('search_docs', {
|
|
224
399
|
description: 'Busca texto em toda a documentação do PO UI. Útil para encontrar componentes que suportem ' +
|
|
225
400
|
'uma propriedade específica, um comportamento ou um padrão de uso.',
|
|
226
401
|
inputSchema: {
|
|
@@ -235,6 +410,16 @@ function createServer() {
|
|
|
235
410
|
.max(50)
|
|
236
411
|
.optional()
|
|
237
412
|
.describe('Número máximo de resultados (padrão: 10, máximo: 50).')
|
|
413
|
+
},
|
|
414
|
+
outputSchema: {
|
|
415
|
+
count: zod_1.z.number().int(),
|
|
416
|
+
query: zod_1.z.string(),
|
|
417
|
+
results: zod_1.z.array(zod_1.z.object({
|
|
418
|
+
componentName: zod_1.z.string(),
|
|
419
|
+
context: zod_1.z.string(),
|
|
420
|
+
slug: zod_1.z.string(),
|
|
421
|
+
url: zod_1.z.string()
|
|
422
|
+
}))
|
|
238
423
|
}
|
|
239
424
|
}, async ({ query, max_results }) => {
|
|
240
425
|
const limit = max_results ?? 10;
|
|
@@ -243,23 +428,35 @@ function createServer() {
|
|
|
243
428
|
fullText = await (0, docs_client_1.fetchLlmsFullTxt)();
|
|
244
429
|
}
|
|
245
430
|
catch (err) {
|
|
246
|
-
|
|
247
|
-
return { content: [{ type: 'text', text: `Erro ao carregar documentação completa: ${msg}` }] };
|
|
431
|
+
return createToolError(`Erro ao carregar documentação completa: ${getErrorMessage(err)}`);
|
|
248
432
|
}
|
|
249
433
|
const results = searchFullText(fullText, query, limit);
|
|
434
|
+
const structuredResults = results.map(result => {
|
|
435
|
+
const slug = normaliseSlug(result.componentName);
|
|
436
|
+
return {
|
|
437
|
+
componentName: result.componentName,
|
|
438
|
+
context: result.context,
|
|
439
|
+
slug,
|
|
440
|
+
url: getComponentDocumentationUrl(slug)
|
|
441
|
+
};
|
|
442
|
+
});
|
|
250
443
|
if (results.length === 0) {
|
|
251
444
|
return {
|
|
252
|
-
content: [{ type: 'text', text: `Nenhum resultado encontrado para "${query}".` }]
|
|
445
|
+
content: [{ type: 'text', text: `Nenhum resultado encontrado para "${query}".` }],
|
|
446
|
+
structuredContent: { count: 0, query, results: [] }
|
|
253
447
|
};
|
|
254
448
|
}
|
|
255
449
|
const output = [
|
|
256
450
|
`Encontrados ${results.length} resultado(s) para "${query}":\n`,
|
|
257
451
|
...results.map((r, i) => `### Resultado ${i + 1}: ${r.componentName}\n\`\`\`\n${r.context}\n\`\`\``)
|
|
258
452
|
].join('\n\n');
|
|
259
|
-
return {
|
|
453
|
+
return {
|
|
454
|
+
content: [{ type: 'text', text: output }],
|
|
455
|
+
structuredContent: { count: structuredResults.length, query, results: structuredResults }
|
|
456
|
+
};
|
|
260
457
|
});
|
|
261
458
|
// ── get_guide ────────────────────────────────────────────────────────────────
|
|
262
|
-
|
|
459
|
+
registerTool('get_guide', {
|
|
263
460
|
description: 'Retorna o conteúdo completo de um guia de documentação do PO UI (ex: getting-started, schematics, theme-service). ' +
|
|
264
461
|
'Use list_components com section="guides" para ver os guias disponíveis.',
|
|
265
462
|
inputSchema: {
|
|
@@ -267,14 +464,23 @@ function createServer() {
|
|
|
267
464
|
.string()
|
|
268
465
|
.describe('Nome do guia sem extensão. Exemplos: "getting-started", "schematics", "browser-support", "llms". ' +
|
|
269
466
|
'Aceita também com extensão: "getting-started.md".')
|
|
467
|
+
},
|
|
468
|
+
outputSchema: {
|
|
469
|
+
content: zod_1.z.string(),
|
|
470
|
+
guide: zod_1.z.string(),
|
|
471
|
+
url: zod_1.z.string()
|
|
270
472
|
}
|
|
271
473
|
}, async ({ guide }) => {
|
|
474
|
+
const guideName = guide.endsWith('.md') ? guide.slice(0, -3) : guide;
|
|
272
475
|
try {
|
|
273
476
|
const content = await (0, docs_client_1.fetchGuide)(guide);
|
|
274
|
-
return {
|
|
477
|
+
return {
|
|
478
|
+
content: [{ type: 'text', text: content }],
|
|
479
|
+
structuredContent: { content, guide: guideName, url: getGuideUrl(guideName) }
|
|
480
|
+
};
|
|
275
481
|
}
|
|
276
482
|
catch (err) {
|
|
277
|
-
const msg =
|
|
483
|
+
const msg = getErrorMessage(err);
|
|
278
484
|
// Build helpful error with guide list from the index
|
|
279
485
|
try {
|
|
280
486
|
const entries = await getLlmsEntries();
|
|
@@ -282,17 +488,10 @@ function createServer() {
|
|
|
282
488
|
.filter(e => e.section === 'guides')
|
|
283
489
|
.map(e => `- ${e.name} (\`${e.slug}\`)`)
|
|
284
490
|
.join('\n');
|
|
285
|
-
return {
|
|
286
|
-
content: [
|
|
287
|
-
{
|
|
288
|
-
type: 'text',
|
|
289
|
-
text: `Erro: ${msg}\n\nGuias disponíveis:\n${guideList || 'Nenhum guia no índice.'}`
|
|
290
|
-
}
|
|
291
|
-
]
|
|
292
|
-
};
|
|
491
|
+
return createToolError(`Erro: ${msg}\n\nGuias disponíveis:\n${guideList || 'Nenhum guia no índice.'}`);
|
|
293
492
|
}
|
|
294
493
|
catch {
|
|
295
|
-
return
|
|
494
|
+
return createToolError(`Erro: ${msg}`);
|
|
296
495
|
}
|
|
297
496
|
}
|
|
298
497
|
});
|
package/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../projects/mcp/src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../projects/mcp/src/server.ts"],"names":[],"mappings":"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"}
|