MCP Servers API

Save and manage the Model Context Protocol (MCP) servers you use. A server is reached over the network at its URL, with the transport type sse or websocket. A server of type stdio (a local command) is refused: it can no longer be saved. Check a server's health, refresh its tool list, and manage its settings. All endpoints require authentication and are rate-limited to 100 requests per minute.

Base path: /api/v2/mcps

MCP Server CRUD

Register, list, retrieve, update, and delete MCP servers. Soft-delete is used to preserve historical data.

POST/api/v2/mcpsAuthenticated

Register a new MCP server. The server starts in 'registered' status with an empty tool list, filled by a tool refresh. A body with type stdio (a local command) is refused with 400 and code stdio_not_supported; nothing is saved.

Body Parameters

namestringrequired

Display name for the MCP server.

descriptionstring

Description of the server and its tools.

typestringrequired

Transport type: "sse" or "websocket". The type "stdio" (a local command) is refused.

configobjectrequired

Transport configuration, with config.url or config.endpoint.

config.urlstring

The server's public URL: http(s) for sse; ws(s) or http(s) for websocket. Required unless config.endpoint is given.

config.endpointstring

A public http(s) URL that the health check and the tool refresh use. A websocket server needs one for those two.

config.headersobject

Custom headers, saved with the server.

metadataobject

Arbitrary metadata.

tagsstring[]

Tags for categorization.

workspaceIdstring

Workspace to scope the server to.

isEnabledboolean

Whether the server is enabled. Defaults to true.

Request

cURL
curl -X POST "https://api.lvng.ai/api/v2/mcps" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Response 201

{
  "success": true,
  "mcp": {
    "id": "mcp_abc123",
    "user_id": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
    "name": "Web Search MCP",
    "description": "Provides web search and scraping tools",
    "type": "sse",
    "config": {
      "url": "https://mcp.myserver.com/sse",
      "headers": { "x-api-key": "server-key-123" }
    },
    "status": "registered",
    "is_enabled": true,
    "tools": [],
    "tags": ["search", "web"],
    "created_at": "2026-04-01T12:00:00.000Z",
    "startable": true
  }
}
GET/api/v2/mcpsAuthenticated

List MCP servers with search, filtering, and pagination. Each server carries startable: one saved earlier as stdio (a local command) is listed with startable false and not_startable_reason; it can no longer be started, and can be renamed, switched off or deleted.

Query Parameters

searchstring

Search by name or description.

typestring

Filter by transport type: sse or websocket.

statusstring

Filter by status: registered, connected, disconnected, error.

workspaceIdstring

Filter by workspace.

isEnabledboolean

Filter by enabled status.

limitinteger

Maximum results. Defaults to 50.

offsetinteger

Pagination offset.

Request

cURL
curl -X GET "https://api.lvng.ai/api/v2/mcps" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

{
  "success": true,
  "mcps": [
    {
      "id": "mcp_abc123",
      "name": "Web Search MCP",
      "type": "sse",
      "status": "connected",
      "is_enabled": true,
      "tags": ["search", "web"],
      "created_at": "2026-04-01T12:00:00.000Z",
      "startable": true
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}
GET/api/v2/mcps/:idAuthenticated

Get full MCP server details including configuration, tools, and status.

Path Parameters

idstringrequired

UUID of the MCP server.

Request

cURL
curl -X GET "https://api.lvng.ai/api/v2/mcps/{id}" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

{
  "success": true,
  "mcp": {
    "id": "mcp_abc123",
    "name": "Web Search MCP",
    "description": "Provides web search and scraping tools",
    "type": "sse",
    "config": { "url": "https://mcp.myserver.com/sse" },
    "status": "connected",
    "is_enabled": true,
    "tools": [
      { "name": "web_search", "description": "Search the web" },
      { "name": "scrape_url", "description": "Scrape a URL" }
    ],
    "tags": ["search", "web"],
    "last_connected_at": "2026-04-01T12:00:00.000Z",
    "created_at": "2026-04-01T12:00:00.000Z",
    "startable": true
  }
}
PUT/api/v2/mcps/:idAuthenticated

Update MCP server configuration. Allowed fields: name, description, config, metadata, tags, isEnabled. The type cannot be changed. A body with type stdio is refused with 400 and code stdio_not_supported, and a server saved earlier as stdio is refused a new config.

Path Parameters

idstringrequired

UUID of the MCP server.

Body Parameters

namestring

Updated name.

descriptionstring

Updated description.

configobject

Updated transport config.

metadataobject

Updated metadata.

tagsstring[]

Updated tags.

isEnabledboolean

Enable or disable the server.

Request

cURL
curl -X PUT "https://api.lvng.ai/api/v2/mcps/{id}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Response 200

{
  "success": true,
  "mcp": {
    "id": "mcp_abc123",
    "name": "Web Search MCP",
    "is_enabled": false,
    "tags": ["search", "web"],
    "updated_at": "2026-04-01T14:00:00.000Z",
    "startable": true
  }
}
DELETE/api/v2/mcps/:idAuthenticated

Soft-delete an MCP server. Sets deleted_at, disables it, and sets status to 'deleted'.

Path Parameters

idstringrequired

UUID of the MCP server.

Request

cURL
curl -X DELETE "https://api.lvng.ai/api/v2/mcps/{id}" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

{
  "success": true,
  "message": "MCP server deleted"
}

Server Operations

List tools, check server health, and refresh tool catalogs.

GET/api/v2/mcps/:id/toolsAuthenticated

List the tools saved for an MCP server at its last tool refresh.

Path Parameters

idstringrequired

UUID of the MCP server.

Request

cURL
curl -X GET "https://api.lvng.ai/api/v2/mcps/{id}/tools" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

{
  "success": true,
  "mcpId": "mcp_abc123",
  "mcpName": "Web Search MCP",
  "status": "connected",
  "lastConnected": "2026-04-01T12:00:00.000Z",
  "tools": [
    { "name": "web_search", "description": "Search the web for information" },
    { "name": "scrape_url", "description": "Scrape content from a URL" }
  ],
  "count": 2
}
POST/api/v2/mcps/:id/healthAuthenticated

Check MCP server health with an HTTP request to the server's URL (config.endpoint for a websocket server; its WebSocket transport is not tested). A server with no URL is judged by its last connection (healthy if within 5 minutes). A server saved earlier as stdio is never contacted: it answers healthy false and startable false.

Path Parameters

idstringrequired

UUID of the MCP server.

Request

cURL
curl -X POST "https://api.lvng.ai/api/v2/mcps/{id}/health" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Response 200

{
  "success": true,
  "mcpId": "mcp_abc123",
  "name": "Web Search MCP",
  "healthy": true,
  "status": "connected",
  "statusCode": 200,
  "responseTime": 89,
  "checkedAt": "2026-04-01T14:00:00.000Z"
}
POST/api/v2/mcps/:id/refreshAuthenticated

Refresh the tool list by fetching from the /tools path of the server's URL (the one the health check uses). Falls back to the saved tool list if the server is unreachable. A server saved earlier as stdio is never contacted: its saved list comes back with startable false.

Path Parameters

idstringrequired

UUID of the MCP server.

Request

cURL
curl -X POST "https://api.lvng.ai/api/v2/mcps/{id}/refresh" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Response 200

{
  "success": true,
  "mcpId": "mcp_abc123",
  "name": "Web Search MCP",
  "message": "Tools fetched from server",
  "tools": [
    { "name": "web_search", "description": "Search the web for information" },
    { "name": "scrape_url", "description": "Scrape content from a URL" },
    { "name": "extract_links", "description": "Extract all links from a page" }
  ],
  "count": 3,
  "refreshedAt": "2026-04-01T14:00:00.000Z"
}