---
search:
  tags:
    - Actions
    - GET
seo:
  description: >-
    Answers 404 where the mcp-upstreams feature is off. The environment's
    registered MCP… Reference for the GET /api/v2/mcp-upstreams endpoint in the
    Anlyon API.
sidebar:
  label: List upstream MCP servers
  badge: GET
title: List upstream MCP servers
type: openapi-operation
---
Answers 404 where the `mcp-upstreams` feature is off. The environment's registered MCP servers, each with its last listing of tools (their text is the server's, untrusted) and the tools adopted from it, with whether each adopted definition is still the one the server lists.

`GET /api/v2/mcp-upstreams`

**Responses**

- `200` — The environment's upstream MCP servers.
- `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": [
    {
      "id": "mcpu_01JABCDEF",
      "name": "mailer",
      "url": "http://example.com",
      "headers": {
        "property1": "string",
        "property2": "string"
      },
      "registryName": "string",
      "protocolVersion": "string",
      "transport": "streamable-http",
      "serverInfo": {},
      "tools": [
        {
          "name": "string",
          "hash": "string",
          "definition": {},
          "suggestedClass": "read",
          "reasons": [
            "string"
          ],
          "schemaCheck": "full",
          "schemaCheckReason": "remote_ref"
        }
      ],
      "toolsHash": "string",
      "listedAt": "2019-08-24T14:15:22Z",
      "lastError": {},
      "listedWith": "anonymous",
      "check": {
        "status": "ok",
        "checkedAt": "2019-08-24T14:15:22Z",
        "nextCheckAt": "2019-08-24T14:15:22Z",
        "failures": 0
      },
      "changes": [
        {
          "tool": "string",
          "kind": "changed",
          "action": "string",
          "actionId": "string",
          "pinnedHash": "string",
          "currentHash": "string",
          "suggestedClass": "read",
          "before": {},
          "detectedAt": "2019-08-24T14:15:22Z"
        }
      ],
      "oauth": {
        "resource": "http://example.com",
        "issuer": "http://example.com",
        "authorizationServers": [
          "string"
        ],
        "authorizationEndpoint": "http://example.com",
        "tokenEndpoint": "http://example.com",
        "scopesSupported": [
          "string"
        ],
        "scopes": [
          "string"
        ],
        "clientId": "string",
        "clientRegistration": "pre_registered",
        "advertised": {
          "dynamicRegistration": true,
          "clientIdMetadataDocuments": true,
          "pkceS256": true
        },
        "publicClient": true,
        "redirectUri": "http://example.com",
        "operatorConnected": true
      },
      "adopted": [
        {
          "tool": "string",
          "action": "string",
          "actionId": "string",
          "enabled": true,
          "state": "current",
          "toolHash": "string",
          "requiresApproval": true,
          "schemaCheck": "full",
          "schemaCheckReason": "remote_ref"
        }
      ],
      "archivedAt": "2019-08-24T14:15:22Z",
      "createdAt": "2019-08-24T14:15:22Z",
      "updatedAt": "2019-08-24T14:15:22Z"
    }
  ]
}
```

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."
  }
}
```
