usepaso 0.3.1 → 0.4.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.
Files changed (70) hide show
  1. package/README.md +29 -9
  2. package/dist/cli.js +42 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/connect.d.ts +4 -0
  5. package/dist/commands/connect.d.ts.map +1 -0
  6. package/dist/commands/connect.js +199 -0
  7. package/dist/commands/connect.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +3 -0
  9. package/dist/commands/doctor.d.ts.map +1 -0
  10. package/dist/commands/doctor.js +134 -0
  11. package/dist/commands/doctor.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +177 -11
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/inspect.d.ts.map +1 -1
  16. package/dist/commands/inspect.js +14 -7
  17. package/dist/commands/inspect.js.map +1 -1
  18. package/dist/commands/serve.d.ts.map +1 -1
  19. package/dist/commands/serve.js +25 -7
  20. package/dist/commands/serve.js.map +1 -1
  21. package/dist/commands/shared.d.ts +2 -1
  22. package/dist/commands/shared.d.ts.map +1 -1
  23. package/dist/commands/shared.js +20 -27
  24. package/dist/commands/shared.js.map +1 -1
  25. package/dist/commands/test.d.ts +0 -1
  26. package/dist/commands/test.d.ts.map +1 -1
  27. package/dist/commands/test.js +63 -39
  28. package/dist/commands/test.js.map +1 -1
  29. package/dist/commands/validate.d.ts.map +1 -1
  30. package/dist/commands/validate.js +44 -3
  31. package/dist/commands/validate.js.map +1 -1
  32. package/dist/executor.d.ts +15 -0
  33. package/dist/executor.d.ts.map +1 -1
  34. package/dist/executor.js +102 -5
  35. package/dist/executor.js.map +1 -1
  36. package/dist/generators/mcp.d.ts +11 -3
  37. package/dist/generators/mcp.d.ts.map +1 -1
  38. package/dist/generators/mcp.js +210 -30
  39. package/dist/generators/mcp.js.map +1 -1
  40. package/dist/index.d.ts +3 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/openapi.d.ts +1 -1
  45. package/dist/openapi.d.ts.map +1 -1
  46. package/dist/openapi.js +4 -4
  47. package/dist/openapi.js.map +1 -1
  48. package/dist/parser.d.ts.map +1 -1
  49. package/dist/parser.js +15 -0
  50. package/dist/parser.js.map +1 -1
  51. package/dist/utils/coerce.d.ts +2 -0
  52. package/dist/utils/coerce.d.ts.map +1 -0
  53. package/dist/utils/coerce.js +33 -0
  54. package/dist/utils/coerce.js.map +1 -0
  55. package/dist/utils/color.d.ts +19 -0
  56. package/dist/utils/color.d.ts.map +1 -0
  57. package/dist/utils/color.js +46 -0
  58. package/dist/utils/color.js.map +1 -0
  59. package/dist/utils/env.d.ts +17 -0
  60. package/dist/utils/env.d.ts.map +1 -0
  61. package/dist/utils/env.js +73 -0
  62. package/dist/utils/env.js.map +1 -0
  63. package/dist/utils/redact.d.ts +6 -0
  64. package/dist/utils/redact.d.ts.map +1 -0
  65. package/dist/utils/redact.js +37 -0
  66. package/dist/utils/redact.js.map +1 -0
  67. package/dist/validator.d.ts.map +1 -1
  68. package/dist/validator.js +82 -4
  69. package/dist/validator.js.map +1 -1
  70. package/package.json +2 -10
@@ -5,7 +5,106 @@ const path_1 = require("path");
5
5
  const fs_1 = require("fs");
6
6
  const openapi_1 = require("../openapi");
7
7
  const yaml_1 = require("yaml");
8
- const FALLBACK_TEMPLATE = `version: "1.0"\n\nservice:\n name: __SERVICE_NAME__\n description: TODO — describe what your service does\n base_url: https://api.example.com\n auth:\n type: bearer\n\ncapabilities:\n - name: example_action\n description: TODO — describe what this action does\n method: GET\n path: /example\n permission: read\n inputs:\n id:\n type: string\n required: true\n description: TODO — describe this parameter\n in: query\n output:\n result:\n type: string\n description: TODO — describe the output\n\npermissions:\n read:\n - example_action\n`;
8
+ const color_1 = require("../utils/color");
9
+ const env_1 = require("../utils/env");
10
+ const MAX_SPEC_SIZE = 50 * 1024 * 1024; // 50MB
11
+ const ENV_EXAMPLE = `# paso auth token. Never commit .env to version control.
12
+ USEPASO_AUTH_TOKEN=your-token-here
13
+ `;
14
+ function scaffoldEnv(outDir) {
15
+ const examplePath = (0, path_1.join)(outDir, '.env.example');
16
+ if (!(0, fs_1.existsSync)(examplePath)) {
17
+ (0, fs_1.writeFileSync)(examplePath, ENV_EXAMPLE, 'utf-8');
18
+ }
19
+ (0, env_1.ensureGitignore)(outDir);
20
+ }
21
+ const FALLBACK_TEMPLATE = `# yaml-language-server: $schema=https://raw.githubusercontent.com/5h1vmani/usepaso/main/spec/usepaso.schema.json\nversion: "1.0"\n\nservice:\n name: __SERVICE_NAME__\n description: TODO: describe what your service does\n base_url: https://api.example.com\n auth:\n type: bearer\n\ncapabilities:\n - name: example_action\n description: TODO: describe what this action does\n method: GET\n path: /example\n permission: read\n inputs:\n id:\n type: string\n required: true\n description: TODO: describe this parameter\n in: query\n output:\n result:\n type: string\n description: TODO: describe the output\n\npermissions:\n read:\n - example_action\n`;
22
+ const EXAMPLE_TEMPLATE = `# A working example using JSONPlaceholder (free, public, no auth).
23
+ # Run "usepaso validate" and "usepaso serve" right now. No edits needed.
24
+ # When you are ready, replace the values below with your own API.
25
+
26
+ version: "1.0"
27
+
28
+ service:
29
+ name: JSONPlaceholder
30
+ description: Free fake REST API for testing and prototyping
31
+ base_url: https://jsonplaceholder.typicode.com
32
+ auth:
33
+ type: none # Explicit. Change to "bearer" when you connect a real API.
34
+
35
+ capabilities:
36
+ # A read capability with a query parameter filter
37
+ - name: list_posts
38
+ description: List all posts, optionally filtered by author
39
+ method: GET
40
+ path: /posts
41
+ permission: read
42
+ inputs:
43
+ userId:
44
+ type: integer
45
+ description: Filter posts by this author ID
46
+ in: query
47
+
48
+ # A read capability with a path parameter
49
+ - name: get_post
50
+ description: Get a single post by ID
51
+ method: GET
52
+ path: /posts/{id}
53
+ permission: read
54
+ inputs:
55
+ id:
56
+ type: integer
57
+ required: true
58
+ description: The post ID
59
+ in: path
60
+
61
+ # A write capability with a request body
62
+ - name: create_post
63
+ description: Create a new post
64
+ method: POST
65
+ path: /posts
66
+ permission: write
67
+ inputs:
68
+ title:
69
+ type: string
70
+ required: true
71
+ description: Post title
72
+ in: body
73
+ body:
74
+ type: string
75
+ required: true
76
+ description: Post content
77
+ in: body
78
+ userId:
79
+ type: integer
80
+ required: true
81
+ description: Author ID
82
+ in: body
83
+
84
+ # A destructive action. consent_required means the agent must ask the user first.
85
+ - name: delete_post
86
+ description: Delete a post permanently
87
+ method: DELETE
88
+ path: /posts/{id}
89
+ permission: write
90
+ consent_required: true
91
+ inputs:
92
+ id:
93
+ type: integer
94
+ required: true
95
+ description: The post ID to delete
96
+ in: path
97
+
98
+ # Permission groups control which capabilities agents can access.
99
+ # "read" actions are safe. "write" actions modify data.
100
+ permissions:
101
+ read:
102
+ - list_posts
103
+ - get_post
104
+ write:
105
+ - create_post
106
+ - delete_post
107
+ `;
9
108
  function loadTemplate() {
10
109
  const candidates = [
11
110
  (0, path_1.join)(__dirname, '..', '..', '..', '..', 'examples', 'template', 'usepaso.yaml'),
@@ -23,13 +122,20 @@ function registerInit(program) {
23
122
  .command('init')
24
123
  .description('Create a usepaso.yaml template in the current directory')
25
124
  .option('-n, --name <name>', 'Service name')
125
+ .option('--blank', 'Generate a blank template (instead of the default working example)')
126
+ .option('--example', 'Generate a working example using JSONPlaceholder (same as default)')
26
127
  .option('--from-openapi <path>', 'Generate from an OpenAPI 3.x spec (JSON, YAML, or URL)')
128
+ .option('--max-capabilities <n>', 'Max capabilities to generate from OpenAPI (default: 20)', '20')
27
129
  .action(async (opts) => {
28
130
  const outPath = (0, path_1.resolve)('usepaso.yaml');
29
131
  if ((0, fs_1.existsSync)(outPath)) {
30
132
  console.error('usepaso.yaml already exists in this directory.');
31
133
  process.exit(1);
32
134
  }
135
+ if (opts.blank && opts.fromOpenapi) {
136
+ console.error('Cannot use --blank and --from-openapi together.');
137
+ process.exit(1);
138
+ }
33
139
  if (opts.fromOpenapi) {
34
140
  const source = opts.fromOpenapi;
35
141
  try {
@@ -40,7 +146,34 @@ function registerInit(program) {
40
146
  console.error(`Failed to fetch OpenAPI spec: ${res.status} ${res.statusText}`);
41
147
  process.exit(1);
42
148
  }
43
- specContent = await res.text();
149
+ // Fast reject if Content-Length exceeds limit
150
+ const contentLength = res.headers.get('content-length');
151
+ if (contentLength && parseInt(contentLength, 10) > MAX_SPEC_SIZE) {
152
+ const sizeMb = Math.round(parseInt(contentLength, 10) / 1024 / 1024);
153
+ console.error(`OpenAPI spec exceeds 50MB limit (${sizeMb}MB). Check the URL or use a local file.`);
154
+ process.exit(1);
155
+ }
156
+ // Stream with size guard (servers can omit or lie about Content-Length)
157
+ const reader = res.body?.getReader();
158
+ if (!reader) {
159
+ console.error('Failed to read response body.');
160
+ process.exit(1);
161
+ }
162
+ const chunks = [];
163
+ let totalBytes = 0;
164
+ while (true) {
165
+ const { done, value } = await reader.read();
166
+ if (done)
167
+ break;
168
+ totalBytes += value.byteLength;
169
+ if (totalBytes > MAX_SPEC_SIZE) {
170
+ reader.cancel();
171
+ console.error(`OpenAPI spec exceeds 50MB limit. Check the URL or use a local file.`);
172
+ process.exit(1);
173
+ }
174
+ chunks.push(value);
175
+ }
176
+ specContent = Buffer.concat(chunks).toString('utf-8');
44
177
  }
45
178
  else {
46
179
  const specPath = (0, path_1.resolve)(source);
@@ -57,16 +190,27 @@ function registerInit(program) {
57
190
  catch {
58
191
  spec = (0, yaml_1.parse)(specContent);
59
192
  }
60
- const result = (0, openapi_1.generateFromOpenApi)(spec);
193
+ const maxCaps = parseInt(opts.maxCapabilities, 10);
194
+ if (isNaN(maxCaps) || maxCaps < 1) {
195
+ console.error('--max-capabilities must be a positive integer.');
196
+ process.exit(1);
197
+ }
198
+ const result = (0, openapi_1.generateFromOpenApi)(spec, maxCaps);
61
199
  (0, fs_1.writeFileSync)(outPath, result.yaml, 'utf-8');
62
- console.log(`Generated usepaso.yaml from ${source}`);
63
- console.log(` Service: ${result.serviceName}`);
200
+ scaffoldEnv((0, path_1.dirname)(outPath));
201
+ console.log((0, color_1.green)(`Generated usepaso.yaml from ${source}`));
202
+ console.log(` Service: ${(0, color_1.cyan)(result.serviceName)}`);
64
203
  console.log(` Capabilities: ${result.generatedCount} (${result.readCount} read, ${result.writeCount} write, ${result.adminCount} admin)`);
65
204
  console.log(` Auth: ${result.authType}`);
66
205
  if (result.totalOperations > result.generatedCount) {
67
206
  console.log(` Note: ${result.totalOperations} operations found, capped at ${result.generatedCount}. Edit usepaso.yaml to add more.`);
68
207
  }
69
- console.log('Review the file. Adjust permissions. Then: usepaso validate');
208
+ console.log('');
209
+ console.log((0, color_1.dim)('Next steps:'));
210
+ console.log((0, color_1.dim)(" 1. Review the generated capabilities. Remove any you don't want exposed"));
211
+ console.log((0, color_1.dim)(' 2. usepaso validate Check for issues'));
212
+ console.log((0, color_1.dim)(' 3. usepaso test --dry-run Preview what agents will see'));
213
+ console.log((0, color_1.dim)(' 4. usepaso serve Start the MCP server'));
70
214
  }
71
215
  catch (err) {
72
216
  console.error(`Failed to convert OpenAPI spec: ${err instanceof Error ? err.message : err}`);
@@ -74,11 +218,33 @@ function registerInit(program) {
74
218
  }
75
219
  return;
76
220
  }
77
- const name = opts.name || 'MyService';
78
- const template = loadTemplate().replaceAll('__SERVICE_NAME__', name);
79
- (0, fs_1.writeFileSync)(outPath, template, 'utf-8');
80
- console.log(`Created usepaso.yaml for "${name}".`);
81
- console.log('Declare your capabilities, then run: usepaso validate');
221
+ if (opts.blank || opts.name) {
222
+ const name = opts.name || 'MyService';
223
+ const template = loadTemplate().replaceAll('__SERVICE_NAME__', name);
224
+ (0, fs_1.writeFileSync)(outPath, template, 'utf-8');
225
+ scaffoldEnv((0, path_1.dirname)(outPath));
226
+ console.log((0, color_1.green)(`Created usepaso.yaml for "${name}".`));
227
+ console.log('');
228
+ console.log((0, color_1.dim)('Next steps:'));
229
+ console.log((0, color_1.dim)(' 1. Declare your capabilities in usepaso.yaml'));
230
+ console.log((0, color_1.dim)(' 2. Copy .env.example to .env and add your API token'));
231
+ console.log((0, color_1.dim)(' 3. usepaso validate Check for issues'));
232
+ console.log((0, color_1.dim)(' 4. usepaso test --dry-run Preview what agents will see'));
233
+ console.log((0, color_1.dim)(' 5. usepaso serve Start the MCP server'));
234
+ return;
235
+ }
236
+ // Default: working example (JSONPlaceholder)
237
+ (0, fs_1.writeFileSync)(outPath, EXAMPLE_TEMPLATE, 'utf-8');
238
+ console.log((0, color_1.green)('Created usepaso.yaml with a working JSONPlaceholder example.'));
239
+ console.log((0, color_1.dim)('No auth needed. No edits needed. Try it now:'));
240
+ console.log('');
241
+ console.log((0, color_1.dim)(' usepaso validate'));
242
+ console.log((0, color_1.dim)(' usepaso test list_posts --dry-run'));
243
+ console.log((0, color_1.dim)(' usepaso test get_post --param id=1 --dry-run'));
244
+ console.log((0, color_1.dim)(' usepaso serve'));
245
+ console.log((0, color_1.dim)(' usepaso connect cursor Wire up your IDE'));
246
+ console.log('');
247
+ console.log((0, color_1.dim)('When you are ready, replace the JSONPlaceholder values with your own API.'));
82
248
  });
83
249
  }
84
250
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8FtD"}
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqGtD"}
@@ -6,6 +6,7 @@ const fs_1 = require("fs");
6
6
  const parser_1 = require("../parser");
7
7
  const validator_1 = require("../validator");
8
8
  const shared_1 = require("./shared");
9
+ const color_1 = require("../utils/color");
9
10
  function registerInspect(program) {
10
11
  program
11
12
  .command('inspect')
@@ -62,23 +63,29 @@ function registerInspect(program) {
62
63
  const decl = (0, shared_1.loadAndValidate)(filePath);
63
64
  const forbidden = new Set(decl.permissions?.forbidden || []);
64
65
  const tools = decl.capabilities.filter((c) => !forbidden.has(c.name));
65
- console.log(`Service: ${decl.service.name}`);
66
+ console.log(`Service: ${(0, color_1.cyan)(decl.service.name)}`);
66
67
  console.log(`Tools: ${tools.length}`);
67
68
  console.log(`Auth: ${decl.service.auth?.type || 'none'}`);
68
69
  console.log('');
69
- for (const tool of tools) {
70
+ for (let i = 0; i < tools.length; i++) {
71
+ const tool = tools[i];
72
+ const isLast = i === tools.length - 1;
73
+ const connector = i === 0 ? '┌' : isLast ? '└' : '├';
74
+ const cont = isLast ? ' ' : '│';
70
75
  const badge = tool.consent_required ? ' [consent required]' : '';
71
- console.log(` ${tool.name} (${tool.permission})${badge}`);
72
- console.log(` ${tool.method} ${tool.path}`);
73
- console.log(` ${tool.description}`);
76
+ console.log(` ${(0, color_1.dim)(connector)} ${(0, color_1.cyan)(tool.name)} ${(0, color_1.dim)(`(${tool.permission})`)}${badge}`);
77
+ console.log(` ${(0, color_1.dim)(cont)} ${(0, color_1.dim)(`${tool.method} ${tool.path}`)}`);
78
+ console.log(` ${(0, color_1.dim)(cont)} ${tool.description}`);
74
79
  if (tool.inputs) {
75
80
  const params = Object.entries(tool.inputs)
76
81
  .map(([k, v]) => `${k}${v.required ? '*' : ''}: ${v.type}`)
77
82
  .join(', ');
78
- console.log(` params: ${params}`);
83
+ console.log(` ${(0, color_1.dim)(cont)} params: ${params}`);
79
84
  }
80
- console.log('');
85
+ if (!isLast)
86
+ console.log(` ${(0, color_1.dim)('│')}`);
81
87
  }
88
+ console.log('');
82
89
  if (decl.permissions?.forbidden?.length) {
83
90
  console.log(`Forbidden: ${decl.permissions.forbidden.join(', ')}`);
84
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2EpD"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiGpD"}
@@ -5,34 +5,51 @@ const path_1 = require("path");
5
5
  const fs_1 = require("fs");
6
6
  const shared_1 = require("./shared");
7
7
  const mcp_1 = require("../generators/mcp");
8
+ const color_1 = require("../utils/color");
9
+ const redact_1 = require("../utils/redact");
10
+ const env_1 = require("../utils/env");
8
11
  function registerServe(program) {
9
12
  program
10
13
  .command('serve')
11
14
  .description('Start an MCP server from a usepaso.yaml declaration')
12
15
  .option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
16
+ .option('--env <path>', 'Path to .env file (default: .env next to usepaso.yaml)')
13
17
  .option('-v, --verbose', 'Log all requests to stderr')
14
18
  .option('-w, --watch', 'Notify when usepaso.yaml changes (requires manual restart)')
19
+ .option('--strict', 'Enforce consent gates server-side (for headless/untrusted agents)')
15
20
  .action(async (opts) => {
16
21
  const filePath = (0, path_1.resolve)(opts.file);
17
22
  try {
18
23
  const decl = (0, shared_1.loadAndValidate)(filePath);
24
+ // Load .env file if present (does not override existing env vars)
25
+ const loaded = (0, env_1.loadEnvFile)(filePath, opts.env);
26
+ if (loaded) {
27
+ console.error((0, color_1.dim)(`Loaded environment from ${opts.env || '.env'}`));
28
+ }
19
29
  // Auth notices (logged once at startup, not per-request)
20
30
  const authToken = process.env.USEPASO_AUTH_TOKEN;
21
31
  if (authToken !== undefined && authToken === '') {
22
- console.error(`Warning: USEPASO_AUTH_TOKEN is set but empty. API requests will likely fail.`);
32
+ console.error((0, color_1.yellow)(`Warning: USEPASO_AUTH_TOKEN is set but empty. API requests will likely fail.`));
23
33
  }
24
34
  if (decl.service.auth) {
25
35
  if (decl.service.auth.type === 'none' && authToken) {
26
- console.error(`Note: auth.type is "none" ignoring USEPASO_AUTH_TOKEN`);
36
+ console.error((0, color_1.yellow)(`Note: auth.type is "none", ignoring USEPASO_AUTH_TOKEN`));
27
37
  }
28
38
  else if (decl.service.auth.type !== 'none' && !authToken) {
29
- console.error(`Warning: auth type "${decl.service.auth.type}" is configured but USEPASO_AUTH_TOKEN is not set. API requests will likely fail with 401.`);
39
+ console.error((0, color_1.yellow)(`Warning: auth type "${decl.service.auth.type}" is configured but USEPASO_AUTH_TOKEN is not set. API requests will likely fail with 401.`));
30
40
  }
31
41
  }
32
- console.error(`usepaso serving "${decl.service.name}" (${decl.capabilities.length} capabilities). Agents welcome.`);
42
+ // Security: warn if base_url uses plain HTTP
43
+ if (decl.service.base_url.startsWith('http://')) {
44
+ console.error((0, color_1.yellow)(`Warning: base_url uses http://. Auth tokens will be sent in plain text.`));
45
+ }
46
+ if (opts.strict) {
47
+ console.error((0, color_1.yellow)('Strict mode: consent-gated tools require two-phase confirmation.'));
48
+ }
49
+ console.error(`${(0, color_1.green)('usepaso serving')} "${(0, color_1.cyan)(decl.service.name)}" (${decl.capabilities.length} capabilities). Agents welcome.`);
33
50
  console.error('Transport: stdio. Waiting for an MCP client...');
34
51
  // Show MCP config snippet
35
- console.error((0, shared_1.mcpConfigSnippet)(filePath, decl.service.name));
52
+ console.error((0, shared_1.mcpConfigSnippet)(decl.service.name));
36
53
  console.error('');
37
54
  // Verbose logging callback
38
55
  const onLog = opts.verbose
@@ -42,7 +59,8 @@ function registerServe(program) {
42
59
  console.error(`[${now}] ${capName} → ERROR: ${result.error}`);
43
60
  }
44
61
  else {
45
- console.error(`[${now}] ${capName} ${result.request.method} ${result.request.url} ← ${result.status} (${result.durationMs}ms)`);
62
+ const safeUrl = (0, redact_1.redactUrl)(result.request.url);
63
+ console.error(`[${now}] ${capName} → ${result.request.method} ${safeUrl} ← ${result.status} (${result.durationMs}ms)`);
46
64
  }
47
65
  }
48
66
  : undefined;
@@ -53,7 +71,7 @@ function registerServe(program) {
53
71
  console.error(`\nFile changed. Restart the server to pick up changes.`);
54
72
  });
55
73
  }
56
- await (0, mcp_1.serveMcp)(decl, onLog);
74
+ await (0, mcp_1.serveMcp)(decl, { onLog, strict: opts.strict });
57
75
  }
58
76
  catch (err) {
59
77
  console.error(`Failed to start: ${err instanceof Error ? err.message : err}`);
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":";;AAMA,sCA2EC;AAhFD,+BAA+B;AAC/B,2BAA+B;AAC/B,qCAA6D;AAC7D,2CAA6C;AAE7C,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC;SACrD,MAAM,CAAC,aAAa,EAAE,4DAA4D,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,wBAAe,EAAC,QAAQ,CAAC,CAAC;YAEvC,yDAAyD;YACzD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACjD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CACX,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,EAAE,CAAC;oBACnD,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBAC3E,CAAC;qBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3D,OAAO,CAAC,KAAK,CACX,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,4FAA4F,CAC1I,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,CAAC,KAAK,CACX,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,iCAAiC,CACrG,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAEhE,0BAA0B;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,yBAAgB,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAElB,2BAA2B;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;gBACxB,CAAC,CAAC,CACE,OAAe,EACf,MAKC,EACD,EAAE;oBACF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACnD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,OAAO,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CACX,IAAI,GAAG,KAAK,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,KAAK,CACnH,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,aAAa;YACb,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,YAAY,QAAQ,iBAAiB,CAAC,CAAC;gBACrD,IAAA,cAAS,EAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;oBAC3C,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBAC1E,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAA,cAAQ,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { PasoDeclaration } from '../types';
2
2
  export declare function loadAndValidate(filePath: string): PasoDeclaration;
3
- export declare function mcpConfigSnippet(filePath: string, serviceName: string): string;
3
+ export declare function slugify(name: string): string;
4
+ export declare function mcpConfigSnippet(serviceName: string): string;
4
5
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuBjE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyB9E"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuBjE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW5D"}
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadAndValidate = loadAndValidate;
4
+ exports.slugify = slugify;
4
5
  exports.mcpConfigSnippet = mcpConfigSnippet;
5
- const path_1 = require("path");
6
6
  const fs_1 = require("fs");
7
7
  const parser_1 = require("../parser");
8
8
  const validator_1 = require("../validator");
9
+ const color_1 = require("../utils/color");
9
10
  function loadAndValidate(filePath) {
10
11
  if (!(0, fs_1.existsSync)(filePath)) {
11
- console.error(`File not found: ${filePath}`);
12
+ console.error((0, color_1.red)(`File not found: ${filePath}`) + (0, color_1.dim)(` Run usepaso init to create one.`));
12
13
  process.exit(1);
13
14
  }
14
15
  const decl = (0, parser_1.parseFile)(filePath);
@@ -16,41 +17,33 @@ function loadAndValidate(filePath) {
16
17
  const errors = results.filter((e) => e.level !== 'warning');
17
18
  const warnings = results.filter((e) => e.level === 'warning');
18
19
  if (errors.length > 0) {
19
- console.error(`Validation failed with ${errors.length} error(s):`);
20
+ console.error((0, color_1.red)(`Validation failed with ${errors.length} error(s):`));
20
21
  for (const err of errors) {
21
- console.error(` ${err.path}: ${err.message}`);
22
+ console.error(` ${(0, color_1.red)(err.path)}: ${err.message}`);
22
23
  }
23
24
  process.exit(1);
24
25
  }
25
26
  for (const w of warnings) {
26
- console.error(` warning: ${w.path}: ${w.message}`);
27
+ console.error(` ${(0, color_1.yellow)('warning')}: ${w.path}: ${w.message}`);
27
28
  }
28
29
  return decl;
29
30
  }
30
- function mcpConfigSnippet(filePath, serviceName) {
31
- const absPath = (0, path_1.resolve)(filePath);
32
- const slug = serviceName.toLowerCase().replace(/[^a-z0-9]+/g, '-');
31
+ function slugify(name) {
32
+ return (name
33
+ .toLowerCase()
34
+ .replace(/[^a-z0-9]+/g, '-')
35
+ .replace(/^-|-$/g, '') || 'usepaso-service');
36
+ }
37
+ function mcpConfigSnippet(serviceName) {
38
+ const slug = slugify(serviceName);
33
39
  return `
34
- Add this to your MCP client config:
40
+ Connect to an MCP client:
35
41
 
36
- Claude Desktop (claude_desktop_config.json):
37
- {
38
- "mcpServers": {
39
- "${slug}": {
40
- "command": "npx",
41
- "args": ["usepaso", "serve", "-f", "${absPath}"],
42
- "env": { "USEPASO_AUTH_TOKEN": "your-token" }
43
- }
44
- }
45
- }
42
+ usepaso connect claude-desktop
43
+ usepaso connect cursor
44
+ usepaso connect vscode
45
+ usepaso connect windsurf
46
46
 
47
- Cursor (.cursor/mcp.json):
48
- {
49
- "${slug}": {
50
- "command": "npx",
51
- "args": ["usepaso", "serve", "-f", "${absPath}"],
52
- "env": { "USEPASO_AUTH_TOKEN": "your-token" }
53
- }
54
- }`;
47
+ Or add "${slug}" manually to your client config. See: usepaso connect --help`;
55
48
  }
56
49
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":";;AAMA,0CAuBC;AAED,4CAyBC;AAxDD,+BAA+B;AAC/B,2BAAgC;AAChC,sCAAsC;AACtC,4CAAwC;AAGxC,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,WAAmB;IACpE,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO;;;;;;OAMF,IAAI;;4CAEiC,OAAO;;;;;;;;KAQ9C,IAAI;;0CAEiC,OAAO;;;EAG/C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":";;AAMA,0CAuBC;AAED,0BAOC;AAED,4CAWC;AAnDD,2BAAgC;AAChC,sCAAsC;AACtC,4CAAwC;AAExC,0CAAkD;AAElD,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAA,WAAG,EAAC,mBAAmB,QAAQ,EAAE,CAAC,GAAG,IAAA,WAAG,EAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,IAAA,WAAG,EAAC,0BAA0B,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,KAAK,IAAA,WAAG,EAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,IAAA,cAAM,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY;IAClC,OAAO,CACL,IAAI;SACD,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAC9C,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO;;;;;;;;UAQC,IAAI,+DAA+D,CAAC;AAC9E,CAAC"}
@@ -1,4 +1,3 @@
1
1
  import { Command } from 'commander';
2
- export declare function coerceValue(raw: string, type: string, key: string): unknown;
3
2
  export declare function registerTest(program: Command): void;
4
3
  //# sourceMappingURL=test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAwB3E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8HnD"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsLnD"}