Image/Audio `format=` emits image/jpg, audio/mp3, audio/m4a — unregistered MIME types that disagree with the `path=` suffix table
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 84/100
Piste de recherche
Commencez dans src/mcp/server/fastmcp/utilities/types.py et comparez la table existante des suffixes de chemin avec la gestion de format= pour Image et Audio ; docs/servers/media.md explique l’utilisation de data=. Exécutez les tests pertinents de types MIME pour Image et Audio, et prenez en compte les cas paramétrés de l’issue ; c’est terminé lorsque les alias enregistrés correspondent aux résultats basés sur le chemin, tandis que les formats inconnus conservent leur fallback.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Initial Checks
- I confirm that I'm using the newest release of my release line (2.2.0)
- I have searched GitHub issues and found no similar issue
Release Line
2.x (current stable). The same code exists on v1.x (src/mcp/server/fastmcp/utilities/types.py).
Description
Image and Audio compute the MIME type two different ways. With path= they use a suffix table (.jpg -> image/jpeg, .mp3 -> audio/mpeg, .m4a -> audio/mp4). With format=, which docs/servers/media.md says to pass whenever you use data=, they just do f"image/{format}" / f"audio/{format}". So the same name gives different results depending on which keyword it arrives through, and format= puts non-registered types on the wire:
Image(data=..., format="jpg")->mimeType: "image/jpg"(should beimage/jpeg)Audio(data=..., format="mp3")->audio/mp3(should beaudio/mpeg)Audio(data=..., format="m4a")->audio/m4a(should beaudio/mp4)
This is easy to hit: switching a tool from Image(path="chart.jpg") to Image(data=buf.getvalue(), format="jpg") silently changes the wire output from image/jpeg to image/jpg, and a consumer that validates image MIME types rejects it.
Expected: format="jpg" and path="x.jpg" give the same registered type.
Proposed fix: route format= through the same table the path= branch already has, keeping image/<format> / audio/<format> as the fallback for names outside it (so format="bmp" etc. are unchanged). I have this fix with parametrized tests ready locally (100% branch coverage on types.py, ruff/pyright clean) and would like to open the PR if this is accepted.
Example Code
from pathlib import Path
from mcp.server.mcpserver import Audio, Image
print(Image(data=b"\x00", format="jpg").to_image_content().mime_type) # image/jpg (expected image/jpeg)
print(Audio(data=b"\x00", format="mp3").to_audio_content().mime_type) # audio/mp3 (expected audio/mpeg)
print(Audio(data=b"\x00", format="m4a").to_audio_content().mime_type) # audio/m4a (expected audio/mp4)
# The same helpers get it right when the name arrives as a file suffix:
print(Image(path=Path("x.jpg"))._mime_type) # image/jpeg
Python & MCP Python SDK
Python 3.12.13
mcp 2.2.0 (also reproduced on main @ f1b6589)
Disclosure: found, reproduced and the draft fix tested locally with the help of an AI coding agent (Claude Code); I reviewed the report before filing it.
- Langage dominant
- Python
- Étoiles
- 24.4k
- Forks
- 4k
- Merge moyen
- 1 j 7 h
- PR mergées (30 j)
- 18
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelcontextprotocol/python-sdk
-
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
modelcontextprotocol/python-sdk#3590 ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
modelcontextprotocol/python-sdk#3589 ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
modelcontextprotocol/python-sdk#3578 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
modelcontextprotocol/python-sdk#3573 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
v2
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
modelcontextprotocol/python-sdk#3566 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelcontextprotocol/python-sdk
Issues similaires
-
ACK_WAITING HELP_WANTED UPDATE_CS
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
OWASP/CheatSheetSeries#2458 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
BasedHardware/omi#19711 ·
Les mainteneurs répondent en général sous 1 jour
-
Qwen3_5MoeModel no longer returns router_logits, breaking aux loss with output_router_logits=TrueOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
huggingface/transformers#49172 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
vllm-project/vllm-metal#885 ·
Les mainteneurs répondent en général sous 1 jour