@h1deya/mcp-client-cli 0.3.8 → 0.4.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.
- package/README.md +8 -7
- package/dist/index.js +7 -23
- package/dist/index.js.map +1 -1
- package/package.json +11 -14
- 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
|
@@ -90,10 +90,6 @@ A Python equivalent of this utility is available [here](https://pypi.org/project
|
|
|
90
90
|
Then, it applies the environment variables specified in the `.env` file,
|
|
91
91
|
as well as the ones that are already defined.
|
|
92
92
|
|
|
93
|
-
## Building from Source
|
|
94
|
-
|
|
95
|
-
See [README_DEV.md](https://github.com/hideya/mcp-client-langchain-ts/blob/main/README_DEV.md) for details.
|
|
96
|
-
|
|
97
93
|
## Features
|
|
98
94
|
|
|
99
95
|
- **Easy setup**: Works out of the box with popular MCP servers
|
|
@@ -210,6 +206,7 @@ Create a `llm_mcp_config.json5` file:
|
|
|
210
206
|
"args": [ "mcp-server-fetch" ]
|
|
211
207
|
},
|
|
212
208
|
|
|
209
|
+
// Embedding the value of an environment variable
|
|
213
210
|
"brave-search": {
|
|
214
211
|
"command": "npx",
|
|
215
212
|
"args": [ "-y", "@modelcontextprotocol/server-brave-search" ],
|
|
@@ -231,11 +228,11 @@ Create a `llm_mcp_config.json5` file:
|
|
|
231
228
|
}
|
|
232
229
|
},
|
|
233
230
|
|
|
234
|
-
//
|
|
235
|
-
"
|
|
231
|
+
// For fMCP servers that require OAuth, consider using "mcp-remote"
|
|
232
|
+
"notion": {
|
|
236
233
|
"command": "npx",
|
|
237
234
|
"args": ["-y", "mcp-remote", "https://mcp.notion.com/mcp"],
|
|
238
|
-
}
|
|
235
|
+
},
|
|
239
236
|
}
|
|
240
237
|
}
|
|
241
238
|
```
|
|
@@ -269,6 +266,10 @@ There are quite a few useful MCP servers already available:
|
|
|
269
266
|
- Use `--verbose` flag to view the detailed logs
|
|
270
267
|
- Refer to [Debugging Section in MCP documentation](https://modelcontextprotocol.io/docs/tools/debugging)
|
|
271
268
|
|
|
269
|
+
## Building from Source
|
|
270
|
+
|
|
271
|
+
See [README_DEV.md](https://github.com/hideya/mcp-client-langchain-ts/blob/main/README_DEV.md) for details.
|
|
272
|
+
|
|
272
273
|
## Change Log
|
|
273
274
|
|
|
274
275
|
Can be found [here](https://github.com/hideya/mcp-client-langchain-ts/blob/main/CHANGELOG.md)
|
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",
|
|
@@ -114,7 +98,7 @@ async function getUserQuery(rl, remainingQueries) {
|
|
|
114
98
|
async function handleConversation(agent, remainingQueries) {
|
|
115
99
|
console.log("\nConversation started. Type 'quit' or 'q to end the conversation.\n");
|
|
116
100
|
if (remainingQueries && remainingQueries.length > 0) {
|
|
117
|
-
console.log("
|
|
101
|
+
console.log("Example Queries (just type Enter to supply them one by one):");
|
|
118
102
|
remainingQueries.forEach(query => console.log(`- ${query}`));
|
|
119
103
|
console.log();
|
|
120
104
|
}
|
|
@@ -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();
|
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.0",
|
|
4
4
|
"description": "Simple MCP Client to quickly test and explore MCP servers from the command line",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"start:v": "tsx src/index.ts -v",
|
|
46
46
|
"dev": "tsx watch src/index.ts",
|
|
47
47
|
"lint": "eslint src",
|
|
48
|
-
"clean": "git clean -fdxn -e .env && read -p '
|
|
48
|
+
"clean": "git clean -fdxn -e .env && read -p '\nOK? ' && git clean -fdx -e .env",
|
|
49
49
|
"test": "echo \"No tests specified\" && exit 0",
|
|
50
50
|
"build": "tsc && chmod +x dist/index.js",
|
|
51
51
|
"publish:prepare": "npm run clean && npm install && npm run build",
|
|
@@ -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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"}
|