MCP server

Stateless Streamable HTTP (JSON-RPC 2.0, protocol 2025-06-18 with fallbacks). One URL, https://uplift.page/mcp, for everyone: browsing, evaluating, and installing full skills work anonymously. The first time your agent calls a workspace tool, the server asks it to sign you in: you enter your email code, approve the agent once, and every call then runs as you against the workspaces you belong to. A workspace key (upk_…) does the same for automation and CI.

Connect your agent

Every client needs only the URL. When a tool needs your workspace, the server answers 401 and your client opens uplift.page to sign in with your emailed code; you allow the app once, and it never sees anything outside the workspaces you belong to. No client ID, secret or key to paste. Revoke an app later under Account → Connected agents.

Claude (web, desktop, mobile, Cowork)

Customize → Connectors → Add custom connector. On Team and Enterprise, an Owner adds it once under Organization settings → Connectors and members connect it.

Add custom connector
Name: uplift.page
URL: https://uplift.page/mcp
(leave Advanced settings empty)

Sign in: Public tools work straight away. The first workspace request shows a Connect card in the chat; sign in and Claude retries.

Claude Code

Add it once for every project (-s user), or per project without it.

terminal
claude mcp add -s user --transport http uplift https://uplift.page/mcp

Sign in: When a workspace tool asks, run /mcp, pick uplift and choose Authenticate.

ChatGPT

Settings → Apps → Advanced settings → turn on Developer mode, then Create app (or connector) with the URL and OAuth authentication.

Create app
MCP server URL: https://uplift.page/mcp
Authentication: OAuth

Sign in: ChatGPT signs you in when you add it. It doesn't support API keys, so sign-in is the only way.

Codex (CLI and IDE extension)

Add the server to ~/.codex/config.toml, then sign in once.

~/.codex/config.toml, then: codex mcp login uplift
[mcp_servers.uplift]
url = "https://uplift.page/mcp"

Sign in: codex mcp login uplift opens the browser.

Cursor

Settings → MCP → Add new MCP server, or edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).

~/.cursor/mcp.json
{
  "mcpServers": {
    "uplift": { "url": "https://uplift.page/mcp" }
  }
}

Sign in: Cursor shows Needs login next to the server; click it to sign in.

VS Code (GitHub Copilot agent mode)

Command Palette → MCP: Add Server → HTTP, or add it to .vscode/mcp.json (workspace) or your user mcp.json.

.vscode/mcp.json
{
  "servers": {
    "uplift": { "type": "http", "url": "https://uplift.page/mcp" }
  }
}

Sign in: VS Code asks to sign in the first time the server starts.

Windsurf / Devin

Cascade → MCP servers → Add custom server, or edit ~/.codeium/windsurf/mcp_config.json.

mcp_config.json
{
  "mcpServers": {
    "uplift": { "serverUrl": "https://uplift.page/mcp" }
  }
}

Sign in: Windsurf opens the browser to sign in when it connects.

Gemini CLI / Antigravity

Add it to ~/.gemini/settings.json (Antigravity: its MCP settings, same shape).

~/.gemini/settings.json
{
  "mcpServers": {
    "uplift": { "httpUrl": "https://uplift.page/mcp" }
  }
}

Sign in: Run /mcp auth uplift (Antigravity asks you to paste back the code it shows).

Goose

goose configure → Add Extension → Remote Extension (Streamable HTTP), or Extensions → Add custom extension in the desktop app.

extension URL
https://uplift.page/mcp

Sign in: Goose opens the browser to sign in when the extension starts.

Zed

Agent panel → Settings → Add Custom Server, or add it under context_servers in settings.json.

settings.json
{
  "context_servers": {
    "uplift": { "url": "https://uplift.page/mcp" }
  }
}

Sign in: Zed runs the standard MCP sign-in when the server asks.

MCP Inspector (testing)

Run the inspector, choose Streamable HTTP and the URL.

terminal
npx @modelcontextprotocol/inspector

Sign in: Use Open Auth Settings → Quick OAuth Flow, then Connect.

Other clients: add a remote (Streamable HTTP) MCP server with the URL above. Any client that supports MCP authorization signs in the same way; field names vary, so check your client's MCP settings if one differs.

Automation, CI and hooks

Machines that can't sign in in a browser use a workspace key from dashboard.uplift.page → Telemetry keys, as a literal Authorization header in the client's own config. Desktop apps and scheduled runs don't read your shell profile, so an environment variable there arrives empty. A key in the header also turns off the sign-in flow in most clients.

Claude Code, with a key
claude mcp add -s user --transport http uplift https://uplift.page/mcp --header "Authorization: Bearer upk_YOUR_KEY"
any MCP client (JSON config), with a key
{
  "mcpServers": {
    "uplift": {
      "type": "http",
      "url": "https://uplift.page/mcp",
      "headers": { "Authorization": "Bearer upk_YOUR_KEY" }
    }
  }
}
install a skill from any repo — no key, no account
curl -s https://uplift.page/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pull_skill","arguments":{"slug":"code-style"}}}' \
  | jq -r '.result.structuredContent.markdown' > skills/code-style/SKILL.md
raw JSON-RPC smoke test
curl -s -X POST https://uplift.page/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'

Public tools

recommend_stackTech stack + mini prompt + citation for what you describe.
search_promptsFull-text search over the public library.
get_promptFetch one prompt by slug.
list_categoriesList published categories.
convert_promptClean markdown into a tracking-free mini prompt with a removal report.
send_feedbackReport a positive/negative outcome for a prompt.

Skill-library tools

List, install, and score skills: public skills need no account; signing in (or a workspace key) unlocks your workspace's private side. People in several workspaces pass workspace to pick one of theirs. Writes need a paid plan.

what_can_i_doStart here: who you are, your level in each workspace, and the tools it allows.
workspace_infoThe connected workspace: your level, plan, library counts, hub, month-to-date usage. Read level.
list_skillsList the skill library, a page at a time. Public library with no credential; sign-in adds the workspace's own skills.
pull_skillFetch one skill as installable markdown (original SKILL.md or mini prompt). Your workspace's copy wins over a public one.
evaluate_skillScore a skill on cleanliness, size, citation, freshness, usage, and outcomes. Public skills need no credential.
skill_historyEvery version of a skill: who made it, when and why. Read level.
skill_diffLine diff between two versions of a skill. Read level.
list_change_requestsList proposed changes: your workspace's, yours, or the public queue. Read level.
save_skillSave a skill to the workspace: converted, versioned, cited. Members save drafts; admins also publish. Member level.
skill_forkCopy a public skill into your workspace as an editable draft. Member level.
skill_propose_changeSend a change to a skill for review without touching it. Member level.
skill_publishMake a draft or archived skill live; platform admins can also list it publicly. Admin level.
skill_restoreMake an earlier version current, as a new version. Admin level.
skill_review_changeApprove or reject a proposal. Admin level.
remove_skillArchive a workspace skill (reversible; history kept). Admin level.
list_membersList the workspace's members and roles. Owner level.
set_member_roleChange a member's role. Owner level.

A typical agent flow: recommend_stack with the build intent → adopt the mini prompt → ship → send_feedback with the outcome. For skills: list_skills → pull_skill → write the markdown to skills/<slug>/SKILL.md. The instructions field returned by initialize tells models exactly this.