<strong>Perforce P4 MCP Server is a Model Context Protocol (MCP) server that integrates with the Perforce P4 version control system. It is built on
Perforce P4 MCP Server is a Model Context Protocol (MCP) server that integrates with the Perforce P4 version control system. It is built on FastMCP with
certifi — disable truststore injection and use default Python TLS certificate behavior. Custom CA bundles (P4MCP_CA_BUNDLE / --ca-bundle) take effect only in this mode.Compare MCP servers by category, or browse hosted MCP servers if you prefer an endpoint over a local process.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| Actions | - create - Create a new stream (mainline, development, release, task, virtual, etc.) |
| current_user | Get current user information and permissions |
| get | Get a detailed stream specification |
| status | Check workspace sync status |
| Parameters | depot_path (required), commit_id (required) |
| list | List changelists with filters (status, user, workspace) |
| history | Get file revision history and integration records |
| info | Get file basic details (type, size, permissions) |
| metadata | Get file metadata (attributes, filesize, etc.) |
| diff | Show differences in shelved files |
| annotations | Get file annotations with blame information |
| search | Search for files by name pattern (wildcard matching) |
| grep | Search for files by content pattern (text search) |
| ranges | Optional list of [start, end] line pairs, 1-based and inclusive (e.g. [[10, 20], [50, 60]]). Applies to the content action only. When set, the response returns |
| files | Get files in a review (with optional version range) |
| get_job | Get detailed job information and status |
| dashboard | Get current user's review dashboard (my reviews, needs attention) |
| transitions | Get available state transitions for a review |
| files_readby | Get files read status by users |
| activity | Get review activity history |
| comments | Get comments on a review |
| review_fields | Comma-separated fields to return (e.g., "id,description,author,state") |
| comments_fields | Fields for comments (default: "id,body,user,time") |
| up_voters | List of up voters for transitions |
| max_results | Maximum results |
| children | Get child streams of a given stream |
| parent | Parent stream for non-mainline create |
| graph | Get the full stream graph (parent + children) |
| integration_status | Get integration status between stream and parent (p4 istat) |
| get_workspace | Get a workspace spec bound to a stream |
| list_workspaces | List workspaces bound to a stream |
| validate_file | Validate file paths against a stream's view |
| validate_submit | Validate opened files for submit in a stream workspace |
| check_resolve | Check for pending stream spec conflicts |
| interchanges | List changelists awaiting integration between streams |
| stream_path | Path pattern(s) for list (e.g., ["//depot/..."]) |
| filter | Filter expression for list (e.g., "Owner=alice&Type=development") |
| fields | Fields to return for list (e.g., ["Stream", "Owner", "Type"]) |
| workspace | Workspace name for switch |
| file_paths | File paths for propagation |
| view_without_edit | View locked stream spec without opening for edit |
| at_change | Retrieve historical stream spec at a changelist number |
| both_directions | Show integration status in both directions |
| force_refresh | Force istat cache refresh |
| Requires | Read-only mode disabled, appropriate permissions |
| Safety | Stream existence validation, locked stream detection, bound workspace warnings, open file checks for view-affecting changes |
| refresh_projects | Refresh project associations |
| vote | Vote on a review (up, down, clear) |
| transition | Target state: needsRevision, needsReview, approved, committed, approved:commit, rejected, archived |
| append_participants | Add reviewers/groups to a review |
| replace_participants | Replace all participants |
| delete_participants | Remove participants from a review |
| add_comment | Add a comment to a review |
| reply_comment | Reply to an existing comment |
| edit_comment | Edit an existing comment's body and/or task state |
| append_change | Add a changelist to an existing review |
| replace_with_change | Replace review content with a changelist |
| join | Join a review as a participant |
| leave | Leave a review |
| archive_inactive | Archive inactive reviews |
| update_author | Change the review author |
| update_description | Update review description |
| obliterate | Permanently delete a review |
| change_id | Changelist ID (required for create, append_change, replace_with_change) |
| reviewer_groups | Reviewer groups with requirements |
| vote_value | Vote value: up, down, clear |
| version | Review version for voting |
| body | Comment body text |
| task_state | Comment task state: open, comment, addressed, verified. add_comment accepts only open and comment; addressed and verified are reachable through edit_comment. |
| notify | Notification mode: immediate, delayed |
| comment_id | Comment ID for replies, edits, or marking read/unread |
| context | Comment context (file, line numbers, content, version) |
| update | Update stream properties (name, description, options, paths, parent_view) |
| delete | Delete a stream |
| edit_spec | Open stream spec for editing (p4 stream edit) |
| resolve_spec | Resolve stream spec conflicts |
| revert_spec | Revert stream spec edits |
| shelve_spec | Shelve stream spec edits to a numbered changelist |
| unshelve_spec | Unshelve stream spec edits |
| copy | Copy changes between parent and child streams |
| merge | Merge changes between parent and child streams |
| integrate | Integrate changes with advanced options |
| populate | Populate a new stream with files (branch) |
| switch | Switch a workspace to a different stream |
| create_workspace | Create a new workspace bound to a stream |
| stream_type | Stream type for create: mainline, development, sparsedev, release, sparserel, task, virtual |
| options | Stream options: allsubmit/ownersubmit, unlocked/locked, toparent/notoparent, fromparent/nofromparent, mergedown/mergeany |
| parent_view | Parent view treatment: inherit or noinherit |
| changelist | Changelist for spec editing or propagation operations |
| resolve_mode | Resolve mode for resolve_spec: auto, accept_theirs, accept_yours |
| parent_stream | Override parent for propagation (-P flag) |
| branch | Branch spec for integrate/populate (-b flag) |
| preview | Preview only, no changes (-n flag) |
| force | Force operation (-f flag) |
| reverse | Reverse direction (-r flag) |
| max_files | Limit files processed (-m flag) |
| quiet | Suppress informational messages (-q flag) |
| output_base | Show base revision with scheduled resolve (-Ob flag for merge/integrate) or list files created (-o flag for populate) |
| virtual | Copy using virtual stream (-v flag, copy only) |
| schedule_branch_resolve | Schedule branch resolves instead of automatic branching (-Rb flag, integrate only) |
| integrate_around_deleted | Integrate around deleted revisions (-Di flag, integrate only) |
| skip_cherry_picked | Skip cherry-picked revisions already integrated (-Rs flag, integrate only) |
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "uvx",
"args": [
"p4mcp-server",
"--readonly",
"--allow-usage"
],
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "YOUR_P4DAM_API_KEY"
}
}
}
}From the project documentation. Replace placeholders and example paths before connecting.
| Variable | Description | Required |
|---|---|---|
| P4PORT | Declared in the maintainer’s client configuration. | Check documentation |
| P4USER | Declared in the maintainer’s client configuration. | Check documentation |
| P4CLIENT | Declared in the maintainer’s client configuration. | Optional |
| P4DAM_API_KEY | Declared in the maintainer’s client configuration. | Check documentation |
Read, search and edit files inside allowed directories with the Model Context Protocol reference Filesystem server.
Retrieve version-aware library documentation and code examples with Context7 MCP, using resolve-library-id and query-docs.
Use Microsoft’s Playwright MCP server to navigate pages, inspect accessibility snapshots, fill forms and capture browser screenshots.
Connect GitHub MCP to repositories, issues and pull requests with GitHub’s hosted service or a locally run server.
Use the Supabase MCP server to inspect database schemas, query project data and retrieve docs through a project-scoped connection.
Search Linear issues and projects, inspect work context and manage updates through Linear’s hosted MCP server with OAuth.