mcp-use
Version:
Opinionated MCP Framework for TypeScript (@modelcontextprotocol/sdk compatible) - Build MCP Agents, Clients and Servers with support for ChatGPT Apps, Code Mode, OAuth, Notifications, Sampling, Observability and more.
111 lines (108 loc) • 3.18 kB
JavaScript
import {
__name
} from "./chunk-3GQAWCBQ.js";
// src/server/resources/conversion.ts
function isReadResourceResult(result) {
return "contents" in result && Array.isArray(result.contents);
}
__name(isReadResourceResult, "isReadResourceResult");
function extractMimeType(result) {
if (result._meta && typeof result._meta === "object") {
const meta = result._meta;
if (meta.mimeType && typeof meta.mimeType === "string") {
return meta.mimeType;
}
}
if (result.content && result.content.length > 0) {
const firstContent = result.content[0];
if (firstContent.type === "image") {
return firstContent.mimeType || "image/png";
}
if (firstContent.type === "text") {
return "text/plain";
}
if (firstContent.type === "resource") {
const resourceData = firstContent.resource;
return resourceData?.mimeType || "application/octet-stream";
}
}
return "text/plain";
}
__name(extractMimeType, "extractMimeType");
function isBinaryContent(result) {
if (result._meta && typeof result._meta === "object") {
const meta = result._meta;
return meta.isBinary === true || meta.isImage === true;
}
return false;
}
__name(isBinaryContent, "isBinaryContent");
function convertToolResultToResourceResult(uri, result) {
if (isReadResourceResult(result)) {
return result;
}
const mimeType = extractMimeType(result);
const isBinary = isBinaryContent(result);
const contents = [];
if (result.content && result.content.length > 0) {
for (const content of result.content) {
if (content.type === "text") {
const textContent = content;
if (isBinary) {
contents.push({
uri,
mimeType,
blob: textContent.text
});
} else {
contents.push({
uri,
mimeType,
text: textContent.text
});
}
} else if (content.type === "image") {
const imageContent = content;
contents.push({
uri,
mimeType: imageContent.mimeType || mimeType,
blob: imageContent.data
});
} else if (content.type === "resource") {
const resourceContent = content;
const resourceData = resourceContent.resource;
if (resourceData.text !== void 0) {
contents.push({
uri: resourceData.uri,
mimeType: resourceData.mimeType || mimeType,
text: resourceData.text
});
} else if (resourceData.blob !== void 0) {
contents.push({
uri: resourceData.uri,
mimeType: resourceData.mimeType || mimeType,
blob: resourceData.blob
});
} else {
contents.push({
uri: resourceData.uri,
mimeType: resourceData.mimeType || mimeType,
text: ""
});
}
}
}
}
if (contents.length === 0) {
contents.push({
uri,
mimeType: "text/plain",
text: ""
});
}
return { contents };
}
__name(convertToolResultToResourceResult, "convertToolResultToResourceResult");
export {
convertToolResultToResourceResult
};