plugin-mcp: auto-generated create tool for upload-enabled collections has no way to attach file content
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 68/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- nodejs, typescript
Direzione di ricerca
Start by tracing createRequestFromPayloadRequest through mcp-handler, then inspect convertCollectionSchemaToZod and mcp/tools/resource/create.js for how upload collection schemas and create arguments are handled. Done means an upload-enabled collection's generated create tool can receive file content and complete creation, including with the storage configurations described in the issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
For any collection with upload: true, plugin-mcp's auto-generated create<Collection> tool can never succeed — it has no parameter for file content, so every call fails with MissingFile: No files were uploaded.
Reproduction
- Enable the plugin on an upload collection (e.g. Payload's own
Mediaexample) withcreatecapability on. - Call the generated tool, e.g.
createMedia, with the collection's writable fields (alt, etc.). - Call fails:
Error creating resource in collection "media": MissingFile: ...
Root cause (traced in the installed @payloadcms/[email protected] / [email protected]):
- The MCP endpoint hands the raw request to a generic JSON-RPC handler (
createRequestFromPayloadRequest→mcp-handler) — no multipart parsing anywhere in that path. - The tool's input schema is generated purely from the collection's field schema (
convertCollectionSchemaToZod), with no special-casing for upload collections — no file parameter is ever generated. - The generated handler (
mcp/tools/resource/create.js) forwards only the JSON fields topayload.create({ data, ... }), never settingfile. - Payload's own
generateFileData()checkpoint then finds neitherreq.filenor an explicitfileargument and throws.
This is independent of storage backend — local disk or S3, the create operation requires an attached file before it decides where to store it. Confirmed same failure against S3-backed storage.
Suggested fix direction, and offer to contribute: for collections with upload: true, the generated tool could accept a base64-encoded file argument and pass it through as file: { data: Buffer.from(base64, 'base64'), mimetype, name, size } on the Local API create() call (supported since #708). I've verified this works end-to-end (base64 round-trip + real S3 upload) as a standalone patch — happy to open a PR if that direction is welcome, or if there's a reason upload collections were intentionally left out, that'd be useful to know too.
Versions: @payloadcms/[email protected], [email protected], Postgres adapter, @payloadcms/storage-s3.
- Lingua principale
- TypeScript
- Stelle
- 45.5k
- Fork
- 4.3k
- Merge medio
- 1g 15h
- PR unite (30g)
- 306
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di payloadcms/payload
-
Required Lexical field accepts two empty paragraphsForse già presa @lazerg l’ha presa oggi. ApertaBug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
payloadcms/payload#19222 ·
I maintainer di solito rispondono entro 1 giorno
-
area: ui Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
payloadcms/payload#19198 ·
I maintainer di solito rispondono entro 1 giorno
-
Grid view: show the file placeholder when a thumbnail image fails to loadForse già presa @lazerg l’ha presa 1 giorno fa. ApertaBug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
payloadcms/payload#19181 ·
I maintainer di solito rispondono entro 1 giorno
-
WhereBuilder throws "Cannot read properties of undefined (reading 'value')" when the list URL filters on a field that is not filterableForse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaBug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
payloadcms/payload#19002 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Regression: `findByID` with `disableErrors: true` throws `NotFound` for null/empty ids since 3.91.0Forse già presa @Krrishkumar125 l’ha presa 8 giorni fa. Apertaarea: core Bug invalid-reproduction status: needs-triage v3
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
payloadcms/payload#18935 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di payloadcms/payload
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
area:desktop area:ui bug platform:macos
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
anthropics/claude-code#106183 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
reproduced
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
anomalyco/opencode#60558 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno