Skip to main content
Model Context Protocol

UEFN 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 docs →

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)

Recommended
Always-on · No install · Hosted on Vercel

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-server

Option 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.js

Claude 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.

ToolHosted MCPLocal 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:

  1. create_asset → creates draft, returns asset UUID
  2. get_asset_upload_url → gets signed URL for the ZIP
  3. HTTP PUT to the signed URL (the AI handles this automatically)
  4. confirm_asset_file → records the file
  5. get_image_upload_url → gets signed URL for the image
  6. HTTP PUT the image to the signed URL
  7. confirm_image (hosted) or add_asset_image (local)
  8. 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.

VariableWhen to use
UEFN_API_TOKENRecommended — token from Dashboard → Developer. Auto-refreshes.
SUPABASE_USER_JWTAdvanced; your Supabase JWT. Expires hourly, must be manually refreshed.
SUPABASE_SERVICE_ROLE_KEYAdmin 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.

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.

v1

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.

REST API documentation