Perforce P4 MCP Server
OCI · GHCR.IO/PERFORCE/P4MCP-SERVER:2026.3.2996147 · SCANNED SEP 21
Perforce P4 MCP server: changelists, files, shelves, workspaces, jobs, code reviews, and streams.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 82 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability60
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3293 tokens (~219/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the Perforce P4 MCP Server server?
Perforce P4 MCP Server runs locally as a container image, launched with docker run --rm -i ghcr.io/perforce/p4mcp-server:2026.3.2996147. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/perforce/p4mcp-server:2026.3.2996147
claude mcp add perforce-p4mcp-server -- docker run --rm -i ghcr.io/perforce/p4mcp-server:2026.3.2996147
{
"mcpServers": {
"perforce-p4mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/perforce/p4mcp-server:2026.3.2996147"
]
}
}
} {
"servers": {
"perforce-p4mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/perforce/p4mcp-server:2026.3.2996147"
]
}
}
} codex mcp add perforce-p4mcp-server -- docker run --rm -i ghcr.io/perforce/p4mcp-server:2026.3.2996147
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"perforce-p4mcp-server": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"ghcr.io/perforce/p4mcp-server:2026.3.2996147"
],
"enabled": true
}
}
} mcp_servers:
perforce-p4mcp-server:
command: "docker"
args: ["run", "--rm", "-i", "ghcr.io/perforce/p4mcp-server:2026.3.2996147"] {
"McpServers": {
"perforce-p4mcp-server": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"ghcr.io/perforce/p4mcp-server:2026.3.2996147"
]
}
}
} {
"mcpServers": {
"perforce-p4mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/perforce/p4mcp-server:2026.3.2996147"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −3
- Stability: pass → 0.80 functional
- 17 Sept 26 +1
- Stability: 0.97 → pass security
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 −3
- Stability: pass → 0.80 functional
- 10 Sept 26 +1
- Stability: 0.97 → pass security
- 8 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed oci/ghcr.io/perforce/p4mcp-server:2026.3.2996147
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
modify_changelists ~120
Create/delete changelists, update changelists and organize files/jobs (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Changelist modification action: create makes new changelist, update modifies description, submit commits changes, delete removes changelist, move_files reorganizes files between changelists |
| changelist_id | – | – | Changelist ID - required for most actions except create |
| description | string | – | Changelist description - required for create, optional for update |
| file_paths | – | – | File paths - required for move_files action |
Structured output declared, but exposes no named fields.
No examples provided.
modify_files ~139
Add, edit, move, delete, revert, reconcile, resolve, and sync files (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | File modification action |
| changelist | string | – | Changelist ID or 'default' |
| file_paths | – | – | Full depot or client or local paths |
| force | boolean | – | Force operation - use with caution |
| mode | string | – | Resolve mode: auto(-am), safe(-as), force(-af), preview(-n), theirs(-at), yours(-ay) |
| source_paths | – | – | Source paths - required for move action |
| target_paths | – | – | Target paths - required for move action |
Structured output declared, but exposes no named fields.
No examples provided.
modify_jobs ~79
Link or unlink jobs (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Job modification action: link_job associates job with changelist, unlink_job removes job association |
| changelist_id | string | yes | Changelist ID - required for link_job/unlink_job |
| job_id | string | yes | Job ID - required for link_job/unlink_job |
Structured output declared, but exposes no named fields.
No examples provided.
modify_reviews ~409
Create/update/delete reviews (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Review modification action. To delete/obliterate review, use 'obliterate' action which requires approval |
| body | – | – | Comment body (required for add_comment, reply_comment) |
| change_id | – | – | Changelist ID (required for create, append_change, replace_with_change) |
| cleanup | – | – | Perform cleanup for approved:commit/committed transitions |
| comment_file_path | – | – | File path for inline comment |
| comment_id | – | – | Parent comment ID (reply_comment, mark_comment_read/unread) |
| comment_left_line | – | – | Left diff line number for inline comment |
| comment_right_line | – | – | Right diff line number for inline comment |
| comment_version | – | – | Review version for comment attachment |
| description | – | – | Review description (optional on create) |
| fix_status | – | – | Job fix status when transitioning |
| jobs | – | – | Associated job IDs for transition |
| max_reviews | integer | – | Maximum number of inactive reviews to archive (0 = no limit) |
| new_author | – | – | New author username (update_author) |
| new_description | – | – | New review description (update_description) |
| not_updated_since | – | – | ISO date (YYYY-MM-DD) threshold for archive_inactive |
| notify | – | – | Notification mode |
| participant_group_names | – | – | List of participant group names |
| participant_groups_required | – | – | List of required participant groups |
| participant_user_names | – | – | List of participant usernames |
| participant_users_required | – | – | List of required participant usernames |
| required_reviewers | – | – | List of required reviewers |
| review_id | – | – | Review ID (required for most actions except create, archive_inactive) |
| reviewer_group_names | – | – | List of reviewer group names |
| reviewer_groups_required | – | – | List of required reviewer groups |
| reviewers | – | – | List of reviewers |
| task_state | – | – | Task state |
| transition | – | – | Transition target state |
| version | – | – | Review version (optional for vote) |
| vote_value | – | – | Vote value |
Structured output declared, but exposes no named fields.
No examples provided.
modify_shelves ~133
Create/delete, update shelves and unshelve files (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 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 changeli… |
| changelist_id | string | yes | Changelist ID |
| file_paths | – | – | File paths for shelve/unshelve/update/delete |
| force | boolean | – | Force operation - use with caution |
| target_changelist | string | – | Target changelist for unshelve operations |
Structured output declared, but exposes no named fields.
No examples provided.
modify_streams ~678
Create/update/delete streams, edit/resolve/revert/shelve stream specs, copy/merge/integrate/populate between streams, switch workspace, create stream workspace (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 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 pro… |
| alt_roots | – | – | Alternate root paths (create_workspace) |
| branch | – | – | Branch spec name for integrate/populate (-b flag) |
| changelist | – | – | Changelist for edit_spec, shelve_spec, unshelve_spec, or propagation, 'default' not allowed for edit_spec/shelve_spec/unshelve_spec |
| description | – | – | Stream or workspace description |
| file_paths | – | – | File paths for propagation |
| force | boolean | – | Force operation |
| host | – | – | Host restriction (create_workspace) |
| ignored | – | – | Ignored paths |
| integrate_around_deleted | boolean | – | Integrate around deleted revisions (-Di flag) |
| max_files | – | – | Limit number of files processed (-m flag) |
| name | – | – | Short display name for the stream |
| options | – | – | Stream options: 'allsubmit/ownersubmit unlocked/locked toparent/notoparent fromparent/nofromparent' |
| output_base | boolean | – | Show base revision with each scheduled resolve (-Ob flag for merge/integrate) or display list of files created (-o flag for populate) |
| parent | – | – | Parent stream (required for non-mainline create) |
| parent_stream | – | – | Override parent stream for propagation (-P flag) |
| parent_view | – | – | Parent view treatment: 'inherit' or 'noinherit' |
| paths | – | – | Stream view paths (e.g. ['share ...', 'isolate dir/...']) |
| preview | boolean | – | Preview only, don't make changes (-n flag) |
| quiet | boolean | – | Suppress informational messages (-q flag) |
| remapped | – | – | Remapped paths |
| resolve_mode | – | – | Resolve mode for resolve_spec: 'auto', 'accept_theirs', 'accept_yours' |
| reverse | boolean | – | Reverse direction (-r flag) |
| root | – | – | Workspace root directory (create_workspace) |
| schedule_branch_resolve | boolean | – | Schedule 'branch resolves' instead of branching new target files automatically (-Rb flag) |
| skip_cherry_picked | boolean | – | Skip cherry-picked revisions already integrated (-Rs flag) |
| source_path | – | – | Source path for populate |
| stream_name | – | – | Stream depot path (e.g. '//depot/main'). Also used as -S flag for propagation. |
| stream_type | – | – | Stream type (required for create): mainline, development, sparsedev, release, sparserel, task, virtual |
| target_changelist | – | – | Target changelist for unshelve_spec |
| target_path | – | – | Target path for populate |
| virtual | boolean | – | Copy using virtual stream (-v flag, copy only) |
| workspace | – | – | Workspace name for switch |
| workspace_name | – | – | Workspace name to create (create_workspace) |
Structured output declared, but exposes no named fields.
No examples provided.
modify_workspaces ~122
Create/delete workspace, Update workspace specs, and switch active workspace (WRITE permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Workspace modification action: create makes new workspace, delete removes workspace, update modifies workspace spec, switch changes active workspace |
| workspace_description | – | – | Workspace description |
| workspace_line_end | – | – | Line ending style (local, unix, win, mac) |
| workspace_name | string | yes | Workspace name |
| workspace_options | – | – | Workspace options |
| workspace_root | – | – | Root path of the workspace |
| workspace_view | – | – | View mappings in depot-to-client format |
Structured output declared, but exposes no named fields.
No examples provided.
query_changelists ~162
Get changelist details and list changelists (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Changelist query action: get retrieves specific changelist details, list returns all changelists matching filters |
| changelist_id | – | – | Changelist ID - required for get action |
| depot_path | – | – | Filter by depot path - for list action |
| max_results | – | – | 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. |
| status | – | – | Filter by status - for list action |
| user | – | – | Filter by user - for list action |
| workspace_name | – | – | Filter by workspace - for list action |
Structured output declared, but exposes no named fields.
No examples provided.
query_files ~183
Get file content, history, info, diff, annotations, search by name, grep by content (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | File query action, metadata includes extra information like optional attributes and file size |
| case_insensitive | boolean | – | Case-insensitive matching for grep action |
| diff2 | boolean | – | Use p4 diff2 for depot-to-depot diff, false for mixed diff |
| file2 | – | – | Second file path - required for diff action |
| file_path | string | yes | Primary file path - required for all actions |
| max_results | – | – | 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 | – | – | Search or grep pattern - required for search and grep actions |
Structured output declared, but exposes no named fields.
No examples provided.
query_jobs ~92
Get jobs from changelist and get job details (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Job query action: list_jobs returns jobs linked to changelist, get_job retrieves specific job details |
| changelist_id | – | – | Changelist ID - required for list_jobs action |
| job_id | – | – | Job ID - required for get_job action |
| max_results | integer | – | Maximum number of results to return |
Structured output declared, but exposes no named fields.
No examples provided.
query_reviews ~408
Get 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'.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Review query action: list all reviews, dashboard for current user, get specific review, transitions, files_readby, files, comments, activity |
| after | – | – | Review ID to seek to for pagination (list action). Reviews up to and including this ID are excluded. |
| after_updated | – | – | Return reviews updated on the day before this date/time in seconds since epoch (list action). Mutually exclusive with 'after'. |
| comments_fields | – | – | Comma-separated list of fields to return for comments action |
| fields | – | – | List of fields to return for list/get actions |
| from_version | – | – | Starting version for files action |
| include_transitions | – | – | Include allowed state transitions in get action response |
| keywords | – | – | Search keyword(s) to filter reviews (list action). Use with keywords_fields. |
| keywords_fields | – | – | Fields to search keywords in (list action). Valid: changes, author, participants, hasReviewer, description, updated, projects, state, testStatus, pending, groups, id |
| max_results | integer | – | Maximum number of results to return |
| projects | – | – | Filter by project name(s) (list action) |
| result_order | – | – | Set to 'updated' to return most recently updated reviews first (list action) |
| review_id | – | – | Review ID - required for get, transitions, files_readby, files, comments, activity actions |
| state | – | – | Filter by review state(s) (list action). Valid: needsRevision, needsReview, approved, approved:isPending, approved:commit, approved:notPending, rejected, archived |
| to_version | – | – | Ending version for files action |
| up_voters | – | – | List of up voters for transitions action |
Structured output declared, but exposes no named fields.
No examples provided.
query_server ~48
Get server info and current user information (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Server query action: server_info returns P4 server metadata and version, current_user returns authenticated user details and permissions |
Structured output declared, but exposes no named fields.
No examples provided.
query_shelves ~102
List shelves, get shelve diff and files (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Shelve query action: list returns all shelved changelists, diff shows shelved file differences, files lists files in shelved changelist |
| changelist_id | – | – | Changelist ID - required for diff and files actions |
| max_results | integer | – | Maximum number of results to return |
| user | – | – | Filter by user - for list action |
Structured output declared, but exposes no named fields.
No examples provided.
query_streams ~512
Query streams: list, get spec, children/parent/graph, integration status, workspaces, validate files, check resolve, interchanges (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 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'… |
| all_streams | boolean | – | Include virtual streams in 'list' results |
| at_change | – | – | Changelist number for historical stream spec |
| both_directions | boolean | – | Show integration status in both directions (-a flag for integration_status) |
| changelist | – | – | Changelist for validate_submit |
| fields | – | – | Fields to return for 'list' (e.g. ['Stream', 'Owner', 'Name', 'Type']) |
| file_paths | – | – | File paths for validate_file or interchanges |
| filter | – | – | Filter expression string for 'list' (-F flag). Supports &, |, and parentheses. E.g. 'Parent=//Ace/MAIN&(Type=development|Type=release)' |
| force_refresh | boolean | – | Force istat to assume cache is stale and search for pending integrations (-c flag) |
| limit | – | – | Max changelists (interchanges) |
| long_output | boolean | – | Full changelist descriptions (interchanges) |
| max_results | – | – | Maximum number of results to return. Bounds 'list' and 'list_workspaces' and also caps 'children' via 'p4 streams -m N'. Omit for unbounded results. |
| reverse | boolean | – | Reverse comparison direction (interchanges) |
| stream_name | – | – | Stream depot path (e.g. '//depot/main'). Required for most actions. |
| stream_path | – | – | Stream path pattern(s) for 'list' (e.g. ['//depot/...']) |
| template | – | – | Template workspace for get_workspace |
| unloaded | boolean | – | Include unloaded streams/workspaces |
| user | – | – | Filter workspaces by user (list_workspaces) |
| view_without_edit | boolean | – | View locked stream without opening for edit (-v flag) |
| viewmatch | – | – | Single depot file path to filter streams whose views contain this path |
| workspace | – | – | Workspace name for get_workspace, validate_file, validate_submit |
Structured output declared, but exposes no named fields.
No examples provided.
query_workspaces ~106
Get workspace details, list workspaces, check type and status (READ permission)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 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 |
| max_results | integer | – | Maximum number of results to return |
| user | – | – | Filter by user - optional for list action |
| workspace_name | – | – | Workspace name - required for get, type, status actions |
Structured output declared, but exposes no named fields.
No examples provided.
What is the Perforce P4 MCP Server server?
Perforce P4 MCP Server is listed in the public MCP registry as io.github.perforce/p4mcp-server. Perforce P4 MCP server: changelists, files, shelves, workspaces, jobs, code reviews, and streams. This page covers its container image (ghcr.io/perforce/p4mcp-server:2026.3.2996147).
Is the Perforce P4 MCP Server server safe to use?
Perforce P4 MCP Server scores 48 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Perforce P4 MCP Server server expose?
Perforce P4 MCP Server exposes 15 tools: query_server, query_workspaces, modify_workspaces, query_files, modify_files, and 10 more. Their descriptions and schemas cost roughly 3,293 tokens of context every time the server is loaded.
Is the Perforce P4 MCP Server server still maintained?
Perforce P4 MCP Server is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.