List MCP Servers
GET
/v1/mcp/serversReturns a paginated list of all enabled MCP tool servers available on SandBase. Use this endpoint to discover servers by category, browse available integrations, and find the name identifier needed for other MCP endpoints.
This endpoint is also available at /api/mcp/servers without authentication for public browsing.
Authentication
| Endpoint | Auth Required |
|---|---|
GET /v1/mcp/servers | Yes — Authorization: Bearer <API_KEY> |
GET /api/mcp/servers | No — public access |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number (1-indexed). Values less than 1 are treated as 1. |
pageSize | integer | 20 | Number of results per page. Must be between 1 and 100; invalid values default to 20. |
Response
Returns a paginated list of MCP server objects wrapped in the standard response envelope.
Response Fields
| Field | Type | Description |
|---|---|---|
code | integer | 0 on success |
data.data | array | Array of MCP server objects |
data.total | integer | Total number of enabled MCP servers |
data.page | integer | Current page number |
data.page_size | integer | Number of items per page |
Server Object
| Field | Type | Description |
|---|---|---|
name | string | Unique server identifier (e.g. exa/exa). Use this in other MCP endpoints. |
display_name | string | Human-readable server name (e.g. Exa Search) |
description | string | Brief description of the server's capabilities |
vendor | string | Server vendor/publisher name |
capability_tags | string[] | Category tags (e.g. ["web-search", "research"]) |
enabled | boolean | Always true in list results (disabled servers are excluded) |
Example Request
bash
# List first page of MCP servers (authenticated)
curl "https://api.sandbase.ai/v1/mcp/servers?page=1&pageSize=10" \
-H "Authorization: Bearer sb-your-api-key"
# Public access (no auth required)
curl "https://api.sandbase.ai/api/mcp/servers?page=1&pageSize=10"Example Response
json
{
"code": 0,
"data": {
"data": [
{
"name": "exa/exa",
"display_name": "Exa Search",
"description": "Web search optimized for AI — returns clean, structured content from across the internet.",
"vendor": "Exa",
"capability_tags": ["web-search", "research"],
"enabled": true
},
{
"name": "browserbase/browserbase",
"display_name": "Browserbase",
"description": "Cloud browser automation — navigate pages, extract data, fill forms, and take screenshots.",
"vendor": "Browserbase",
"capability_tags": ["browser", "automation", "scraping"],
"enabled": true
},
{
"name": "neon/neon-postgres",
"display_name": "Neon Postgres",
"description": "Serverless Postgres database — run SQL queries, manage schemas, and handle migrations.",
"vendor": "Neon",
"capability_tags": ["database", "postgres", "sql"],
"enabled": true
}
],
"total": 2100,
"page": 1,
"page_size": 10
},
"message": "ok"
}Error Responses
| Status | Error Code | Description |
|---|---|---|
| 401 | unauthorized | Missing or invalid API key (authenticated endpoint only) |
| 500 | internal_error | Failed to query MCP servers from database |
Error Example
json
{
"error": "internal_error",
"message": "Failed to query MCP servers"
}Pagination
Results are ordered by sort_order (descending) then display_name (ascending). To iterate through all servers:
python
import requests
page = 1
all_servers = []
while True:
resp = requests.get(
"https://api.sandbase.ai/v1/mcp/servers",
params={"page": page, "pageSize": 100},
headers={"Authorization": "Bearer sb-your-api-key"}
)
data = resp.json()["data"]
all_servers.extend(data["data"])
if len(all_servers) >= data["total"]:
break
page += 1
print(f"Found {len(all_servers)} MCP servers")Related
- List Tools for a Server — Get available tools for a specific MCP server
- SSE Proxy — Connect to an MCP server via SSE
- Client Configuration — Generate IDE config snippets
- MCP Tools Overview — API overview and authentication

