@justmpm/task-request 1.0.0 → 1.0.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @justmpm/task-request
2
2
 
3
- MCP App com UI interativa para criar tasks estruturadas. O host chama a tool, o formulario abre dentro do chat, o usuario preenche, e a resposta volta como markdown estruturado para a conversa.
3
+ MCP App com UI interativa para criar tasks estruturadas. Agora o pacote suporta dois modos: `stdio` para Codex local e `http` para hosts MCP por URL.
4
4
 
5
5
  ## O que é
6
6
 
@@ -20,6 +20,28 @@ Este é um **MCP App** - uma extensão do Model Context Protocol que inclui uma
20
20
  - **Validação em tempo real**
21
21
  - **Geração automática de prompt estruturado**
22
22
 
23
+ ## Modos de uso
24
+
25
+ ### 1. `stdio` para Codex
26
+
27
+ Use quando quiser que o Codex suba o MCP automaticamente como processo local.
28
+
29
+ Comando instalado:
30
+
31
+ ```bash
32
+ task-request-mcp
33
+ ```
34
+
35
+ ### 2. `http` para hosts por URL
36
+
37
+ Use quando quiser conectar via endpoint HTTP em hosts como `basic-host` ou connectors remotos.
38
+
39
+ Comando instalado:
40
+
41
+ ```bash
42
+ task-request-mcp-http
43
+ ```
44
+
23
45
  ## Como funciona
24
46
 
25
47
  Esse pacote tem 3 partes:
@@ -45,7 +67,7 @@ npm install
45
67
  # Gere UI + servidor
46
68
  npm run build
47
69
 
48
- # Rode o endpoint MCP
70
+ # Rode o endpoint HTTP do MCP
49
71
  npm run start
50
72
  ```
51
73
 
@@ -68,8 +90,11 @@ npm publish --access public
68
90
  # Instalar globalmente no seu PC
69
91
  npm install -g @justmpm/task-request
70
92
 
71
- # Rodar o MCP publicado
93
+ # Rodar no modo stdio (ideal para Codex)
72
94
  task-request-mcp
95
+
96
+ # Rodar no modo HTTP
97
+ task-request-mcp-http
73
98
  ```
74
99
 
75
100
  ## Testar no host
@@ -97,19 +122,34 @@ npx cloudflared tunnel --url http://localhost:3001
97
122
 
98
123
  ## Uso
99
124
 
100
- 1. Cadastre o endpoint MCP no host:
125
+ 1. Rode o modo HTTP:
126
+ `task-request-mcp-http`
127
+
128
+ 2. Cadastre o endpoint MCP no host:
101
129
  `http://localhost:3001/mcp`
102
130
 
103
- 2. No host, peça algo como:
131
+ 3. No host, peça algo como:
104
132
  ```
105
133
  "Crie uma task para adicionar login com Google"
106
134
  ```
107
135
 
108
- 3. O host chama a tool `create_task` e o formulario aparece dentro do chat.
136
+ 4. O host chama a tool `create_task` e o formulario aparece dentro do chat.
109
137
 
110
- 4. Preencha e clique em `Enviar task`.
138
+ 5. Preencha e clique em `Enviar task`.
139
+
140
+ 6. A tool `submit_task` devolve a resposta estruturada automaticamente para a conversa.
141
+
142
+ ## Uso no Codex
143
+
144
+ Depois de instalar globalmente, configure em `C:\Users\tetu_\.codex\config.toml`:
145
+
146
+ ```toml
147
+ [mcp_servers.task_request]
148
+ command = "task-request-mcp"
149
+ enabled = true
150
+ ```
111
151
 
112
- 5. A tool `submit_task` devolve a resposta estruturada automaticamente para a conversa.
152
+ Depois reabra o Codex. Nesse modo, ele sobe o MCP localmente sem precisar manter `localhost:3001` aberto manualmente.
113
153
 
114
154
  ## Configuração opcional
115
155
 
@@ -176,12 +216,10 @@ Já existe o hook useAuth() com signOut()
176
216
 
177
217
  Se o seu objetivo e usar isso como builder de pedido:
178
218
 
179
- 1. Publique no npm
180
- 2. Instale globalmente com `npm install -g @justmpm/task-request`
181
- 3. Rode `task-request-mcp`
182
- 4. Cadastre `http://localhost:3001/mcp` no host
183
- 5. Quando eu precisar estruturar uma task, eu chamo `create_task`
184
- 6. Voce preenche o formulario e eu recebo o resultado ja pronto na conversa
219
+ 1. No Codex, use `task-request-mcp` via `command`
220
+ 2. Em hosts por URL, use `task-request-mcp-http`
221
+ 3. Quando eu precisar estruturar uma task, eu chamo `create_task`
222
+ 4. Voce preenche o formulario e eu recebo o resultado ja pronto na conversa
185
223
 
186
224
  ## Estrutura
187
225
 
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare const PACKAGE_VERSION: string;
3
+ export declare function createTaskRequestServer(): McpServer;
4
+ //# sourceMappingURL=mcp-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-app.d.ts","sourceRoot":"","sources":["../src/mcp-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6BpE,eAAO,MAAM,eAAe,QAAsB,CAAC;AAoFnD,wBAAgB,uBAAuB,IAAI,SAAS,CA4EnD"}
@@ -0,0 +1,149 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerAppResource, registerAppTool, RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server";
3
+ import fs from "node:fs/promises";
4
+ import fsSync from "node:fs";
5
+ import path from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { z } from "zod";
8
+ import { TaskInputSchema, taskInputShape } from "./shared/task-contract.js";
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const resourceUri = "ui://create-task/mcp-app.html";
12
+ function getPackageVersion() {
13
+ try {
14
+ const packagePath = path.join(__dirname, "..", "package.json");
15
+ const packageJson = JSON.parse(fsSync.readFileSync(packagePath, "utf-8"));
16
+ return packageJson.version ?? "1.0.0";
17
+ }
18
+ catch {
19
+ return "1.0.0";
20
+ }
21
+ }
22
+ export const PACKAGE_VERSION = getPackageVersion();
23
+ function buildTaskPrompt(args) {
24
+ const typeLabels = {
25
+ implement: "Implementar",
26
+ fix: "Corrigir",
27
+ analyze: "Analisar",
28
+ refactor: "Refatorar",
29
+ test: "Testar",
30
+ document: "Documentar",
31
+ };
32
+ const priorityEmoji = {
33
+ urgent: "🔴",
34
+ normal: "🟡",
35
+ low: "🟢",
36
+ };
37
+ let prompt = `## 📋 TASK: ${args.title}\n\n`;
38
+ prompt += `**Tipo:** ${typeLabels[args.type]}\n`;
39
+ prompt += `**Prioridade:** ${priorityEmoji[args.priority]} ${args.priority.charAt(0).toUpperCase() + args.priority.slice(1)}\n\n`;
40
+ prompt += `---\n\n`;
41
+ prompt += `### 🎯 O que preciso\n\n${args.description}\n\n`;
42
+ if (args.context) {
43
+ prompt += `### 📎 Contexto Adicional\n\n${args.context}\n\n`;
44
+ }
45
+ if (args.files && args.files.length > 0) {
46
+ prompt += "### 📁 Arquivos Relacionados\n\n";
47
+ args.files.forEach((file) => {
48
+ prompt += `- \`${file}\`\n`;
49
+ });
50
+ prompt += "\n";
51
+ }
52
+ if (args.restrictions && args.restrictions.length > 0) {
53
+ prompt += "### ⛔ Restrições\n\n";
54
+ prompt += "**O que NÃO fazer:**\n\n";
55
+ args.restrictions.forEach((restriction) => {
56
+ prompt += `- ${restriction}\n`;
57
+ });
58
+ prompt += "\n";
59
+ }
60
+ if (args.acceptanceCriteria && args.acceptanceCriteria.length > 0) {
61
+ prompt += "### ✅ Critérios de Aceite\n\n";
62
+ args.acceptanceCriteria.forEach((criteria, index) => {
63
+ prompt += `${index + 1}. ${criteria}\n`;
64
+ });
65
+ prompt += "\n";
66
+ }
67
+ prompt += "---\n\n";
68
+ prompt += "> Task criada via Task Request Builder MCP App";
69
+ return prompt;
70
+ }
71
+ async function loadUiHtml() {
72
+ const possiblePaths = [
73
+ path.join(__dirname, "..", "dist", "mcp-app.html"),
74
+ path.join(process.cwd(), "dist", "mcp-app.html"),
75
+ ];
76
+ for (const filePath of possiblePaths) {
77
+ try {
78
+ return await fs.readFile(filePath, "utf-8");
79
+ }
80
+ catch {
81
+ continue;
82
+ }
83
+ }
84
+ return `
85
+ <!DOCTYPE html>
86
+ <html>
87
+ <head><title>Erro</title></head>
88
+ <body style="font-family: sans-serif; padding: 20px;">
89
+ <h1>⚠️ UI não encontrada</h1>
90
+ <p>Execute <code>npm run build:ui</code> para gerar a interface.</p>
91
+ </body>
92
+ </html>
93
+ `;
94
+ }
95
+ export function createTaskRequestServer() {
96
+ const server = new McpServer({
97
+ name: "@justmpm/task-request",
98
+ version: PACKAGE_VERSION,
99
+ });
100
+ registerAppTool(server, "create_task", {
101
+ title: "Create Task",
102
+ description: "Abre um formulário interativo para criar uma task estruturada. " +
103
+ "Útil quando você quer organizar uma solicitação de forma completa com tipo, prioridade, " +
104
+ "contexto e restrições. Gera um prompt estruturado pronto para usar.",
105
+ inputSchema: z.object({}),
106
+ _meta: {
107
+ ui: {
108
+ resourceUri,
109
+ },
110
+ },
111
+ }, async () => ({
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: "📋 Formulário de Task aberto. Preencha os campos e clique em 'Enviar Task'.",
116
+ },
117
+ ],
118
+ }));
119
+ server.tool("submit_task", "Recebe os dados do formulário de task e retorna um prompt estruturado formatado", taskInputShape, async (args) => {
120
+ const normalizedTask = TaskInputSchema.parse(args);
121
+ const prompt = buildTaskPrompt(normalizedTask);
122
+ return {
123
+ structuredContent: {
124
+ task: normalizedTask,
125
+ prompt,
126
+ },
127
+ content: [
128
+ {
129
+ type: "text",
130
+ text: prompt,
131
+ },
132
+ ],
133
+ };
134
+ });
135
+ registerAppResource(server, resourceUri, resourceUri, { mimeType: RESOURCE_MIME_TYPE }, async () => {
136
+ const html = await loadUiHtml();
137
+ return {
138
+ contents: [
139
+ {
140
+ uri: resourceUri,
141
+ mimeType: RESOURCE_MIME_TYPE,
142
+ text: html,
143
+ },
144
+ ],
145
+ };
146
+ });
147
+ return server;
148
+ }
149
+ //# sourceMappingURL=mcp-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-app.js","sourceRoot":"","sources":["../src/mcp-app.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,14 +1,3 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * @justmpm/task-request - MCP App Server
4
- *
5
- * Servidor MCP que expõe tools com UI interativa para criar tasks estruturadas.
6
- * Usa HTTP transport (não stdio) para suportar MCP Apps.
7
- *
8
- * Tools disponíveis:
9
- * - create_task: Abre formulário interativo para criar task estruturada
10
- *
11
- * @see https://modelcontextprotocol.io/
12
- */
13
2
  export {};
14
3
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
package/dist/server.js CHANGED
@@ -1,189 +1,9 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * @justmpm/task-request - MCP App Server
4
- *
5
- * Servidor MCP que expõe tools com UI interativa para criar tasks estruturadas.
6
- * Usa HTTP transport (não stdio) para suportar MCP Apps.
7
- *
8
- * Tools disponíveis:
9
- * - create_task: Abre formulário interativo para criar task estruturada
10
- *
11
- * @see https://modelcontextprotocol.io/
12
- */
13
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
15
- import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server";
16
2
  import cors from "cors";
17
3
  import express from "express";
18
- import fs from "node:fs/promises";
19
- import fsSync from "node:fs";
20
- import path from "node:path";
21
- import { fileURLToPath } from "node:url";
22
- import { z } from "zod";
23
- import { MIN_TASK_DESCRIPTION_LENGTH, TaskInputSchema, taskInputShape } from "./shared/task-contract.js";
24
- // =============================================================================
25
- // VERSÃO E PATHS
26
- // =============================================================================
27
- const __filename = fileURLToPath(import.meta.url);
28
- const __dirname = path.dirname(__filename);
29
- function getPackageVersion() {
30
- try {
31
- const packagePath = path.join(__dirname, "..", "package.json");
32
- const packageJson = JSON.parse(fsSync.readFileSync(packagePath, "utf-8"));
33
- return packageJson.version || "1.0.0";
34
- }
35
- catch {
36
- return "1.0.0";
37
- }
38
- }
39
- const PACKAGE_VERSION = getPackageVersion();
40
- // =============================================================================
41
- // SERVIDOR MCP
42
- // =============================================================================
43
- const server = new McpServer({
44
- name: "@justmpm/task-request",
45
- version: PACKAGE_VERSION,
46
- });
47
- // URI do recurso da UI
48
- const resourceUri = "ui://create-task/mcp-app.html";
49
- // =============================================================================
50
- // TOOL: create_task (com UI)
51
- // =============================================================================
52
- registerAppTool(server, "create_task", {
53
- title: "Create Task",
54
- description: "Abre um formulário interativo para criar uma task estruturada. " +
55
- "Útil quando você quer organizar uma solicitação de forma completa com tipo, prioridade, " +
56
- "contexto e restrições. Gera um prompt estruturado pronto para usar.",
57
- inputSchema: z.object({}),
58
- _meta: {
59
- ui: {
60
- resourceUri,
61
- },
62
- },
63
- }, async () => {
64
- // Tool inicial - apenas indica que o formulário foi aberto
65
- return {
66
- content: [
67
- {
68
- type: "text",
69
- text: "📋 Formulário de Task aberto. Preencha os campos e clique em 'Enviar Task'.",
70
- },
71
- ],
72
- };
73
- });
74
- // =============================================================================
75
- // TOOL: submit_task (chamada pelo app UI)
76
- // =============================================================================
77
- server.tool("submit_task", "Recebe os dados do formulário de task e retorna um prompt estruturado formatado", taskInputShape, async (args) => {
78
- const normalizedTask = TaskInputSchema.parse(args);
79
- // Mapear tipo para português
80
- const typeLabels = {
81
- implement: "Implementar",
82
- fix: "Corrigir",
83
- analyze: "Analisar",
84
- refactor: "Refatorar",
85
- test: "Testar",
86
- document: "Documentar",
87
- };
88
- // Mapear prioridade para emoji
89
- const priorityEmoji = {
90
- urgent: "🔴",
91
- normal: "🟡",
92
- low: "🟢",
93
- };
94
- // Gerar prompt estruturado
95
- let prompt = `## 📋 TASK: ${normalizedTask.title}\n\n`;
96
- prompt += `**Tipo:** ${typeLabels[normalizedTask.type]}\n`;
97
- prompt += `**Prioridade:** ${priorityEmoji[normalizedTask.priority]} ${normalizedTask.priority.charAt(0).toUpperCase() + normalizedTask.priority.slice(1)}\n\n`;
98
- prompt += `---\n\n`;
99
- prompt += `### 🎯 O que preciso\n\n${normalizedTask.description}\n\n`;
100
- if (normalizedTask.context) {
101
- prompt += `### 📎 Contexto Adicional\n\n${normalizedTask.context}\n\n`;
102
- }
103
- if (normalizedTask.files && normalizedTask.files.length > 0) {
104
- prompt += `### 📁 Arquivos Relacionados\n\n`;
105
- normalizedTask.files.forEach((file) => {
106
- prompt += `- \`${file}\`\n`;
107
- });
108
- prompt += `\n`;
109
- }
110
- if (normalizedTask.restrictions && normalizedTask.restrictions.length > 0) {
111
- prompt += `### ⛔ Restrições\n\n`;
112
- prompt += `**O que NÃO fazer:**\n\n`;
113
- normalizedTask.restrictions.forEach((restriction) => {
114
- prompt += `- ${restriction}\n`;
115
- });
116
- prompt += `\n`;
117
- }
118
- if (normalizedTask.acceptanceCriteria && normalizedTask.acceptanceCriteria.length > 0) {
119
- prompt += `### ✅ Critérios de Aceite\n\n`;
120
- normalizedTask.acceptanceCriteria.forEach((criteria, index) => {
121
- prompt += `${index + 1}. ${criteria}\n`;
122
- });
123
- prompt += `\n`;
124
- }
125
- prompt += `---\n\n`;
126
- prompt += `> Task criada via Task Request Builder MCP App`;
127
- return {
128
- structuredContent: {
129
- task: normalizedTask,
130
- prompt,
131
- },
132
- content: [
133
- {
134
- type: "text",
135
- text: prompt,
136
- },
137
- ],
138
- };
139
- });
140
- // =============================================================================
141
- // RECURSO: UI HTML
142
- // =============================================================================
143
- registerAppResource(server, resourceUri, resourceUri, { mimeType: RESOURCE_MIME_TYPE }, async () => {
144
- // Em desenvolvimento, o arquivo pode estar em lugares diferentes
145
- const possiblePaths = [
146
- path.join(__dirname, "..", "dist", "mcp-app.html"),
147
- path.join(process.cwd(), "dist", "mcp-app.html"),
148
- ];
149
- let html = null;
150
- for (const filePath of possiblePaths) {
151
- try {
152
- html = await fs.readFile(filePath, "utf-8");
153
- console.error(`✅ UI carregada de: ${filePath}`);
154
- break;
155
- }
156
- catch {
157
- continue;
158
- }
159
- }
160
- if (!html) {
161
- console.error("❌ Erro: mcp-app.html não encontrado");
162
- console.error(" Execute 'npm run build:ui' primeiro");
163
- html = `
164
- <!DOCTYPE html>
165
- <html>
166
- <head><title>Erro</title></head>
167
- <body style="font-family: sans-serif; padding: 20px;">
168
- <h1>⚠️ UI não encontrada</h1>
169
- <p>Execute <code>npm run build:ui</code> para gerar a interface.</p>
170
- </body>
171
- </html>
172
- `;
173
- }
174
- return {
175
- contents: [
176
- {
177
- uri: resourceUri,
178
- mimeType: RESOURCE_MIME_TYPE,
179
- text: html,
180
- },
181
- ],
182
- };
183
- });
184
- // =============================================================================
185
- // SERVIDOR EXPRESS
186
- // =============================================================================
4
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
+ import { MIN_TASK_DESCRIPTION_LENGTH } from "./shared/task-contract.js";
6
+ import { createTaskRequestServer, PACKAGE_VERSION } from "./mcp-app.js";
187
7
  const app = express();
188
8
  const PORT = process.env.PORT || 3001;
189
9
  const defaultAllowedOrigins = [
@@ -224,17 +44,18 @@ app.use(cors({
224
44
  },
225
45
  }));
226
46
  app.use(express.json({ limit: "1mb" }));
227
- // Endpoint MCP
228
47
  app.post("/mcp", async (req, res) => {
48
+ const server = createTaskRequestServer();
229
49
  const transport = new StreamableHTTPServerTransport({
230
50
  sessionIdGenerator: undefined,
231
51
  enableJsonResponse: true,
232
52
  });
233
- res.on("close", () => transport.close());
53
+ res.on("close", () => {
54
+ void transport.close();
55
+ });
234
56
  await server.connect(transport);
235
57
  await transport.handleRequest(req, res, req.body);
236
58
  });
237
- // Health check
238
59
  app.get("/health", (_req, res) => {
239
60
  res.json({
240
61
  status: "ok",
@@ -242,15 +63,11 @@ app.get("/health", (_req, res) => {
242
63
  version: PACKAGE_VERSION,
243
64
  });
244
65
  });
245
- // Iniciar servidor
246
66
  app.listen(PORT, () => {
247
67
  console.error(`\n📋 Task Request MCP App Server v${PACKAGE_VERSION}`);
248
68
  console.error(` Endpoint: http://localhost:${PORT}/mcp`);
249
69
  console.error(` Health: http://localhost:${PORT}/health\n`);
250
70
  console.error(` Allowed Origins: ${Array.from(allowedOrigins).join(", ") || "(sem CORS)"}`);
251
71
  console.error(` Min description: ${MIN_TASK_DESCRIPTION_LENGTH} caracteres\n`);
252
- console.error(`Para testar com Claude:`);
253
- console.error(` 1. Execute: npx cloudflared tunnel --url http://localhost:${PORT}`);
254
- console.error(` 2. Adicione a URL gerada como Custom Connector no Claude\n`);
255
72
  });
256
73
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":""}
package/dist/stdio.js ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { createTaskRequestServer, PACKAGE_VERSION } from "./mcp-app.js";
4
+ async function main() {
5
+ const server = createTaskRequestServer();
6
+ const transport = new StdioServerTransport();
7
+ await server.connect(transport);
8
+ }
9
+ void main().catch((error) => {
10
+ const message = error instanceof Error ? error.stack ?? error.message : String(error);
11
+ console.error(`Task Request MCP stdio failed to start (v${PACKAGE_VERSION}): ${message}`);
12
+ process.exit(1);
13
+ });
14
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAExE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACnC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtF,OAAO,CAAC,KAAK,CAAC,4CAA4C,eAAe,MAAM,OAAO,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@justmpm/task-request",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "MCP App - Task Request Builder com UI interativa para criar tasks estruturadas",
5
5
  "type": "module",
6
- "main": "dist/server.js",
6
+ "main": "dist/stdio.js",
7
7
  "bin": {
8
- "task-request-mcp": "dist/server.js"
8
+ "task-request-mcp": "dist/stdio.js",
9
+ "task-request-mcp-http": "dist/server.js"
9
10
  },
10
11
  "files": [
11
12
  "dist",
@@ -20,6 +21,7 @@
20
21
  "build:ui": "vite build",
21
22
  "build:server": "tsc",
22
23
  "start": "node dist/server.js",
24
+ "start:stdio": "node dist/stdio.js",
23
25
  "serve": "npm run build && npm run start",
24
26
  "prepublishOnly": "npm run build"
25
27
  },