Added general meta data section to add pairs for all requests

This commit is contained in:
lorenzo.neumann 2025-10-02 11:23:29 +02:00
commit 842aa3c8ca

View file

@ -42,8 +42,10 @@ type Args = {
logLevel?: LogLevel;
toolName?: string;
toolArg?: Record<string, JsonValue>;
toolMeta?: Record<string, string>;
transport?: "sse" | "stdio" | "http";
headers?: Record<string, string>;
metaData?: Record<string, string>;
};
function createTransportOptions(
@ -121,7 +123,7 @@ async function callMethod(args: Args): Promise<void> {
// Tools methods
if (args.method === "tools/list") {
result = await listTools(client);
result = await listTools(client, args.metaData);
} else if (args.method === "tools/call") {
if (!args.toolName) {
throw new Error(
@ -129,11 +131,17 @@ async function callMethod(args: Args): Promise<void> {
);
}
result = await callTool(client, args.toolName, args.toolArg || {});
result = await callTool(
client,
args.toolName,
args.toolArg || {},
args.metaData,
args.toolMeta,
);
}
// Resources methods
else if (args.method === "resources/list") {
result = await listResources(client);
result = await listResources(client, args.metaData);
} else if (args.method === "resources/read") {
if (!args.uri) {
throw new Error(
@ -141,13 +149,13 @@ async function callMethod(args: Args): Promise<void> {
);
}
result = await readResource(client, args.uri);
result = await readResource(client, args.uri, args.metaData);
} else if (args.method === "resources/templates/list") {
result = await listResourceTemplates(client);
result = await listResourceTemplates(client, args.metaData);
}
// Prompts methods
else if (args.method === "prompts/list") {
result = await listPrompts(client);
result = await listPrompts(client, args.metaData);
} else if (args.method === "prompts/get") {
if (!args.promptName) {
throw new Error(
@ -155,7 +163,12 @@ async function callMethod(args: Args): Promise<void> {
);
}
result = await getPrompt(client, args.promptName, args.promptArgs || {});
result = await getPrompt(
client,
args.promptName,
args.promptArgs || {},
args.metaData,
);
}
// Logging methods
else if (args.method === "logging/setLevel") {
@ -327,6 +340,8 @@ function parseArgs(): Args {
const options = program.opts() as Omit<Args, "target"> & {
header?: Record<string, string>;
meta?: Record<string, JsonValue>;
toolMeta?: Record<string, JsonValue>;
};
let remainingArgs = program.args;
@ -344,6 +359,22 @@ function parseArgs(): Args {
target: finalArgs,
...options,
headers: options.header, // commander.js uses 'header' field, map to 'headers'
metaData: options.meta
? Object.fromEntries(
Object.entries(options.meta).map(([key, value]) => [
key,
String(value),
]),
)
: undefined,
toolMeta: options.toolMeta
? Object.fromEntries(
Object.entries(options.toolMeta).map(([key, value]) => [
key,
String(value),
]),
)
: undefined,
};
}