@h1deya/mcp-client-cli 0.3.9 → 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.
- package/README.md +19 -19
- package/dist/index.js +7 -22
- package/dist/index.js.map +1 -1
- package/package.json +10 -13
- package/dist/remote-server-utils.d.ts +0 -18
- package/dist/remote-server-utils.d.ts.map +0 -1
- package/dist/remote-server-utils.js +0 -91
- package/dist/remote-server-utils.js.map +0 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ A simple, text-based CLI client for [Model Context Protocol (MCP)](https://model
|
|
|
7
7
|
This tool automatically adjusts the schema for LLM compatibility, which can help some failing MCP servers run successfully.
|
|
8
8
|
Suitable for testing MCP servers, exploring their capabilities, and prototyping integrations.
|
|
9
9
|
|
|
10
|
-
Internally it uses
|
|
10
|
+
Internally it uses [LangChain Agent](https://github.com/langchain-ai/react-agent-js) and
|
|
11
11
|
a utility function `convertMcpToLangchainTools()` from
|
|
12
12
|
[`@h1deya/langchain-mcp-tools`](https://www.npmjs.com/package/@h1deya/langchain-mcp-tools).
|
|
13
13
|
This function performs the aforementioned MCP tools schema transformations for LLM compatibility.
|
|
@@ -49,9 +49,9 @@ A Python equivalent of this utility is available [here](https://pypi.org/project
|
|
|
49
49
|
{
|
|
50
50
|
"llm": {
|
|
51
51
|
"provider": "openai", "model": "gpt-5-mini"
|
|
52
|
-
// "provider": "anthropic", "model": "claude-
|
|
52
|
+
// "provider": "anthropic", "model": "claude-haiku-4-5"
|
|
53
53
|
// "provider": "google_genai", "model": "gemini-2.5-flash"
|
|
54
|
-
// "provider": "xai", "model": "grok-
|
|
54
|
+
// "provider": "xai", "model": "grok-4-1-fast-non-reasoning"
|
|
55
55
|
// "provider": "cerebras", "model": "gpt-oss-120b"
|
|
56
56
|
// "provider": "groq", "model": "openai/gpt-oss-20b"
|
|
57
57
|
},
|
|
@@ -72,7 +72,7 @@ A Python equivalent of this utility is available [here](https://pypi.org/project
|
|
|
72
72
|
|
|
73
73
|
- Set up API keys
|
|
74
74
|
```bash
|
|
75
|
-
echo "ANTHROPIC_API_KEY=sk-ant-...
|
|
75
|
+
echo "ANTHROPIC_API_KEY=sk-ant-...
|
|
76
76
|
OPENAI_API_KEY=sk-proj-...
|
|
77
77
|
GOOGLE_API_KEY=AI...
|
|
78
78
|
XAI_API_KEY=xai-...
|
|
@@ -142,10 +142,10 @@ mcp-client-cli --help
|
|
|
142
142
|
|
|
143
143
|
## Supported LLM Providers
|
|
144
144
|
|
|
145
|
-
- **OpenAI**: `gpt-5-mini`, `gpt-
|
|
146
|
-
- **Anthropic**: `claude-
|
|
147
|
-
- **Google (GenAI)**: `gemini-2.5-flash`, `gemini-
|
|
148
|
-
- **xAI**: `grok-3-mini`, `grok-4`, etc.
|
|
145
|
+
- **OpenAI**: `gpt-5-mini`, `gpt-5.2`, etc.
|
|
146
|
+
- **Anthropic**: `claude-haiku-4-5`, `claude-3-5-haiku-latest`, etc.
|
|
147
|
+
- **Google (GenAI)**: `gemini-2.5-flash`, `gemini-3-flash-preview`, etc.
|
|
148
|
+
- **xAI**: `grok-3-mini`, `grok-4-1-fast-non-reasoning`, etc.
|
|
149
149
|
- **Cerebras**: `gpt-oss-120b`, etc.
|
|
150
150
|
- **Groq**: `openai/gpt-oss-20b`, `openai/gpt-oss-120b`, etc.
|
|
151
151
|
|
|
@@ -169,12 +169,12 @@ Create a `llm_mcp_config.json5` file:
|
|
|
169
169
|
```json5
|
|
170
170
|
{
|
|
171
171
|
"llm": {
|
|
172
|
-
"provider": "openai", "model": "gpt-5-mini"
|
|
173
|
-
// "provider": "anthropic", "model": "claude-
|
|
174
|
-
// "provider": "google_genai", "model": "gemini-2.5-flash"
|
|
175
|
-
// "provider": "xai", "model": "grok-
|
|
176
|
-
// "provider": "cerebras", "model": "gpt-oss-120b"
|
|
177
|
-
// "provider": "groq", "model": "openai/gpt-oss-20b"
|
|
172
|
+
"provider": "openai", "model": "gpt-5-mini"
|
|
173
|
+
// "provider": "anthropic", "model": "claude-haiku-4-5"
|
|
174
|
+
// "provider": "google_genai", "model": "gemini-2.5-flash"
|
|
175
|
+
// "provider": "xai", "model": "grok-4-1-fast-non-reasoning"
|
|
176
|
+
// "provider": "cerebras", "model": "gpt-oss-120b"
|
|
177
|
+
// "provider": "groq", "model": "openai/gpt-oss-20b"
|
|
178
178
|
},
|
|
179
179
|
|
|
180
180
|
// To disable the automatic schema transformations, uncomment the following line.
|
|
@@ -196,7 +196,7 @@ Create a `llm_mcp_config.json5` file:
|
|
|
196
196
|
"mcp_servers": {
|
|
197
197
|
// Local MCP server that uses `npx`
|
|
198
198
|
"weather": {
|
|
199
|
-
"command": "npx",
|
|
199
|
+
"command": "npx",
|
|
200
200
|
"args": [ "-y", "@h1deya/mcp-server-weather" ]
|
|
201
201
|
},
|
|
202
202
|
|
|
@@ -266,14 +266,14 @@ There are quite a few useful MCP servers already available:
|
|
|
266
266
|
- Use `--verbose` flag to view the detailed logs
|
|
267
267
|
- Refer to [Debugging Section in MCP documentation](https://modelcontextprotocol.io/docs/tools/debugging)
|
|
268
268
|
|
|
269
|
-
## Change Log
|
|
270
|
-
|
|
271
|
-
Can be found [here](https://github.com/hideya/mcp-client-langchain-ts/blob/main/CHANGELOG.md)
|
|
272
|
-
|
|
273
269
|
## Building from Source
|
|
274
270
|
|
|
275
271
|
See [README_DEV.md](https://github.com/hideya/mcp-client-langchain-ts/blob/main/README_DEV.md) for details.
|
|
276
272
|
|
|
273
|
+
## Change Log
|
|
274
|
+
|
|
275
|
+
Can be found [here](https://github.com/hideya/mcp-client-langchain-ts/blob/main/CHANGELOG.md)
|
|
276
|
+
|
|
277
277
|
## License
|
|
278
278
|
|
|
279
279
|
MIT License - see [LICENSE](LICENSE) file for details.
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "dotenv/config";
|
|
3
|
-
import {
|
|
4
|
-
import { MemorySaver } from "@langchain/langgraph";
|
|
5
|
-
import { HumanMessage } from "@langchain/core/messages";
|
|
3
|
+
import { createAgent, HumanMessage } from "langchain";
|
|
4
|
+
import { MemorySaver } from "@langchain/langgraph-checkpoint";
|
|
6
5
|
import { convertMcpToLangchainTools } from "@h1deya/langchain-mcp-tools";
|
|
7
6
|
import { initChatModel } from "./init-chat-model.js";
|
|
8
7
|
import { loadConfig } from "./load-config.js";
|
|
@@ -12,21 +11,6 @@ import { hideBin } from "yargs/helpers";
|
|
|
12
11
|
import * as fs from "fs";
|
|
13
12
|
import * as path from "path";
|
|
14
13
|
import { fileURLToPath } from "url";
|
|
15
|
-
// NOTE: without the following, I got this error:
|
|
16
|
-
// ReferenceError: WebSocket is not defined
|
|
17
|
-
// at <anonymous> (.../node_modules/@modelcontextprotocol/sdk/src/client/websocket.ts:29:26)
|
|
18
|
-
import WebSocket from 'ws';
|
|
19
|
-
global.WebSocket = WebSocket;
|
|
20
|
-
// // Remote server connection testing
|
|
21
|
-
// // Uncomment the following code snippet and add the configuration below to the configuration file.
|
|
22
|
-
// // weather: {
|
|
23
|
-
// // "url": "http://localhost:${SSE_SERVER_PORT}/sse"
|
|
24
|
-
// // },
|
|
25
|
-
// // This leverages the Supergateway to make the Weather Studio MCP Server accessible as an SSE server.
|
|
26
|
-
// import { startRemoteMcpServerLocally } from "./remote-server-utils.js";
|
|
27
|
-
// const [sseServerProcess, sseServerPort] = await startRemoteMcpServerLocally(
|
|
28
|
-
// "SSE", "npx -y @h1deya/mcp-server-weather");
|
|
29
|
-
// process.env.SSE_SERVER_PORT = `${sseServerPort}`;
|
|
30
14
|
// Constants
|
|
31
15
|
const COLORS = {
|
|
32
16
|
YELLOW: "\x1b[33m",
|
|
@@ -166,7 +150,7 @@ async function initializeReactAgent(config, verbose, logDir) {
|
|
|
166
150
|
temperature: config.llm.temperature,
|
|
167
151
|
maxTokens: config.llm.max_tokens,
|
|
168
152
|
};
|
|
169
|
-
const
|
|
153
|
+
const model = initChatModel(llmConfig);
|
|
170
154
|
console.log(`Initializing ${Object.keys(config.mcp_servers).length} MCP server(s)...\n`);
|
|
171
155
|
// Ensure log directory exists
|
|
172
156
|
if (!fs.existsSync(logDir)) {
|
|
@@ -193,10 +177,10 @@ async function initializeReactAgent(config, verbose, logDir) {
|
|
|
193
177
|
const toolsAndCleanup = await convertMcpToLangchainTools(config.mcp_servers, { llmProvider, logLevel: verbose ? "debug" : "info" });
|
|
194
178
|
const tools = toolsAndCleanup.tools;
|
|
195
179
|
const mcpCleanup = toolsAndCleanup.cleanup;
|
|
196
|
-
const agent =
|
|
197
|
-
|
|
180
|
+
const agent = createAgent({
|
|
181
|
+
model,
|
|
198
182
|
tools,
|
|
199
|
-
|
|
183
|
+
checkpointer: new MemorySaver(),
|
|
200
184
|
});
|
|
201
185
|
async function cleanup() {
|
|
202
186
|
await mcpCleanup();
|
|
@@ -221,6 +205,7 @@ async function main() {
|
|
|
221
205
|
const config = loadConfig(argv.config);
|
|
222
206
|
const { agent, cleanup } = await initializeReactAgent(config, argv.verbose, argv.logDir);
|
|
223
207
|
mcpCleanup = cleanup;
|
|
208
|
+
console.log(`\n${COLORS.GREEN}LLM model: ${config.llm.provider} / ${config.llm.model}${COLORS.RESET}`);
|
|
224
209
|
await handleConversation(agent, config.example_queries ?? []);
|
|
225
210
|
}
|
|
226
211
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h1deya/mcp-client-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Simple MCP Client to quickly test and explore MCP servers from the command line",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -53,21 +53,18 @@
|
|
|
53
53
|
"publish:do": "npm run publish:prepare && npm publish --access=public"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@h1deya/langchain-mcp-tools": "^0.
|
|
57
|
-
"@langchain/anthropic": "^
|
|
58
|
-
"@langchain/cerebras": "^
|
|
59
|
-
"@langchain/
|
|
60
|
-
"@langchain/
|
|
61
|
-
"@langchain/
|
|
62
|
-
"@langchain/
|
|
63
|
-
"@langchain/openai": "^0.3.16",
|
|
64
|
-
"@langchain/xai": "^0.1.0",
|
|
56
|
+
"@h1deya/langchain-mcp-tools": "^0.4.0",
|
|
57
|
+
"@langchain/anthropic": "^1.3.17",
|
|
58
|
+
"@langchain/cerebras": "^1.0.1",
|
|
59
|
+
"@langchain/google-genai": "^2.1.18",
|
|
60
|
+
"@langchain/groq": "^1.1.0",
|
|
61
|
+
"@langchain/openai": "^1.2.7",
|
|
62
|
+
"@langchain/xai": "^1.3.3",
|
|
65
63
|
"@types/yargs": "^17.0.33",
|
|
66
64
|
"dotenv": "^16.4.7",
|
|
67
65
|
"json5": "^2.2.3",
|
|
68
|
-
"
|
|
69
|
-
"yargs": "^17.7.2"
|
|
70
|
-
"zod": "^3.24.1"
|
|
66
|
+
"langchain": "^1.2.23",
|
|
67
|
+
"yargs": "^17.7.2"
|
|
71
68
|
},
|
|
72
69
|
"devDependencies": {
|
|
73
70
|
"@eslint/js": "^9.17.0",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import * as child_process from "child_process";
|
|
2
|
-
/**
|
|
3
|
-
* Find and return a free port on localhost.
|
|
4
|
-
* @returns A Promise resolving to an available port number
|
|
5
|
-
*/
|
|
6
|
-
export declare function findFreePort(): Promise<number>;
|
|
7
|
-
/**
|
|
8
|
-
* Start an MCP server process via supergateway with the specified transport
|
|
9
|
-
* type. Supergateway runs MCP stdio-based servers over SSE or WebSockets
|
|
10
|
-
* and is used here to run local SSE/WS servers for connection testing.
|
|
11
|
-
* Ref: https://github.com/supercorp-ai/supergateway
|
|
12
|
-
*
|
|
13
|
-
* @param transportType - The transport type, either "SSE" or "WS"
|
|
14
|
-
* @param mcpServerRunCommand - The command to run the MCP server
|
|
15
|
-
* @returns A Promise resolving to [serverProcess, serverPort]
|
|
16
|
-
*/
|
|
17
|
-
export declare function startRemoteMcpServerLocally(transportType: string, mcpServerRunCommand: string): Promise<[child_process.ChildProcess, number]>;
|
|
18
|
-
//# sourceMappingURL=remote-server-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-server-utils.d.ts","sourceRoot":"","sources":["../src/remote-server-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAO/C;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAYpD;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CA4E/C"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import * as child_process from "child_process";
|
|
2
|
-
import * as net from "net";
|
|
3
|
-
// NOTE: Hard-coded dependency on the Supergateway message
|
|
4
|
-
// to easily identify the end of initialization.
|
|
5
|
-
const SUPERGATEWAY_READY_MESSAGE = "[supergateway] Listening on port";
|
|
6
|
-
/**
|
|
7
|
-
* Find and return a free port on localhost.
|
|
8
|
-
* @returns A Promise resolving to an available port number
|
|
9
|
-
*/
|
|
10
|
-
export async function findFreePort() {
|
|
11
|
-
return new Promise((resolve, reject) => {
|
|
12
|
-
const server = net.createServer();
|
|
13
|
-
server.unref();
|
|
14
|
-
server.on("error", reject);
|
|
15
|
-
server.listen(0, () => {
|
|
16
|
-
const port = server.address().port;
|
|
17
|
-
server.close(() => {
|
|
18
|
-
resolve(port);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Start an MCP server process via supergateway with the specified transport
|
|
25
|
-
* type. Supergateway runs MCP stdio-based servers over SSE or WebSockets
|
|
26
|
-
* and is used here to run local SSE/WS servers for connection testing.
|
|
27
|
-
* Ref: https://github.com/supercorp-ai/supergateway
|
|
28
|
-
*
|
|
29
|
-
* @param transportType - The transport type, either "SSE" or "WS"
|
|
30
|
-
* @param mcpServerRunCommand - The command to run the MCP server
|
|
31
|
-
* @returns A Promise resolving to [serverProcess, serverPort]
|
|
32
|
-
*/
|
|
33
|
-
export async function startRemoteMcpServerLocally(transportType, mcpServerRunCommand) {
|
|
34
|
-
const serverPort = await findFreePort();
|
|
35
|
-
// Base command common to both server types
|
|
36
|
-
const command = [
|
|
37
|
-
"npx",
|
|
38
|
-
"-y",
|
|
39
|
-
"supergateway",
|
|
40
|
-
"--stdio",
|
|
41
|
-
mcpServerRunCommand,
|
|
42
|
-
"--port", serverPort.toString(),
|
|
43
|
-
];
|
|
44
|
-
// Add transport-specific arguments
|
|
45
|
-
if (transportType.toLowerCase() === "sse") {
|
|
46
|
-
command.push("--baseUrl", `http://localhost:${serverPort}`, "--ssePath", "/sse", "--messagePath", "/message");
|
|
47
|
-
}
|
|
48
|
-
else if (transportType.toLowerCase() === "ws") {
|
|
49
|
-
command.push("--outputTransport", "ws", "--messagePath", "/message");
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
throw new Error(`Unsupported transport type: ${transportType}`);
|
|
53
|
-
}
|
|
54
|
-
// Start the server process with stdout/stderr piped
|
|
55
|
-
const serverProcess = child_process.spawn(command[0], command.slice(1), {
|
|
56
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
57
|
-
});
|
|
58
|
-
console.log(`Starting ${transportType.toUpperCase()} MCP Server Process with PID: ${serverProcess.pid}`);
|
|
59
|
-
// Return a promise that resolves when the server is ready
|
|
60
|
-
return new Promise((resolve, reject) => {
|
|
61
|
-
// Set a reasonable timeout as fallback (30 seconds)
|
|
62
|
-
const timeoutId = setTimeout(() => {
|
|
63
|
-
reject(new Error(`Timed out waiting for ${transportType.toUpperCase()} server to start`));
|
|
64
|
-
}, 30000);
|
|
65
|
-
// Listen for the specific log message that indicates server is ready
|
|
66
|
-
serverProcess.stdout?.on("data", (data) => {
|
|
67
|
-
const output = data.toString();
|
|
68
|
-
console.log(output); // Still log the output to console
|
|
69
|
-
if (output.includes(SUPERGATEWAY_READY_MESSAGE)) {
|
|
70
|
-
clearTimeout(timeoutId);
|
|
71
|
-
console.log(`${transportType.toUpperCase()} MCP Server is ready on port ${serverPort}`);
|
|
72
|
-
resolve([serverProcess, serverPort]);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
// Handle errors
|
|
76
|
-
serverProcess.stderr?.on("data", (data) => {
|
|
77
|
-
console.error(`Server error: ${data}`);
|
|
78
|
-
});
|
|
79
|
-
serverProcess.on("error", (err) => {
|
|
80
|
-
clearTimeout(timeoutId);
|
|
81
|
-
reject(new Error(`Failed to start server: ${err.message}`));
|
|
82
|
-
});
|
|
83
|
-
serverProcess.on("exit", (code) => {
|
|
84
|
-
if (code !== 0 && code !== null) {
|
|
85
|
-
clearTimeout(timeoutId);
|
|
86
|
-
reject(new Error(`Server process exited with code ${code}`));
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=remote-server-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-server-utils.js","sourceRoot":"","sources":["../src/remote-server-utils.ts"],"names":[],"mappings":"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"}
|