1
Add the remote MCP
Use either client command below. No repository checkout or local server is required.
Connect once, then ask Claude Code or Codex to upload local images and videos. Bytes travel directly to R2 through short-lived capabilities—not through MCP JSON.
Private preview: uploads are currently limited to the @andrkrn GitHub account.
Use either client command below. No repository checkout or local server is required.
Complete the browser sign-in. GitHub Assets requests only your public GitHub identity.
Give the agent a local path and target repository. Every new asset is public for GitHub Camo.
Register it, then run /mcp to sign in.
claude mcp add --scope user --transport http github-assets \ https://github-assets.andrikurnia.com/mcp
Register the endpoint and start OAuth login.
codex mcp add github-assets --url https://github-assets.andrikurnia.com/mcp codex mcp login github-assets
Try this after authorization:
Upload /absolute/path/demo.mp4 to OWNER/REPOSITORY using github-assets.
Give compatible agents the stable upload workflow without duplicating server limits or credentials.
--- name: upload-github-asset description: Upload a local image or video to a GitHub repository through the GitHub Assets MCP server and return its stable URL and Markdown. Use when the user asks to upload, host, publish, embed, or attach a local media file for GitHub. --- # Upload a GitHub asset Use the connected GitHub Assets MCP tools to complete the upload. 1. Obtain the local file path and target `OWNER/REPOSITORY`. Ask for either value when it is missing. 2. Treat every new upload as public so GitHub Camo can fetch embedded images. Do not ask for or send a visibility option. 3. Read the local file to determine its exact byte size and lowercase SHA-256 digest. Do not send file content while collecting this metadata. 4. Create the upload and follow the mode, part size, part count, URLs, and other capabilities returned by the server. Do not hardcode upload thresholds or multipart settings. 5. Transfer file bytes directly from the local filesystem to the returned signed R2 URLs. Never encode or send the complete file through MCP arguments or conversation context. 6. For multipart mode, upload the requested byte ranges, preserve every returned ETag, and submit the parts in ascending part-number order. Respect any concurrency guidance returned by the server. 7. Complete the upload and return the stable URL and Markdown supplied by the server. If transfer or completion fails, make a best-effort attempt to cancel the upload before reporting the failure. 8. Never ask the user for, inspect, expose, log, or return GitHub tokens, R2 credentials, signed-URL secrets, or upload capability tokens.