@apify/mcpc 0.1.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 (178) hide show
  1. package/.claude/settings.local.json +36 -0
  2. package/.eslintrc.json +44 -0
  3. package/.idea/codeStyles/Project.xml +60 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +11 -0
  6. package/.idea/prettier.xml +6 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/.idea/workspace.xml +572 -0
  9. package/LICENSE +201 -0
  10. package/PHASE1-SUMMARY.md +269 -0
  11. package/PUBLISHING.md +111 -0
  12. package/README.md +1056 -0
  13. package/TESTING.md +212 -0
  14. package/TODOs.md +94 -0
  15. package/bin/mcpc +9 -0
  16. package/bin/mcpc-bridge +9 -0
  17. package/dist/bridge/index.d.ts +3 -0
  18. package/dist/bridge/index.d.ts.map +1 -0
  19. package/dist/bridge/index.js +587 -0
  20. package/dist/bridge/index.js.map +1 -0
  21. package/dist/cli/commands/auth.d.ts +9 -0
  22. package/dist/cli/commands/auth.d.ts.map +1 -0
  23. package/dist/cli/commands/auth.js +81 -0
  24. package/dist/cli/commands/auth.js.map +1 -0
  25. package/dist/cli/commands/clean.d.ts +11 -0
  26. package/dist/cli/commands/clean.d.ts.map +1 -0
  27. package/dist/cli/commands/clean.js +224 -0
  28. package/dist/cli/commands/clean.js.map +1 -0
  29. package/dist/cli/commands/index.d.ts +8 -0
  30. package/dist/cli/commands/index.d.ts.map +1 -0
  31. package/dist/cli/commands/index.js +8 -0
  32. package/dist/cli/commands/index.js.map +1 -0
  33. package/dist/cli/commands/logging.d.ts +3 -0
  34. package/dist/cli/commands/logging.d.ts.map +1 -0
  35. package/dist/cli/commands/logging.js +22 -0
  36. package/dist/cli/commands/logging.js.map +1 -0
  37. package/dist/cli/commands/prompts.d.ts +6 -0
  38. package/dist/cli/commands/prompts.d.ts.map +1 -0
  39. package/dist/cli/commands/prompts.js +27 -0
  40. package/dist/cli/commands/prompts.js.map +1 -0
  41. package/dist/cli/commands/resources.d.ts +11 -0
  42. package/dist/cli/commands/resources.d.ts.map +1 -0
  43. package/dist/cli/commands/resources.js +70 -0
  44. package/dist/cli/commands/resources.js.map +1 -0
  45. package/dist/cli/commands/sessions.d.ts +28 -0
  46. package/dist/cli/commands/sessions.d.ts.map +1 -0
  47. package/dist/cli/commands/sessions.js +356 -0
  48. package/dist/cli/commands/sessions.js.map +1 -0
  49. package/dist/cli/commands/tools.d.ts +8 -0
  50. package/dist/cli/commands/tools.d.ts.map +1 -0
  51. package/dist/cli/commands/tools.js +54 -0
  52. package/dist/cli/commands/tools.js.map +1 -0
  53. package/dist/cli/commands/utilities.d.ts +3 -0
  54. package/dist/cli/commands/utilities.d.ts.map +1 -0
  55. package/dist/cli/commands/utilities.js +20 -0
  56. package/dist/cli/commands/utilities.js.map +1 -0
  57. package/dist/cli/helpers.d.ts +18 -0
  58. package/dist/cli/helpers.d.ts.map +1 -0
  59. package/dist/cli/helpers.js +165 -0
  60. package/dist/cli/helpers.js.map +1 -0
  61. package/dist/cli/index.d.ts +3 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +326 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/output.d.ts +18 -0
  66. package/dist/cli/output.d.ts.map +1 -0
  67. package/dist/cli/output.js +221 -0
  68. package/dist/cli/output.js.map +1 -0
  69. package/dist/cli/parser.d.ts +19 -0
  70. package/dist/cli/parser.d.ts.map +1 -0
  71. package/dist/cli/parser.js +168 -0
  72. package/dist/cli/parser.js.map +1 -0
  73. package/dist/cli/shell-parser.d.ts +5 -0
  74. package/dist/cli/shell-parser.d.ts.map +1 -0
  75. package/dist/cli/shell-parser.js +38 -0
  76. package/dist/cli/shell-parser.js.map +1 -0
  77. package/dist/cli/shell.d.ts +2 -0
  78. package/dist/cli/shell.d.ts.map +1 -0
  79. package/dist/cli/shell.js +277 -0
  80. package/dist/cli/shell.js.map +1 -0
  81. package/dist/cli/tool-result.d.ts +2 -0
  82. package/dist/cli/tool-result.d.ts.map +1 -0
  83. package/dist/cli/tool-result.js +19 -0
  84. package/dist/cli/tool-result.js.map +1 -0
  85. package/dist/core/factory.d.ts +19 -0
  86. package/dist/core/factory.d.ts.map +1 -0
  87. package/dist/core/factory.js +55 -0
  88. package/dist/core/factory.js.map +1 -0
  89. package/dist/core/index.d.ts +4 -0
  90. package/dist/core/index.d.ts.map +1 -0
  91. package/dist/core/index.js +4 -0
  92. package/dist/core/index.js.map +1 -0
  93. package/dist/core/mcp-client.d.ts +30 -0
  94. package/dist/core/mcp-client.d.ts.map +1 -0
  95. package/dist/core/mcp-client.js +215 -0
  96. package/dist/core/mcp-client.js.map +1 -0
  97. package/dist/core/transports.d.ts +12 -0
  98. package/dist/core/transports.d.ts.map +1 -0
  99. package/dist/core/transports.js +65 -0
  100. package/dist/core/transports.js.map +1 -0
  101. package/dist/lib/auth/auth-profiles.d.ts +7 -0
  102. package/dist/lib/auth/auth-profiles.d.ts.map +1 -0
  103. package/dist/lib/auth/auth-profiles.js +105 -0
  104. package/dist/lib/auth/auth-profiles.js.map +1 -0
  105. package/dist/lib/auth/keychain.d.ts +22 -0
  106. package/dist/lib/auth/keychain.d.ts.map +1 -0
  107. package/dist/lib/auth/keychain.js +92 -0
  108. package/dist/lib/auth/keychain.js.map +1 -0
  109. package/dist/lib/auth/oauth-flow.d.ts +7 -0
  110. package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
  111. package/dist/lib/auth/oauth-flow.js +236 -0
  112. package/dist/lib/auth/oauth-flow.js.map +1 -0
  113. package/dist/lib/auth/oauth-provider.d.ts +24 -0
  114. package/dist/lib/auth/oauth-provider.d.ts.map +1 -0
  115. package/dist/lib/auth/oauth-provider.js +144 -0
  116. package/dist/lib/auth/oauth-provider.js.map +1 -0
  117. package/dist/lib/auth/oauth-token-manager.d.ts +25 -0
  118. package/dist/lib/auth/oauth-token-manager.d.ts.map +1 -0
  119. package/dist/lib/auth/oauth-token-manager.js +70 -0
  120. package/dist/lib/auth/oauth-token-manager.js.map +1 -0
  121. package/dist/lib/auth/oauth-utils.d.ts +14 -0
  122. package/dist/lib/auth/oauth-utils.d.ts.map +1 -0
  123. package/dist/lib/auth/oauth-utils.js +68 -0
  124. package/dist/lib/auth/oauth-utils.js.map +1 -0
  125. package/dist/lib/auth/token-refresh.d.ts +2 -0
  126. package/dist/lib/auth/token-refresh.d.ts.map +1 -0
  127. package/dist/lib/auth/token-refresh.js +70 -0
  128. package/dist/lib/auth/token-refresh.js.map +1 -0
  129. package/dist/lib/bridge-client.d.ts +23 -0
  130. package/dist/lib/bridge-client.d.ts.map +1 -0
  131. package/dist/lib/bridge-client.js +181 -0
  132. package/dist/lib/bridge-client.js.map +1 -0
  133. package/dist/lib/bridge-manager.d.ts +17 -0
  134. package/dist/lib/bridge-manager.d.ts.map +1 -0
  135. package/dist/lib/bridge-manager.js +240 -0
  136. package/dist/lib/bridge-manager.js.map +1 -0
  137. package/dist/lib/config.d.ts +6 -0
  138. package/dist/lib/config.d.ts.map +1 -0
  139. package/dist/lib/config.js +116 -0
  140. package/dist/lib/config.js.map +1 -0
  141. package/dist/lib/errors.d.ts +23 -0
  142. package/dist/lib/errors.d.ts.map +1 -0
  143. package/dist/lib/errors.js +81 -0
  144. package/dist/lib/errors.js.map +1 -0
  145. package/dist/lib/file-lock.d.ts +2 -0
  146. package/dist/lib/file-lock.d.ts.map +1 -0
  147. package/dist/lib/file-lock.js +46 -0
  148. package/dist/lib/file-lock.js.map +1 -0
  149. package/dist/lib/file-logger.d.ts +19 -0
  150. package/dist/lib/file-logger.d.ts.map +1 -0
  151. package/dist/lib/file-logger.js +126 -0
  152. package/dist/lib/file-logger.js.map +1 -0
  153. package/dist/lib/index.d.ts +6 -0
  154. package/dist/lib/index.d.ts.map +1 -0
  155. package/dist/lib/index.js +6 -0
  156. package/dist/lib/index.js.map +1 -0
  157. package/dist/lib/logger.d.ts +24 -0
  158. package/dist/lib/logger.d.ts.map +1 -0
  159. package/dist/lib/logger.js +189 -0
  160. package/dist/lib/logger.js.map +1 -0
  161. package/dist/lib/session-client.d.ts +28 -0
  162. package/dist/lib/session-client.d.ts.map +1 -0
  163. package/dist/lib/session-client.js +104 -0
  164. package/dist/lib/session-client.js.map +1 -0
  165. package/dist/lib/sessions.d.ts +9 -0
  166. package/dist/lib/sessions.d.ts.map +1 -0
  167. package/dist/lib/sessions.js +116 -0
  168. package/dist/lib/sessions.js.map +1 -0
  169. package/dist/lib/types.d.ts +117 -0
  170. package/dist/lib/types.d.ts.map +1 -0
  171. package/dist/lib/types.js +2 -0
  172. package/dist/lib/types.js.map +1 -0
  173. package/dist/lib/utils.d.ts +29 -0
  174. package/dist/lib/utils.d.ts.map +1 -0
  175. package/dist/lib/utils.js +173 -0
  176. package/dist/lib/utils.js.map +1 -0
  177. package/package.json +71 -0
  178. package/tsconfig.test.json +11 -0
@@ -0,0 +1,165 @@
1
+ import { createMcpClient } from '../core/factory.js';
2
+ import { ClientError, NetworkError, AuthError } from '../lib/errors.js';
3
+ import { normalizeServerUrl, isValidSessionName } from '../lib/utils.js';
4
+ import { setVerbose, createLogger } from '../lib/logger.js';
5
+ import { loadConfig, getServerConfig, validateServerConfig } from '../lib/config.js';
6
+ import { getValidAccessTokenFromKeychain } from '../lib/auth/token-refresh.js';
7
+ import { logTarget } from './output.js';
8
+ import packageJson from '../../package.json' with { type: 'json' };
9
+ import { DEFAULT_AUTH_PROFILE } from '../lib/auth/oauth-utils.js';
10
+ const logger = createLogger('cli');
11
+ function parseHeaderFlags(headerFlags) {
12
+ const headers = {};
13
+ if (headerFlags) {
14
+ for (const header of headerFlags) {
15
+ const colonIndex = header.indexOf(':');
16
+ if (colonIndex < 1) {
17
+ throw new ClientError(`Invalid header format: ${header}. Use "Key: Value"`);
18
+ }
19
+ const key = header.substring(0, colonIndex).trim();
20
+ const value = header.substring(colonIndex + 1).trim();
21
+ headers[key] = value;
22
+ }
23
+ }
24
+ return headers;
25
+ }
26
+ async function addAuthHeader(url, headers, profileName = DEFAULT_AUTH_PROFILE) {
27
+ try {
28
+ const accessToken = await getValidAccessTokenFromKeychain(url, profileName);
29
+ if (!accessToken) {
30
+ return headers;
31
+ }
32
+ return {
33
+ ...headers,
34
+ Authorization: `Bearer ${accessToken}`,
35
+ };
36
+ }
37
+ catch (error) {
38
+ if (error instanceof AuthError) {
39
+ throw error;
40
+ }
41
+ logger.warn(`Failed to load auth profile: ${error.message}`);
42
+ return headers;
43
+ }
44
+ }
45
+ export async function resolveTarget(target, options = {}) {
46
+ if (options.verbose) {
47
+ setVerbose(true);
48
+ }
49
+ if (isValidSessionName(target)) {
50
+ throw new ClientError(`Session target should be handled by withMcpClient: ${target}`);
51
+ }
52
+ if (options.config) {
53
+ logger.debug(`Loading config file: ${options.config}`);
54
+ const config = loadConfig(options.config);
55
+ const serverConfig = getServerConfig(config, target);
56
+ validateServerConfig(serverConfig);
57
+ if (serverConfig.url) {
58
+ const headers = {
59
+ ...serverConfig.headers,
60
+ ...parseHeaderFlags(options.headers),
61
+ };
62
+ const headersWithAuth = await addAuthHeader(serverConfig.url, headers, options.profile);
63
+ const transportConfig = {
64
+ type: 'http',
65
+ url: serverConfig.url,
66
+ headers: headersWithAuth,
67
+ };
68
+ if (options.timeout) {
69
+ transportConfig.timeoutMs = options.timeout * 1000;
70
+ }
71
+ else if (serverConfig.timeout) {
72
+ transportConfig.timeoutMs = serverConfig.timeout * 1000;
73
+ }
74
+ return transportConfig;
75
+ }
76
+ else if (serverConfig.command) {
77
+ const transportConfig = {
78
+ type: 'stdio',
79
+ command: serverConfig.command,
80
+ };
81
+ if (serverConfig.args !== undefined) {
82
+ transportConfig.args = serverConfig.args;
83
+ }
84
+ if (serverConfig.env !== undefined) {
85
+ transportConfig.env = serverConfig.env;
86
+ }
87
+ return transportConfig;
88
+ }
89
+ throw new ClientError(`Invalid server configuration for: ${target}`);
90
+ }
91
+ let url;
92
+ try {
93
+ url = normalizeServerUrl(target);
94
+ }
95
+ catch (error) {
96
+ throw new ClientError(`Failed to resolve target: ${target}\n` +
97
+ `Target must be one of:\n` +
98
+ ` - Named session (@name)\n` +
99
+ ` - Server URL (e.g., mcp.apify.com or https://mcp.apify.com)\n` +
100
+ ` - Entry in JSON config file specified by --config flag\n\n` +
101
+ `Error: ${error.message}`);
102
+ }
103
+ const headers = parseHeaderFlags(options.headers);
104
+ const headersWithAuth = await addAuthHeader(url, headers, options.profile);
105
+ const config = {
106
+ type: 'http',
107
+ url,
108
+ headers: headersWithAuth,
109
+ };
110
+ if (options.timeout) {
111
+ config.timeoutMs = options.timeout * 1000;
112
+ }
113
+ return config;
114
+ }
115
+ export async function withMcpClient(target, options, callback) {
116
+ if (isValidSessionName(target)) {
117
+ const { withSessionClient } = await import('../lib/session-client.js');
118
+ logger.debug('Using session:', target);
119
+ if (options.outputMode) {
120
+ logTarget(target, options.outputMode, options.hideTarget);
121
+ }
122
+ return await withSessionClient(target, callback);
123
+ }
124
+ const transportConfig = await resolveTarget(target, options);
125
+ logger.debug('Resolved target:', { target, transportConfig });
126
+ const clientConfig = {
127
+ clientInfo: { name: 'mcpc', version: packageJson.version },
128
+ transport: transportConfig,
129
+ capabilities: {
130
+ roots: { listChanged: true },
131
+ sampling: {},
132
+ },
133
+ autoConnect: true,
134
+ };
135
+ if (options.verbose) {
136
+ clientConfig.verbose = true;
137
+ }
138
+ const client = await createMcpClient(clientConfig);
139
+ try {
140
+ logger.debug('Connected successfully');
141
+ if (options.outputMode) {
142
+ logTarget(target, options.outputMode, options.hideTarget);
143
+ }
144
+ const result = await callback(client);
145
+ return result;
146
+ }
147
+ catch (error) {
148
+ logger.error('MCP operation failed:', error);
149
+ if (error instanceof NetworkError || error instanceof ClientError) {
150
+ throw error;
151
+ }
152
+ throw new NetworkError(`Failed to communicate with MCP server: ${error.message}`, { originalError: error });
153
+ }
154
+ finally {
155
+ try {
156
+ logger.debug('Closing connection...');
157
+ await client.close();
158
+ logger.debug('Connection closed');
159
+ }
160
+ catch (error) {
161
+ logger.warn('Error closing connection:', error);
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,326 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { setVerbose, closeFileLogger } from '../lib/index.js';
4
+ import { isMcpError, formatError } from '../lib/index.js';
5
+ import { formatJsonError } from './output.js';
6
+ import * as tools from './commands/tools.js';
7
+ import * as resources from './commands/resources.js';
8
+ import * as prompts from './commands/prompts.js';
9
+ import * as sessions from './commands/sessions.js';
10
+ import * as logging from './commands/logging.js';
11
+ import * as utilities from './commands/utilities.js';
12
+ import * as auth from './commands/auth.js';
13
+ import { clean } from './commands/clean.js';
14
+ import { findTarget, extractOptions, hasCommandAfterTarget, getVerboseFromEnv, getJsonFromEnv } from './parser.js';
15
+ import packageJson from '../../package.json' with { type: 'json' };
16
+ function getOptionsFromCommand(command) {
17
+ const opts = command.optsWithGlobals ? command.optsWithGlobals() : command.opts();
18
+ const verbose = opts.verbose || getVerboseFromEnv();
19
+ if (verbose)
20
+ setVerbose(true);
21
+ const json = opts.json || getJsonFromEnv();
22
+ const options = {
23
+ outputMode: (json ? 'json' : 'human'),
24
+ };
25
+ if (opts.config)
26
+ options.config = opts.config;
27
+ if (opts.header) {
28
+ options.headers = Array.isArray(opts.header) ? opts.header : [opts.header];
29
+ }
30
+ if (opts.timeout)
31
+ options.timeout = parseInt(opts.timeout, 10);
32
+ if (opts.profile)
33
+ options.profile = opts.profile;
34
+ if (verbose)
35
+ options.verbose = verbose;
36
+ return options;
37
+ }
38
+ async function main() {
39
+ const args = process.argv.slice(2);
40
+ const handleExit = () => {
41
+ void closeFileLogger().then(() => {
42
+ process.exit(0);
43
+ });
44
+ };
45
+ process.on('SIGTERM', handleExit);
46
+ process.on('SIGINT', handleExit);
47
+ process.on('exit', () => {
48
+ void closeFileLogger();
49
+ });
50
+ if (args.includes('--help') ||
51
+ args.includes('-h') ||
52
+ args.includes('--version') ||
53
+ args.includes('-v')) {
54
+ const program = createProgram();
55
+ await program.parseAsync(process.argv);
56
+ return;
57
+ }
58
+ const cleanArg = args.find((arg) => arg === '--clean' || arg.startsWith('--clean='));
59
+ if (cleanArg) {
60
+ const options = extractOptions(args);
61
+ if (options.verbose)
62
+ setVerbose(true);
63
+ const cleanValue = cleanArg.includes('=') ? cleanArg.split('=')[1] : '';
64
+ const cleanTypes = cleanValue ? cleanValue.split(',').map((s) => s.trim()) : [];
65
+ await clean({
66
+ outputMode: options.json ? 'json' : 'human',
67
+ sessions: cleanTypes.includes('sessions'),
68
+ profiles: cleanTypes.includes('profiles'),
69
+ logs: cleanTypes.includes('logs'),
70
+ all: cleanTypes.includes('all'),
71
+ });
72
+ await closeFileLogger();
73
+ return;
74
+ }
75
+ const targetInfo = findTarget(args);
76
+ if (!targetInfo) {
77
+ const { json } = extractOptions(args);
78
+ await sessions.listSessionsAndAuthProfiles({ outputMode: json ? 'json' : 'human' });
79
+ if (!json) {
80
+ console.log('\nRun "mcpc --help" for usage information.');
81
+ }
82
+ await closeFileLogger();
83
+ return;
84
+ }
85
+ const { target, targetIndex } = targetInfo;
86
+ const modifiedArgs = [
87
+ ...process.argv.slice(0, 2),
88
+ ...args.slice(0, targetIndex),
89
+ ...args.slice(targetIndex + 1),
90
+ ];
91
+ try {
92
+ await handleCommands(target, modifiedArgs);
93
+ }
94
+ finally {
95
+ await closeFileLogger();
96
+ }
97
+ }
98
+ function createProgram() {
99
+ const program = new Command();
100
+ program
101
+ .name('mcpc')
102
+ .description('Universal command-line client for the Model Context Protocol (MCP).')
103
+ .usage('[options] <target> [command]')
104
+ .version(packageJson.version, '-v, --version', 'Output the version number')
105
+ .helpOption('-h, --help', 'Display general help')
106
+ .option('-j, --json', 'Output in JSON format')
107
+ .option('--verbose', 'Enable verbose logging')
108
+ .option('-c, --config <file>', 'Path to MCP config JSON file')
109
+ .option('-H, --header <header>', 'Add HTTP header (can be repeated)')
110
+ .option('--timeout <seconds>', 'Request timeout in seconds (default: 300)')
111
+ .option('--profile <name>', 'Authentication profile to use (default: "default")')
112
+ .option('--schema <file>', 'Validate against expected tool/prompt schema')
113
+ .option('--schema-mode <mode>', 'Schema validation mode: strict, compatible (default), or ignore')
114
+ .option('--insecure', 'Disable SSL certificate validation');
115
+ program.addHelpText('after', `
116
+ Where <target> can be:
117
+ <url> Remote MCP server URL (e.g., mcp.apify.com)
118
+ <config-entry> Entry from MCP config file specified in --config
119
+ @<name> Named session (e.g., @apify)
120
+
121
+
122
+ Examples:
123
+ $ mcpc # List sessions and auth profiles
124
+ $ mcpc mcp.apify.com login # Login to MCP server using OAuth
125
+ $ mcpc mcp.apify.com tools-list # List server tools
126
+ $ mcpc mcp.apify.com session @apify # Create or reconnect persistent session
127
+ $ mcpc @apify tools-call search-actors --args query="crawler" # Call tool with arguments
128
+ `);
129
+ return program;
130
+ }
131
+ async function handleCommands(target, args) {
132
+ const program = createProgram();
133
+ program.argument('<target>', 'Target (session @name, MCP config entry, or server URL)');
134
+ if (!hasCommandAfterTarget(args)) {
135
+ const options = extractOptions(args);
136
+ if (options.verbose)
137
+ setVerbose(true);
138
+ await sessions.showServerInfo(target, {
139
+ outputMode: options.json ? 'json' : 'human',
140
+ ...(options.verbose && { verbose: true }),
141
+ ...(options.config && { config: options.config }),
142
+ ...(options.headers && { headers: options.headers }),
143
+ ...(options.timeout !== undefined && { timeout: options.timeout }),
144
+ });
145
+ return;
146
+ }
147
+ program
148
+ .command('help')
149
+ .description('Show server instructions and available capabilities')
150
+ .action(async (_options, command) => {
151
+ await sessions.showHelp(target, getOptionsFromCommand(command));
152
+ });
153
+ program
154
+ .command('shell')
155
+ .description('Interactive shell for the target')
156
+ .action(async () => {
157
+ await sessions.openShell(target);
158
+ });
159
+ program
160
+ .command('close')
161
+ .description('Close the session')
162
+ .action(async (_options, command) => {
163
+ await sessions.closeSession(target, getOptionsFromCommand(command));
164
+ });
165
+ program
166
+ .command('session <name>')
167
+ .description('Create or reconnect a session to an MCP server')
168
+ .action(async (name, _options, command) => {
169
+ await sessions.connectSession(name, target, getOptionsFromCommand(command));
170
+ });
171
+ program
172
+ .command('login')
173
+ .description('Login to a server using OAuth and save authentication profile')
174
+ .option('--profile <name>', 'Profile name (default: default)')
175
+ .option('--scope <scope>', 'OAuth scope(s) to request')
176
+ .action(async (options, command) => {
177
+ await auth.login(target, {
178
+ profile: options.profile,
179
+ scope: options.scope,
180
+ ...getOptionsFromCommand(command),
181
+ });
182
+ });
183
+ program
184
+ .command('logout')
185
+ .description('Delete an authentication profile')
186
+ .option('--profile <name>', 'Profile name (default: default)')
187
+ .action(async (options, command) => {
188
+ await auth.logout(target, {
189
+ profile: options.profile,
190
+ ...getOptionsFromCommand(command),
191
+ });
192
+ });
193
+ program
194
+ .command('tools')
195
+ .description('List available tools (shorthand for tools-list)')
196
+ .action(async (_options, command) => {
197
+ await tools.listTools(target, getOptionsFromCommand(command));
198
+ });
199
+ program
200
+ .command('tools-list')
201
+ .description('List available tools')
202
+ .action(async (_options, command) => {
203
+ await tools.listTools(target, getOptionsFromCommand(command));
204
+ });
205
+ program
206
+ .command('tools-schema <name>')
207
+ .description('Get information about a specific tool')
208
+ .action(async (name, _options, command) => {
209
+ await tools.getTool(target, name, getOptionsFromCommand(command));
210
+ });
211
+ program
212
+ .command('tools-call <name>')
213
+ .description('Call a tool with arguments')
214
+ .option('--args [pairs...]', 'Tool arguments as key=val or key:=json pairs')
215
+ .option('--args-file <file>', 'Load arguments from JSON file')
216
+ .action(async (name, options, command) => {
217
+ await tools.callTool(target, name, {
218
+ args: options.args,
219
+ argsFile: options.argsFile,
220
+ ...getOptionsFromCommand(command),
221
+ });
222
+ });
223
+ program
224
+ .command('resources')
225
+ .description('List available resources (shorthand for resources-list)')
226
+ .action(async (_options, command) => {
227
+ await resources.listResources(target, getOptionsFromCommand(command));
228
+ });
229
+ program
230
+ .command('resources-list')
231
+ .description('List available resources')
232
+ .action(async (_options, command) => {
233
+ await resources.listResources(target, getOptionsFromCommand(command));
234
+ });
235
+ program
236
+ .command('resources-read <uri>')
237
+ .description('Get a resource by URI')
238
+ .option('-o, --output <file>', 'Write resource to file')
239
+ .option('--max-size <bytes>', 'Maximum resource size in bytes')
240
+ .action(async (uri, options, command) => {
241
+ await resources.getResource(target, uri, {
242
+ output: options.output,
243
+ raw: options.raw,
244
+ maxSize: options.maxSize,
245
+ ...getOptionsFromCommand(command),
246
+ });
247
+ });
248
+ program
249
+ .command('resources-subscribe <uri>')
250
+ .description('Subscribe to resource updates')
251
+ .action(async (uri, _options, command) => {
252
+ await resources.subscribeResource(target, uri, getOptionsFromCommand(command));
253
+ });
254
+ program
255
+ .command('resources-unsubscribe <uri>')
256
+ .description('Unsubscribe from resource updates')
257
+ .action(async (uri, _options, command) => {
258
+ await resources.unsubscribeResource(target, uri, getOptionsFromCommand(command));
259
+ });
260
+ program
261
+ .command('resources-templates-list')
262
+ .description('List available resource templates')
263
+ .action(async (_options, command) => {
264
+ await resources.listResourceTemplates(target, getOptionsFromCommand(command));
265
+ });
266
+ program
267
+ .command('prompts')
268
+ .description('List available prompts (shorthand for prompts-list)')
269
+ .action(async (_options, command) => {
270
+ await prompts.listPrompts(target, getOptionsFromCommand(command));
271
+ });
272
+ program
273
+ .command('prompts-list')
274
+ .description('List available prompts')
275
+ .action(async (_options, command) => {
276
+ await prompts.listPrompts(target, getOptionsFromCommand(command));
277
+ });
278
+ program
279
+ .command('prompts-get <name>')
280
+ .description('Get a prompt by name')
281
+ .option('--args [pairs...]', 'Prompt arguments as key=val or key:=json pairs')
282
+ .action(async (name, options, command) => {
283
+ await prompts.getPrompt(target, name, {
284
+ args: options.args,
285
+ ...getOptionsFromCommand(command),
286
+ });
287
+ });
288
+ program
289
+ .command('logging-set-level <level>')
290
+ .description('Set server logging level (debug, info, notice, warning, error, critical, alert, emergency)')
291
+ .action(async (level, _options, command) => {
292
+ await logging.setLogLevel(target, level, getOptionsFromCommand(command));
293
+ });
294
+ program
295
+ .command('ping')
296
+ .description('Ping the MCP server to check if it is alive')
297
+ .action(async (_options, command) => {
298
+ await utilities.ping(target, getOptionsFromCommand(command));
299
+ });
300
+ try {
301
+ await program.parseAsync(args);
302
+ }
303
+ catch (error) {
304
+ const opts = program.opts();
305
+ const outputMode = opts.json ? 'json' : 'human';
306
+ if (isMcpError(error)) {
307
+ if (outputMode === 'json') {
308
+ console.error(formatJsonError(error, error.code));
309
+ }
310
+ else {
311
+ console.error(formatError(error, opts.verbose));
312
+ }
313
+ process.exit(error.code);
314
+ }
315
+ console.error(outputMode === 'json'
316
+ ? formatJsonError(error, 1)
317
+ : formatError(error, opts.verbose));
318
+ process.exit(1);
319
+ }
320
+ }
321
+ main().catch(async (error) => {
322
+ console.error('Fatal error:', error);
323
+ await closeFileLogger();
324
+ process.exit(1);
325
+ });
326
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { OutputMode } from '../lib/index.js';
2
+ import type { Tool, Resource, Prompt } from '../lib/types.js';
3
+ export { extractSingleTextContent } from './tool-result.js';
4
+ export declare function formatOutput(data: unknown, mode?: OutputMode): string;
5
+ export declare function formatJson(data: unknown): string;
6
+ export declare function formatHuman(data: unknown): string;
7
+ export declare function formatTools(tools: Tool[]): string;
8
+ export declare function formatToolDetail(tool: Tool): string;
9
+ export declare function formatResources(resources: Resource[]): string;
10
+ export declare function formatPrompts(prompts: Prompt[]): string;
11
+ export declare function formatObject(obj: Record<string, unknown>): string;
12
+ export declare function formatSuccess(message: string): string;
13
+ export declare function formatError(message: string): string;
14
+ export declare function formatWarning(message: string): string;
15
+ export declare function formatInfo(message: string): string;
16
+ export declare function logTarget(target: string, outputMode: OutputMode, hide?: boolean): void;
17
+ export declare function formatJsonError(error: Error, code: number): string;
18
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAK5D,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,UAAoB,GAAG,MAAM,CAK9E;AAKD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CA+CjD;AAmCD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CA8BjD;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAmDnD;AAKD,wBAAgB,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA2B7D;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CA2BvD;AAKD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAoBjE;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAMD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,UAAQ,GAAG,IAAI,CAIpF;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASlE"}