UEFN Marketplace for Developers
Build with the REST API, automate uploads, or let AI assistants manage your account through MCP. One developer token powers both surfaces.
Overview
The UEFN Marketplace developer platform has two surfaces, both authenticated with the same token from Dashboard → Developer. Pick whichever fits your workflow — you don't need both.
Build custom scripts and automations
Batch-upload asset packs from CI/CD pipelines
Integrate with external tools (Make, Zapier, etc.)
Manage listings programmatically
Standard HTTP — works in any language
Let AI assistants (Claude, Cursor, etc.) act on your behalf
Manage Creator Studio: boards, cards, sprints, wiki, Verse
No HTTP requests — AI calls tools via structured protocol
Hosted (always-on) or local process — your choice
Upload assets by describing what you want in chat
Shared token: Generate one token at Dashboard → Developer. It works for both the REST API (Authorization: Bearer smcp_...) and the MCP server (UEFN_API_TOKEN=smcp_...). The two integrations are independent — you don't need to use both.
UEFN Marketplace REST API
A standard HTTP/JSON API for building custom tools, automating asset uploads, and integrating UEFN Marketplace into your own scripts and workflows.
REST API vs MCP — which should I use?
Both are powered by the same developer token. They serve different use cases — see the overview for the at-a-glance comparison, or jump straight to the MCP section.
Quick start
1. Generate a token
smcp_ and is shown once.2. Verify it works
curl https://uefnmarketplace.com/api/v1/me \
-H "Authorization: Bearer smcp_..."3. Start building
/api/v1. The machine-readable spec is at /api/v1/openapi.json.Authentication
Authorization header (all requests)
Authorization: Bearer smcp_YOUR_TOKEN_HEREGenerated in Dashboard → Developer. Scoped, revocable at any time.
Full example
curl https://uefnmarketplace.com/api/v1/me \
-H "Authorization: Bearer smcp_YOUR_TOKEN_HERE"
# → 200 OK
{
"id": "...",
"username": "your-username",
"is_seller": true,
...
}Token scopes
All new tokens receive the full default scope set below. You can revoke tokens at any time from Dashboard → Developer.
profile:readRead your profileprofile:writeUpdate your profileassets:readList and read your assetsassets:writeCreate, update, delete, and upload assetstokens:readList your tokens via the APItokens:revokeRevoke tokens via the APIEndpoints
Base URL: https://uefnmarketplace.com/api/v1
Platform
https://uefnmarketplace.com/api/v1/healthPublic health check — no auth required. Returns platform status.
Profile
https://uefnmarketplace.com/api/v1/meRead your profile (username, bio, seller status, social links, subscription tier).
https://uefnmarketplace.com/api/v1/meUpdate editable profile fields (display_name, bio, website).
Assets — listing management
https://uefnmarketplace.com/api/v1/assetsList your asset listings. Filter by status, paginate with limit and offset.
https://uefnmarketplace.com/api/v1/assetsCreate a new draft asset listing. Returns the asset id needed for upload steps.
https://uefnmarketplace.com/api/v1/assets/batchBatch-create up to 25 draft assets in one call. Returns per-item success/failure (207).
https://uefnmarketplace.com/api/v1/assets/:idGet full asset details including images, tags, and category.
https://uefnmarketplace.com/api/v1/assets/:idUpdate metadata, pricing, visibility, tags, or schedule.
https://uefnmarketplace.com/api/v1/assets/:idPermanently delete a draft asset. Only status=draft can be deleted.
Assets — upload lifecycle
Four-step workflow: get signed URL → PUT binary → confirm → submit
https://uefnmarketplace.com/api/v1/assets/:id/upload-urlGenerate a short-lived signed URL for uploading the asset file (ZIP, etc.).
https://uefnmarketplace.com/api/v1/assets/:id/confirm-fileRecord the uploaded file path and size on the asset. Required before submit.
https://uefnmarketplace.com/api/v1/assets/:id/images/upload-urlGenerate a signed URL for uploading a gallery image (jpg, png, webp).
https://uefnmarketplace.com/api/v1/assets/:id/confirm-imageRegister an uploaded image in the asset gallery. First image becomes the thumbnail.
https://uefnmarketplace.com/api/v1/assets/:id/submitSubmit a draft or rejected asset for moderation review. Asset must have an uploaded file.
Token management
https://uefnmarketplace.com/api/v1/tokensList all your developer tokens (names, prefixes, last used at).
https://uefnmarketplace.com/api/v1/tokens?id=:uuidRevoke a specific token by its UUID. The token stops working immediately.
Full upload walkthrough
Complete workflow for creating an asset listing and uploading its file and cover image. All four upload steps are required before submitting for review.
Step 1 — Create the draft listing
POST https://uefnmarketplace.com/api/v1/assets
Authorization: Bearer smcp_YOUR_TOKEN
{
"title": "Epic Forest Pack",
"slug": "epic-forest-pack",
"description": "High-quality forest assets for UEFN maps.",
"pricing_type": "fixed",
"price": 9.99,
"visibility": "public",
"tags": ["nature", "forest", "UEFN"]
}
# → 201 Created
{ "id": "asset-uuid", "status": "draft", ... }Step 2 — Upload the asset file
Get a signed URL, PUT the file, then confirm
# 2a. Get a signed upload URL (valid for ~1 hour)
POST https://uefnmarketplace.com/api/v1/assets/asset-uuid/upload-url
{ "filename": "epic-forest-pack-v1.zip" }
# Response: { "signed_url": "https://...", "storage_path": "..." }
# 2b. PUT the file binary directly to storage (no Authorization header)
curl -X PUT "<signed_url>" \
--upload-file epic-forest-pack-v1.zip \
-H "Content-Type: application/zip"
# 2c. Record the file on the asset
POST https://uefnmarketplace.com/api/v1/assets/asset-uuid/confirm-file
{ "storage_path": "...", "file_size": 4294967 }
# → { "success": true }Step 3 — Upload gallery images (optional but recommended)
Repeat for each image. The first image becomes the primary thumbnail.
# 3a. Get a signed URL for the image
POST https://uefnmarketplace.com/api/v1/assets/asset-uuid/images/upload-url
{ "filename": "preview.jpg" }
# Response: { "signed_url": "...", "storage_path": "...", "public_url": "https://..." }
# 3b. PUT the image binary
curl -X PUT "<signed_url>" \
--upload-file preview.jpg \
-H "Content-Type: image/jpeg"
# 3c. Register the image in the gallery
POST https://uefnmarketplace.com/api/v1/assets/asset-uuid/confirm-image
{ "public_url": "https://..." }
# → { "id": "img-uuid", "is_primary": true, ... }Step 4 — Submit for review
POST https://uefnmarketplace.com/api/v1/assets/asset-uuid/submit
# → 200 OK
{ "success": true, "status": "pending" }
# Asset is now in the moderation queue.Error codes
401 UNAUTHORIZEDMissing, invalid, expired, or revoked token.403 FORBIDDENToken does not have the required scope.404 NOT_FOUNDResource does not exist or does not belong to you.409 CONFLICTSlug already taken (create) or status prevents the action (submit requires draft/rejected, delete requires draft).422 NO_FILETried to submit an asset that has no uploaded file.429 RATE_LIMITEDToo many requests — back off and retry.500 SERVER_ERRORInternal error — retry or contact support at uefnmarketplace.com/contact.Want to use an AI assistant instead of writing HTTP requests?
The MCP server lets Claude, Cursor, VS Code Copilot, and any MCP-compatible AI assistant call tools on your behalf — no HTTP required. It uses the same developer token and supports asset uploads plus the full Creator Studio (boards, Verse snippets, sprints, wiki, and more).
Jump to MCP setupUEFN Marketplace MCP Server
Let AI assistants — Claude, Cursor, VS Code Copilot — read and write your UEFN Marketplace account through structured tool calls. No HTTP requests, no copy-pasting data. Just describe what you want in chat.
What is MCP?
MCP (Model Context Protocol) is an open standard by Anthropic that lets AI assistants securely call external tools. Instead of you copy-pasting data into chat, the AI calls a tool, gets structured JSON back, and acts on it — all in one conversation.
How it works:
AI assistant (Claude, Cursor, …)
│ tool calls
▼
UEFN Marketplace MCP Server ← this product
│ Supabase SDK / REST
▼
UEFN Marketplace (your account, projects, assets)MCP vs REST API: The REST API is for scripts and custom integrations that make direct HTTP calls. The MCP server is for AI assistants that need to reason, decide, and act autonomously. Both use the same developer token. See the REST API section →
Step 1 — Get your developer token
Go to Dashboard → Developer and click New Token.
The token starts with smcp_ and is shown only once. Copy it before closing the dialog.
The same token works for both the MCP server and the REST API. You only ever need one.
Step 2a — Hosted MCP (recommended)
The MCP server runs permanently at https://uefnmarketplace.com/api/mcp, hosted inside the UEFN Marketplace Next.js application on Vercel. Nothing to install, nothing to keep updated.
Claude Desktop — remote HTTP
Settings → Developer → Edit Config (claude_desktop_config.json)
{
"mcpServers": {
"uefn-marketplace": {
"type": "http",
"url": "https://uefnmarketplace.com/api/mcp",
"headers": {
"Authorization": "Bearer smcp_YOUR_TOKEN_HERE"
}
}
}
}Cursor / VS Code — remote HTTP
.cursor/mcp.json or VS Code settings.json
{
"mcp": {
"servers": {
"uefn-marketplace": {
"type": "http",
"url": "https://uefnmarketplace.com/api/mcp",
"headers": {
"Authorization": "Bearer smcp_YOUR_TOKEN_HERE"
}
}
}
}
}Verify the hosted server
Run this curl to confirm the endpoint is up and your token is valid:
curl -X POST https://uefnmarketplace.com/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer smcp_YOUR_TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
# → {"jsonrpc":"2.0","id":1,"result":{}}Or ask your AI to call the health_check tool. It confirms DB connectivity and your authenticated user ID.
Step 2b — Local MCP (full Creator Studio tools)
The local MCP server gives you the complete Creator Studio suite — Kanban boards, Verse snippets, sprints, milestones, labels, island codes, wiki pages, and more — in addition to asset uploads. Run it as a local process that your AI connects to via stdio.
Option A — npx (easiest, no install)
UEFN_API_TOKEN=smcp_xxxxx npx -y @uefnmarketplace/studio-mcp-serverOption B — Download ZIP
curl -L "https://uefnmarketplace.com/downloads/uefn-studio-mcp-server.zip" -o uefn-studio-mcp-server.zip
unzip uefn-studio-mcp-server.zip
cd uefn-studio-mcp-server
npm ci && npm run build
UEFN_API_TOKEN=smcp_xxxxx node dist/index.jsClaude Desktop — local process
{
"mcpServers": {
"uefn-studio": {
"command": "npx",
"args": ["-y", "@uefnmarketplace/studio-mcp-server"],
"env": {
"UEFN_API_TOKEN": "smcp_YOUR_TOKEN_HERE"
}
}
}
}Cursor / VS Code — local process
{
"mcp": {
"servers": {
"uefn-studio": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@uefnmarketplace/studio-mcp-server"],
"env": {
"UEFN_API_TOKEN": "smcp_YOUR_TOKEN_HERE"
}
}
}
}
}Hosted vs Local — tool parity
Both servers use the same authentication. The hosted server covers asset management and upload. The local server adds the full Creator Studio suite.
| Tool | Hosted MCP | Local MCP |
|---|---|---|
| health_check | ✅ | ✅ |
| get_my_profile | ✅ | ✅ |
| list_categories | ✅ | ✅ |
| list_my_assets | ✅ | ✅ |
| get_asset | ✅ | ✅ |
| create_asset | ✅ | ✅ |
| update_asset | ✅ | ✅ |
| delete_asset | ✅ | ✅ |
| get_asset_upload_url | ✅ | ✅ |
| confirm_asset_file | ✅ | ✅ |
| get_image_upload_url | ✅ | ✅ |
| confirm_image / add_asset_image | ✅ | ✅ |
| submit_asset | ✅ | ✅ |
| list_projects / get_project / … | — | ✅ |
| create_board / list_boards / … | — | ✅ |
| create_card / move_card / … | — | ✅ |
| create_sprint / start_sprint / … | — | ✅ |
| create_wiki_page / … | — | ✅ |
| create_verse_snippet / … | — | ✅ |
| create_island_code / … | — | ✅ |
| create_milestone / … | — | ✅ |
| create_label / add_label_to_card / … | — | ✅ |
| export_project / import_project | — | ✅ |
† Hosted MCP uses confirm_image; Local MCP uses add_asset_image. Both accept asset_id + public_url.
Uploading assets via MCP
You can upload assets entirely from your AI assistant. The workflow is identical on both hosted and local MCP — just tell your AI assistant what you want:
Example prompt
“Create a new asset called ‘Epic Forest Pack’, price it at $9.99, upload the file at ./forest-pack.zip, upload the preview image at ./preview.jpg, then submit it for review.”
The AI will call in sequence:
create_asset→ creates draft, returns asset UUIDget_asset_upload_url→ gets signed URL for the ZIP- HTTP PUT to the signed URL (the AI handles this automatically)
confirm_asset_file→ records the fileget_image_upload_url→ gets signed URL for the image- HTTP PUT the image to the signed URL
confirm_image(hosted) oradd_asset_image(local)submit_asset→ moves to “pending” review
File access note:The AI assistant needs access to your local file system to PUT the file binary to the signed URL. Claude Desktop and Cursor both support this. If your AI can't access local files, use the REST API instead.
Authentication
Set UEFN_API_TOKEN to your developer token (starts with smcp_). That is the only credential you need.
| Variable | When to use |
|---|---|
| UEFN_API_TOKEN | Recommended — token from Dashboard → Developer. Auto-refreshes. |
| SUPABASE_USER_JWT | Advanced; your Supabase JWT. Expires hourly, must be manually refreshed. |
| SUPABASE_SERVICE_ROLE_KEY | Admin automation only — bypasses row-level security. Use with extreme care. |
How it works: Your UEFN_API_TOKEN is exchanged for a short-lived Supabase JWT server-side. All reads/writes go through RLS as your user. Tokens auto-refresh every hour in the background.
Troubleshooting
“Invalid API key” or “Unauthorized”
Your token has expired or was revoked. Generate a new one in Dashboard → Developer and restart your AI assistant.
Local server exits immediately
Make sure UEFN_API_TOKEN is in the env block of your MCP config — not in your shell. Restart your AI assistant after changing the config.
“Invalid OAuth error response” (Cursor / VS Code)
Remote MCP clients probe OAuth discovery URLs before connecting. The site returns JSON 401 for those paths so the client falls back to your Authorization: Bearer smcp_... header. Use the www hostname in your config (shown below) — the apex domain redirects and some clients break OAuth discovery on redirect.
Hosted server not responding
curl -X POST https://uefnmarketplace.com/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
# Should return: {"jsonrpc":"2.0","id":1,"result":{}}The hosted server is deployed as a Next.js API route on Vercel and is always available as long as uefnmarketplace.com is up. If you get a 401, your token is invalid. If you get a 404, double-check the URL.
AI can't find the tools
Ask your AI to call health_check. If tools aren't listed, the MCP server isn't connected. Check that your config JSON is valid and that you've restarted the AI assistant after editing it.
Building a script or automation instead?
The REST API at /api/v1 is the right tool for CI/CD pipelines, custom scripts, Make/Zapier automations, and any integration that makes direct HTTP requests. Same token, no AI required.