---
search:
  tags:
    - Actions
    - POST
seo:
  description: >-
    Answers 404 where the mcp-upstreams feature is off. A read: it stores…
    Reference for the POST /api/v2/mcp-upstreams/inspect endpoint in the Anlyon
    API.
sidebar:
  label: Inspect an MCP server before registering it
  badge: POST
title: Inspect an MCP server before registering it
type: openapi-operation
---
Answers 404 where the `mcp-upstreams` feature is off. A read: it stores nothing, adopts nothing and sends no credential. Says what the server is, through the transport and discovery registration uses: `open` (lists its tools without a sign-in), `oauth` (signs people in with OAuth), `credential` (asks for a sign-in and names no OAuth metadata), `refused` (the reason Anlyon will not sign in to it) or `unreachable`. What the server answers is a 200 with one of those; an endpoint registration would refuse is a 400. Its text is the server's, untrusted.

`POST /api/v2/mcp-upstreams/inspect`

**Request body** (`application/json`, required)

- `url` (string<uri>, required)

Request body example:

```json
{
  "url": "https://mcp.example.com/mcp"
}
```

**Responses**

- `200` — What the server is.
- `400` — Bad Request - Invalid input data
- `401` — Unauthorized - Invalid or missing API key
- `403` — Authenticated credential lacks the required scope or workspace access.
- `404` — Not Found - Resource does not exist
- `429` — Too Many Requests - Rate limit exceeded. A workspace's API requests are limited per minute and per UTC clock hour by plan; \`Retry-After\` says when to try again, and an hourly refusal names the limit and when the count resets. Successful responses carry the same limits in \`X-RateLimit-Limit\`, \`X-RateLimit-Remaining\`, \`X-RateLimit-Reset\` (the minute) and \`X-RateLimit-Limit-Hour\`, \`X-RateLimit-Remaining-Hour\`, \`X-RateLimit-Reset-Hour\` (the hour).

Response example, 200:

```json
{
  "success": true,
  "data": {
    "kind": "open",
    "host": "mcp.example.com",
    "toolCount": 0,
    "transport": "streamable-http",
    "serverInfo": {
      "name": "string",
      "title": "string",
      "version": "string"
    },
    "signIn": {
      "issuer": "http://example.com",
      "authorizationHost": "string",
      "tokenHost": "string",
      "scopesSupported": [
        "string"
      ],
      "advertised": {
        "dynamicRegistration": true,
        "clientIdMetadataDocuments": true,
        "pkceS256": true
      },
      "redirectUri": "http://example.com"
    },
    "status": 0,
    "reason": "string",
    "message": "string"
  }
}
```

Response example, 400:

```json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request data",
    "details": {
      "url": "Invalid URL format"
    }
  }
}
```

Response example, 401:

```json
{
  "success": false,
  "error": {
    "code": "AUTHENTICATION_ERROR",
    "message": "Invalid or missing API key"
  }
}
```

Response example, 404:

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Resource not found"
  }
}
```

Response example, 429:

```json
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please try again later."
  }
}
```
