What's New
Features
- New result limits:
fstat,opened, andstreamsqueries now accept an optionalmax_results/limitparameter that maps top4 -m N. This parameter lets callers cap result sets when querying large depots. Omitting the parameter preserves existing unbounded behavior.
Configuration
- New connection-level limits:
max_resultsandmax_scan_rows. These configurations cap how many rows the P4 Server returns or scans per command.max_resultsis enabled by default with a generous value, meaning protection is active immediately.max_scan_rowsis unset by default, governed by admin or group policy.
Bug fixes
- Fixed
list_jobsincorrectly rejecting submitted changelists with "Cannot update submitted changelist". - Fixed
query_files(content/diff mode) returning a file body as a fragmented array instead of a single string. History mode now returns structured objects. - Fixed
add_commentinmodify_reviewscrashing with'str' object has no attribute 'get'. - Benign P4 messages such as "file(s) up-to-date" and "file not on client" are no longer reported as errors. They now return a success status with the message text in a new optional top-level
warningsfield. Genuine failures still return an error. AI agents calling the server no longer misread these benign outcomes as failures.
Internal
- Certified P4 MCP Server against P4Python 2026.1.
- Adopted OpenTelemetry instrumentation. Retired the Logstash transport and decommissioned the legacy ingest service.
- Synced
pyproject.tomlandrequirements.txtto direct dependencies only. - Centralized the package version in
pyproject.tomlas the single source of truth. - Merged the test-coverage skill into the run-tests skill and removed the standalone file.
- Usage telemetry (when consent is given) is exported as OpenTelemetry spans to the shared Perforce gRPC endpoint. The previous NDJSON/Logstash upload has been removed.
Full Changelog: v2026.2.2955897...v2026.3.2996147