POST /mcp/material/upload
Raw file bytes in, storageId out. Send the file’s path in X-Selda-Path. That path is how Selda maps a file to a company. Then hand the ids to material.import.
| Endpoint | POST /mcp/material/upload |
| Scope | pipeline |
| Sandbox key | allowed |
| Extra entitlement | none |
| MCP tools | selda_upload_material |
| Convex function | convex/mcpApi.ts (httpAction) |
A free sandbox key may call it.
Arguments
This endpoint takes the raw bytes of one file as the request body, not a JSON args object.
| Header | Required | What it is |
|---|---|---|
Authorization | yes | Bearer sk_live_... or Bearer sk_test_... |
X-Selda-Path | yes | The file’s path inside your folder. That path is how Selda maps a file to a company. |
Example request
curl -X POST https://api.selda.ai/mcp/material/upload \
-H "Authorization: Bearer sk_live_..." \
-H "X-Selda-Path: boreo/filterit/analysis.pdf" \
-H "Content-Type: application/pdf" \
--data-binary @analysis.pdfExample response
{
"value": { "storageId": "<storageId>", "path": "boreo/filterit/analysis.pdf", "sizeBytes": 20481 },
"request_id": "req_..."
}Generated from convex/lib/mcpRegistry.ts. Nothing in this reference sends: launchRun is in no
registry and never will be, so a script can prepare a campaign completely and a person still
presses send in the app.