LuuphubDOCSSign inGo to dashboard
[00]AUTOMATE / MCP /

Luuphub MCP server

Luuphub ships a remote Model Context Protocol server so a coding agent (Claude Code, Codex, Cursor, VS Code, Gemini CLI, Windsurf, the Claude app or any MCP client) can read your feedback, work the top requests and close the loop, with the same scoped keys, tenant isolation and audit log as the REST API.

Connect in three steps

  1. Add the server to your agent by its URL (the commands per client are below). Each one adds Luuphub for every project on your machine.
  2. A browser opens: sign in to Luuphub, pick the workspace, Read only or Read and act, optionally one site, and click Allow. You return to the agent, connected.
  3. Ask your agent: “List my Luuphub sites and the top-voted open requests.” Its card on Automation then says Connected, with its last call, and the app is listed under Signed-in apps with Revoke.

Claude Code

Run this in your terminal (works in every project):

claude mcp add --scope user --transport http luuphub https://luuphub.com/api/mcp/mcp

Then sign in (or type /mcp in Claude Code and pick luuphub). A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow.

claude mcp login luuphub

Run `claude mcp list`: luuphub should say Connected. Only want it in one project? Drop --scope user and run it inside that project's folder. Already added it to a project? Run claude mcp remove luuphub there first.

Claude Code setup docs

Codex

Add the server (works in every project):

codex mcp add luuphub --url https://luuphub.com/api/mcp/mcp

If Codex did not open a browser by itself, sign in. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow.

codex mcp login luuphub

Run `codex mcp list`: luuphub should show OAuth. Only want it in one project? Put the same server in .codex/config.toml in a trusted project instead.

Codex setup docs

Cursor

Add this to the file in your home folder (works in every project; create it if it is missing): ~/.cursor/mcp.json

{
  "mcpServers": {
    "luuphub": {
      "url": "https://luuphub.com/api/mcp/mcp"
    }
  }
}

Open Cursor Settings → MCP and click Needs login next to luuphub. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow. It then shows a green dot and its tools. Only want it in one project? Put the same JSON in .cursor/mcp.json in a project instead.

Cursor setup docs

VS Code

Run this in your terminal (works in every project):

code --add-mcp '{"name":"luuphub","type":"http","url":"https://luuphub.com/api/mcp/mcp"}'

In VS Code, run MCP: List Servers from the Command Palette and start luuphub. The first time, VS Code asks you to sign in. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow. No code command? In VS Code run MCP: Open User Configuration and add the server there. Only want it in one project? Put it in .vscode/mcp.json in that project instead.

VS Code setup docs

Gemini CLI

Run this in your terminal (works in every project):

gemini mcp add --scope user --transport http luuphub https://luuphub.com/api/mcp/mcp

Then start gemini and sign in. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow.

/mcp auth luuphub

Run `gemini mcp list`: luuphub should say Connected. Only want it in one project? Drop --scope user and run it inside that project's folder.

Gemini CLI setup docs

Windsurf

In Cascade, open the … menu, find MCPs and click Open MCP config file. Add this (works in every project):

{
  "mcpServers": {
    "luuphub": {
      "serverUrl": "https://luuphub.com/api/mcp/mcp"
    }
  }
}

Open the … menu in Cascade again: luuphub should be listed with its tools. If it asks you to sign in: A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow. The file is ~/.config/devin/mcp_config.json on macOS and Linux, %APPDATA%\devin\mcp_config.json on Windows.

Windsurf setup docs

Claude app

In Claude (web or desktop), open Customize → Connectors, click + Add and choose Add custom connector. Paste this URL, then connect it. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow.

https://luuphub.com/api/mcp/mcp

Start a chat and ask Claude to list its Luuphub tools. Works across your Claude account: web, desktop and mobile. On Team and Enterprise, an owner adds it under Organization settings → Connectors first. Signs in with the browser only; MCP keys are not used here.

Claude app setup docs

Any MCP client

Add this server URL (Streamable HTTP). A client that supports MCP sign-in (OAuth) takes it from there. A browser opens: sign in to Luuphub, choose what the agent may do, and click Allow.

https://luuphub.com/api/mcp/mcp

Ask the client to list its tools: Luuphub has list_sites, list_posts and more. A client without sign-in support takes an MCP key in the Authorization header instead.

Use an MCP key instead

For a client that cannot sign in with a browser (a CI job, a script): on Automation, press Create MCP key (Read only or Read and act, optionally one site). It is shown once, and the page fills it into the setup. These read it from LUUPHUB_API_KEY (VS Code takes the key pasted in). The Claude app signs in with the browser only.

Claude Code

Put your key in the environment:

export LUUPHUB_API_KEY=<paste your MCP key>

Then run this in your terminal (works in every project):

claude mcp add --scope user --transport http luuphub https://luuphub.com/api/mcp/mcp --header "Authorization: Bearer $LUUPHUB_API_KEY"

Run `claude mcp list`: luuphub should say Connected. Only want it in one project? Drop --scope user and run it inside that project's folder. Already added it to a project? Run claude mcp remove luuphub there first.

Claude Code setup docs

Codex

Put your key in the environment (and in your shell profile, so new terminals have it):

export LUUPHUB_API_KEY=<paste your MCP key>

Then add the server (works in every project):

codex mcp add luuphub --url https://luuphub.com/api/mcp/mcp --bearer-token-env-var LUUPHUB_API_KEY

Run `codex mcp list`: luuphub should show "Bearer token". Only want it in one project? Put the same server in .codex/config.toml in a trusted project instead.

Codex setup docs

Cursor

Put your key in the environment Cursor starts from:

export LUUPHUB_API_KEY=<paste your MCP key>

Then add this to the file in your home folder (works in every project; create it if it is missing): ~/.cursor/mcp.json

{
  "mcpServers": {
    "luuphub": {
      "url": "https://luuphub.com/api/mcp/mcp",
      "headers": {
        "Authorization": "Bearer ${env:LUUPHUB_API_KEY}"
      }
    }
  }
}

Open Cursor Settings → MCP: luuphub should show a green dot and its tools. Only want it in one project? Put the same JSON in .cursor/mcp.json in a project instead. Needs a current Cursor: remote MCP servers with headers arrived in 2025.

Cursor setup docs

VS Code

Run this in your terminal with your MCP key in place of <paste your MCP key> (works in every project):

code --add-mcp '{"name":"luuphub","type":"http","url":"https://luuphub.com/api/mcp/mcp","headers":{"Authorization":"Bearer <paste your MCP key>"}}'

In VS Code, run MCP: List Servers from the Command Palette: luuphub should start and list its tools. No code command? In VS Code run MCP: Open User Configuration and add the server there. Only want it in one project? Put it in .vscode/mcp.json in that project instead.

VS Code setup docs

Gemini CLI

Put your key in the environment:

export LUUPHUB_API_KEY=<paste your MCP key>

Then run this in your terminal (works in every project):

gemini mcp add --scope user --transport http luuphub https://luuphub.com/api/mcp/mcp --header "Authorization: Bearer $LUUPHUB_API_KEY"

Run `gemini mcp list`: luuphub should say Connected. Only want it in one project? Drop --scope user and run it inside that project's folder.

Gemini CLI setup docs

Windsurf

Put your key in the environment Windsurf starts from:

export LUUPHUB_API_KEY=<paste your MCP key>

Then in Cascade, open the … menu, find MCPs and click Open MCP config file. Add this (works in every project):

{
  "mcpServers": {
    "luuphub": {
      "serverUrl": "https://luuphub.com/api/mcp/mcp",
      "headers": {
        "Authorization": "Bearer ${env:LUUPHUB_API_KEY}"
      }
    }
  }
}

Open the … menu in Cascade again: luuphub should be listed with its tools. The file is ~/.config/devin/mcp_config.json on macOS and Linux, %APPDATA%\devin\mcp_config.json on Windows.

Windsurf setup docs

Any MCP client

Server URL (Streamable HTTP):

https://luuphub.com/api/mcp/mcp

Send this header on every request:

Authorization: Bearer <your MCP key>

Ask the client to list its tools: Luuphub has list_sites, list_posts and more.

Endpoint and sign-in

https://luuphub.com/api/mcp/mcp

Streamable HTTP. Sign-in follows the MCP authorization spec (OAuth 2.1): a request without a token gets 401 pointing at /.well-known/oauth-protected-resource/api/mcp/mcp; clients identify themselves with a Client ID Metadata Document or register (RFC 7591), sign the person in with PKCE (S256) and get an access token that lasts an hour and works only for this server, plus a refresh token that rotates on every use. Only an owner or admin can allow an app, and what they choose is exactly what an MCP key of that kind may do. Revoke it on Automation any time. An MCP key still works as Authorization: Bearer lh_live_…. A refusal says why: no token or key (401), an expired, revoked or unknown one (401), or a plan without API access (402, Pro or higher).

Scopes, sites and the switches

The access level is the main control: Read only grants every read scope; Read and act adds posts, comments, statuses, changelog and automation writes. A key restricted to one site is refused on any other site, never re-scoped. Per site, Automation also has switches for reading feedback, moving items across the roadmap, opening PRs (agent runs), publishing the changelog and notifying askers, and taking requests from the queue. All are on by default; turn one off to stop it on that site, and every MCP call checks it. A refusal has code TURNED_OFF and names the site and the switch. list_sites returns each site's web address and these settings.

Luuphub does not run agents. To work the queue, your agent calls get_autopilot_queue, then start_agent_run (mode AUTOPILOT), append_run_step as it goes, and complete_agent_run: SHIPPED only on green CI with “Require my review before shipping” off. The full protocol is in the MCP reference.

Read tools

Available on the default read-only key.

TOOLREQUIRED SCOPEMIRRORS API OPERATION
list_sitessites:readlistSites
get_sitesites:readgetSite
list_boardsboards:readlistBoards
list_postsposts:readlistPosts
get_postposts:readgetPost
search_postssearch:readsearchPosts
list_commentscomments:readlistComments
list_statusesstatuses:readlistStatuses
list_changelogchangelog:readlistChangelog
get_insightsinsights:readgetInsights
get_autopilot_queueautomation:readgetAutopilotQueue

Write tools

Destructive / mutating. Require the listed write scope. Every call appends an audit entry attributed to agent:<keyId>, and a merge is one-click reversible from the dashboard.

TOOLREQUIRED SCOPEMIRRORS API OPERATION
create_postposts:writecreatePost
reply_to_postcomments:writecreateComment
change_post_statusstatuses:writechangePostStatus
create_boardboards:writecreateBoard
create_statusstatuses:writecreateStatus
vote_on_postvotes:writecreateVote
merge_postsposts:writemergePosts
start_agent_runautomation:writestartAgentRun
append_run_stepautomation:writeappendAgentRunStep
complete_agent_runautomation:writecompleteAgentRun

Trust model

  • Tool output that carries visitor-authored text (post/comment bodies, insight summaries) is wrapped as untrusted — treat it as data, not instructions.
  • Every mutation is logged to the AI action audit with the calling key's identity; destructive actions can be undone from the dashboard.
  • AI-powered tools (semantic search_posts) consume your account AI budget and soft-fail with an upgrade prompt when exhausted.