@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 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
+ [![npm version](https://img.shields.io/npm/v/@po-ui/mcp.svg)](https://www.npmjs.com/package/@po-ui/mcp)
6
+ [![license](https://img.shields.io/npm/l/@po-ui/mcp.svg)](https://github.com/po-ui/po-angular/blob/master/LICENSE)
7
+ [![node](https://img.shields.io/node/v/@po-ui/mcp.svg)](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, { timeout: FETCH_TIMEOUT_MS }, res => {
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)
@@ -1 +1 @@
1
- {"version":3,"file":"docs-client.js","sourceRoot":"","sources":["../../projects/mcp/src/docs-client.ts"],"names":[],"mappings":"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"}
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.split('/').pop() ?? '';
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,
@@ -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,EAAE,IAAI,EAAE,CAAC;QAC/C,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@po-ui/mcp",
3
- "version": "21.30.0",
3
+ "version": "21.31.0",
4
4
  "description": "MCP Server para documentação do PO UI — acessa componentes, guias e busca via Model Context Protocol",
5
5
  "main": "./index.js",
6
6
  "bin": {
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
- // @ts-ignore — TS2589: limitação de inferência genérica do @modelcontextprotocol/sdk com zod
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
- const msg = err instanceof Error ? err.message : String(err);
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 { content: [{ type: 'text', text: 'Nenhum resultado encontrado.' }] };
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 { content: [{ type: 'text', text: lines.join('\n') }] };
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
- server.registerTool('get_component_docs', {
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 { content: [{ type: 'text', text: markdown }] };
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 { content: [{ type: 'text', text: markdown }] };
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: `Componente "${slug}" não encontrado.\n\n` +
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
- catch {
343
+ if (result.status === 'no_match') {
210
344
  return {
211
345
  content: [
212
346
  {
213
347
  type: 'text',
214
- text: `Componente "${slug}" não encontrado. Use list_components para ver os slugs disponíveis.`
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
- // @ts-ignore — TS2589: limitação de inferência genérica do @modelcontextprotocol/sdk com zod
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
- const msg = err instanceof Error ? err.message : String(err);
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 { content: [{ type: 'text', text: output }] };
453
+ return {
454
+ content: [{ type: 'text', text: output }],
455
+ structuredContent: { count: structuredResults.length, query, results: structuredResults }
456
+ };
260
457
  });
261
458
  // ── get_guide ────────────────────────────────────────────────────────────────
262
- server.registerTool('get_guide', {
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 { content: [{ type: 'text', text: content }] };
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 = err instanceof Error ? err.message : String(err);
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 { content: [{ type: 'text', text: `Erro: ${msg}` }] };
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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"}