# MCP tool reference

1 callable tools.

Use tools/call at https://mcp.schedulerzero.com/mcp with the exact tool name and arguments below. The /tools/ paths in this view are documentation identifiers, not HTTP endpoints. Request execution is disabled for this reference.

Inputs are shown for personal API keys (bound) and for OAuth/delegated agents. Output schemas describe MCP structuredContent: native objects pass through; arrays, scalars and null use a data wrapper. Text content retains the native JSON result.

[Connect a client](/mcp/connect) · [Authentication and authorization](/authentication) · [Generated auth guide](/auth.md) · [Download tool catalog](/mcp-catalog.json) · [Agent documentation](/llms.txt)

## approve_permission_request

Approve a pending permission request, adding all (default) or a chosen subset of the requested permissions to the requester's direct grants in the workspace.

Use only when the reviewer explicitly approved this request and the exact permissions; pass confirmed: true. You can grant only permissions the reviewer holds.

Never approve on your own initiative or your own person's request. To grant access without a request, use manage_organization_members.

Obtain the user's explicit authorization before invoking a write or destructive action. This is a client interaction requirement, not a server-issued approval token.

Scopes: workspaceMember:update

Risk: security_admin; confirmation: explicit; idempotency: supported.

### Input schema (personal API key)

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    },
    "requestId": {
      "$ref": "#/$defs/PermissionRequestId"
    },
    "permissions": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "analytics:export",
          "analytics:read",
          "apiKey:create",
          "apiKey:delete",
          "apiKey:read",
          "apiKey:update",
          "blocklist:create",
          "blocklist:delete",
          "blocklist:read",
          "campaign:archive",
          "campaign:create",
          "campaign:delete",
          "campaign:launch",
          "campaign:pause",
          "campaign:read",
          "campaign:update",
          "dialer:assign_numbers",
          "dialer:assign_seats",
          "dialer:create",
          "dialer:delete",
          "dialer:dial",
          "dialer:manage_billing",
          "dialer:manage_number_health",
          "dialer:manage_numbers",
          "dialer:manage_numbers_self",
          "dialer:manage_voicemails",
          "dialer:read",
          "dialer:read_analytics",
          "dialer:read_numbers_all",
          "dialer:release_numbers",
          "dialer:update",
          "domain:manage_dns",
          "domain:purchase",
          "domain:read",
          "domain:transfer",
          "emailVerification:manage_credits",
          "emailVerification:manage_keys",
          "emailVerification:manage_sharing",
          "emailVerification:read",
          "emailVerification:verify",
          "inbox:connect",
          "inbox:create",
          "inbox:delete",
          "inbox:read",
          "inbox:update",
          "inbox:warmup_manage",
          "integration:create",
          "integration:delete",
          "integration:read",
          "integration:update",
          "lead:create",
          "lead:delete",
          "lead:export",
          "lead:import",
          "lead:read",
          "lead:update",
          "leadList:create",
          "leadList:delete",
          "leadList:read",
          "leadList:update",
          "phoneVerification:manage_keys",
          "phoneVerification:read",
          "phoneVerification:verify",
          "replyLabel:create",
          "replyLabel:delete",
          "replyLabel:read",
          "replyLabel:update",
          "sequence:create",
          "sequence:delete",
          "sequence:read",
          "sequence:update",
          "sql:manage_dashboards",
          "sql:query",
          "support:create",
          "support:read",
          "support:update",
          "tag:create",
          "tag:delete",
          "tag:read",
          "tag:update",
          "task:create",
          "task:delete",
          "task:read",
          "task:update",
          "template:create",
          "template:delete",
          "template:read",
          "template:update",
          "unibox:archive",
          "unibox:label",
          "unibox:read",
          "unibox:reply",
          "webhook:create",
          "webhook:delete",
          "webhook:read",
          "webhook:update",
          "whiteLabel:read",
          "whiteLabel:update",
          "workflow:create",
          "workflow:delete",
          "workflow:publish",
          "workflow:read",
          "workflow:run",
          "workflow:update",
          "workspace:read",
          "workspace:update",
          "workspaceMember:invite",
          "workspaceMember:read",
          "workspaceMember:remove",
          "workspaceMember:update"
        ]
      },
      "minItems": 1,
      "maxItems": 100
    },
    "note": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "confirmed": {
      "type": "boolean",
      "enum": [
        true
      ]
    }
  },
  "required": [
    "workspaceId",
    "requestId",
    "confirmed"
  ],
  "patternProperties": {
    "^(?!(?:workspaceId|requestId|permissions|note|confirmed)$)[\\s\\S]*$": false
  },
  "additionalProperties": true,
  "propertyNames": {
    "type": "string",
    "enum": [
      "workspaceId",
      "requestId",
      "permissions",
      "note",
      "confirmed"
    ]
  },
  "$defs": {
    "PermissionRequestId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    }
  }
}
```

### Input schema (OAuth / delegated agent)

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    },
    "requestId": {
      "$ref": "#/$defs/PermissionRequestId"
    },
    "permissions": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "analytics:export",
          "analytics:read",
          "apiKey:create",
          "apiKey:delete",
          "apiKey:read",
          "apiKey:update",
          "blocklist:create",
          "blocklist:delete",
          "blocklist:read",
          "campaign:archive",
          "campaign:create",
          "campaign:delete",
          "campaign:launch",
          "campaign:pause",
          "campaign:read",
          "campaign:update",
          "dialer:assign_numbers",
          "dialer:assign_seats",
          "dialer:create",
          "dialer:delete",
          "dialer:dial",
          "dialer:manage_billing",
          "dialer:manage_number_health",
          "dialer:manage_numbers",
          "dialer:manage_numbers_self",
          "dialer:manage_voicemails",
          "dialer:read",
          "dialer:read_analytics",
          "dialer:read_numbers_all",
          "dialer:release_numbers",
          "dialer:update",
          "domain:manage_dns",
          "domain:purchase",
          "domain:read",
          "domain:transfer",
          "emailVerification:manage_credits",
          "emailVerification:manage_keys",
          "emailVerification:manage_sharing",
          "emailVerification:read",
          "emailVerification:verify",
          "inbox:connect",
          "inbox:create",
          "inbox:delete",
          "inbox:read",
          "inbox:update",
          "inbox:warmup_manage",
          "integration:create",
          "integration:delete",
          "integration:read",
          "integration:update",
          "lead:create",
          "lead:delete",
          "lead:export",
          "lead:import",
          "lead:read",
          "lead:update",
          "leadList:create",
          "leadList:delete",
          "leadList:read",
          "leadList:update",
          "phoneVerification:manage_keys",
          "phoneVerification:read",
          "phoneVerification:verify",
          "replyLabel:create",
          "replyLabel:delete",
          "replyLabel:read",
          "replyLabel:update",
          "sequence:create",
          "sequence:delete",
          "sequence:read",
          "sequence:update",
          "sql:manage_dashboards",
          "sql:query",
          "support:create",
          "support:read",
          "support:update",
          "tag:create",
          "tag:delete",
          "tag:read",
          "tag:update",
          "task:create",
          "task:delete",
          "task:read",
          "task:update",
          "template:create",
          "template:delete",
          "template:read",
          "template:update",
          "unibox:archive",
          "unibox:label",
          "unibox:read",
          "unibox:reply",
          "webhook:create",
          "webhook:delete",
          "webhook:read",
          "webhook:update",
          "whiteLabel:read",
          "whiteLabel:update",
          "workflow:create",
          "workflow:delete",
          "workflow:publish",
          "workflow:read",
          "workflow:run",
          "workflow:update",
          "workspace:read",
          "workspace:update",
          "workspaceMember:invite",
          "workspaceMember:read",
          "workspaceMember:remove",
          "workspaceMember:update"
        ]
      },
      "minItems": 1,
      "maxItems": 100
    },
    "note": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "confirmed": {
      "type": "boolean",
      "enum": [
        true
      ]
    }
  },
  "required": [
    "workspaceId",
    "requestId",
    "confirmed"
  ],
  "patternProperties": {
    "^(?!(?:workspaceId|requestId|permissions|note|confirmed)$)[\\s\\S]*$": false
  },
  "additionalProperties": true,
  "propertyNames": {
    "type": "string",
    "enum": [
      "workspaceId",
      "requestId",
      "permissions",
      "note",
      "confirmed"
    ]
  },
  "$defs": {
    "PermissionRequestId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    }
  }
}
```

### Output schema (structuredContent)

```json
{
  "$defs": {
    "PermissionRequestId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    },
    "PermissionRequestStatus": {
      "type": "string",
      "enum": [
        "pending",
        "approved",
        "denied",
        "canceled",
        "expired"
      ]
    },
    "PermissionRequestPerson": {
      "type": "object",
      "properties": {
        "userId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "userId",
        "name",
        "email"
      ],
      "patternProperties": {
        "^(?!(?:userId|name|email)$)[\\s\\S]*$": false
      },
      "additionalProperties": true,
      "propertyNames": {
        "type": "string",
        "enum": [
          "userId",
          "name",
          "email"
        ]
      }
    },
    "PermissionRequestContext": {
      "type": "object",
      "properties": {
        "attemptedOperation": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "attemptedTool": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "explanation": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "patternProperties": {
        "^(?!(?:attemptedOperation|attemptedTool|explanation)$)[\\s\\S]*$": false
      },
      "additionalProperties": true,
      "propertyNames": {
        "type": "string",
        "enum": [
          "attemptedOperation",
          "attemptedTool",
          "explanation"
        ]
      }
    },
    "PermissionRequestSource": {
      "type": "string",
      "enum": [
        "web",
        "api",
        "agent"
      ]
    },
    "UtcDateTimeEncoded": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
    },
    "PermissionRequest": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/PermissionRequestId"
        },
        "workspaceId": {
          "type": "string",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
          "format": "uuid"
        },
        "status": {
          "$ref": "#/$defs/PermissionRequestStatus"
        },
        "requester": {
          "$ref": "#/$defs/PermissionRequestPerson"
        },
        "permissions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "analytics:export",
              "analytics:read",
              "apiKey:create",
              "apiKey:delete",
              "apiKey:read",
              "apiKey:update",
              "blocklist:create",
              "blocklist:delete",
              "blocklist:read",
              "campaign:archive",
              "campaign:create",
              "campaign:delete",
              "campaign:launch",
              "campaign:pause",
              "campaign:read",
              "campaign:update",
              "dialer:assign_numbers",
              "dialer:assign_seats",
              "dialer:create",
              "dialer:delete",
              "dialer:dial",
              "dialer:manage_billing",
              "dialer:manage_number_health",
              "dialer:manage_numbers",
              "dialer:manage_numbers_self",
              "dialer:manage_voicemails",
              "dialer:read",
              "dialer:read_analytics",
              "dialer:read_numbers_all",
              "dialer:release_numbers",
              "dialer:update",
              "domain:manage_dns",
              "domain:purchase",
              "domain:read",
              "domain:transfer",
              "emailVerification:manage_credits",
              "emailVerification:manage_keys",
              "emailVerification:manage_sharing",
              "emailVerification:read",
              "emailVerification:verify",
              "inbox:connect",
              "inbox:create",
              "inbox:delete",
              "inbox:read",
              "inbox:update",
              "inbox:warmup_manage",
              "integration:create",
              "integration:delete",
              "integration:read",
              "integration:update",
              "lead:create",
              "lead:delete",
              "lead:export",
              "lead:import",
              "lead:read",
              "lead:update",
              "leadList:create",
              "leadList:delete",
              "leadList:read",
              "leadList:update",
              "phoneVerification:manage_keys",
              "phoneVerification:read",
              "phoneVerification:verify",
              "replyLabel:create",
              "replyLabel:delete",
              "replyLabel:read",
              "replyLabel:update",
              "sequence:create",
              "sequence:delete",
              "sequence:read",
              "sequence:update",
              "sql:manage_dashboards",
              "sql:query",
              "support:create",
              "support:read",
              "support:update",
              "tag:create",
              "tag:delete",
              "tag:read",
              "tag:update",
              "task:create",
              "task:delete",
              "task:read",
              "task:update",
              "template:create",
              "template:delete",
              "template:read",
              "template:update",
              "unibox:archive",
              "unibox:label",
              "unibox:read",
              "unibox:reply",
              "webhook:create",
              "webhook:delete",
              "webhook:read",
              "webhook:update",
              "whiteLabel:read",
              "whiteLabel:update",
              "workflow:create",
              "workflow:delete",
              "workflow:publish",
              "workflow:read",
              "workflow:run",
              "workflow:update",
              "workspace:read",
              "workspace:update",
              "workspaceMember:invite",
              "workspaceMember:read",
              "workspaceMember:remove",
              "workspaceMember:update"
            ]
          }
        },
        "grantedPermissions": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "analytics:export",
                  "analytics:read",
                  "apiKey:create",
                  "apiKey:delete",
                  "apiKey:read",
                  "apiKey:update",
                  "blocklist:create",
                  "blocklist:delete",
                  "blocklist:read",
                  "campaign:archive",
                  "campaign:create",
                  "campaign:delete",
                  "campaign:launch",
                  "campaign:pause",
                  "campaign:read",
                  "campaign:update",
                  "dialer:assign_numbers",
                  "dialer:assign_seats",
                  "dialer:create",
                  "dialer:delete",
                  "dialer:dial",
                  "dialer:manage_billing",
                  "dialer:manage_number_health",
                  "dialer:manage_numbers",
                  "dialer:manage_numbers_self",
                  "dialer:manage_voicemails",
                  "dialer:read",
                  "dialer:read_analytics",
                  "dialer:read_numbers_all",
                  "dialer:release_numbers",
                  "dialer:update",
                  "domain:manage_dns",
                  "domain:purchase",
                  "domain:read",
                  "domain:transfer",
                  "emailVerification:manage_credits",
                  "emailVerification:manage_keys",
                  "emailVerification:manage_sharing",
                  "emailVerification:read",
                  "emailVerification:verify",
                  "inbox:connect",
                  "inbox:create",
                  "inbox:delete",
                  "inbox:read",
                  "inbox:update",
                  "inbox:warmup_manage",
                  "integration:create",
                  "integration:delete",
                  "integration:read",
                  "integration:update",
                  "lead:create",
                  "lead:delete",
                  "lead:export",
                  "lead:import",
                  "lead:read",
                  "lead:update",
                  "leadList:create",
                  "leadList:delete",
                  "leadList:read",
                  "leadList:update",
                  "phoneVerification:manage_keys",
                  "phoneVerification:read",
                  "phoneVerification:verify",
                  "replyLabel:create",
                  "replyLabel:delete",
                  "replyLabel:read",
                  "replyLabel:update",
                  "sequence:create",
                  "sequence:delete",
                  "sequence:read",
                  "sequence:update",
                  "sql:manage_dashboards",
                  "sql:query",
                  "support:create",
                  "support:read",
                  "support:update",
                  "tag:create",
                  "tag:delete",
                  "tag:read",
                  "tag:update",
                  "task:create",
                  "task:delete",
                  "task:read",
                  "task:update",
                  "template:create",
                  "template:delete",
                  "template:read",
                  "template:update",
                  "unibox:archive",
                  "unibox:label",
                  "unibox:read",
                  "unibox:reply",
                  "webhook:create",
                  "webhook:delete",
                  "webhook:read",
                  "webhook:update",
                  "whiteLabel:read",
                  "whiteLabel:update",
                  "workflow:create",
                  "workflow:delete",
                  "workflow:publish",
                  "workflow:read",
                  "workflow:run",
                  "workflow:update",
                  "workspace:read",
                  "workspace:update",
                  "workspaceMember:invite",
                  "workspaceMember:read",
                  "workspaceMember:remove",
                  "workspaceMember:update"
                ]
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "reason": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ]
        },
        "context": {
          "$ref": "#/$defs/PermissionRequestContext"
        },
        "source": {
          "$ref": "#/$defs/PermissionRequestSource"
        },
        "agentName": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "createdAt": {
          "$ref": "#/$defs/UtcDateTimeEncoded"
        },
        "expiresAt": {
          "$ref": "#/$defs/UtcDateTimeEncoded"
        },
        "decidedAt": {
          "anyOf": [
            {
              "$ref": "#/$defs/UtcDateTimeEncoded"
            },
            {
              "type": "null"
            }
          ]
        },
        "decidedBy": {
          "anyOf": [
            {
              "$ref": "#/$defs/PermissionRequestPerson"
            },
            {
              "type": "null"
            }
          ]
        },
        "decisionNote": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ]
        },
        "reviewable": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "workspaceId",
        "status",
        "requester",
        "permissions",
        "grantedPermissions",
        "reason",
        "context",
        "source",
        "agentName",
        "createdAt",
        "expiresAt",
        "decidedAt",
        "decidedBy",
        "decisionNote",
        "reviewable"
      ],
      "patternProperties": {
        "^(?!(?:id|workspaceId|status|requester|permissions|grantedPermissions|reason|context|source|agentName|createdAt|expiresAt|decidedAt|decidedBy|decisionNote|reviewable)$)[\\s\\S]*$": false
      },
      "additionalProperties": true,
      "propertyNames": {
        "type": "string",
        "enum": [
          "id",
          "workspaceId",
          "status",
          "requester",
          "permissions",
          "grantedPermissions",
          "reason",
          "context",
          "source",
          "agentName",
          "createdAt",
          "expiresAt",
          "decidedAt",
          "decidedBy",
          "decisionNote",
          "reviewable"
        ]
      }
    },
    "PermissionRequestDecisionResult": {
      "type": "object",
      "properties": {
        "request": {
          "$ref": "#/$defs/PermissionRequest"
        },
        "changed": {
          "type": "boolean"
        }
      },
      "required": [
        "request",
        "changed"
      ],
      "patternProperties": {
        "^(?!(?:request|changed)$)[\\s\\S]*$": false
      },
      "additionalProperties": true,
      "propertyNames": {
        "type": "string",
        "enum": [
          "request",
          "changed"
        ]
      }
    }
  },
  "type": "object",
  "anyOf": [
    {
      "allOf": [
        {
          "$ref": "#/$defs/PermissionRequestDecisionResult"
        },
        {
          "type": "object"
        }
      ]
    },
    {
      "type": "object",
      "properties": {
        "data": {
          "allOf": [
            {
              "$ref": "#/$defs/PermissionRequestDecisionResult"
            },
            {
              "not": {
                "type": "object"
              }
            }
          ]
        }
      },
      "required": [
        "data"
      ],
      "additionalProperties": false
    }
  ]
}
```

### Underlying API operations

- `permissionRequests.approve`: `POST /v1/workspaces/:workspaceId/permission-requests/:requestId/approve`

