Passo Developers

MCP Tools

Every tool the Passo remote MCP server exposes, generated from the committed inventory.

Connect an MCP client to https://mcp.passo.co/v1/mcp (or https://mcp.passo.co/v1/mcp/readonly for read-only access).

whoami

Returns the profile of the Passo user the connected access token belongs to. Takes no parameters. Call this first to confirm the connection resolved to the expected account before using other tools. Returns JSON: id, displayName (may be null if the user hasn't named their profile yet), avatarUrl (may be null), and lastUsedWorkspaceSlug (the workspace they last worked in, or null). Returns an error result if the token is valid but the user has not created a profile row yet.

Input

This tool takes no parameters.

Annotations

  • readOnlyHint: true
  • idempotentHint: true
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "whoami",
    "arguments": {}
  }
}

Example result

{
  "id": "a1b2c3d4-0000-0000-0000-000000000000",
  "displayName": "Ada Lovelace",
  "avatarUrl": "https://example.com/avatar.png",
  "lastUsedWorkspaceSlug": "acme"
}

list_workspaces

Lists the Passo workspaces the connected user is a member of, ordered by name. All parameters are optional. `limit` is the max number of workspaces to return (default 20, max 100; a larger value is clamped, not rejected). `offset` skips that many workspaces for pagination (default 0; e.g. offset: 20 with limit: 20 fetches the second page). Returns JSON: `workspaces` (each with id, name, slug, archivedAt — an ISO timestamp when archived, otherwise null — and domain, its company domain like "robinhood.com" or null when none is on file), `total` (the member count before pagination, so you can tell whether more pages exist), `limit`, and `offset`.

Input

ParameterTypeRequiredDescription
limitintegernoMax workspaces to return (default 20, max 100).
offsetintegernoNumber of workspaces to skip for pagination (default 0).

Annotations

  • readOnlyHint: true
  • idempotentHint: true
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "list_workspaces",
    "arguments": {
      "limit": 1,
      "offset": 1
    }
  }
}

Example result

{
  "workspaces": [
    {
      "id": "11111111-0000-0000-0000-000000000000",
      "name": "Acme",
      "slug": "acme",
      "archivedAt": null
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

list_my_videos

Lists the videos the connected user can see — a creator's own deliveries (an agency's whole roster), or a workspace member's videos — newest first. All parameters are optional. `limit` is the max to return (default 20, max 100; a larger value is clamped, not rejected). `offset` skips that many for pagination (default 0; e.g. offset: 20 with limit: 20 fetches the second page). Returns JSON: `videos` (each with id, title, dealId, jobTitle, brandName, muxStatus — preparing/ready/errored, state — in_review/changes_requested/approved/rejected, playbackId, versionCount, and createdAt), `total` (the count before pagination, so you can tell whether more pages exist), `limit`, and `offset`.

Input

ParameterTypeRequiredDescription
limitintegernoMax videos to return (default 20, max 100).
offsetintegernoNumber of videos to skip for pagination (default 0).

Annotations

  • readOnlyHint: true
  • idempotentHint: true
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "list_my_videos",
    "arguments": {
      "limit": 1,
      "offset": 1
    }
  }
}

Example result

{
  "videos": [
    {
      "id": "22222222-0000-0000-0000-000000000000",
      "title": "Product Launch Spot",
      "dealId": "33333333-0000-0000-0000-000000000000",
      "jobTitle": "Spring Campaign",
      "brandName": "Acme",
      "muxStatus": "ready",
      "state": "in_review",
      "playbackId": "abc123def456",
      "versionCount": 2,
      "createdAt": "2026-08-15T12:00:00Z"
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

list_videos_awaiting_review

Lists videos whose current cut is awaiting a review decision (review state `in_review`) across the workspaces the connected user can see, newest first — a brand reviewer's queue. All parameters are optional. `workspaceId` narrows to a single workspace (e.g. workspaceId: "7f3c…"); omit it to span every workspace the caller belongs to. `limit` is the max to return (default 20, max 100; a larger value is clamped, not rejected). `offset` skips that many for pagination (default 0; e.g. offset: 20 with limit: 20 fetches the second page). Returns JSON: `videos` (each with id, title, workspaceId, creatorId, dealId, jobTitle, brandName, muxStatus — preparing/ready/errored, state — always in_review here, playbackId, versionCount, and createdAt), `total` (the count before pagination, so you can tell whether more pages exist), `limit`, and `offset`. Use `get_video_review` with a video's id to see its full version history before deciding.

Input

ParameterTypeRequiredDescription
workspaceIdstringnoNarrow to a single workspace by id; omit to span all the caller's workspaces.
limitintegernoMax videos to return (default 20, max 100).
offsetintegernoNumber of videos to skip for pagination (default 0).

Annotations

  • readOnlyHint: true
  • idempotentHint: true
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "list_videos_awaiting_review",
    "arguments": {
      "workspaceId": "example",
      "limit": 1,
      "offset": 1
    }
  }
}

Example result

{
  "videos": [
    {
      "id": "22222222-0000-0000-0000-000000000000",
      "title": "Product Launch Spot",
      "workspaceId": "11111111-0000-0000-0000-000000000000",
      "creatorId": "a1b2c3d4-0000-0000-0000-000000000000",
      "dealId": "33333333-0000-0000-0000-000000000000",
      "jobTitle": "Spring Campaign",
      "brandName": "Acme",
      "muxStatus": "ready",
      "state": "in_review",
      "playbackId": "abc123def456",
      "versionCount": 2,
      "createdAt": "2026-08-15T12:00:00Z"
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

get_video_review

Fetches a single video and its full version history so an agent can review it — pair it with `list_videos_awaiting_review`, which returns the ids. Required: `videoId` (the video's id, e.g. videoId: "vid_4qk9mz2rx7bt"). Returns JSON: the video (id, title, workspaceId, creatorId, dealId, jobTitle, brandName, currentVersionId, createdAt, updatedAt) and `versions`, oldest first, each with id, versionNo, muxStatus (preparing/ready/errored), state (in_review/changes_requested/approved/rejected), playbackId, durationSeconds, originalFilename, fileSizeBytes, uploadedByUserId, supersededAt, createdAt, and isCurrent (true for the version under review). If `videoId` is omitted the result is `{error: "invalid"}`; if the video does not exist or you cannot see it, `{error: "not_found"}`.

Input

ParameterTypeRequiredDescription
videoIdstringnoThe id of the video to fetch for review (required).

Annotations

  • readOnlyHint: true
  • idempotentHint: true
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "get_video_review",
    "arguments": {
      "videoId": "example"
    }
  }
}

Example result

{
  "video": {
    "id": "22222222-0000-0000-0000-000000000000",
    "title": "Product Launch Spot",
    "workspaceId": "11111111-0000-0000-0000-000000000000",
    "creatorId": "a1b2c3d4-0000-0000-0000-000000000000",
    "dealId": "33333333-0000-0000-0000-000000000000",
    "jobTitle": "Spring Campaign",
    "brandName": "Acme",
    "currentVersionId": "44444444-0000-0000-0000-000000000000",
    "createdAt": "2026-08-15T12:00:00Z",
    "updatedAt": "2026-08-20T09:00:00Z"
  },
  "versions": [
    {
      "id": "55555555-0000-0000-0000-000000000000",
      "versionNo": 1,
      "muxStatus": "ready",
      "state": "changes_requested",
      "playbackId": "old789ghi012",
      "durationSeconds": 32,
      "originalFilename": "launch-v1.mp4",
      "fileSizeBytes": 48000000,
      "uploadedByUserId": "a1b2c3d4-0000-0000-0000-000000000000",
      "supersededAt": "2026-08-18T14:00:00Z",
      "createdAt": "2026-08-15T12:00:00Z",
      "isCurrent": false
    },
    {
      "id": "44444444-0000-0000-0000-000000000000",
      "versionNo": 2,
      "muxStatus": "ready",
      "state": "in_review",
      "playbackId": "abc123def456",
      "durationSeconds": 30,
      "originalFilename": "launch-v2.mp4",
      "fileSizeBytes": 45000000,
      "uploadedByUserId": "a1b2c3d4-0000-0000-0000-000000000000",
      "supersededAt": null,
      "createdAt": "2026-08-18T14:00:00Z",
      "isCurrent": true
    }
  ]
}

comment_on_video

Leaves a timestamped comment on a video version (the review thread), or a one-level reply. Required: `versionId` (the version's id, e.g. versionId: "7f3c…") and `body` (the note text). Optional: `startMs` to pin the note to a moment in milliseconds (e.g. startMs: 14000 for 0:14), `endMs` (>= startMs) to mark a range, and `parentId` to reply to an existing comment. Only workspace members may comment; comments are internal (not visible to the creator). Returns the created comment as JSON (id, versionId, parentId, authorUserId, body, startMs, endMs, visibility, createdAt). If `versionId` or `body` is missing, or a range is backwards, the result is `{error: "invalid"}` describing what to fix; if you cannot comment on that version, `{error: "forbidden"}`.

Input

ParameterTypeRequiredDescription
versionIdstringnoThe video version's id (required).
bodystringnoThe comment text (required).
startMsintegernoStart of the note in milliseconds, e.g. 14000 for 0:14.
endMsintegernoEnd of the range in milliseconds; requires startMs and must be >= it.
parentIdstringnoId of the comment to reply to (one level of nesting only).

Annotations

  • readOnlyHint: false
  • idempotentHint: false
  • openWorldHint: false

Example call

{
  "method": "tools/call",
  "params": {
    "name": "comment_on_video",
    "arguments": {
      "versionId": "example",
      "body": "example",
      "startMs": 1,
      "endMs": 1,
      "parentId": "example"
    }
  }
}

Example result

(no example yet)