MCP Server 返回非文本文件
- 内容介绍
- 文章标签
- 相关推荐
例如在 Cherry Studio 里,可以给 LLM 上传文件。
但如果我创建 MCP Server, 似乎 LLM 无法识别二进制文件:GPT-5.5, Opus-4.7 显然都是有读 PDF 文件的能力的,但是它不能读 MCP Server 返回的 PDF 文件。
MCP Server (Python 主流的 mcp FastMCP) 似乎会把二进制文件编码成 base64.
有没有什么方案可以解决这个问题?
目前的返回方法是:
mime_list = puremagic.magic_string(data, filename="")
if len(mime_list) > 0:
mime = mime_list[0].mime_type
else:
mime = "application/octet-stream"
data_b64 = b64encode(data).decode()
if mime.startswith("image/"):
return ImageContent(type='image', data=data_b64, mimeType=mime)
elif mime.startswith("audio/"):
return AudioContent(type="audio", data=data_b64, mimeType=mime)
else:
return EmbeddedResource(
type="resource",
resource=BlobResourceContents(uri=uri, mimeType=mime, blob=data_b64),
)
image2042×1185 212 KB
网友解答:--【壹】--:
例如在 Cherry Studio 里,可以给 LLM 上传文件。
例如在 Cherry Studio 里,可以给 LLM 上传文件。
但如果我创建 MCP Server, 似乎 LLM 无法识别二进制文件:GPT-5.5, Opus-4.7 显然都是有读 PDF 文件的能力的,但是它不能读 MCP Server 返回的 PDF 文件。
MCP Server (Python 主流的 mcp FastMCP) 似乎会把二进制文件编码成 base64.
有没有什么方案可以解决这个问题?
目前的返回方法是:
mime_list = puremagic.magic_string(data, filename="")
if len(mime_list) > 0:
mime = mime_list[0].mime_type
else:
mime = "application/octet-stream"
data_b64 = b64encode(data).decode()
if mime.startswith("image/"):
return ImageContent(type='image', data=data_b64, mimeType=mime)
elif mime.startswith("audio/"):
return AudioContent(type="audio", data=data_b64, mimeType=mime)
else:
return EmbeddedResource(
type="resource",
resource=BlobResourceContents(uri=uri, mimeType=mime, blob=data_b64),
)
image2042×1185 212 KB
网友解答:--【壹】--:
例如在 Cherry Studio 里,可以给 LLM 上传文件。

