@1mcp/agent 0.25.5 → 0.26.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.
Files changed (114) hide show
  1. package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
  2. package/build/auth/sdkOAuthClientProvider.js +3 -5
  3. package/build/auth/sdkOAuthClientProvider.js.map +1 -1
  4. package/build/auth/sessionTypes.d.ts +10 -0
  5. package/build/auth/sessionTypes.d.ts.map +1 -1
  6. package/build/auth/storage/fileStorageService.d.ts +25 -1
  7. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  8. package/build/auth/storage/fileStorageService.js +155 -27
  9. package/build/auth/storage/fileStorageService.js.map +1 -1
  10. package/build/auth/storage/oauthStorageService.js +1 -1
  11. package/build/auth/storage/oauthStorageService.js.map +1 -1
  12. package/build/commands/mcp/index.d.ts.map +1 -1
  13. package/build/commands/mcp/index.js +3 -2
  14. package/build/commands/mcp/index.js.map +1 -1
  15. package/build/commands/registry/index.d.ts +6 -0
  16. package/build/commands/registry/index.d.ts.map +1 -0
  17. package/build/commands/registry/index.js +67 -0
  18. package/build/commands/registry/index.js.map +1 -0
  19. package/build/commands/registry/options.d.ts +47 -0
  20. package/build/commands/registry/options.d.ts.map +1 -0
  21. package/build/commands/registry/options.js +39 -0
  22. package/build/commands/registry/options.js.map +1 -0
  23. package/build/commands/registry/search.d.ts +21 -0
  24. package/build/commands/registry/search.d.ts.map +1 -0
  25. package/build/commands/registry/search.js +186 -0
  26. package/build/commands/registry/search.js.map +1 -0
  27. package/build/commands/registry/show.d.ts +25 -0
  28. package/build/commands/registry/show.d.ts.map +1 -0
  29. package/build/commands/registry/show.js +87 -0
  30. package/build/commands/registry/show.js.map +1 -0
  31. package/build/commands/registry/status.d.ts +16 -0
  32. package/build/commands/registry/status.d.ts.map +1 -0
  33. package/build/commands/registry/status.js +86 -0
  34. package/build/commands/registry/status.js.map +1 -0
  35. package/build/commands/registry/versions.d.ts +21 -0
  36. package/build/commands/registry/versions.d.ts.map +1 -0
  37. package/build/commands/registry/versions.js +76 -0
  38. package/build/commands/registry/versions.js.map +1 -0
  39. package/build/constants/auth.d.ts +27 -0
  40. package/build/constants/auth.d.ts.map +1 -1
  41. package/build/constants/auth.js +31 -0
  42. package/build/constants/auth.js.map +1 -1
  43. package/build/constants/mcp.d.ts +1 -1
  44. package/build/constants/mcp.js +1 -1
  45. package/build/core/tools/handlers/registryHandler.d.ts +11 -0
  46. package/build/core/tools/handlers/registryHandler.d.ts.map +1 -0
  47. package/build/core/tools/handlers/registryHandler.js +49 -0
  48. package/build/core/tools/handlers/registryHandler.js.map +1 -0
  49. package/build/core/tools/handlers/searchHandler.d.ts +19 -0
  50. package/build/core/tools/handlers/searchHandler.d.ts.map +1 -0
  51. package/build/core/tools/handlers/searchHandler.js +104 -0
  52. package/build/core/tools/handlers/searchHandler.js.map +1 -0
  53. package/build/core/tools/handlers/showHandler.d.ts +10 -0
  54. package/build/core/tools/handlers/showHandler.d.ts.map +1 -0
  55. package/build/core/tools/handlers/showHandler.js +44 -0
  56. package/build/core/tools/handlers/showHandler.js.map +1 -0
  57. package/build/core/tools/handlers/versionsHandler.d.ts +10 -0
  58. package/build/core/tools/handlers/versionsHandler.d.ts.map +1 -0
  59. package/build/core/tools/handlers/versionsHandler.js +44 -0
  60. package/build/core/tools/handlers/versionsHandler.js.map +1 -0
  61. package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
  62. package/build/domains/preset/manager/presetManager.js +2 -2
  63. package/build/domains/preset/manager/presetManager.js.map +1 -1
  64. package/build/domains/registry/cacheManager.d.ts +61 -0
  65. package/build/domains/registry/cacheManager.d.ts.map +1 -0
  66. package/build/domains/registry/cacheManager.js +158 -0
  67. package/build/domains/registry/cacheManager.js.map +1 -0
  68. package/build/domains/registry/formatters/commonFormatters.d.ts +34 -0
  69. package/build/domains/registry/formatters/commonFormatters.d.ts.map +1 -0
  70. package/build/domains/registry/formatters/commonFormatters.js +154 -0
  71. package/build/domains/registry/formatters/commonFormatters.js.map +1 -0
  72. package/build/domains/registry/formatters/serverDetailFormatter.d.ts +6 -0
  73. package/build/domains/registry/formatters/serverDetailFormatter.d.ts.map +1 -0
  74. package/build/domains/registry/formatters/serverDetailFormatter.js +310 -0
  75. package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -0
  76. package/build/domains/registry/formatters/versionsFormatter.d.ts +6 -0
  77. package/build/domains/registry/formatters/versionsFormatter.d.ts.map +1 -0
  78. package/build/domains/registry/formatters/versionsFormatter.js +84 -0
  79. package/build/domains/registry/formatters/versionsFormatter.js.map +1 -0
  80. package/build/domains/registry/mcpRegistryClient.d.ts +101 -0
  81. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -0
  82. package/build/domains/registry/mcpRegistryClient.js +464 -0
  83. package/build/domains/registry/mcpRegistryClient.js.map +1 -0
  84. package/build/domains/registry/mcpToolSchemas.d.ts +63 -0
  85. package/build/domains/registry/mcpToolSchemas.d.ts.map +1 -0
  86. package/build/domains/registry/mcpToolSchemas.js +52 -0
  87. package/build/domains/registry/mcpToolSchemas.js.map +1 -0
  88. package/build/domains/registry/searchFiltering.d.ts +48 -0
  89. package/build/domains/registry/searchFiltering.d.ts.map +1 -0
  90. package/build/domains/registry/searchFiltering.js +201 -0
  91. package/build/domains/registry/searchFiltering.js.map +1 -0
  92. package/build/domains/registry/types.d.ts +204 -0
  93. package/build/domains/registry/types.d.ts.map +1 -0
  94. package/build/domains/registry/types.js +5 -0
  95. package/build/domains/registry/types.js.map +1 -0
  96. package/build/index.js +2 -0
  97. package/build/index.js.map +1 -1
  98. package/build/transport/http/restorableStreamableTransport.d.ts +52 -0
  99. package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -0
  100. package/build/transport/http/restorableStreamableTransport.js +68 -0
  101. package/build/transport/http/restorableStreamableTransport.js.map +1 -0
  102. package/build/transport/http/routes/streamableHttpRoutes.d.ts +2 -1
  103. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  104. package/build/transport/http/routes/streamableHttpRoutes.js +113 -30
  105. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  106. package/build/transport/http/server.d.ts +2 -0
  107. package/build/transport/http/server.d.ts.map +1 -1
  108. package/build/transport/http/server.js +10 -2
  109. package/build/transport/http/server.js.map +1 -1
  110. package/build/transport/http/storage/streamableSessionRepository.d.ts +57 -0
  111. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -0
  112. package/build/transport/http/storage/streamableSessionRepository.js +156 -0
  113. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -0
  114. package/package.json +2 -1
@@ -0,0 +1,39 @@
1
+ // Registry-specific options
2
+ export const registryOptions = {
3
+ url: {
4
+ describe: 'MCP registry base URL (env: ONE_MCP_REGISTRY_URL)',
5
+ type: 'string',
6
+ default: undefined,
7
+ },
8
+ timeout: {
9
+ describe: 'Registry request timeout in milliseconds (env: ONE_MCP_REGISTRY_TIMEOUT)',
10
+ type: 'number',
11
+ default: undefined,
12
+ },
13
+ 'cache-ttl': {
14
+ describe: 'Registry cache TTL in seconds (env: ONE_MCP_REGISTRY_CACHE_TTL)',
15
+ type: 'number',
16
+ default: undefined,
17
+ },
18
+ 'cache-max-size': {
19
+ describe: 'Registry cache maximum size (env: ONE_MCP_REGISTRY_CACHE_MAX_SIZE)',
20
+ type: 'number',
21
+ default: undefined,
22
+ },
23
+ 'cache-cleanup-interval': {
24
+ describe: 'Registry cache cleanup interval in milliseconds (env: ONE_MCP_REGISTRY_CACHE_CLEANUP_INTERVAL)',
25
+ type: 'number',
26
+ default: undefined,
27
+ },
28
+ proxy: {
29
+ describe: 'Registry HTTP proxy URL (env: ONE_MCP_REGISTRY_PROXY)',
30
+ type: 'string',
31
+ default: undefined,
32
+ },
33
+ 'proxy-auth': {
34
+ describe: 'Registry proxy authentication (username:password) (env: ONE_MCP_REGISTRY_PROXY_AUTH)',
35
+ type: 'string',
36
+ default: undefined,
37
+ },
38
+ };
39
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/commands/registry/options.ts"],"names":[],"mappings":"AAUA,4BAA4B;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE;QACH,QAAQ,EAAE,mDAAmD;QAC7D,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,0EAA0E;QACpF,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,iEAAiE;QAC3E,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,oEAAoE;QAC9E,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,wBAAwB,EAAE;QACxB,QAAQ,EAAE,gGAAgG;QAC1G,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,uDAAuD;QACjE,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,sFAAsF;QAChG,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,SAAS;KACnB;CACO,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ import type { Arguments, Argv } from 'yargs';
3
+ import { RegistryYargsOptions } from './options.js';
4
+ export interface SearchCommandArgs extends Arguments, GlobalOptions, RegistryYargsOptions {
5
+ query?: string;
6
+ status?: 'active' | 'archived' | 'deprecated' | 'all';
7
+ type?: 'npm' | 'pypi' | 'docker';
8
+ transport?: 'stdio' | 'sse' | 'webhook';
9
+ limit?: number;
10
+ cursor?: string;
11
+ format?: 'table' | 'list' | 'json';
12
+ }
13
+ /**
14
+ * Build search command with options
15
+ */
16
+ export declare function buildSearchCommand(searchYargs: Argv): Argv;
17
+ /**
18
+ * Search MCP servers in the registry
19
+ */
20
+ export declare function searchCommand(argv: SearchCommandArgs): Promise<void>;
21
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/search.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,iBAAkB,SAAQ,SAAS,EAAE,aAAa,EAAE,oBAAoB;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC;IACtD,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAgD1D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD1E"}
@@ -0,0 +1,186 @@
1
+ import { cleanupSearchHandler, handleSearchMCPServers, } from '../../core/tools/handlers/searchHandler.js';
2
+ import { formatDate, formatRegistryTypesPlain, formatStatus, formatTransportTypesPlain, truncateString, } from '../../domains/registry/formatters/commonFormatters.js';
3
+ import { OFFICIAL_REGISTRY_KEY } from '../../domains/registry/types.js';
4
+ import logger from '../../logger/logger.js';
5
+ import chalk from 'chalk';
6
+ /**
7
+ * Build search command with options
8
+ */
9
+ export function buildSearchCommand(searchYargs) {
10
+ return searchYargs
11
+ .positional('query', {
12
+ describe: 'Search query to match against server names and descriptions',
13
+ type: 'string',
14
+ })
15
+ .options({
16
+ status: {
17
+ describe: 'Filter by server status',
18
+ type: 'string',
19
+ choices: ['active', 'archived', 'deprecated', 'all'],
20
+ default: 'active',
21
+ },
22
+ type: {
23
+ describe: 'Filter by package registry type',
24
+ type: 'string',
25
+ choices: ['npm', 'pypi', 'docker'],
26
+ },
27
+ transport: {
28
+ describe: 'Filter by transport method',
29
+ type: 'string',
30
+ choices: ['stdio', 'sse', 'webhook'],
31
+ },
32
+ limit: {
33
+ describe: 'Maximum number of results to return',
34
+ type: 'number',
35
+ default: 20,
36
+ },
37
+ cursor: {
38
+ describe: 'Pagination cursor for retrieving next page of results',
39
+ type: 'string',
40
+ },
41
+ format: {
42
+ describe: 'Output format for search results',
43
+ type: 'string',
44
+ choices: ['table', 'list', 'json'],
45
+ default: 'table',
46
+ },
47
+ })
48
+ .example('$0 registry search', 'List all active MCP servers (table format)')
49
+ .example('$0 registry search "file system"', 'Search for file system related servers')
50
+ .example('$0 registry search --format=list', 'Display results in list format with colors')
51
+ .example('$0 registry search --type=npm --transport=stdio', 'Find npm packages with stdio transport')
52
+ .example('$0 registry search database --limit=5 --format=json', 'Search for database servers, limit to 5, output JSON')
53
+ .example('$0 registry search --cursor=next-page-cursor', 'Get next page of results using cursor');
54
+ }
55
+ /**
56
+ * Search MCP servers in the registry
57
+ */
58
+ export async function searchCommand(argv) {
59
+ try {
60
+ const searchArgs = {
61
+ query: argv.query,
62
+ status: argv.status || 'active',
63
+ registry_type: argv.type,
64
+ transport: argv.transport,
65
+ limit: Math.min(argv.limit || 20, 100),
66
+ cursor: argv.cursor,
67
+ };
68
+ // Extract registry configuration from CLI options
69
+ const registryOptions = {
70
+ url: argv['url'],
71
+ timeout: argv['timeout'],
72
+ cacheTtl: argv['cache-ttl'],
73
+ cacheMaxSize: argv['cache-max-size'],
74
+ cacheCleanupInterval: argv['cache-cleanup-interval'],
75
+ proxy: argv['proxy'],
76
+ proxyAuth: argv['proxy-auth'],
77
+ };
78
+ logger.info('Searching MCP registry...', searchArgs);
79
+ const results = await handleSearchMCPServers(searchArgs, registryOptions);
80
+ // Determine output format
81
+ const outputFormat = argv.format || 'table';
82
+ if (outputFormat === 'json') {
83
+ console.log(JSON.stringify(results, null, 2));
84
+ return;
85
+ }
86
+ if (results.servers.length === 0) {
87
+ console.log(chalk.yellow('🔍 No MCP servers found matching your criteria.'));
88
+ console.log(chalk.gray(' Try a different search query or remove filters.'));
89
+ return;
90
+ }
91
+ // Display results based on format
92
+ if (outputFormat === 'table') {
93
+ displayTableFormat(results, searchArgs);
94
+ }
95
+ else if (outputFormat === 'list') {
96
+ displayListFormat(results, searchArgs);
97
+ }
98
+ // Show common footer
99
+ displayFooter(results, searchArgs);
100
+ }
101
+ catch (error) {
102
+ logger.error('Search command failed:', error);
103
+ console.error(`Error searching MCP registry: ${error instanceof Error ? error.message : String(error)}`);
104
+ process.exit(1);
105
+ }
106
+ finally {
107
+ // Cleanup resources to ensure process exits
108
+ cleanupSearchHandler();
109
+ }
110
+ }
111
+ /**
112
+ * Display results in table format
113
+ */
114
+ function displayTableFormat(results, searchArgs) {
115
+ // Enhanced header with colors
116
+ const resultsCount = results.servers.length;
117
+ const plural = resultsCount === 1 ? '' : 's';
118
+ console.log(chalk.green(`\n✅ Found ${chalk.bold(resultsCount)} MCP server${plural}:`));
119
+ if (searchArgs.query) {
120
+ console.log(chalk.gray(` Query: "${searchArgs.query}"`));
121
+ }
122
+ console.log(); // Empty line for spacing
123
+ // Create table data
124
+ const tableData = results.servers.map((server) => ({
125
+ Name: server.name,
126
+ Description: truncateString(server.description, 45),
127
+ Status: (server._meta?.[OFFICIAL_REGISTRY_KEY]?.status || server.status || 'unknown').toUpperCase(),
128
+ Version: server.version,
129
+ 'Server ID': server._meta?.[OFFICIAL_REGISTRY_KEY]?.serverId || server.name,
130
+ 'Registry Type': formatRegistryTypesPlain(server.packages),
131
+ Transport: formatTransportTypesPlain(server.packages),
132
+ 'Last Updated': formatDate(server._meta?.[OFFICIAL_REGISTRY_KEY]?.updatedAt),
133
+ }));
134
+ console.table(tableData);
135
+ }
136
+ /**
137
+ * Display results in list format
138
+ */
139
+ function displayListFormat(results, searchArgs) {
140
+ // Enhanced header with colors
141
+ const resultsCount = results.servers.length;
142
+ const plural = resultsCount === 1 ? '' : 's';
143
+ console.log(chalk.green(`\n✅ Found ${chalk.bold(resultsCount)} MCP server${plural}:`));
144
+ if (searchArgs.query) {
145
+ console.log(chalk.gray(` Query: "${searchArgs.query}"`));
146
+ }
147
+ console.log(); // Empty line for spacing
148
+ // Display results in a clean list format
149
+ results.servers.forEach((server, index) => {
150
+ const meta = server._meta[OFFICIAL_REGISTRY_KEY];
151
+ console.log(`${chalk.gray((index + 1).toString().padStart(2))}. ${chalk.cyan.bold(server.name)}`);
152
+ console.log(` ${chalk.white(truncateString(server.description, 70))}`);
153
+ console.log(` ${chalk.green('Status:')} ${formatStatus(server._meta?.[OFFICIAL_REGISTRY_KEY]?.status || server.status || 'unknown')} ${chalk.blue('Version:')} ${server.version}`);
154
+ console.log(` ${chalk.yellow('ID:')} ${chalk.gray(meta?.serverId || server.name)}`);
155
+ console.log(` ${chalk.magenta('Transport:')} ${formatTransportTypesPlain(server.packages)} • ${chalk.red('Type:')} ${formatRegistryTypesPlain(server.packages)}`);
156
+ console.log(` ${chalk.gray('Updated:')} ${formatDate(meta?.updatedAt)}`);
157
+ console.log(); // Empty line between entries
158
+ });
159
+ }
160
+ /**
161
+ * Display common footer information
162
+ */
163
+ function displayFooter(results, searchArgs) {
164
+ const resultsCount = results.servers.length;
165
+ // Enhanced usage instructions with colors
166
+ console.log(chalk.cyan.bold('\n💡 Next Steps:'));
167
+ console.log(chalk.white(' • View detailed information: ') + chalk.yellow('1mcp registry show <server-id>'));
168
+ console.log(chalk.white(' • List all versions: ') + chalk.yellow('1mcp registry versions <server-id>'));
169
+ console.log(chalk.white(' • Get full Server IDs: ') + chalk.yellow('1mcp registry search --json'));
170
+ // Show search tips if results are limited
171
+ if (resultsCount >= 20) {
172
+ console.log(chalk.cyan.bold('\n🔍 Search Tips:'));
173
+ console.log(chalk.gray(' • Use specific keywords to narrow results'));
174
+ console.log(chalk.gray(' • Filter by --status, --type, or --transport'));
175
+ console.log(chalk.gray(' • Use --cursor for pagination'));
176
+ }
177
+ // Show pagination info if applicable
178
+ if (results.next_cursor) {
179
+ console.log(chalk.cyan.bold('\n📄 Pagination:'));
180
+ console.log(chalk.gray(' • Next page: ') + chalk.yellow(`1mcp registry search --cursor=${results.next_cursor}`));
181
+ }
182
+ if (searchArgs.limit && results.servers.length === searchArgs.limit) {
183
+ console.log(`Showing ${searchArgs.limit} results. Use --cursor for pagination.`);
184
+ }
185
+ }
186
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/registry/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { OutputFormat } from '../../domains/registry/types.js';
2
+ import { GlobalOptions } from '../../globalOptions.js';
3
+ import type { Arguments, Argv } from 'yargs';
4
+ import { RegistryYargsOptions } from './options.js';
5
+ export interface ShowCommandCliArgs extends Arguments, GlobalOptions, RegistryYargsOptions {
6
+ serverId: string;
7
+ ver?: string;
8
+ v?: string;
9
+ format?: OutputFormat;
10
+ }
11
+ /**
12
+ * Build the show command configuration
13
+ */
14
+ export declare function buildShowCommand(yargs: Argv): Argv<{
15
+ "server-id": string;
16
+ } & {
17
+ ver: string | undefined;
18
+ } & {
19
+ format: string;
20
+ }>;
21
+ /**
22
+ * Show detailed information about a specific MCP server
23
+ */
24
+ export declare function showCommand(argv: ShowCommandCliArgs): Promise<void>;
25
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/show.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAoC,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,kBAAmB,SAAQ,SAAS,EAAE,aAAa,EAAE,oBAAoB;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI;;;;;;GA0B3C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE"}
@@ -0,0 +1,87 @@
1
+ import { cleanupShowHandler, handleShowMCPServer } from '../../core/tools/handlers/showHandler.js';
2
+ import { formatServerDetails } from '../../domains/registry/formatters/serverDetailFormatter.js';
3
+ import logger from '../../logger/logger.js';
4
+ /**
5
+ * Build the show command configuration
6
+ */
7
+ export function buildShowCommand(yargs) {
8
+ return yargs
9
+ .positional('server-id', {
10
+ describe: 'MCP server identifier (e.g., io.github.containers/kubernetes-mcp-server)',
11
+ type: 'string',
12
+ demandOption: true,
13
+ })
14
+ .option('ver', {
15
+ describe: 'Show specific version of the server',
16
+ type: 'string',
17
+ alias: 'v',
18
+ })
19
+ .option('format', {
20
+ describe: 'Output format',
21
+ type: 'string',
22
+ choices: ['table', 'json', 'detailed'],
23
+ default: 'detailed',
24
+ })
25
+ .example('$0 registry show bcee55b5-2316-4f92-8b66-db907496714b', 'Show server details (detailed format by default)')
26
+ .example('$0 registry show bcee55b5-2316-4f92-8b66-db907496714b --ver 1.0.0', 'Show specific version')
27
+ .example('$0 registry show bcee55b5-2316-4f92-8b66-db907496714b -v 1.0.0', 'Show specific version (short alias)')
28
+ .example('$0 registry show bcee55b5-2316-4f92-8b66-db907496714b --format table', 'Show in compact table format')
29
+ .example('$0 registry show bcee55b5-2316-4f92-8b66-db907496714b --format json', 'Output JSON for scripting');
30
+ }
31
+ /**
32
+ * Show detailed information about a specific MCP server
33
+ */
34
+ export async function showCommand(argv) {
35
+ try {
36
+ const showArgs = {
37
+ serverId: argv.serverId,
38
+ version: argv.ver || argv.v,
39
+ format: argv.format || 'detailed',
40
+ };
41
+ // Extract registry configuration from CLI options
42
+ const registryOptions = {
43
+ url: argv['url'],
44
+ timeout: argv['timeout'],
45
+ cacheTtl: argv['cache-ttl'],
46
+ cacheMaxSize: argv['cache-max-size'],
47
+ cacheCleanupInterval: argv['cache-cleanup-interval'],
48
+ proxy: argv['proxy'],
49
+ proxyAuth: argv['proxy-auth'],
50
+ };
51
+ logger.info(`Fetching MCP server details: ${showArgs.serverId}${showArgs.version ? ` (v${showArgs.version})` : ''}`);
52
+ const server = await handleShowMCPServer(showArgs, registryOptions);
53
+ // Format and display the server details
54
+ const output = formatServerDetails(server, showArgs.format);
55
+ if (showArgs.format === 'json') {
56
+ console.log(output);
57
+ }
58
+ else if (showArgs.format === 'detailed') {
59
+ console.log(output);
60
+ }
61
+ else {
62
+ // For table format, the formatServerDetails handles console.table calls internally
63
+ // Just ensure we have proper spacing
64
+ console.log(output);
65
+ }
66
+ }
67
+ catch (error) {
68
+ logger.error('Show command failed:', error);
69
+ // Check if it's a 404 error and provide helpful message
70
+ if (error instanceof Error && error.message.includes('404')) {
71
+ console.error(`❌ Server not found: ${argv.serverId}`);
72
+ console.error(' Make sure the server ID is correct and the server exists in the registry.');
73
+ if (argv.version) {
74
+ console.error(` Also check if version "${argv.version}" exists for this server.`);
75
+ }
76
+ }
77
+ else {
78
+ console.error(`❌ Error fetching MCP server details: ${error instanceof Error ? error.message : String(error)}`);
79
+ }
80
+ process.exit(1);
81
+ }
82
+ finally {
83
+ // Cleanup resources to ensure process exits
84
+ cleanupShowHandler();
85
+ }
86
+ }
87
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/registry/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ import type { Arguments, Argv } from 'yargs';
3
+ import { RegistryYargsOptions } from './options.js';
4
+ export interface RegistryStatusCommandArgs extends Arguments, GlobalOptions, RegistryYargsOptions {
5
+ stats?: boolean;
6
+ json?: boolean;
7
+ }
8
+ /**
9
+ * Build status command with options
10
+ */
11
+ export declare function buildStatusCommand(statusYargs: Argv): Argv;
12
+ /**
13
+ * Get MCP registry status and statistics
14
+ */
15
+ export declare function registryStatusCommand(argv: RegistryStatusCommandArgs): Promise<void>;
16
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,yBAA0B,SAAQ,SAAS,EAAE,aAAa,EAAE,oBAAoB;IAC/F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAiB1D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE1F"}
@@ -0,0 +1,86 @@
1
+ import { cleanupRegistryHandler, handleGetRegistryStatus } from '../../core/tools/handlers/registryHandler.js';
2
+ import { formatTimestamp } from '../../domains/registry/formatters/commonFormatters.js';
3
+ import logger from '../../logger/logger.js';
4
+ /**
5
+ * Build status command with options
6
+ */
7
+ export function buildStatusCommand(statusYargs) {
8
+ return statusYargs
9
+ .options({
10
+ stats: {
11
+ describe: 'Include detailed server count statistics',
12
+ type: 'boolean',
13
+ default: false,
14
+ },
15
+ json: {
16
+ describe: 'Output results in JSON format',
17
+ type: 'boolean',
18
+ default: false,
19
+ },
20
+ })
21
+ .example('$0 registry status', 'Check registry availability')
22
+ .example('$0 registry status --stats', 'Show registry status with statistics')
23
+ .example('$0 registry status --stats --json', 'Output detailed status in JSON format');
24
+ }
25
+ /**
26
+ * Get MCP registry status and statistics
27
+ */
28
+ export async function registryStatusCommand(argv) {
29
+ try {
30
+ const statusArgs = {
31
+ include_stats: argv.stats || false,
32
+ };
33
+ // Extract registry configuration from CLI options
34
+ const registryOptions = {
35
+ url: argv['url'],
36
+ timeout: argv['timeout'],
37
+ cacheTtl: argv['cache-ttl'],
38
+ cacheMaxSize: argv['cache-max-size'],
39
+ cacheCleanupInterval: argv['cache-cleanup-interval'],
40
+ proxy: argv['proxy'],
41
+ proxyAuth: argv['proxy-auth'],
42
+ };
43
+ logger.info('Getting MCP registry status...');
44
+ const result = await handleGetRegistryStatus(statusArgs, registryOptions);
45
+ if (argv.json) {
46
+ console.log(JSON.stringify(result, null, 2));
47
+ return;
48
+ }
49
+ // Format status display
50
+ console.log('\n📊 MCP Registry Status\n');
51
+ const statusIcon = result.available ? '✅' : '❌';
52
+ const statusText = result.available ? 'Available' : 'Unavailable';
53
+ console.log(`Status: ${statusIcon} ${statusText}`);
54
+ console.log(`URL: ${result.url}`);
55
+ console.log(`Response Time: ${result.response_time_ms}ms`);
56
+ console.log(`Last Checked: ${formatTimestamp(result.last_updated)}`);
57
+ if (result.stats) {
58
+ console.log('\n📈 Registry Statistics\n');
59
+ console.log(`Total Servers: ${result.stats.total_servers}`);
60
+ console.log(`Active Servers: ${result.stats.active_servers}`);
61
+ console.log(`Deprecated Servers: ${result.stats.deprecated_servers}`);
62
+ if (Object.keys(result.stats.by_registry_type).length > 0) {
63
+ console.log('\nBy Registry Type:');
64
+ Object.entries(result.stats.by_registry_type).forEach(([type, count]) => {
65
+ console.log(` ${type}: ${count}`);
66
+ });
67
+ }
68
+ if (Object.keys(result.stats.by_transport).length > 0) {
69
+ console.log('\nBy Transport:');
70
+ Object.entries(result.stats.by_transport).forEach(([transport, count]) => {
71
+ console.log(` ${transport}: ${count}`);
72
+ });
73
+ }
74
+ }
75
+ }
76
+ catch (error) {
77
+ logger.error('Registry status command failed:', error);
78
+ console.error(`Error getting registry status: ${error instanceof Error ? error.message : String(error)}`);
79
+ process.exit(1);
80
+ }
81
+ finally {
82
+ // Cleanup resources to ensure process exits
83
+ cleanupRegistryHandler();
84
+ }
85
+ }
86
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/registry/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { OutputFormat } from '../../domains/registry/types.js';
2
+ import { GlobalOptions } from '../../globalOptions.js';
3
+ import type { Arguments, Argv } from 'yargs';
4
+ import { RegistryYargsOptions } from './options.js';
5
+ export interface VersionsCommandCliArgs extends Arguments, GlobalOptions, RegistryYargsOptions {
6
+ serverId: string;
7
+ format?: OutputFormat;
8
+ }
9
+ /**
10
+ * Build the versions command configuration
11
+ */
12
+ export declare function buildVersionsCommand(yargs: Argv): Argv<{
13
+ "server-id": string;
14
+ } & {
15
+ format: string;
16
+ }>;
17
+ /**
18
+ * List all versions for a specific MCP server
19
+ */
20
+ export declare function versionsCommand(argv: VersionsCommandCliArgs): Promise<void>;
21
+ //# sourceMappingURL=versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../../src/commands/registry/versions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAwC,MAAM,gCAAgC,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,SAAS,EAAE,aAAa,EAAE,oBAAoB;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI;;;;GAsB/C;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDjF"}
@@ -0,0 +1,76 @@
1
+ import { cleanupVersionsHandler, handleListMCPServerVersions } from '../../core/tools/handlers/versionsHandler.js';
2
+ import { formatServerVersions } from '../../domains/registry/formatters/versionsFormatter.js';
3
+ import logger from '../../logger/logger.js';
4
+ /**
5
+ * Build the versions command configuration
6
+ */
7
+ export function buildVersionsCommand(yargs) {
8
+ return yargs
9
+ .positional('server-id', {
10
+ describe: 'MCP server identifier (e.g., io.github.containers/kubernetes-mcp-server)',
11
+ type: 'string',
12
+ demandOption: true,
13
+ })
14
+ .option('format', {
15
+ describe: 'Output format',
16
+ type: 'string',
17
+ choices: ['table', 'json', 'detailed'],
18
+ default: 'table',
19
+ })
20
+ .example('$0 registry versions io.github.containers/kubernetes-mcp-server', 'List all versions in table format')
21
+ .example('$0 registry versions io.github.containers/kubernetes-mcp-server --format detailed', 'Show enhanced version details')
22
+ .example('$0 registry versions io.github.containers/kubernetes-mcp-server --format json', 'Output JSON for automation');
23
+ }
24
+ /**
25
+ * List all versions for a specific MCP server
26
+ */
27
+ export async function versionsCommand(argv) {
28
+ try {
29
+ const versionsArgs = {
30
+ serverId: argv.serverId,
31
+ format: argv.format || 'table',
32
+ };
33
+ // Extract registry configuration from CLI options
34
+ const registryOptions = {
35
+ url: argv['url'],
36
+ timeout: argv['timeout'],
37
+ cacheTtl: argv['cache-ttl'],
38
+ cacheMaxSize: argv['cache-max-size'],
39
+ cacheCleanupInterval: argv['cache-cleanup-interval'],
40
+ proxy: argv['proxy'],
41
+ proxyAuth: argv['proxy-auth'],
42
+ };
43
+ logger.info(`Fetching versions for MCP server: ${versionsArgs.serverId}`);
44
+ const versionsResponse = await handleListMCPServerVersions(versionsArgs, registryOptions);
45
+ // Format and display the versions
46
+ const output = formatServerVersions(versionsResponse, versionsArgs.format);
47
+ if (versionsArgs.format === 'json') {
48
+ console.log(output);
49
+ }
50
+ else if (versionsArgs.format === 'detailed') {
51
+ console.log(output);
52
+ }
53
+ else {
54
+ // For table format, the formatServerVersions handles console.table calls internally
55
+ console.log(output);
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.error('Versions command failed:', error);
60
+ // Check if it's a 404 error and provide helpful message
61
+ if (error instanceof Error && error.message.includes('404')) {
62
+ console.error(`❌ Server not found: ${argv.serverId}`);
63
+ console.error(' Make sure the server ID is correct and the server exists in the registry.');
64
+ console.error(' Use "registry search" to find available servers.');
65
+ }
66
+ else {
67
+ console.error(`❌ Error fetching MCP server versions: ${error instanceof Error ? error.message : String(error)}`);
68
+ }
69
+ process.exit(1);
70
+ }
71
+ finally {
72
+ // Cleanup resources to ensure process exits
73
+ cleanupVersionsHandler();
74
+ }
75
+ }
76
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/commands/registry/versions.ts"],"names":[],"mappings":"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"}