MCP server intelligence profile

Perforce P4 MCP Server

Integrates with Perforce P4 version control system via Model Context Protocol, providing safe read/write tools for changelists, files, shelves, workspaces, jobs, reviews, and server metadata

Local OnlyOfficial distributionperforce
Verified cleanPypi · 2026.3.2996147

Our scanner tested version 2026.3.2996147 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

1Distribution channel
15Independently observed tools
0Linked remote endpoints
AvailableVersion intelligence

Install and connect

Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.

Install p4mcp-server from PyPI

Version 2026.3.2996147 declares 1 executable entrypoint.

python -m pip install 'p4mcp-server==2026.3.2996147'
uvx --from 'p4mcp-server==2026.3.2996147' p4mcp-server
MCP client configuration example
{
  "mcpServers": {
    "p4mcp-server": {
      "command": "uvx",
      "args": [
        "--from",
        "p4mcp-server==2026.3.2996147",
        "p4mcp-server"
      ]
    }
  }
}

Identity

Canonical slugperforce-p4-mcp-server-1474e1beDeploymentLocal Only
Canonical packagepypi:p4mcp-serverRepositoryperforce/p4mcp-server
First publishedJun 30, 2026Latest releaseJun 30, 2026
Last security verificationClassification confidence90%
PublicationPublishedOfficial distributionYes

Distributions

ChannelIdentifierCurrent versionVersionsSource
pypip4mcp-server2026.3.29961471Repository

Current release

PackageVersionPublished / observedInventorySecurity scan
pypip4mcp-server2026.3.2996147CurrentJun 30, 202615 toolsSucceeded · 0 resources · 0 promptsFailed
Enterprise protection

Continuously monitor this MCP for security risk

Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.

  • Independent exact-version security scans
  • Continuous release and vulnerability monitoring
  • Risk-change alerts with capability context
  • Historical evidence and API exports
Custom pricingContact salesTailored to your organization, integrations, data needs, and support requirements.

Current version evidence

Provenanceartifact_hash_verifiedSignature
MCP SDKpython_mcp_source_evidence Artifact SHA-256f1b05e8d3ce6acea3bfbda9828a14fc1dac009026f4b718c53859e4d978378b1
Scannermcp-proof-engine 0.1.0Scan completedAug 21, 2026
Security rating48 / 100Methodologyversion-rating-1.0
Executable entrypoints
[
  "p4mcp-server"
]

Current protocol inventory

2025-06-18Negotiated protocol
P4 MCP ServerServer-reported name
6Capability groups
Aug 21, 2026Observed

Tools 15

ToolCategoryAnnotationsRisk
modify_changelistsCreate/delete changelists, update changelists and organize files/jobs (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Changelist modification action: create makes new changelist, update modifies description, submit commits changes, delete removes changelist, move_files reorganizes files between changelists",
      "enum": [
        "create",
        "update",
        "submit",
        "delete",
        "move_files"
      ],
      "type": "string"
    },
    "changelist_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist ID - required for most actions except create",
      "examples": [
        "12345"
      ]
    },
    "description": {
      "default": "",
      "description": "Changelist description - required for create, optional for update",
      "examples": [
        "Fix bug in authentication module",
        "Add new feature X"
      ],
      "type": "string"
    },
    "file_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "File paths - required for move_files action",
      "examples": [
        [
          "//depot/projectX/file1.txt"
        ]
      ]
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_filesAdd, edit, move, delete, revert, reconcile, resolve, and sync files (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "File modification action",
      "enum": [
        "add",
        "edit",
        "delete",
        "move",
        "revert",
        "reconcile",
        "resolve",
        "sync"
      ],
      "type": "string"
    },
    "file_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Full depot or client or local paths",
      "examples": [
        [
          "//depot/projectX/file1.txt",
          "//workspace_name/projectX/file2.txt"
        ]
      ]
    },
    "changelist": {
      "default": "default",
      "description": "Changelist ID or 'default'",
      "examples": [
        "default",
        "12345"
      ],
      "type": "string"
    },
    "source_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Source paths - required for move action",
      "examples": [
        [
          "//depot/projectX/file1.txt"
        ]
      ]
    },
    "target_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Target paths - required for move action",
      "examples": [
        [
          "//depot/projectX/file1_renamed.txt"
        ]
      ]
    },
    "mode": {
      "default": "auto",
      "description": "Resolve mode: auto(-am), safe(-as), force(-af), preview(-n), theirs(-at), yours(-ay)",
      "enum": [
        "auto",
        "safe",
        "force",
        "preview",
        "theirs",
        "yours"
      ],
      "type": "string"
    },
    "force": {
      "default": false,
      "description": "Force operation - use with caution",
      "type": "boolean"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_jobsLink or unlink jobs (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Job modification action: link_job associates job with changelist, unlink_job removes job association",
      "enum": [
        "link_job",
        "unlink_job"
      ],
      "type": "string"
    },
    "changelist_id": {
      "description": "Changelist ID - required for link_job/unlink_job",
      "examples": [
        "12345"
      ],
      "type": "string"
    },
    "job_id": {
      "description": "Job ID - required for link_job/unlink_job",
      "examples": [
        "job67890"
      ],
      "type": "string"
    }
  },
  "required": [
    "action",
    "changelist_id",
    "job_id"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_reviewsCreate/update/delete reviews (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Review modification action. To delete/obliterate review, use 'obliterate' action which requires approval",
      "enum": [
        "create",
        "refresh_projects",
        "vote",
        "transition",
        "append_participants",
        "add_comment",
        "reply_comment",
        "append_change",
        "replace_with_change",
        "join",
        "archive_inactive",
        "mark_comment_read",
        "mark_comment_unread",
        "mark_all_comments_read",
        "mark_all_comments_unread",
        "update_author",
        "update_description",
        "replace_participants",
        "delete_participants",
        "leave",
        "obliterate"
      ],
      "type": "string"
    },
    "review_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review ID (required for most actions except create, archive_inactive)",
      "examples": [
        12345
      ]
    },
    "change_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist ID (required for create, append_change, replace_with_change)",
      "examples": [
        67890
      ]
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review description (optional on create)",
      "examples": [
        "Implement feature X"
      ]
    },
    "reviewers": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of reviewers",
      "examples": [
        [
          "alice",
          "bob"
        ]
      ]
    },
    "required_reviewers": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of required reviewers",
      "examples": [
        [
          "carol"
        ]
      ]
    },
    "reviewer_group_names": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of reviewer group names",
      "examples": [
        [
          "Developers",
          "QA"
        ]
      ]
    },
    "reviewer_groups_required": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of required reviewer groups",
      "examples": [
        [
          "Architects"
        ]
      ]
    },
    "comment_file_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "File path for inline comment",
      "examples": [
        "//depot/file.txt"
      ]
    },
    "comment_left_line": {
      "anyOf": [
        {
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Left diff line number for inline comment",
      "examples": [
        40
      ]
    },
    "comment_right_line": {
      "anyOf": [
        {
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Right diff line number for inline comment",
      "examples": [
        42
      ]
    },
    "comment_version": {
      "anyOf": [
        {
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review version for comment attachment",
      "examples": [
        1
      ]
    },
    "vote_value": {
      "anyOf": [
        {
          "enum": [
            "up",
            "down",
            "clear"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Vote value"
    },
    "version": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review version (optional for vote)",
      "examples": [
        2
      ]
    },
    "transition": {
      "anyOf": [
        {
          "enum": [
            "needsRevision",
            "needsReview",
            "approved",
            "committed",
            "approved:commit",
            "rejected",
            "archived"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Transition target state"
    },
    "jobs": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Associated job IDs for transition",
      "examples": [
        [
          "job000123",
          "job000456"
        ]
      ]
    },
    "fix_status": {
      "anyOf": [
        {
          "enum": [
            "open",
            "closed"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Job fix status when transitioning"
    },
    "cleanup": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Perform cleanup for approved:commit/committed transitions"
    },
    "participant_user_names": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of participant usernames",
      "examples": [
        [
          "alice",
          "bob"
        ]
      ]
    },
    "participant_users_required": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of required participant usernames",
      "examples": [
        [
          "carol"
        ]
      ]
    },
    "participant_group_names": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of participant group names",
      "examples": [
        [
          "dev-team"
        ]
      ]
    },
    "participant_groups_required": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of required participant groups",
      "examples": [
        [
          "security-team"
        ]
      ]
    },
    "body": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Comment body (required for add_comment, reply_comment)",
      "examples": [
        "Looks good."
      ]
    },
    "task_state": {
      "anyOf": [
        {
          "enum": [
            "open",
            "comment"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Task state"
    },
    "notify": {
      "anyOf": [
        {
          "enum": [
            "immediate",
            "delayed"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Notification mode"
    },
    "comment_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Parent comment ID (reply_comment, mark_comment_read/unread)",
      "examples": [
        987
      ]
    },
    "not_updated_since": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ISO date (YYYY-MM-DD) threshold for archive_inactive",
      "examples": [
        "2024-01-15"
      ]
    },
    "max_reviews": {
      "default": 0,
      "description": "Maximum number of inactive reviews to archive (0 = no limit)",
      "type": "integer"
    },
    "new_author": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New author username (update_author)",
      "examples": [
        "dave"
      ]
    },
    "new_description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "New review description (update_description)",
      "examples": [
        "Refined implementation details."
      ]
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_shelvesCreate/delete, update shelves and unshelve files (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Shelve modification action: shelve stores files to shelf, unshelve restores files from shelf, update modifies shelved files, delete removes shelf, unshelve_to_changelist restores to specific changelist",
      "enum": [
        "shelve",
        "unshelve",
        "update",
        "delete",
        "unshelve_to_changelist"
      ],
      "type": "string"
    },
    "changelist_id": {
      "description": "Changelist ID",
      "examples": [
        "12345"
      ],
      "type": "string"
    },
    "file_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "File paths for shelve/unshelve/update/delete",
      "examples": [
        [
          "//depot/projectX/file1.txt"
        ]
      ]
    },
    "target_changelist": {
      "default": "default",
      "description": "Target changelist for unshelve operations",
      "examples": [
        "default",
        "54321"
      ],
      "type": "string"
    },
    "force": {
      "default": false,
      "description": "Force operation - use with caution",
      "type": "boolean"
    }
  },
  "required": [
    "action",
    "changelist_id"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_streamsCreate/update/delete streams, edit/resolve/revert/shelve stream specs, copy/merge/integrate/populate between streams, switch workspace, create stream workspace (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Stream modification action: 'create'/'update'/'delete' a stream, 'edit_spec'/'resolve_spec'/'revert_spec'/'shelve_spec'/'unshelve_spec' for spec editing, 'copy'/'merge'/'integrate'/'populate' for propagation, 'switch' workspace stream, 'create_workspace' for a stream",
      "enum": [
        "create",
        "update",
        "delete",
        "edit_spec",
        "resolve_spec",
        "revert_spec",
        "shelve_spec",
        "unshelve_spec",
        "copy",
        "merge",
        "integrate",
        "populate",
        "switch",
        "create_workspace"
      ],
      "type": "string"
    },
    "stream_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream depot path (e.g. '//depot/main'). Also used as -S flag for propagation.",
      "examples": [
        "//depot/main",
        "//depot/dev"
      ]
    },
    "stream_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream type (required for create): mainline, development, sparsedev, release, sparserel, task, virtual",
      "examples": [
        "mainline",
        "development",
        "release",
        "task"
      ]
    },
    "parent": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Parent stream (required for non-mainline create)",
      "examples": [
        "//depot/main"
      ]
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Short display name for the stream",
      "examples": [
        "Main",
        "Dev Branch"
      ]
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream or workspace description",
      "examples": [
        "Main development stream",
        "Feature branch for project X"
      ]
    },
    "options": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream options: 'allsubmit/ownersubmit unlocked/locked toparent/notoparent fromparent/nofromparent'",
      "examples": [
        "allsubmit unlocked toparent fromparent",
        "ownersubmit locked notoparent nofromparent"
      ]
    },
    "parent_view": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Parent view treatment: 'inherit' or 'noinherit'",
      "examples": [
        "inherit",
        "noinherit"
      ]
    },
    "paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream view paths (e.g. ['share ...', 'isolate dir/...'])",
      "examples": [
        [
          "share ...",
          "isolate dir/..."
        ]
      ]
    },
    "remapped": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Remapped paths",
      "examples": [
        [
          "src/... new_src/..."
        ]
      ]
    },
    "ignored": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Ignored paths",
      "examples": [
        [
          "build/...",
          "tmp/..."
        ]
      ]
    },
    "changelist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist for edit_spec, shelve_spec, unshelve_spec, or propagation, 'default' not allowed for edit_spec/shelve_spec/unshelve_spec",
      "examples": [
        "12345"
      ]
    },
    "resolve_mode": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Resolve mode for resolve_spec: 'auto', 'accept_theirs', 'accept_yours'",
      "examples": [
        "auto",
        "accept_theirs",
        "accept_yours"
      ]
    },
    "target_changelist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Target changelist for unshelve_spec",
      "examples": [
        "12345"
      ]
    },
    "parent_stream": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Override parent stream for propagation (-P flag)",
      "examples": [
        "//depot/main",
        "//depot/release"
      ]
    },
    "branch": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Branch spec name for integrate/populate (-b flag)",
      "examples": [
        "my_branch_spec"
      ]
    },
    "file_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "File paths for propagation",
      "examples": [
        [
          "//depot/dev/...",
          "//depot/dev/src/file.txt"
        ]
      ]
    },
    "preview": {
      "default": false,
      "description": "Preview only, don't make changes (-n flag)",
      "type": "boolean"
    },
    "force": {
      "default": false,
      "description": "Force operation",
      "type": "boolean"
    },
    "reverse": {
      "default": false,
      "description": "Reverse direction (-r flag)",
      "type": "boolean"
    },
    "quiet": {
      "default": false,
      "description": "Suppress informational messages (-q flag)",
      "type": "boolean"
    },
    "max_files": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Limit number of files processed (-m flag)",
      "examples": [
        100,
        500
      ]
    },
    "output_base": {
      "default": false,
      "description": "Show base revision with each scheduled resolve (-Ob flag for merge/integrate) or display list of files created (-o flag for populate)",
      "type": "boolean"
    },
    "virtual": {
      "default": false,
      "description": "Copy using virtual stream (-v flag, copy only)",
      "type": "boolean"
    },
    "schedule_branch_resolve": {
      "default": false,
      "description": "Schedule 'branch resolves' instead of branching new target files automatically (-Rb flag)",
      "type": "boolean"
    },
    "integrate_around_deleted": {
      "default": false,
      "description": "Integrate around deleted revisions (-Di flag)",
      "type": "boolean"
    },
    "skip_cherry_picked": {
      "default": false,
      "description": "Skip cherry-picked revisions already integrated (-Rs flag)",
      "type": "boolean"
    },
    "source_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Source path for populate",
      "examples": [
        "//depot/main/..."
      ]
    },
    "target_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Target path for populate",
      "examples": [
        "//depot/dev/..."
      ]
    },
    "workspace": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace name for switch",
      "examples": [
        "my_workspace"
      ]
    },
    "workspace_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace name to create (create_workspace)",
      "examples": [
        "new_stream_workspace"
      ]
    },
    "root": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace root directory (create_workspace)",
      "examples": [
        "/home/user/perforce/workspace"
      ]
    },
    "host": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Host restriction (create_workspace)",
      "examples": [
        "workstation01"
      ]
    },
    "alt_roots": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Alternate root paths (create_workspace)",
      "examples": [
        [
          "/home/user/alt_root",
          "/mnt/shared/workspace"
        ]
      ]
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
modify_workspacesCreate/delete workspace, Update workspace specs, and switch active workspace (WRITE permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Workspace modification action: create makes new workspace, delete removes workspace, update modifies workspace spec, switch changes active workspace",
      "enum": [
        "create",
        "delete",
        "update",
        "switch"
      ],
      "type": "string"
    },
    "workspace_name": {
      "description": "Workspace name",
      "examples": [
        "my_workspace"
      ],
      "type": "string"
    },
    "workspace_root": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Root path of the workspace",
      "examples": [
        "/depot/workspace",
        "C:\\workspace"
      ]
    },
    "workspace_description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace description",
      "examples": [
        "Dev workspace for project X"
      ]
    },
    "workspace_options": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "noallwrite noclobber nocompress unlocked nomodtime normdir",
      "description": "Workspace options",
      "examples": [
        "noallwrite clobber nocompress unlocked nomodtime normdir"
      ]
    },
    "workspace_line_end": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "local",
      "description": "Line ending style (local, unix, win, mac)",
      "examples": [
        "local",
        "unix"
      ]
    },
    "workspace_view": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "View mappings in depot-to-client format",
      "examples": [
        [
          "//depot/... //my_workspace/..."
        ]
      ]
    }
  },
  "required": [
    "action",
    "workspace_name"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_changelistsGet changelist details and list changelists (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Changelist query action: get retrieves specific changelist details, list returns all changelists matching filters",
      "enum": [
        "get",
        "list"
      ],
      "type": "string"
    },
    "changelist_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist ID - required for get action",
      "examples": [
        "12345",
        "default"
      ]
    },
    "workspace_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by workspace - for list action",
      "examples": [
        "my_workspace"
      ]
    },
    "user": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by user - for list action",
      "examples": [
        "alice"
      ]
    },
    "status": {
      "anyOf": [
        {
          "enum": [
            "pending",
            "submitted"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by status - for list action"
    },
    "depot_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by depot path - for list action",
      "examples": [
        "//depot/my_workspace/..."
      ]
    },
    "max_results": {
      "anyOf": [
        {
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum number of results to return. Bounds the 'list' action and also caps open files for get('default') via 'p4 opened -m N'. Omit for unbounded results."
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_filesGet file content, history, info, diff, annotations, search by name, grep by content (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "File query action, metadata includes extra information like optional attributes and file size",
      "enum": [
        "content",
        "history",
        "info",
        "metadata",
        "diff",
        "annotations",
        "search",
        "grep"
      ],
      "type": "string"
    },
    "file_path": {
      "description": "Primary file path - required for all actions",
      "examples": [
        "//depot/projectX/file.txt",
        "/local/path/file.txt"
      ],
      "type": "string"
    },
    "file2": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Second file path - required for diff action",
      "examples": [
        "//depot/projectX/file2.txt"
      ]
    },
    "diff2": {
      "default": true,
      "description": "Use p4 diff2 for depot-to-depot diff, false for mixed diff",
      "type": "boolean"
    },
    "max_results": {
      "anyOf": [
        {
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum number of results to return. Bounds history/search/grep and also caps fstat info/metadata via 'p4 fstat -m N'. Omit for unbounded info/metadata results."
    },
    "pattern": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Search or grep pattern - required for search and grep actions",
      "examples": [
        "*.py",
        "TODO",
        "class.*Handler"
      ]
    },
    "case_insensitive": {
      "default": false,
      "description": "Case-insensitive matching for grep action",
      "type": "boolean"
    }
  },
  "required": [
    "action",
    "file_path"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_jobsGet jobs from changelist and get job details (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Job query action: list_jobs returns jobs linked to changelist, get_job retrieves specific job details",
      "enum": [
        "list_jobs",
        "get_job"
      ],
      "type": "string"
    },
    "changelist_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist ID - required for list_jobs action",
      "examples": [
        "12345"
      ]
    },
    "job_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Job ID - required for get_job action",
      "examples": [
        "job67890"
      ]
    },
    "max_results": {
      "default": 100,
      "description": "Maximum number of results to return",
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_reviewsGet review details and list reviews (READ permission). Open review - state is 'approved but pending=true' or 'needsReview' or 'needsRevision'. Closed review - state is 'approved but pending=false' or 'rejected' or 'archived'.
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Review query action: list all reviews, dashboard for current user, get specific review, transitions, files_readby, files, comments, activity",
      "enum": [
        "list",
        "dashboard",
        "get",
        "transitions",
        "files_readby",
        "files",
        "comments",
        "activity"
      ],
      "type": "string"
    },
    "review_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review ID - required for get, transitions, files_readby, files, comments, activity actions",
      "examples": [
        12345,
        67890
      ]
    },
    "fields": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of fields to return for list/get actions",
      "examples": [
        [
          "id",
          "description",
          "author",
          "state"
        ],
        [
          "id",
          "author",
          "state",
          "participants",
          "commits"
        ]
      ]
    },
    "comments_fields": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "id,body,user,time",
      "description": "Comma-separated list of fields to return for comments action",
      "examples": [
        "id,body,user,time",
        "id,user,time"
      ]
    },
    "up_voters": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List of up voters for transitions action",
      "examples": [
        [
          "alice",
          "bob"
        ]
      ]
    },
    "from_version": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Starting version for files action",
      "examples": [
        1,
        2
      ]
    },
    "to_version": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Ending version for files action",
      "examples": [
        2,
        3
      ]
    },
    "max_results": {
      "default": 10,
      "description": "Maximum number of results to return",
      "type": "integer"
    },
    "after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Review ID to seek to for pagination (list action). Reviews up to and including this ID are excluded.",
      "examples": [
        "12344"
      ]
    },
    "after_updated": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Return reviews updated on the day before this date/time in seconds since epoch (list action). Mutually exclusive with 'after'.",
      "examples": [
        "1606233362"
      ]
    },
    "result_order": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Set to 'updated' to return most recently updated reviews first (list action)",
      "examples": [
        "updated"
      ]
    },
    "projects": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by project name(s) (list action)",
      "examples": [
        [
          "myproject"
        ]
      ]
    },
    "state": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by review state(s) (list action). Valid: needsRevision, needsReview, approved, approved:isPending, approved:commit, approved:notPending, rejected, archived",
      "examples": [
        [
          "needsReview"
        ]
      ]
    },
    "keywords": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Search keyword(s) to filter reviews (list action). Use with keywords_fields.",
      "examples": [
        "bugfix",
        "12345"
      ]
    },
    "keywords_fields": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Fields to search keywords in (list action). Valid: changes, author, participants, hasReviewer, description, updated, projects, state, testStatus, pending, groups, id",
      "examples": [
        [
          "description"
        ],
        [
          "author"
        ],
        [
          "changes"
        ]
      ]
    },
    "include_transitions": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Include allowed state transitions in get action response"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_serverGet server info and current user information (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Server query action: server_info returns P4 server metadata and version, current_user returns authenticated user details and permissions",
      "enum": [
        "server_info",
        "current_user"
      ],
      "type": "string"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_shelvesList shelves, get shelve diff and files (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Shelve query action: list returns all shelved changelists, diff shows shelved file differences, files lists files in shelved changelist",
      "enum": [
        "list",
        "diff",
        "files"
      ],
      "type": "string"
    },
    "changelist_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist ID - required for diff and files actions",
      "examples": [
        "12345"
      ]
    },
    "user": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by user - for list action",
      "examples": [
        "alice"
      ]
    },
    "max_results": {
      "default": 100,
      "description": "Maximum number of results to return",
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_streamsQuery streams: list, get spec, children/parent/graph, integration status, workspaces, validate files, check resolve, interchanges (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Stream query action: 'list' streams, 'get' stream spec, 'children'/'parent'/'graph' of a stream, 'integration_status' (p4 istat), 'get_workspace'/'list_workspaces', 'validate_file'/'validate_submit' against stream view, 'check_resolve' for pending spec conflicts, 'interchanges' between streams",
      "enum": [
        "list",
        "get",
        "children",
        "parent",
        "graph",
        "integration_status",
        "get_workspace",
        "list_workspaces",
        "validate_file",
        "validate_submit",
        "check_resolve",
        "interchanges"
      ],
      "type": "string"
    },
    "stream_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream depot path (e.g. '//depot/main'). Required for most actions.",
      "examples": [
        "//depot/main",
        "//depot/dev"
      ]
    },
    "stream_path": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Stream path pattern(s) for 'list' (e.g. ['//depot/...'])",
      "examples": [
        [
          "//depot/..."
        ]
      ]
    },
    "filter": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter expression string for 'list' (-F flag). Supports &, |, and parentheses. E.g. 'Parent=//Ace/MAIN&(Type=development|Type=release)'",
      "examples": [
        "Type=development",
        "Parent=//depot/main&Type=release",
        "Owner=alice|(Type=development&Parent=//depot/main)"
      ]
    },
    "fields": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Fields to return for 'list' (e.g. ['Stream', 'Owner', 'Name', 'Type'])",
      "examples": [
        [
          "Stream",
          "Owner",
          "Name",
          "Type"
        ]
      ]
    },
    "unloaded": {
      "default": false,
      "description": "Include unloaded streams/workspaces",
      "type": "boolean"
    },
    "all_streams": {
      "default": false,
      "description": "Include virtual streams in 'list' results",
      "type": "boolean"
    },
    "viewmatch": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Single depot file path to filter streams whose views contain this path",
      "examples": [
        "//depot/main/src/file.txt"
      ]
    },
    "view_without_edit": {
      "default": false,
      "description": "View locked stream without opening for edit (-v flag)",
      "type": "boolean"
    },
    "at_change": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist number for historical stream spec",
      "examples": [
        "12345"
      ]
    },
    "both_directions": {
      "default": false,
      "description": "Show integration status in both directions (-a flag for integration_status)",
      "type": "boolean"
    },
    "force_refresh": {
      "default": false,
      "description": "Force istat to assume cache is stale and search for pending integrations (-c flag)",
      "type": "boolean"
    },
    "workspace": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace name for get_workspace, validate_file, validate_submit",
      "examples": [
        "my_workspace"
      ]
    },
    "template": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Template workspace for get_workspace",
      "examples": [
        "template_workspace"
      ]
    },
    "user": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter workspaces by user (list_workspaces)",
      "examples": [
        "alice",
        "bob"
      ]
    },
    "file_paths": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "File paths for validate_file or interchanges",
      "examples": [
        [
          "//depot/main/src/file.txt",
          "//depot/dev/src/file.txt"
        ]
      ]
    },
    "changelist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Changelist for validate_submit",
      "examples": [
        "12345"
      ]
    },
    "reverse": {
      "default": false,
      "description": "Reverse comparison direction (interchanges)",
      "type": "boolean"
    },
    "long_output": {
      "default": false,
      "description": "Full changelist descriptions (interchanges)",
      "type": "boolean"
    },
    "limit": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Max changelists (interchanges)",
      "examples": [
        10,
        50
      ]
    },
    "max_results": {
      "anyOf": [
        {
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum number of results to return. Bounds 'list' and 'list_workspaces' and also caps 'children' via 'p4 streams -m N'. Omit for unbounded results."
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}
query_workspacesGet workspace details, list workspaces, check type and status (READ permission)
Input schema
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "description": "Workspace query action: list returns all workspaces matching filters, get retrieves specific workspace spec, type identifies workspace category, status shows opened files and sync state",
      "enum": [
        "list",
        "get",
        "type",
        "status"
      ],
      "type": "string"
    },
    "workspace_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Workspace name - required for get, type, status actions",
      "examples": [
        "my_workspace"
      ]
    },
    "user": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by user - optional for list action",
      "examples": [
        "alice",
        "bob"
      ]
    },
    "max_results": {
      "default": 100,
      "description": "Maximum number of results to return",
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "action"
  ],
  "type": "object"
}
Output schema
{
  "additionalProperties": true,
  "type": "object"
}

Resources 0

  • None observed.

Resource templates 0

  • None observed.

Prompts 0

  • None observed.

Remote endpoints

EndpointTransportAuthenticationHealthObserved
No verified remote endpoint is linked.

Perforce P4 MCP Server questions

How do I install Perforce P4 MCP Server?

Install the selected package version with: python -m pip install 'p4mcp-server==2026.3.2996147'

What tools does Perforce P4 MCP Server provide?

Perforce P4 MCP Server exposed 15 tools during independent protocol observation, including modify_changelists, modify_files, modify_jobs, modify_reviews, modify_shelves, modify_streams, modify_workspaces, query_changelists, and others.

Is Perforce P4 MCP Server secure?

Our scanner tested version 2026.3.2996147 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

Explore related MCP server guides

Curated product and capability guides containing this catalog record.

Official vs Community MCP Servers

Related MCP servers from this publisher

Related records share independently retained publisher or namespace evidence. They are not automatically endorsed alternatives.

Let’s talk about MCP security.

Share your details and our security team will contact you.