/**
* get_object_metadata tool implementation
* Retrieves metadata (HEAD) for an object without downloading content
*/
import { z } from "zod";
import { ProviderManager } from "../providers/manager.js";
import { createToolSuccessResponse, createToolErrorResponse } from "../utils/response-formatter.js";
/**
* Schema for get_object_metadata tool
*/
export const getObjectMetadataSchema = {
bucket: z.string().describe("The name of the bucket containing the object"),
key: z.string().describe("The object key (full path) to get metadata for"),
};
/**
* Get metadata for get_object_metadata tool
*/
export function getGetObjectMetadataMetadata(sourceId: string) {
const toolName = sourceId === "default" ? "get_object_metadata" : `get_object_metadata_${sourceId}`;
return {
name: toolName,
title: `Get Object Metadata (${sourceId})`,
description: `Get metadata for an object from the '${sourceId}' source without downloading content. Returns content type, size, last modified date, ETag, storage class, and custom metadata.`,
schema: getObjectMetadataSchema,
annotations: {
title: `get_object_metadata (${sourceId})`,
readOnlyHint: true,
destructiveHint: false,
idempotentHint: true,
openWorldHint: false,
},
};
}
/**
* Create get_object_metadata tool handler for a specific source
*/
export function createGetObjectMetadataToolHandler(sourceId?: string) {
return async (args: any, _extra: any) => {
const { bucket, key } = args as {
bucket: string;
key: string;
};
try {
const provider = ProviderManager.getCurrentProvider(sourceId);
const result = await provider.getObjectMetadata(bucket, key);
return createToolSuccessResponse({
...result,
source_id: sourceId || "default",
});
} catch (error) {
return createToolErrorResponse((error as Error).message, "GET_OBJECT_METADATA_ERROR");
}
};
}