{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote MCP Server Tool-Surface and Permission Change Ledger",
    "description": "Watch remote MCP servers for tool-surface and permission changes. The Actor reads the declared tool list with anonymous requests, compares it against a stored digest, and reports each added tool, removed tool, changed input schema, changed destructive-act",
    "version": "0.1",
    "x-build-id": "r9QRtNTH4sNFB1sTp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kingii98~remote-mcp-server-tool-surface-and-permission-change-ledger/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kingii98-remote-mcp-server-tool-surface-and-permission-change-ledger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/kingii98~remote-mcp-server-tool-surface-and-permission-change-ledger/runs": {
      "post": {
        "operationId": "runs-sync-kingii98-remote-mcp-server-tool-surface-and-permission-change-ledger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/kingii98~remote-mcp-server-tool-surface-and-permission-change-ledger/run-sync": {
      "post": {
        "operationId": "run-sync-kingii98-remote-mcp-server-tool-surface-and-permission-change-ledger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "servers",
          "ledger_name"
        ],
        "properties": {
          "servers": {
            "title": "MCP server endpoints",
            "minItems": 1,
            "maxItems": 200,
            "type": "array",
            "description": "1 to 200 remote MCP endpoint URLs that speak the Streamable HTTP transport, for example https://mcp.deepwiki.com/mcp. The Actor sends anonymous requests only, and it accepts no credential. If you leave this field empty, the Actor reads the four public example servers shown below.",
            "default": [
              "https://mcp.deepwiki.com/mcp",
              "https://mcp.context7.com/mcp",
              "https://huggingface.co/mcp",
              "https://api.githubcopilot.com/mcp/"
            ],
            "items": {
              "type": "string"
            }
          },
          "ledger_name": {
            "title": "Ledger name",
            "type": "string",
            "description": "Name of the stored baseline set. It is the record key inside the named key-value store 'mcp-tool-surface-ledger'. Use one name for each connected server fleet. The Actor creates the baseline on the first run, and writes the record once, at the end of the run.",
            "default": "DEFAULT"
          },
          "alert_on": {
            "title": "Change classes to record",
            "minItems": 0,
            "maxItems": 9,
            "uniqueItems": true,
            "type": "array",
            "description": "Which change classes become a change row. Each recorded change is one billed event, so a class that you do not select costs nothing. The default is the five classes that change what a connected agent can do.",
            "items": {
              "type": "string",
              "enum": [
                "tool_added",
                "tool_removed",
                "input_schema_changed",
                "destructive_hint_changed",
                "auth_requirement_changed",
                "read_only_hint_changed",
                "open_world_hint_changed",
                "tool_description_changed",
                "server_version_changed"
              ],
              "enumTitles": [
                "Tool added",
                "Tool removed",
                "Tool input schema changed",
                "Destructive-action hint changed",
                "Authentication requirement changed",
                "Read-only hint changed",
                "Open-world hint changed",
                "Tool description changed",
                "Server version changed"
              ]
            },
            "default": [
              "tool_added",
              "tool_removed",
              "input_schema_changed",
              "destructive_hint_changed",
              "auth_requirement_changed"
            ]
          },
          "request_timeout_seconds": {
            "title": "Request timeout (seconds)",
            "minimum": 2,
            "maximum": 120,
            "type": "integer",
            "description": "Per-request timeout for each MCP call and each metadata request. A server that exceeds it gets the TIMEOUT reason code.",
            "default": 20
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of servers read at the same time.",
            "default": 5
          },
          "max_redirects": {
            "title": "Maximum redirects",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum redirect hops followed for each request. Every hop is checked again against the private-address rules. A chain that repeats a URL gets the REDIRECT_LOOP reason code.",
            "default": 3
          },
          "max_response_bytes": {
            "title": "Maximum response bytes",
            "minimum": 10000,
            "maximum": 5000000,
            "type": "integer",
            "description": "Per-response body cap. A larger answer gets the RESPONSE_TOO_LARGE reason code and is not parsed.",
            "default": 2000000
          },
          "count_resources_and_prompts": {
            "title": "Count resources and prompts",
            "type": "boolean",
            "description": "Also call resources/list and prompts/list when the server declares those capabilities, so that the row reports resources_total and prompts_total. Turn it off to send fewer requests. The counts are reported, but they are not compared, because the ledger watches the tool and permission surface.",
            "default": true
          },
          "probe_oauth_metadata": {
            "title": "Read OAuth protected-resource metadata",
            "type": "boolean",
            "description": "When a server demands authentication, send up to two .well-known GET requests of RFC 9728 to find its protected-resource metadata URL and its authorization servers. No request is sent for a server that allows an anonymous tools/list call.",
            "default": true
          },
          "max_server_seconds": {
            "title": "Maximum seconds for one server",
            "minimum": 5,
            "maximum": 600,
            "type": "integer",
            "description": "Wall-clock budget for one server. The probe sends up to 17 requests to one server, and each request may take several redirect hops, so the request timeout alone does not bound a server. A server that exceeds this budget gets the TIMEOUT reason code and keeps its stored ledger entry.",
            "default": 60
          },
          "max_run_seconds": {
            "title": "Maximum seconds for the whole run",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Wall-clock deadline for the whole server list. A server that the run does not reach before this deadline gets the RUN_DEADLINE reason code and keeps its stored ledger entry. The run still writes every row and succeeds.",
            "default": 900
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}