Skip to content

Commit 744a5bc

Browse files
committed
Add optional argv for url and headers
1 parent 3fdb330 commit 744a5bc

File tree

1 file changed

+60
-3
lines changed

1 file changed

+60
-3
lines changed

src/examples/client/elicitationStreamableHttp.ts

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,43 @@ if (useOAuth) {
4949
);
5050
}
5151

52+
// Parse repeated CLI headers: --header "Key: Value" (also supports -H)
53+
function parseHeadersFromArgv(argv: string[]): Record<string, string> {
54+
const headers: Record<string, string> = {};
55+
for (let i = 0; i < argv.length; i++) {
56+
const arg = argv[i];
57+
if (arg === '--header' || arg === '-H') {
58+
const raw = argv[i + 1];
59+
if (raw) {
60+
const idx = raw.indexOf(':');
61+
if (idx !== -1) {
62+
const name = raw.slice(0, idx).trim();
63+
const value = raw.slice(idx + 1).trim();
64+
if (name) headers[name] = value;
65+
}
66+
i++;
67+
}
68+
}
69+
}
70+
return headers;
71+
}
72+
73+
const cliHeaders: Record<string, string> = parseHeadersFromArgv(process.argv);
74+
75+
// Parse CLI url: --url value or --url=value
76+
function parseUrlFromArgv(argv: string[]): string | undefined {
77+
for (let i = 0; i < argv.length; i++) {
78+
const arg = argv[i];
79+
if (arg === '--url') {
80+
const value = argv[i + 1];
81+
if (value) return value;
82+
} else if (arg.startsWith('--url=')) {
83+
return arg.slice('--url='.length);
84+
}
85+
}
86+
return undefined;
87+
}
88+
5289
// Create readline interface for user input
5390
const readline = createInterface({
5491
input: process.stdin,
@@ -79,6 +116,12 @@ async function main(): Promise<void> {
79116
console.log('MCP Interactive Client');
80117
console.log('=====================');
81118

119+
// Override server URL from CLI if provided
120+
const cliUrl = parseUrlFromArgv(process.argv);
121+
if (cliUrl) {
122+
serverUrl = cliUrl;
123+
}
124+
82125
// Connect to server immediately with default settings
83126
await connect();
84127

@@ -700,7 +743,14 @@ async function connect(url?: string): Promise<void> {
700743
new URL(serverUrl),
701744
{
702745
sessionId: sessionId,
703-
authProvider: oauthProvider
746+
authProvider: oauthProvider,
747+
requestInit: {
748+
headers: {
749+
'Content-Type': 'application/json',
750+
'Accept': 'application/json, text/event-stream',
751+
...cliHeaders,
752+
}
753+
}
704754
}
705755
);
706756
}
@@ -727,7 +777,14 @@ async function connect(url?: string): Promise<void> {
727777
new URL(serverUrl),
728778
{
729779
sessionId: sessionId,
730-
authProvider: oauthProvider
780+
authProvider: oauthProvider,
781+
requestInit: {
782+
headers: {
783+
'Content-Type': 'application/json',
784+
'Accept': 'application/json, text/event-stream',
785+
...cliHeaders,
786+
}
787+
}
731788
}
732789
);
733790
await client.connect(transport);
@@ -920,7 +977,7 @@ async function cleanup(): Promise<void> {
920977

921978
async function callPaymentConfirmTool(): Promise<void> {
922979
console.log('Calling payment-confirm tool...');
923-
await callTool('payment-confirm', {cartId: "cart_123"});
980+
await callTool('payment-confirm', { cartId: "cart_123" });
924981
}
925982

926983
async function callThirdPartyAuthTool(): Promise<void> {

0 commit comments

Comments
 (0)