Install
openclaw skills install lovable-mcpClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Use Lovable's MCP server to create, iterate on, and deploy full-stack web apps from natural-language prompts. Trigger this skill whenever the user wants to build a web app, dashboard, internal tool, prototype, landing page, or any frontend/full-stack project using Lovable — whether they say "Lovable" explicitly or just need a working app built and deployed fast. Also trigger when the user wants to manage Lovable projects programmatically: listing workspace projects, auditing edit history, reviewing diffs, reading project files, checking deployment status, managing databases, or setting AI governance policies. If the user mentions "Lovable," "lovable project," "lovable app," or asks to build/ship/deploy a web app and Lovable is available as a connected MCP, use this skill. Even if they just say "make me an app" or "build a dashboard for X" — if the Lovable MCP is connected, this skill applies. Covers the full lifecycle: create → iterate → review → deploy.
openclaw skills install lovable-mcpBuild, iterate, inspect, and deploy full-stack web apps through Lovable's MCP server — without ever opening the Lovable UI.
Lovable's agent handles the heavy lifting: you describe what you want in plain language, and it builds a working app (React + Vite + Tailwind + shadcn/ui + Supabase when needed). The MCP server exposes this capability programmatically, so you can drive the entire workflow from any agent that supports skills.
Lovable provides a Model Context Protocol (MCP) server at https://mcp.lovable.dev that gives AI agents direct access to:
Authentication is OAuth 2.1+PKCE. The MCP server supports the standard MCP OAuth flow:
WWW-Authenticate: Bearer challengehttps://lovable.dev/oauth/.well-known/oauth-authorization-serverAuthorization: Bearer in all subsequent callscurl (should be available on any system)python3 (for scripts, should be available on any system)Contact Lovable support (support@lovable.dev) and request MCP OAuth client credentials. They will provide a CLIENT_ID (a hex string like 0123456789abcdef0123456789abcdef).
This CLIENT_ID is registered with a specific redirect URI. The skill scripts use this redirect URI during the OAuth flow.
# Make the scripts executable
chmod +x scripts/*.sh
# Run the OAuth setup — this will generate a PKCE authorization URL for you
bash scripts/lovable-oauth-setup.sh
The script will:
?code= parameterconfig/lovable-tokens.json# Get the access token (auto-refreshes if expired)
TOKEN=$(bash scripts/lovable-get-token.sh)
# Test: list your profile and workspaces
curl -s -X POST https://mcp.lovable.dev/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_me","arguments":{}},"id":1}'
Add the Lovable MCP server to your openclaw.json:
{
"mcp": {
"servers": {
"lovable": {
"url": "https://mcp.lovable.dev",
"type": "http",
"auth": {
"CLIENT_ID": "<your-client-id>"
}
}
}
}
}
Then restart the gateway:
openclaw gateway restart
The OAuth flow uses PKCE (Proof Key for Code Exchange) as required by the MCP OAuth 2.1 specification.
| Parameter | Value |
|---|---|
response_type | code |
client_id | Your CLIENT_ID |
code_challenge_method | S256 |
code_challenge | Base64URL(SHA256(code_verifier)) |
scope | offline projects:read projects:write projects:create workspaces:read workspaces:write |
state | Random anti-CSRF token |
Exchange the authorization code at https://lovable.dev/oauth/token:
| Parameter | Value |
|---|---|
grant_type | authorization_code |
code | The authorization code from the redirect |
redirect_uri | The registered redirect URI for your client |
client_id | Your CLIENT_ID |
code_verifier | The PKCE verifier you generated |
When the access token expires (after 8 hours), use the refresh token:
curl -s -X POST https://lovable.dev/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "refresh_token=<your-refresh-token>" \
-d "client_id=<your-client-id>" \
-d "redirect_uri=<your-registered-redirect-uri>"
TOKEN=$(bash scripts/lovable-get-token.sh)
curl -s -X POST https://mcp.lovable.dev/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_workspaces","arguments":{}},"id":1}'
TOKEN=$(bash scripts/lovable-get-token.sh)
WORKSPACE_ID="<your-workspace-id>"
curl -s -X POST https://mcp.lovable.dev/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"list_projects\",\"arguments\":{\"workspace_id\":\"$WORKSPACE_ID\"}},\"id\":1}"
TOKEN=$(bash scripts/lovable-get-token.sh)
PROJECT_ID="<your-project-id>"
curl -s -X POST https://mcp.lovable.dev/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"deploy_project\",\"arguments\":{\"project_id\":\"$PROJECT_ID\"}},\"id\":1}"
TOKEN=$(bash scripts/lovable-get-token.sh)
PROJECT_ID="<your-project-id>"
curl -s -X POST https://mcp.lovable.dev/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"send_message\",\"arguments\":{\"project_id\":\"$PROJECT_ID\",\"message\":\"Add a dark mode toggle to the header\"}},\"id\":1}"
Combine this skill with a CI/CD or agent workflow:
main in your git repolist_projectsdeploy_project(project_id)| Tool | Parameters | Description |
|---|---|---|
create_project | workspace_id (required), description (required), initial_message, tech_stack, visibility, template_project_id, selected_libraries | Create a new Lovable project |
send_message | project_id (required), message (required), wait, timeout_seconds, plan_mode | Send a prompt to the Lovable agent |
get_project | project_id (required) | Get project details (URLs, latest commit, status) |
list_projects | workspace_id (required), query, visibility, sort_by, limit | List/search all workspace projects |
deploy_project | project_id (required), name (optional slug) | Publish current build to production |
| Tool | Parameters | Description |
|---|---|---|
list_files | project_id, ref | List files at a git ref |
read_file | project_id, ref, path | Read full file contents |
get_diff | project_id, message_id | View diff for a specific edit |
list_edits | project_id | Full edit history (reverse chronological) |
get_message | project_id, message_id | Check status of a send_message |
| Tool | Parameters | Description |
|---|---|---|
list_workspaces | (none) | List all workspaces |
get_workspace | workspace_id (required) | Workspace details: plan, credits, members |
get_me | (none) | Auth user profile |
| Tool | Parameters | Description |
|---|---|---|
get_database_status | project_id (required) | Check if DB is enabled |
enable_database | project_id (required) | Provision PostgreSQL |
query_database | project_id (required), query (required) | Run SQL |
| Tool | Parameters | Description |
|---|---|---|
get_project_analytics | project_id, start_date, end_date | Historical metrics |
get_project_analytics_trend | project_id | Real-time visitors |
| Tool | Parameters | Description |
|---|---|---|
get_workspace_knowledge | workspace_id | Read AI governance policies |
set_workspace_knowledge | workspace_id, text | Set workspace-wide AI rules |
| Tool | Parameters | Description |
|---|---|---|
list_connectors | workspace_id | List connected services |
list_available_connectors | workspace_id | Browse available connectors |
add_connector | connector_id | Get URL to add a connector via dashboard |
remove_connector | workspace_id, connector_id | Remove a connector |
list_workspaces() → get workspace_idcreate_project(workspace_id, description, initial_message) → get project_idget_project(project_id) → confirm it's built, get preview_urlsend_message(project_id, message) → iterate if neededget_diff(project_id, message_id) → review changesdeploy_project(project_id) → ship itlist_workspaces() → get workspace_idlist_projects(workspace_id) → see all projectslist_edits(), read_file(), get_database_status()Run the token refresh script:
bash scripts/lovable-refresh-token.sh
If the refresh token no longer works, run the OAuth setup again:
bash scripts/lovable-oauth-setup.sh
The Lovable MCP server uses OAuth 2.0 Bearer tokens, NOT the Lovable-API-Key header. The API key from Lovable support only works for tools/list (discovery). For tools/call you MUST use an OAuth Bearer token obtained through the PKCE flow.
Verify the MCP server is reachable:
curl -s -o /dev/null -w "%{http_code}" https://mcp.lovable.dev/.well-known/oauth-protected-resource
Should return HTTP 200.
config/lovable-tokens.json file should be in your .gitignore.