{
  "openapi": "3.0.1",
  "info": {
    "title": "MCP Trust & Rug-Pull Monitor",
    "description": "Monitor authorized public MCP servers for tool, schema, permission, package, TLS, and behavioral drift. Detect suspicious changes, preserve trusted baselines, and quarantine risky updates for manual approval.",
    "version": "1.0",
    "x-build-id": "rj1uEHomoqahFvHvi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fascinating_lentil~mcp-trust-rug-pull-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fascinating_lentil-mcp-trust-rug-pull-monitor",
        "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/fascinating_lentil~mcp-trust-rug-pull-monitor/runs": {
      "post": {
        "operationId": "runs-sync-fascinating_lentil-mcp-trust-rug-pull-monitor",
        "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/fascinating_lentil~mcp-trust-rug-pull-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-fascinating_lentil-mcp-trust-rug-pull-monitor",
        "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",
          "authorizedUseConfirmed"
        ],
        "properties": {
          "servers": {
            "title": "Authorized MCP servers",
            "minItems": 1,
            "maxItems": 25,
            "type": "array",
            "description": "One to 25 public MCP metadata endpoints that you own, are authorized to inspect, or that intentionally expose public metadata. Disabled entries count toward the 25-entry limit.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "name": {
                  "title": "Server name",
                  "type": "string",
                  "description": "Stable human-readable server name used with the endpoint URL to derive baseline keys.",
                  "editor": "textfield",
                  "minLength": 1,
                  "maxLength": 128,
                  "pattern": ".*\\S.*"
                },
                "url": {
                  "title": "Metadata endpoint URL",
                  "type": "string",
                  "description": "Absolute HTTP(S) MCP metadata URL without URL credentials, fragments, or credential-shaped query parameters. HTTPS is required unless allowHttp is explicitly enabled.",
                  "editor": "textfield",
                  "minLength": 8,
                  "maxLength": 10000,
                  "pattern": "^https?:\\/\\/[^\\s]+$"
                },
                "transport": {
                  "title": "Transport",
                  "type": "string",
                  "description": "Metadata discovery transport. auto tries bounded hosted transports; http_sse is recognized but intentionally returns unsupported_transport in this release.",
                  "editor": "select",
                  "default": "auto",
                  "enum": [
                    "auto",
                    "streamable_http",
                    "http_sse",
                    "static_json"
                  ],
                  "enumTitles": [
                    "Auto detect",
                    "Streamable HTTP",
                    "Legacy HTTP/SSE (unsupported)",
                    "Static JSON manifest"
                  ]
                },
                "enabled": {
                  "title": "Enabled",
                  "type": "boolean",
                  "description": "When false, keep this configured server in the input without inspecting it during this run.",
                  "default": true
                },
                "tags": {
                  "title": "Tags",
                  "type": "array",
                  "description": "Optional labels for organizing this server. Up to 20 non-empty labels of at most 128 characters each are accepted.",
                  "editor": "stringList",
                  "maxItems": 20,
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128,
                    "pattern": ".*\\S.*"
                  }
                },
                "headers": {
                  "title": "Secret request headers",
                  "type": "object",
                  "description": "Optional authorized request headers. The containing servers array is encrypted as secret Actor input, covering this entire object. Values must be non-empty, contain no line breaks, and be at most 4096 characters; total header names and values are limited to 8192 bytes at runtime. Host, connection, length, transfer, upgrade, proxy, TE, and trailer headers are rejected. Never put secrets in URLs, tags, or names.",
                  "editor": "json",
                  "maxProperties": 64,
                  "patternKey": "^[!#$%&'*+.^_`|~0-9A-Za-z-]{1,128}$",
                  "patternValue": "^[^\\r\\n]{1,4096}$",
                  "additionalProperties": true
                }
              },
              "required": [
                "name",
                "url"
              ]
            }
          },
          "authorizedUseConfirmed": {
            "title": "Authorization attestation",
            "type": "boolean",
            "description": "Required. Set true only when every target intentionally exposes public metadata, belongs to you, or you have explicit permission to inspect it. False is rejected by the Actor.",
            "default": false
          },
          "baselineKeyValueStoreId": {
            "title": "Persistent baseline key-value store",
            "type": "string",
            "description": "Optional persistent Key-Value Store for trusted and candidate baselines. Required together with a baseline Request Queue for non-dry-run initialization, update, or promotion. Reuse the same selected stores across scheduled runs."
          },
          "baselineRequestQueueId": {
            "title": "Persistent baseline lock queue",
            "type": "string",
            "description": "Optional persistent Request Queue used only for atomic baseline mutation locks. Required together with the baseline Key-Value Store for non-dry-run initialization, update, or promotion."
          },
          "baselineMode": {
            "title": "Baseline mode",
            "enum": [
              "initialize_only",
              "compare_only",
              "compare_and_update",
              "manual_approval"
            ],
            "type": "string",
            "description": "Controls trusted baseline persistence. The safe default compare_only never creates or updates a trusted baseline. Choose a mutating mode only after reviewing the endpoint and persistence behavior.",
            "default": "compare_only"
          },
          "promoteCandidateBaseline": {
            "title": "Promote matching candidate",
            "type": "boolean",
            "description": "When true, promote and consume a compatible stored candidate only if its endpoint identity, current snapshot hash, and exact trusted-parent hash (or explicit no-parent state) match the current state. Any mismatch returns promotion_mismatch and preserves both records.",
            "default": false
          },
          "minimumAlertSeverity": {
            "title": "Minimum webhook severity",
            "enum": [
              "informational",
              "low",
              "medium",
              "high",
              "critical"
            ],
            "type": "string",
            "description": "Lowest report severity eligible for the optional webhook. Status-specific alert rules still apply, and webhook delivery occurs only after Dataset persistence succeeds.",
            "default": "medium"
          },
          "webhookUrl": {
            "title": "Alert webhook URL",
            "pattern": "^https:\\/\\/[^\\s]+$",
            "minLength": 9,
            "maxLength": 2048,
            "type": "string",
            "description": "Optional public HTTPS webhook URL without URL credentials. Do not include tokens or other secrets in the URL."
          },
          "checkVulnerabilities": {
            "title": "Check OSV vulnerabilities",
            "type": "boolean",
            "description": "Query the public OSV API only for package identities and versions explicitly exposed by server metadata. Unavailable lookups are reported without fabricating matches.",
            "default": true
          },
          "checkTls": {
            "title": "Inspect TLS metadata",
            "type": "boolean",
            "description": "Inspect HTTPS certificate validity, hostname, expiry, and negotiated protocol metadata before the MCP metadata request.",
            "default": true
          },
          "includeRawNormalizedSnapshot": {
            "title": "Include normalized snapshot",
            "type": "boolean",
            "description": "Include the redacted canonical metadata snapshot in each Dataset report. Leave disabled unless downstream review requires the larger payload.",
            "default": false
          },
          "requestTimeoutSeconds": {
            "title": "Request timeout",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for each bounded network operation, from 1 to 120 seconds. A separate per-server wall-clock limit also applies.",
            "default": 20
          },
          "maxRetries": {
            "title": "Maximum retries",
            "minimum": 0,
            "maximum": 4,
            "type": "integer",
            "description": "Maximum retry count for eligible metadata requests, from zero to four. Authentication and other terminal failures are not retried indefinitely.",
            "default": 2
          },
          "concurrency": {
            "title": "Server concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of enabled servers inspected concurrently, from one to ten.",
            "default": 5
          },
          "dryRun": {
            "title": "Dry run",
            "type": "boolean",
            "description": "Inspect and compare without creating, updating, promoting, or replacing trusted or candidate baseline records.",
            "default": false
          },
          "allowHttp": {
            "title": "Allow plain HTTP",
            "type": "boolean",
            "description": "Explicitly opt in to public plain-HTTP targets. Disabled by default because HTTP provides no transport confidentiality or certificate validation.",
            "default": false
          },
          "allowPrivateNetwork": {
            "title": "Allow private networks",
            "type": "boolean",
            "description": "Reserved compatibility field that must remain false. Private, loopback, link-local, metadata-service, local-file, Unix-socket, and stdio targets are unsupported by this hosted Actor.",
            "default": false
          },
          "maxResponseBytes": {
            "title": "Maximum metadata response size",
            "minimum": 16384,
            "maximum": 5242880,
            "type": "integer",
            "description": "Maximum accepted metadata response body size, from 16 KiB to 5 MiB. Oversized or incomplete responses never update a trusted baseline.",
            "default": 1048576
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}