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.
/api/v2/mcpsAuthenticatedRegister 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
namestringrequiredDisplay name for the MCP server.
descriptionstringDescription of the server and its tools.
typestringrequiredTransport type: "sse" or "websocket". The type "stdio" (a local command) is refused.
configobjectrequiredTransport configuration, with config.url or config.endpoint.
config.urlstringThe server's public URL: http(s) for sse; ws(s) or http(s) for websocket. Required unless config.endpoint is given.
config.endpointstringA public http(s) URL that the health check and the tool refresh use. A websocket server needs one for those two.
config.headersobjectCustom headers, saved with the server.
metadataobjectArbitrary metadata.
tagsstring[]Tags for categorization.
workspaceIdstringWorkspace to scope the server to.
isEnabledbooleanWhether the server is enabled. Defaults to true.
Request
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
}
}/api/v2/mcpsAuthenticatedList 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
searchstringSearch by name or description.
typestringFilter by transport type: sse or websocket.
statusstringFilter by status: registered, connected, disconnected, error.
workspaceIdstringFilter by workspace.
isEnabledbooleanFilter by enabled status.
limitintegerMaximum results. Defaults to 50.
offsetintegerPagination offset.
Request
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
}/api/v2/mcps/:idAuthenticatedGet full MCP server details including configuration, tools, and status.
Path Parameters
idstringrequiredUUID of the MCP server.
Request
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
}
}/api/v2/mcps/:idAuthenticatedUpdate 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
idstringrequiredUUID of the MCP server.
Body Parameters
namestringUpdated name.
descriptionstringUpdated description.
configobjectUpdated transport config.
metadataobjectUpdated metadata.
tagsstring[]Updated tags.
isEnabledbooleanEnable or disable the server.
Request
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
}
}/api/v2/mcps/:idAuthenticatedSoft-delete an MCP server. Sets deleted_at, disables it, and sets status to 'deleted'.
Path Parameters
idstringrequiredUUID of the MCP server.
Request
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.
/api/v2/mcps/:id/toolsAuthenticatedList the tools saved for an MCP server at its last tool refresh.
Path Parameters
idstringrequiredUUID of the MCP server.
Request
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
}/api/v2/mcps/:id/healthAuthenticatedCheck 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
idstringrequiredUUID of the MCP server.
Request
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"
}/api/v2/mcps/:id/refreshAuthenticatedRefresh 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
idstringrequiredUUID of the MCP server.
Request
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"
}