P4 MCP Server
El servidor Perforce P4MCP es un servidor del Protocolo de Contexto de Modelo (MCP) que se integra con el sistema de control de versiones Perforce P4.
Documentación
Perforce P4 MCP Server
Perforce P4 MCP Server es un servidor de Model Context Protocol (MCP) que se integra con el sistema de control de versiones Perforce P4. Está construido sobre FastMCP con enlaces directos de P4 Python para exponer herramientas de lectura/escritura seguras y estructuradas para changelists, archivos, shelves, workspaces, jobs, reviews y metadatos del servidor.
Características · Requisitos previos · Requisitos del sistema · Instalación · Despliegue · Configuraciones de cliente · Configuraciones de P4 · Herramientas
Registro (Logging) · Solución de problemas · Soporte · Contribuciones · Licencia
Características
- Integración integral de P4: Herramientas de lectura/escritura para archivos, changelists, shelves, workspaces, jobs, reviews, streams e información del servidor.
- Flujos de trabajo de revisión de código: Soporte de P4 Code Review para descubrimiento de reviews, votación, transiciones de estado, comentarios y gestión de participantes.
- Seguridad primero: Modo de solo lectura por defecto, verificaciones de propiedad, elicitación interactiva de MCP (PROCEED/CANCEL) para operaciones destructivas de eliminación y obliteración.
- Conjuntos de herramientas flexibles: Configure qué categorías de herramientas habilitar: server, files, changelists, shelves, workspaces, jobs, reviews y streams.
- Registro robusto: Registro de aplicación y sesión en el directorio
logs/. - Telemetría opcional: Estadísticas de uso controladas por consentimiento. Deshabilitada por defecto.
- Multiplataforma: Compatible con macOS, Linux y Windows con binarios precompilados.
Requisitos previos
- Acceso al servidor P4: Conexión a un servidor P4 con credenciales adecuadas
- Autenticación: Inicio de sesión P4 válido (basado en tickets o contraseña)
Requisitos del sistema
| Componente | Versiones compatibles |
|---|---|
| Sistemas operativos | Windows 10+ macOS 12+ Linux (glibc 2.34+, p. ej. Ubuntu 22.04+, Rocky Linux 9+) |
| Servidor Perforce P4 | 2026.1 (versiones anteriores no probadas) |
| Python | 3.11+ (requerido solo para compilar desde el código fuente) |
Instalación local de P4 MCP Server
uvx (lo más fácil, sin instalación requerida)
Si tiene uv instalado, puede ejecutar P4 MCP Server directamente sin ninguna instalación manual:
# Run the server
uvx p4mcp-server
# Check version
uvx p4mcp-server --version
# Run with arguments
uvx p4mcp-server --readonly --allow-usage
Esto obtiene y ejecuta automáticamente la última versión desde PyPI. No se necesita configuración de entorno virtual de Python ni gestión de dependencias.
Requisitos:
- uv instalado en su sistema
- Python 3.11+ (uv lo gestionará automáticamente)
Binarios precompilados (recomendado para entornos sin conexión/aislados)
Descargue el binario apropiado para su sistema operativo:
- macOS: p4-mcp-server-mac.zip
- Windows: p4-mcp-server-win.zip
- Linux: p4-mcp-server-linux.zip
Extraiga y use el ejecutable directamente. No se requiere instalación de Python.
# macOS / Linux
unzip p4-mcp-server-mac.zip # or p4-mcp-server-linux.zip
./p4-mcp-server --help
# Windows
Expand-Archive p4-mcp-server-win.zip -DestinationPath .
.\p4-mcp-server.exe --help
Compilar desde el código fuente
Requisitos:
- Python 3.11+ (con Tkinter)
Compilar:
- macOS:
chmod +x build.sh && ./build.sh package - Linux:
chmod +x build.sh && ./build.sh package - Windows:
build.bat package
Salida:
- macOS y Linux:
p4-mcp-server-<version>.tgz - Windows:
p4-mcp-server-<version>.zip
Despliegue
Despliegue basado en STDIO
Local
Ejecute P4 MCP Server directamente en su máquina usando el transporte STDIO predeterminado.
Agregue lo siguiente a su mcp.json:
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Nota: Este ejemplo muestra valores explícitos de
env. SiP4CONFIGestá configurado, puede omitirlos y usar el ejemplo de configuración genérica en la secciónMCP client configurationen su lugar.
Docker
Ejecute P4 MCP Server desde un contenedor Docker con transporte STDIO, permitiendo que los clientes MCP gestionen el ciclo de vida del contenedor.
Nota: La ejecución basada en Docker actualmente solo es compatible con macOS y Linux.
Requisitos previos
- Docker instalado y en ejecución
- Credenciales P4 válidas y acceso a un servidor P4
Extraer la imagen de Docker
docker pull ghcr.io/perforce/p4mcp-server:latest
Compilar desde el código fuente en su lugar
cd /path/to/p4mcp-server
docker build -t ghcr.io/perforce/p4mcp-server .
Configurar el cliente MCP
Agregue lo siguiente a su mcp.json:
{
"servers": {
"perforce-p4mcp-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--hostname", "your-hostname",
"-e", "P4PORT=ssl:perforce.example.com:1666",
"-e", "P4USER=your_username",
"-e", "P4CLIENT=your_workspace",
"-v", "/Users/your_username/.p4tickets:/home/mcpuser/.p4tickets:ro",
"ghcr.io/perforce/p4mcp-server:latest"
]
}
}
}
Opciones de configuración
| Indicador | Descripción |
|---|---|
-i | Modo interactivo (requerido para STDIO) |
--rm | Eliminar el contenedor cuando se detenga |
--hostname | Coincidir con la restricción de host del workspace |
-e P4PORT | Dirección del servidor P4 |
-e P4USER | Nombre de usuario de P4 |
-e P4CLIENT | Nombre del workspace |
-v | Montar el archivo de tickets de P4 |
Autenticación
Usando tickets de P4:
# macOS/Linux
-v /Users/your_username/.p4tickets:/home/mcpuser/.p4tickets:ro
Nota: Use la ruta completa a su archivo de tickets (no
~). Después de ejecutarp4 login, reinicie el servidor MCP para recoger el nuevo ticket.
Usando una contraseña:
-e P4PASSWD="your_password"
Restricciones de host del workspace
⚠️ Importante: Los contenedores Docker tienen su propio nombre de host, que difiere del de su máquina local. Si su workspace de P4 está restringido a un host específico, operaciones como
syncfallarán.
Para resolver esto, configure el nombre de host del contenedor para que coincida con la restricción de host de su workspace:
--hostname your-hostname
Para encontrar el nombre de host de su workspace:
# macOS/Linux
p4 client -o your_workspace | grep "^Host:"
Montaje de la raíz del cliente para operaciones de escritura
⚠️ Importante: Por defecto, el contenedor Docker no puede acceder a sus archivos de workspace locales. Para operaciones de escritura como
sync,submitoreconcile, debe montar el directorio raíz de su cliente en el contenedor en la misma ruta.
Agregue un montaje de volumen para la raíz de su cliente:
-v /path/to/your/client/root:/path/to/your/client/root
Ejemplo de configuración con la raíz del cliente montada:
{
"servers": {
"perforce-p4mcp-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--hostname", "your-hostname",
"-e", "P4PORT=ssl:perforce.example.com:1666",
"-e", "P4USER=your_username",
"-e", "P4CLIENT=your_workspace",
"-v", "/Users/your_username/.p4tickets:/home/mcpuser/.p4tickets",
"-v", "/path/to/client/root:/path/to/client/root",
"ghcr.io/perforce/p4mcp-server:latest"
]
}
}
}
Para encontrar la raíz de su cliente:
p4 client -o your_workspace | grep "^Root:"
Nota: La ruta de montaje dentro del contenedor debe coincidir exactamente con la ruta raíz del cliente, ya que P4 rastrea los archivos por sus rutas absolutas.
Despliegue basado en HTTP
VM
Ejecute el servidor MCP en una VM usando el transporte HTTP, permitiendo que los clientes se conecten a través de la red.
Inicie el servidor en la VM:
P4PORT=ssl:perforce.example.com:1666 P4USER=your_username P4PASSWD=YOUR_TICKET ./p4-mcp-server --readonly --transport http --port 8000
Configure el cliente MCP:
Agregue lo siguiente a su mcp.json:
{
"servers": {
"perforce-p4-mcp": {
"type": "http",
"url": "http://<ip-or-hostname>:8000/mcp"
}
}
}
Nota: Asegúrese de que el firewall de la VM permita conexiones entrantes en el puerto elegido. Para uso en producción, considere colocar el servidor detrás de un proxy inverso con TLS.
Docker
Ejecute el servidor MCP en un contenedor Docker usando transporte HTTP y exponga el endpoint de MCP a través de un puerto del host.
Inicie el contenedor:
docker run --rm -p 8000:8000 \
-e P4PORT=ssl:perforce.example.com:1666 \
-e P4USER=your_username \
-e P4PASSWD=YOUR_TICKET \
ghcr.io/perforce/p4mcp-server:latest \
python3 -m p4mcp.main --readonly --transport http --port 8000
Configure el cliente MCP:
Agregue lo siguiente a su mcp.json:
{
"servers": {
"perforce-p4-mcp": {
"type": "http",
"url": "http://<ip-or-hostname>:8000/mcp"
}
}
}
Nota: Docker también admite el despliegue basado en HTTP. La imagen del contenedor usa transporte STDIO por defecto, por lo que el comando de inicio HTTP debe anular explícitamente el comando predeterminado. Si necesita operaciones de escritura, también monte las rutas de la raíz del cliente y del archivo de tickets en el contenedor.
Configuración del cliente MCP
Nota: En todos los ejemplos de configuración a continuación, si
P4CONFIGestá configurado, no necesita establecer ninguna variable de entorno en el bloqueenv. El servidor usará la configuración del archivo P4CONFIG especificado en su lugar.
Consejo: Si tiene uv instalado, puede usar
uvx p4mcp-serveren lugar de/absolute/path/to/p4-mcp-serveren el campocommand. Esto elimina la necesidad de descargar o compilar binarios manualmente.Ejemplo de configuración del servidor usando uvx
{ "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" } } } }Ejemplo de configuración del servidor usando ruta de binario
{ "mcpServers": { "perforce-p4-mcp": { "command": "/absolute/path/to/p4-mcp-server", "env": { }, "args": [ "--readonly", "--allow-usage" ] } } }
IDE de JetBrains (IntelliJ IDEA, Rider, PyCharm, etc.)
Consulte la documentación de integración VCS de JetBrains AI Assistant para conocer los pasos de configuración detallados.
Claude Code
Consulte la documentación de MCP de Claude Code para obtener más información.
Usando uvx (sin instalación requerida):
{
"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"
}
}
}
}
Usando binario precompilado:
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Cursor
Consulte la documentación de MCP de Cursor para obtener más información.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Eclipse
Consulte la documentación de MCP de Eclipse para obtener más información.
{
"servers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Kiro
Consulte la documentación de MCP de Kiro para obtener más información.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
VS Code
Consulte la documentación de VS Code para obtener más información.
{
"servers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Windsurf
Consulte la documentación de MCP de Windsurf para obtener más información.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Variables de entorno de P4
P4PORT- Dirección del servidor P4. Ejemplos:ssl:perforce.example.com:1666,localhost:1666P4USER- Su nombre de usuario de P4P4CLIENT- Su workspace actual de P4. Opcional, pero recomendado
Variables de entorno de límite de resultados
P4MCP_MAX_RESULTS- Límite máximo de filas que el servidor P4 devuelve por comando (p4.maxresults). Valor predeterminado:10000. Establézcalo en0para deshabilitar el límite (se aplica el valor predeterminado del servidor). Cuando un comando excedería este límite, el servidor lo aborta con un error en lugar de truncar los resultados, así que mantenga un valor generoso. Puede ser anulado por el argumento CLI--max-results. Debe ser un entero no negativo; un valor no válido falla rápidamente al inicio antes de que se intente cualquier conexión P4.P4MCP_MAX_SCAN_ROWS- Límite máximo de filas que el servidor P4 escanea por comando (p4.maxscanrows). Sin definir por defecto, por lo que la política de administrador/grupo rige los límites de escaneo. Puede ser anulado por el argumento CLI--max-scan-rows. Debe ser un entero no negativo cuando se proporcione.
Variables de entorno de registro
P4MCP_LOG_DIR- Directorio para archivos de registro. Valor predeterminado:logs/en el directorio del ejecutable del servidor. Puede ser anulado por el argumento CLI--log-dir.
Variables de entorno SSL/TLS
P4MCP_TLS_CA_MODE- Modo de origen del certificado TLS.system(predeterminado): usar el almacén de confianza del sistema operativo mediantetruststore. Nota: En este modo,truststoreanula el parámetroverify=— los paquetes de CA personalizados configurados medianteP4MCP_CA_BUNDLEo--ca-bundlese ignoran. Para usar un paquete de CA personalizado, establezcaP4MCP_TLS_CA_MODE=certifi.certifi: deshabilitar la inyección detruststorey usar el comportamiento predeterminado de certificados TLS de Python. Los paquetes de CA personalizados (P4MCP_CA_BUNDLE/--ca-bundle) solo tienen efecto en este modo.
P4MCP_SSL_VERIFY- Establézcalo enfalsepara deshabilitar la verificación SSL para las solicitudes de la API de P4 Code Review. Valor predeterminado:true. Funciona en ambos modos TLS.P4MCP_CA_BUNDLE- Ruta a un paquete de certificados CA personalizado (PEM) para las solicitudes de la API de P4 Code Review. Tiene prioridad sobreP4MCP_SSL_VERIFY. RequiereP4MCP_TLS_CA_MODE=certifipara tener efecto.
Variables de entorno de telemetría
OTEL_EXPORTER_OTLP_ENDPOINT- Punto final del colector OTLP para la exportación de telemetría. Valor predeterminado:https://grpc.public.prd.shared.perforce.com.OTEL_EXPORTER_OTLP_PROTOCOL- Protocolo de exportación OTLP. Solo se admitegrpc; otros valores recurren agrpccon una advertencia.
Argumentos admitidos
-
--readonly- Controla las operaciones de escritura.- Si está presente, usa el modo de solo lectura. Seguro para exploración y pruebas.
- Si falta, habilita las operaciones de escritura. Requiere permisos adecuados en su servidor P4.
-
--allow-usage- Permitir estadísticas de uso.- Si está presente, permite la recopilación anónima de estadísticas de uso.
- Si falta, deshabilita todas las estadísticas de uso.
-
--toolsets- Especifica qué categorías de herramientas habilitar.- Disponibles:
files,changelists,shelves,workspaces,jobs,reviews,streams - Predeterminado: todos los conjuntos de herramientas habilitados.
query_serversiempre está disponible independientemente de la configuración de--toolsets.
- Disponibles:
-
--search-transform- Habilita el descubrimiento de herramientas basado en búsqueda para reducir la sobrecarga de tokens.regex— Expone una herramienta de búsqueda por coincidencia de patrones regex. Ideal para búsquedas específicas.bm25— Expone una herramienta de búsqueda por relevancia en lenguaje natural. Ideal para consultas exploratorias.both— Expone ambas herramientas de búsqueda con nombres distintos (regex_search_tools/regex_call_toolysemantic_search_tools/semantic_call_tool).- Si se omite, el catálogo completo de herramientas se envía al cliente (predeterminado, compatible con versiones anteriores).
- Cuando está habilitado,
query_serversiempre es directamente visible para el cliente. - Seguridad: Las comprobaciones de permisos de administrador (
CheckPermissionMiddleware) y el filtrado de--readonlyse aplican por completo. Las búsquedas transforman el catálogo real de herramientas internamente, por lo que las herramientas bloqueadas por middleware o excluidas por el modo de solo lectura nunca son descubribles ni invocables a través de la interfaz de búsqueda.
-
--max-results <N>- Límite máximo de filas que el servidor P4 devuelve por comando (p4.maxresults).- Predeterminado:
10000. Establézcalo en0para deshabilitar el límite (se aplica el valor predeterminado del servidor). - Protege contra consultas descontroladas impulsadas por IA que agotan la memoria local o sobrecargan el servidor.
- Cuando un comando excedería este límite, el servidor lo aborta con un error — no lo trunca — así que mantenga un valor generoso.
- Debe ser un entero no negativo; un valor no válido falla rápidamente al inicio antes de que se intente cualquier conexión P4.
Orden de prioridad:
--max-results>P4MCP_MAX_RESULTS> predeterminado (10000). - Predeterminado:
-
--max-scan-rows <N>- Límite máximo de filas que el servidor P4 escanea por comando (p4.maxscanrows).- Sin definir por defecto, por lo que la política de administrador/grupo rige los límites de escaneo.
- Debe ser un entero no negativo cuando se proporcione; un valor no válido falla rápidamente al inicio.
Orden de prioridad:
--max-scan-rows>P4MCP_MAX_SCAN_ROWS> predeterminado (sin definir). -
--ssl-no-verify- Deshabilita la verificación de certificados SSL para las solicitudes de la API de P4 Code Review.- Útil para entornos con certificados autofirmados o CA internos.
- Funciona en ambos modos TLS
systemycertifi. - Estas opciones SSL solo afectan las conexiones HTTPS de Swarm. Si la URL de Swarm es
http://, no tienen efecto.
-
--ca-bundle <path>- Ruta a un paquete de certificados CA personalizado (PEM) para las solicitudes de la API de P4 Code Review.- Úselo para confiar en una CA interna sin deshabilitar la verificación por completo.
- Requiere
P4MCP_TLS_CA_MODE=certifipara tener efecto. En el modosystempredeterminado,truststoreusa el almacén de confianza del sistema operativo e ignora esta configuración. - Si se proporcionan tanto
--ca-bundlecomo--ssl-no-verify,--ca-bundletiene prioridad (la verificación se realiza usando el paquete especificado).
Orden de prioridad:
--ca-bundle>--ssl-no-verify>P4MCP_CA_BUNDLE>P4MCP_SSL_VERIFY> predeterminado (true). Los argumentos CLI tienen prioridad sobre las variables de entorno. -
--log-dir <path>- Directorio para archivos de registro.- Especifique un directorio personalizado para los archivos de registro (tanto registros de aplicación como de sesión).
- Predeterminado:
logs/en el directorio del ejecutable del servidor. - También se puede establecer mediante la variable de entorno
P4MCP_LOG_DIR. - El argumento CLI tiene prioridad sobre la variable de entorno.
Orden de prioridad:
--log-dir>P4MCP_LOG_DIR> predeterminado (logs/en el directorio del ejecutable del servidor).
Configuraciones requeridas
- Use rutas absolutas para el campo
commanden todas las configuraciones. - Asegúrese de que las variables de entorno estén configuradas correctamente para cada host.
- Diferentes hosts pueden tener un análisis de argumentos diferente. Consulte la documentación del host.
Configuración de P4
Configuración de usuario
Ejemplo de configuración
# Windows (PowerShell)
$env:P4PORT = "ssl:perforce.example.com:1666"
$env:P4USER = "your_username"
$env:P4CLIENT = "your_workspace"
# macOS/Linux (Bash)
export P4PORT="ssl:perforce.example.com:1666"
export P4USER="your_username"
export P4CLIENT="your_workspace"
P4USERdebe ser un usuario estándar. P4 MCP Server ejecuta comandos comop4 describeyp4 changesque un usuario de tiposerviceno tiene permitido ejecutar, por lo que un usuario de servicio hará que las herramientas fallen en tiempo de ejecución. ConfigureP4USERcon un usuario de Perforce de tipostandard. Consultep4 useren la documentación del CLI de P4.
Opciones de límite de conexión
Estas opciones acotan cuánto trabajo puede realizar un solo comando P4, protegiendo al servidor contra consultas descontroladas:
max_results— Limita cuántas filas devuelve el servidor P4 por comando. Activado por defecto con un valor generoso para proteger contra consultas descontroladas. Reduzca el valor para ajustar el límite. Se configura medianteP4MCP_MAX_RESULTSo--max-results.max_scan_rows— Limita cuántas filas escanea el servidor por comando. Sin definir por defecto (regido por la política de administrador/grupo). Se configura medianteP4MCP_MAX_SCAN_ROWSo--max-scan-rows.
Configuración de administrador
Gestione el acceso mediante propiedades de servidor a nivel de grupo y de usuario. P4 resuelve cada propiedad a un único valor usando dos reglas, aplicadas en orden:
- Gana el número de secuencia más alto. El indicador
-ses la clave de ordenación principal. Se aplica en todos los ámbitos — una propiedad de grupo en-s5supera a una propiedad de usuario en-s1o al valor predeterminado. - Con el mismo número de secuencia, el ámbito es el desempate: usuario > grupo > global. Entre grupos con la misma secuencia, gana el nombre de grupo alfabéticamente primero.
P4 no compara valores semánticamente. No sabe que false es más restrictivo que true. El valor de la propiedad ganadora se devuelve tal cual y el servidor MCP lo verifica.
Si ninguna propiedad se aplica, MCP permanece habilitado a menos que se deshabilite explícitamente.
Interruptor maestro (deshabilitación global)
Para deshabilitar MCP para todos los usuarios:
p4 property -a -n mcp.enabled -v false
Para volver a habilitar el control basado en grupo/usuario, elimine primero la propiedad global:
p4 property -d -n mcp.enabled
Restricciones basadas en grupo
Para impedir el acceso a todos los miembros de un grupo específico:
p4 property -a -n mcp.enabled -v false -g noaccessgroup
Puede establecer múltiples restricciones de grupo de la misma manera.
Cuando un usuario pertenece a varios grupos con configuraciones conflictivas, la resolución de propiedades de P4 determina qué valor gana.
Gana el número de secuencia más alto (-s). Con números de secuencia iguales, gana el nombre de grupo alfabéticamente primero.
Ejemplo:
p4 property -a -n mcp.enabled -v false -s1 -g noaccessgroup
p4 property -a -n mcp.enabled -v true -s2 -g accessgroup
En este ejemplo, accessgroup gana porque -s2 es mayor que -s1.
Restricciones basadas en usuario
Para bloquear a un usuario específico independientemente de la pertenencia a grupos:
p4 property -a -n mcp.enabled -v false -u noaccessuser
Con el mismo número de secuencia, las propiedades a nivel de usuario anulan las configuraciones a nivel de grupo y globales (el desempate de ámbito de P4).
Ejemplo: Incluso si noaccessuser está en accessgroup (donde MCP está habilitado), la propiedad de usuario con la misma secuencia tiene prioridad y MCP queda deshabilitado.
Nota: Una propiedad de grupo con un valor de
-smás alto puede anular una propiedad de usuario con un número de secuencia más bajo. Para asegurar que una propiedad a nivel de usuario siempre gane, asígnele un valor de-salto o asegúrese de que ninguna propiedad de grupo use una secuencia más alta.
Lista de permitidos de conjuntos de herramientas (global)
Restrinja qué conjuntos de herramientas están disponibles en todo el servidor usando mcp.toolsets.allowed. Solo se habilitarán los conjuntos de herramientas listados; todos los demás quedan bloqueados.
Conjuntos de herramientas disponibles: server, changelists, files, jobs, reviews, shelves, workspaces, streams
Permitir solo changelists y archivos:
p4 property -a -n mcp.toolsets.allowed -v changelists,files
Elimine la lista de permitidos para restaurar todos los conjuntos de herramientas:
p4 property -d -n mcp.toolsets.allowed
Modo de solo lectura global
Deshabilite todas las operaciones de escritura (herramientas de modificación) mientras mantiene disponibles las operaciones de lectura (herramientas de consulta):
p4 property -a -n mcp.toolsets.write -v false
Vuelva a habilitar las escrituras:
p4 property -a -n mcp.toolsets.write -v true
Cuando write=false, todas las herramientas de modify_* quedan bloqueadas pero todas las herramientas de query_* continúan funcionando.
Habilitar/deshabilitar conjuntos de herramientas por grupo
Habilite o deshabilite conjuntos de herramientas individuales para un grupo específico.
Deshabilitar un conjunto de herramientas para un grupo específico:
p4 property -a -n mcp.toolset.changelists.enabled -v false -g reviewers
Los usuarios en reviewers quedan bloqueados de los changelists. Los usuarios en otros grupos (sin configuración explícita) conservan el acceso predeterminado.
Para restringir un conjunto de herramientas a solo un grupo, deshabilítelo para cada otro grupo que no deba tener acceso:
p4 property -a -n mcp.toolset.files.enabled -v false -g reviewers
p4 property -a -n mcp.toolset.files.enabled -v false -g interns
# Only groups without an explicit "false" retain default access to files
Nota: Todos los conjuntos de herramientas están habilitados por defecto. Establecer
enabled=truepara un grupo es redundante a menos que esté anulando explícitamente una configuración previa defalse. Con el mismo número de secuencia, una propiedad de grupo anula una propiedad global (el desempate de ámbito de P4), por lo que unenabled=truede grupo puede anular unenabled=falseglobal. Para asegurar que una configuración global no pueda ser anulada, asígnele un valor de-salto. Para aislar un conjunto de herramientas a grupos específicos, deshabilítelo para los grupos que desee bloquear.
Control de escritura por conjunto de herramientas por grupo
Controla el acceso de escritura para cada conjunto de herramientas a nivel de grupo.
Deshabilita escrituras para un conjunto de herramientas específico por grupo:
p4 property -a -n mcp.toolset.workspaces.write -v false -g reviewers
Esto bloquea modify_workspaces para el grupo mientras query_workspaces permanece accesible.
Anulaciones específicas de herramientas
Restringe un grupo a herramientas específicas dentro de un conjunto de herramientas usando mcp.toolset.<name>.tools.
Permite solo query_files (bloquea modify_files) para desarrolladores:
p4 property -a -n mcp.toolset.files.tools -v query_files -g developers
Permite consulta y modificación para líderes:
p4 property -a -n mcp.toolset.reviews.tools -v query_reviews,modify_reviews -g leads
Las anulaciones específicas de herramientas pueden restringir el acceso incluso cuando las escrituras están habilitadas:
p4 property -a -n mcp.toolsets.write -v true
p4 property -a -n mcp.toolset.files.tools -v query_files -g developers
# Result: modify_files is BLOCKED — tool list restricts
Nota: Las anulaciones específicas de herramientas no pueden eludir las restricciones de escritura. El servidor verifica los permisos de escritura antes de evaluar las listas de herramientas. Si
write=falseestá configurado en cualquier nivel, las herramientas de escritura se bloquean independientemente de la lista de herramientas.
Resolución de conflictos entre múltiples grupos
Cuando un usuario pertenece a múltiples grupos con configuraciones conflictivas, P4 resuelve cada propiedad a un único valor. El servidor MCP no realiza su propia lógica multi-grupo: utiliza el valor que P4 devuelva.
Reglas de resolución de P4 para un nombre de propiedad dado:
- Gana el
-smás alto (número de secuencia). Esta es la clave de ordenación principal. - Con el mismo número de secuencia: ámbito de usuario > ámbito de grupo > ámbito global.
- Entre grupos con la misma secuencia: gana el nombre de grupo alfabéticamente primero.
P4 no compara valores. Elige la entrada ganadora por posición, no por contenido.
Ejemplo: grupos con la misma secuencia (predeterminado):
p4 property -a -n mcp.toolset.files.enabled -v true -g developers
p4 property -a -n mcp.toolset.files.enabled -v false -g leads
# User in both groups → resolved value is "true"
# Reason: "developers" < "leads" alphabetically, so developers wins
Intercambiar los valores daría false — developers sigue ganando independientemente del valor.
Ejemplo: solo un grupo tiene una configuración:
p4 property -a -n mcp.toolset.files.enabled -v false -g leads
# developers has no setting
# User in developers + leads → resolved value is "false"
# Reason: leads is the only group with a value, so it wins
Ejemplo: acceso de escritura:
p4 property -a -n mcp.toolset.files.write -v false -g developers
p4 property -a -n mcp.toolset.files.write -v true -g leads
# User in both groups → resolved value is "false"
# Reason: "developers" < "leads" alphabetically, not because false is "more restrictive"
Ejemplo: listas de herramientas (sin unión):
p4 property -a -n mcp.toolset.reviews.tools -v query_reviews -g developers
p4 property -a -n mcp.toolset.reviews.tools -v query_reviews,modify_reviews -g leads
# User in both groups → resolved value is "query_reviews"
# Reason: "developers" wins alphabetically. P4 returns one value, not a union.
Ejemplo: uso de -s para controlar qué grupo gana:
p4 property -a -n mcp.enabled -v false -s1 -g noaccessgroup
p4 property -a -n mcp.enabled -v true -s2 -g accessgroup
# accessgroup wins because -s2 > -s1 (highest sequence wins)
Consejo: Para obtener resultados predecibles con múltiples grupos, usa siempre valores explícitos de
-sen lugar de depender del orden alfabético de los nombres de grupo.
Deshabilitar un conjunto de herramientas específico globalmente
Deshabilita un único conjunto de herramientas para todos los usuarios sin afectar a otros:
p4 property -a -n mcp.toolset.reviews.enabled -v false
Esto bloquea tanto query_reviews como modify_reviews para todos los usuarios. Los demás conjuntos de herramientas no se ven afectados.
Solo lectura de emergencia para un grupo específico
Restringe un grupo específico a solo lectura sin afectar a otros grupos:
p4 property -a -n mcp.toolsets.write -v false -g problematic_group
Los usuarios de otros grupos conservan acceso completo de escritura. Si un usuario pertenece tanto al grupo restringido como a un grupo no restringido, la resolución de propiedades de P4 determina el resultado: normalmente gana el nombre de grupo alfabéticamente primero con números de secuencia iguales. Usa valores explícitos de -s para obtener resultados predecibles.
Cómo se resuelven las propiedades
El servidor MCP verifica las propiedades en este orden. Cada propiedad se resuelve de forma independiente por P4 usando las reglas de resolución estándar (gana el -s más alto, luego usuario > grupo > global con secuencia igual, y luego el nombre de grupo alfabéticamente primero).
| Orden de verificación | Propiedad | Comportamiento del servidor MCP |
|---|---|---|
| 1 | mcp.enabled | Si el valor resuelto es false, bloquear todo el acceso |
| 2 | mcp.toolsets.write | Si el valor resuelto es false y la herramienta es una operación de escritura, bloquear |
| 3 | mcp.toolsets.allowed | Si está configurado, solo los conjuntos de herramientas listados están disponibles |
| 4 | mcp.toolset.<name>.enabled | Si el valor resuelto es false, bloquear el conjunto de herramientas |
| 5 | mcp.toolset.<name>.write | Si el valor resuelto es false y la herramienta es una operación de escritura, bloquear |
| 6 | mcp.toolset.<name>.tools | Si está configurado, solo las herramientas listadas dentro del conjunto de herramientas están disponibles |
Notas importantes
-
Cada propiedad se resuelve a un único valor por P4 antes de que el servidor MCP la vea. P4 usa: el número de secuencia más alto (
-s) primero, luego el ámbito (usuario > grupo > global) como desempate, y luego el nombre de grupo alfabético. El servidor MCP no realiza su propia resolución multi-grupo o multi-ámbito. -
mcp.enabledactúa como el interruptor principal. Cuando su valor resuelto esfalse, todo el acceso se bloquea. -
Con el mismo número de secuencia, una propiedad de grupo o usuario anula una propiedad global. Para garantizar que un
falseglobal no pueda ser anulado, asígnale un valor alto de-s. -
La jerarquía de ámbitos (usuario > grupo > global) solo se aplica como desempate con números de secuencia iguales. Una propiedad de grupo en
-s5superará a una propiedad de usuario en secuencia predeterminada o-s1. -
Cuando un usuario pertenece a múltiples grupos, gana el nombre de grupo alfabéticamente primero (con
-sigual). El valor ganador se usa tal cual: P4 no comparatruevsfalseni elige el valor "más restrictivo". Usa valores explícitos de-spara controlar qué grupo tiene prioridad. -
Las anulaciones específicas de herramientas (
mcp.toolset.<name>.tools) pueden restringir aún más el acceso pero no pueden eludir las restricciones de escritura. Las verificaciones de escritura se evalúan antes que las listas de herramientas. -
Los cambios de propiedades surten efecto en 60 segundos debido al almacenamiento en caché del servidor, o inmediatamente en una nueva conexión del servidor MCP.
-
Solo el valor
false(sin distinción de mayúsculas/minúsculas) deshabilita o bloquea el acceso. Cualquier otro valor (incluyendotrue,1,yeso cadenas inválidas) se trata como no bloqueante.
Herramientas disponibles
Herramientas de consulta (operaciones de lectura)
query_server - Obtener información del servidor y detalles del usuario actual
- Acciones:
server_info- Obtener versión de P4, tiempo de actividad y configuracióncurrent_user- Obtener información y permisos del usuario actual
- Casos de uso - Diagnóstico del servidor, verificación de usuario, prueba de conexión
query_workspaces - Información y gestión de espacios de trabajo
- Acciones:
list- Listar todos los espacios de trabajo (opcionalmente filtrados por usuario)get- Obtener una especificación detallada del espacio de trabajotype- Verificar el tipo y la configuración del espacio de trabajostatus- Verificar el estado de sincronización del espacio de trabajo
- Parámetros:
workspace_name,user,max_results - Casos de uso: Descubrimiento de espacios de trabajo, revisión de configuración, verificación de estado
query_changelists - Acceder a información e historial de changelists
- Acciones:
get- Obtener información detallada del changelist (archivos, descripción, trabajos)list- Listar changelists con filtros (estado, usuario, espacio de trabajo)
- Parámetros:
changelist_id,status(pendiente/enviado),workspace_name,max_results - Casos de uso: Revisión de código, seguimiento de historial, análisis de changelists
query_files - Operaciones e información de archivos
- Acciones:
content- Obtener contenido del archivo en una revisión específicahistory- Obtener historial de revisiones del archivo y registros de integracióninfo- Obtener detalles básicos del archivo (tipo, tamaño, permisos)metadata- Obtener metadatos del archivo (atributos, tamaño, etc.)diff- Comparar versiones de archivos (depot a depot o mixto)annotations- Obtener anotaciones del archivo con información de blamesearch- Buscar archivos por patrón de nombre (coincidencia con comodines)grep- Buscar archivos por patrón de contenido (búsqueda de texto)
- Parámetros:
file_path,file2(para diff),pattern(para búsqueda/grep),case_insensitive(para grep),max_results,diff2(booleano) - Casos de uso: Análisis de código, comparación de archivos, seguimiento de historial, análisis de blame, descubrimiento de archivos, búsqueda de contenido
query_shelves - Operaciones e inspección de changelists shelved
- Acciones:
list- Listar cambios shelved por usuario o globalmentediff- Mostrar diferencias en archivos shelvedfiles- Listar archivos en un shelf específico
- Parámetros:
changelist_id,user,max_results - Casos de uso: Revisión de código, seguimiento de trabajo en progreso, colaboración
query_jobs - Seguimiento de trabajos y gestión de defectos
- Acciones:
list_jobs- Listar trabajos asociados con un changelistget_job- Obtener información detallada y estado del trabajo
- Parámetros:
changelist_id,job_id,max_results - Casos de uso: Seguimiento de defectos, trazabilidad de requisitos, gestión de proyectos
query_reviews - Descubrimiento, detalles y actividad de revisiones
- Acciones:
list- Listar todas las revisiones con filtrado opcionaldashboard- Obtener el panel de revisiones del usuario actual (mis revisiones, requiere atención)get- Obtener información detallada de la revisióntransitions- Obtener transiciones de estado disponibles para una revisiónfiles_readby- Obtener estado de archivos leídos por usuariosfiles- Obtener archivos en una revisión (con rango de versiones opcional)activity- Obtener historial de actividad de la revisióncomments- Obtener comentarios en una revisión
- Parámetros:
review_id- ID de revisión (requerido para get, transitions, files_readby, files, comments, activity)review_fields- Campos separados por comas a devolver (p. ej., "id,description,author,state")comments_fields- Campos para comentarios (predeterminado: "id,body,user,time")up_voters- Lista de votos positivos para transicionesfrom_version,to_version- Rango de versiones para la acción de archivosmax_results- Resultados máximos (predeterminado: 10)
- Casos de uso: Descubrimiento de revisiones de código, seguimiento de estado de revisiones, recuperación de comentarios, monitoreo de actividad de revisiones
query_streams - Jerarquía de streams, estado de integración y validación de espacios de trabajo
- **Acciones**:
- `list` - Listar streams con filtros opcionales (patrón de ruta, propietario, tipo)
- `get` - Obtener una especificación detallada del stream
- `children` - Obtener los streams hijos de un stream dado
- `parent` - Obtener el stream padre
- `graph` - Obtener el grafo completo del stream (padre + hijos)
- `integration_status` - Obtener el estado de integración entre el stream y el padre (p4 istat)
- `get_workspace` - Obtener una especificación de workspace vinculada a un stream
- `list_workspaces` - Listar workspaces vinculados a un stream
- `validate_file` - Validar rutas de archivo contra la vista de un stream
- `validate_submit` - Validar archivos abiertos para enviar en un workspace de stream
- `check_resolve` - Comprobar conflictos pendientes de especificación de stream
- `interchanges` - Listar changelists pendientes de integración entre streams
- **Parámetros**:
- `stream_name` - Ruta de depot del stream (requerida para get, children, parent, graph, check_resolve, interchanges)
- `stream_path` - Patrón(es) de ruta para list (p. ej., `["//depot/..."]`)
- `filter` - Expresión de filtro para list (p. ej., `"Owner=alice&Type=development"`)
- `fields` - Campos a devolver para list (p. ej., `["Stream", "Owner", "Type"]`)
- `workspace` - Nombre del workspace para get_workspace, validate_file, validate_submit
- `file_paths` - Rutas de archivo para validate_file
- `view_without_edit` - Ver la especificación de stream bloqueada sin abrirla para edición
- `at_change` - Recuperar la especificación histórica del stream en un número de changelist
- `both_directions` - Mostrar el estado de integración en ambas direcciones
- `force_refresh` - Forzar la actualización de la caché de istat
- `reverse`, `long_output`, `limit` - Opciones para interchanges
- `unloaded`, `all_streams`, `viewmatch` - Filtros para list
- `max_results` - Resultados máximos
- **Casos de uso**: Exploración de la jerarquía de streams, seguimiento del estado de integración, validación de workspaces, comprobaciones de compatibilidad de vistas
Herramientas de modificación (operaciones de escritura)
modify_workspaces - Creación y gestión de workspaces
- Acciones -
create,update,delete,switch - Parámetros -
name,specs(objeto WorkspaceSpec con View, Root, Options, etc.) - Requiere - Modo de solo lectura desactivado, permisos adecuados
- Casos de uso - Configuración del entorno, mantenimiento de workspaces, cambio de rama
modify_changelists - Gestión del ciclo de vida de changelists
- Acciones -
create,update,submit,delete,move_files - Parámetros -
changelist_id,description,file_paths - Seguridad - Comprobaciones de propiedad, aviso interactivo de solicitud PROCEED/CANCEL para operaciones de eliminación con detalles de los elementos
- Casos de uso - Envío de código, organización del trabajo, agrupación de archivos
modify_files - Operaciones del sistema de archivos y control de versiones
- Acciones -
add,edit,delete,move,revert,reconcile,resolve,sync - Parámetros -
file_paths,changelist,force,mode(para operaciones de resolución) - Modos de resolución -
auto,safe,force,preview,theirs,yours - Casos de uso - Edición de archivos, resolución de conflictos, sincronización de workspaces
modify_shelves - Operaciones de shelving para trabajo en curso
- Acciones -
shelve,unshelve,update,delete,unshelve_to_changelist - Parámetros -
changelist_id,file_paths,target_changelist,force - Casos de uso - Almacenamiento temporal, compartición de código, copia de seguridad antes de experimentos
modify_jobs - Integración de jobs y changelists
- Acciones -
link_job,unlink_job - Parámetros -
changelist_id,job_id - Casos de uso - Integración de seguimiento de defectos, vinculación de requisitos
modify_reviews - Creación de reviews, transiciones, participantes y comentarios
- Acciones:
create- Crear un nuevo review a partir de un changelistrefresh_projects- Actualizar las asociaciones de proyectovote- Votar en un review (a favor, en contra, limpiar)transition- Cambiar el estado del review (needsRevision, needsReview, approved, committed, rejected, archived)append_participants- Añadir revisores/grupos a un reviewreplace_participants- Reemplazar todos los participantesdelete_participants- Eliminar participantes de un reviewadd_comment- Añadir un comentario a un reviewreply_comment- Responder a un comentario existenteappend_change- Añadir un changelist a un review existentereplace_with_change- Reemplazar el contenido del review con un changelistjoin- Unirse a un review como participanteleave- Abandonar un reviewarchive_inactive- Archivar reviews inactivosmark_comment_read/mark_comment_unread- Marcar el estado de lectura de un comentario individualmark_all_comments_read/mark_all_comments_unread- Marcar el estado de lectura de todos los comentariosupdate_author- Cambiar el autor del reviewupdate_description- Actualizar la descripción del reviewobliterate- Eliminar permanentemente un review
- Parámetros:
review_id- ID del review (requerido para la mayoría de las acciones)change_id- ID del changelist (requerido para create, append_change, replace_with_change)description- Descripción del reviewreviewers,required_reviewers- Listas de nombres de usuario de revisoresreviewer_groups- Grupos de revisores con requisitosvote_value- Valor del voto:up,down,clearversion- Versión del review para votartransition- Estado objetivo:needsRevision,needsReview,approved,committed,approved:commit,rejected,archivedjobs,fix_status,cleanup- Opciones de vinculación de jobs y limpieza para transicionesusers,groups- Datos estructurados de participantes para append/replace/deletebody- Texto del cuerpo del comentariotask_state- Estado de la tarea del comentario:open,commentnotify- Modo de notificación:immediate,delayedcomment_id- ID del comentario para respuestas o para marcar como leído/no leídocontext- Contexto del comentario (archivo, números de línea, contenido, versión)not_updated_since,max_reviews- Filtros para archive_inactivenew_author,new_description- Valores para acciones de actualización
- Casos de uso: Flujo de trabajo de revisión de código, gestión del estado de reviews, comentarios colaborativos, gestión de participantes, limpieza de reviews
modify_streams - Ciclo de vida de streams, edición de especificaciones, propagación y gestión de workspaces
- Acciones:
create- Crear un nuevo stream (mainline, development, release, task, virtual, etc.)update- Actualizar propiedades del stream (name, description, options, paths, parent_view)delete- Eliminar un streamedit_spec- Abrir la especificación del stream para edición (p4 stream edit)resolve_spec- Resolver conflictos de especificación de streamrevert_spec- Revertir ediciones de la especificación del streamshelve_spec- Hacer shelve de las ediciones de la especificación del stream a un changelist numeradounshelve_spec- Hacer unshelve de las ediciones de la especificación del streamcopy- Copiar cambios entre streams padre e hijomerge- Fusionar cambios entre streams padre e hijointegrate- Integrar cambios con opciones avanzadaspopulate- Poblar un nuevo stream con archivos (branch)switch- Cambiar un workspace a un stream diferentecreate_workspace- Crear un nuevo workspace vinculado a un stream
- Parámetros:
stream_name- Ruta de depot del stream (requerida para create, update, delete, edit_spec, resolve_spec, revert_spec, switch)stream_type- Tipo de stream para create:mainline,development,sparsedev,release,sparserel,task,virtualparent- Stream padre para create que no sea mainlinename,description- Nombre visible y descripción del streamoptions- Opciones del stream:allsubmit/ownersubmit,unlocked/locked,toparent/notoparent,fromparent/nofromparent,mergedown/mergeanyparent_view- Tratamiento de la vista del padre:inheritonoinheritpaths,remapped,ignored- Mapeos de vista del streamchangelist- Changelist para operaciones de edición de especificación o propagaciónresolve_mode- Modo de resolución para resolve_spec:auto,accept_theirs,accept_yoursparent_stream- Anular el padre para propagación (bandera -P)branch- Especificación de branch para integrate/populate (bandera -b)file_paths- Rutas de archivo para propagaciónpreview- Solo vista previa, sin cambios (bandera -n)force- Forzar operación (bandera -f)reverse- Invertir dirección (bandera -r)max_files- Limitar archivos procesados (bandera -m)quiet- Suprimir mensajes informativos (bandera -q)output_base- Mostrar la revisión base con resolución programada (bandera -Ob para merge/integrate) o listar archivos creados (bandera -o para populate)virtual- Copiar usando stream virtual (bandera -v, solo copy)schedule_branch_resolve- Programar resoluciones de branch en lugar de ramificación automática (bandera -Rb, solo integrate)integrate_around_deleted- Integrar omitiendo revisiones eliminadas (bandera -Di, solo integrate)skip_cherry_picked- Omitir revisiones cherry-picked ya integradas (bandera -Rs, solo integrate)source_path,target_path- Rutas de origen y destino para populateworkspace- Nombre del workspace para switchworkspace_name,root,host,alt_roots- Parámetros de creación de workspace
- Seguridad: Validación de existencia del stream, detección de streams bloqueados, advertencias de workspaces vinculados, comprobaciones de archivos abiertos para cambios que afectan a la vista
- Casos de uso: Creación y gestión de streams, propagación de ramas (merge/copy/integrate), resolución de conflictos de especificación, aprovisionamiento de workspaces
Advertencias en las respuestas de las herramientas
Cuando un comando P4 produce un mensaje informativo o de advertencia benigno (por ejemplo,
file(s) up-to-dateofile not on client), la herramienta devuelve unstatusde éxito e incluye el texto del mensaje en una lista opcional de nivel superiorwarnings. El campo aparece solo cuando hay al menos una advertencia. Los fallos reales no se ven afectados y siguen devolviendo unstatusde error con los campos existentescodeyerror.
Registro y datos de uso
Sistema de registro
Ubicaciones de los registros:
- Registro de aplicación:
logs/p4mcp.log- Operaciones y errores principales del servidor - Registros de sesión:
logs/sessions/*.log- Las actividades de sesión individuales se registran solo cuando la bandera--allow-usagese especifica en los argumentos de inicio del servidor.
Datos de uso
Enfoque de privacidad primero:
- Deshabilitado por defecto: Sin recopilación de datos sin consentimiento explícito
- Controlado por consentimiento: Solicitud en el primer uso para permiso de telemetría
- Transparente: Explicación clara de los datos recopilados
- Revocable: Opción de exclusión fácil en cualquier momento
Datos recopilados (si se da consentimiento):
- Frecuencia de uso de herramientas (anónima)
- Tasas y tipos de error (sin datos personales)
- Métricas de rendimiento
- Estadísticas de adopción de funciones
- Versión del servidor P4
Datos no recopilados:
- Contenidos o nombres de archivos
- Detalles del servidor P4 excepto la versión
- Credenciales de usuario o información personal
- Información específica del proyecto
Control:
- Los datos de uso solo se recopilan si el argumento
--allow-usagese proporciona al inicio.
Solución de problemas
Problemas de inicio del servidor
No se puede iniciar el servidor
Síntomas: El sistema operativo no puede encontrar o ejecutar el binario; el error incluye ENOENT o "No such file or directory".
Soluciones:
- Verifica la ruta: Asegúrate de que el campo
commanduse la ruta absoluta correcta para tu sistema operativo:- macOS/Linux:
/absolute/path/to/p4-mcp-server - Windows:
C:\absolute\path\to\p4-mcp-server.exe
- macOS/Linux:
- Asegúrate de que el binario exista y sea ejecutable:
- macOS/Linux:
ls -l /absolute/path/to/p4-mcp-server && chmod +x /absolute/path/to/p4-mcp-server - Windows:
dir C:\absolute\path\to\p4-mcp-server.exe
- macOS/Linux:
- En Windows, asegúrate de que el binario no esté bloqueado:
- Haz clic derecho en el archivo
.exe, selecciona Propiedades y, si está presente, haz clic en Desbloquear.
- Haz clic derecho en el archivo
Problemas de conexión
Falló la conexión al servidor; verifica $P4PORT
Síntomas: No se puede conectar al servidor P4
Soluciones:
- Verifica la variable de entorno
P4PORT:echo $P4PORT(macOS) oecho $env:P4PORT(Windows) - Prueba la conexión directa:
p4 info - Verifica la disponibilidad del servidor:
ping perforce.example.com - Verifica el puerto y el protocolo (prefijo
ssl:para conexiones SSL).
Certificado SSL no confiable (conexión P4)
Síntomas: Errores de confianza SSL al conectar con el servidor P4 Soluciones:
- Confía en el servidor:
p4 trust -f -y - Verifica el estado de confianza:
p4 trust -l - Para problemas persistentes, verifica la configuración SSL.
Errores de certificado SSL para la API de revisión de código P4 (revisiones)
Síntomas: Errores CERTIFICATE_VERIFY_FAILED al usar herramientas de revisión
Soluciones:
- Almacén de confianza del sistema: Por defecto, el servidor usa el almacén de confianza del sistema operativo a través de
truststore. Asegúrate de que tu CA corporativa esté instalada en el almacén de certificados del sistema operativo. - Paquete de CA personalizado: Para usar un certificado CA personalizado, primero debes establecer
P4MCP_TLS_CA_MODE=certifi(para deshabilitartruststore), luego proporcionar la ruta de CA mediante--ca-bundle /path/to/ca.pemoP4MCP_CA_BUNDLE. En el modosystempredeterminado,truststoreanula los paquetes de CA personalizados y se ignoran silenciosamente. - Deshabilitar verificación: Usa
--ssl-no-verifyo estableceP4MCP_SSL_VERIFY=false(no recomendado para producción). Esto funciona en ambos modos TLS.
Nota: Estos ajustes SSL solo se aplican cuando la URL de Swarm usa HTTPS. Si Swarm está configurado con una URL
http://, no se realiza verificación SSL y estos ajustes no tienen efecto.
Problemas de autenticación
Usuario no ha iniciado sesión
Síntomas: Fallos de autenticación
Soluciones:
- Inicia sesión en P4:
p4 login -a - Verifica el estado de inicio de sesión:
p4 login -s - Verifica que el usuario exista:
p4 users -m 1 your_username - Para problemas persistentes, verifica la contraseña o usa autenticación basada en tickets.
Contraseña inválida
Síntomas: Fallos de inicio de sesión
Soluciones:
- Restablece la contraseña a través de un administrador de P4.
- Usa autenticación basada en tickets:
p4 login -a - Verifica que el nombre de usuario sea correcto:
p4 info
Problemas de espacio de trabajo
Cliente desconocido
Síntomas: Errores de espacio de trabajo no encontrado
Soluciones:
- Lista los espacios de trabajo disponibles:
p4 clients - Verifica la variable de entorno
P4CLIENT. - Crea un espacio de trabajo si es necesario:
p4 client workspace_name - Verifica la propiedad del espacio de trabajo:
p4 client -o workspace_name
Archivo(s) no en la vista del cliente
Síntomas: Los archivos están fuera del mapeo del espacio de trabajo
Soluciones:
- Verifica la vista del cliente:
p4 client -o workspace_name - Actualiza el mapeo del espacio de trabajo para incluir las rutas requeridas.
- Usa
p4 where file_pathpara verificar el mapeo.
Errores de permisos
Operación no permitida
Síntomas: Permisos insuficientes para operaciones
Soluciones:
- Verifica la propiedad del archivo:
p4 opened file_path - Verifica los permisos del usuario:
p4 protects file_path - Asegúrate de tener la membresía de grupo adecuada.
- Para operaciones de administración, verifica los permisos de administrador.
El archivo está abierto por otro usuario
Síntomas: Conflictos de bloqueo exclusivo
Soluciones:
- Verifica quién tiene el archivo abierto:
p4 opened file_path - Contacta al usuario para resolver conflictos.
- El administrador puede forzar operaciones si es necesario.
Problemas de rendimiento
Operaciones lentas
Síntomas: Tiempos de respuesta largos
Soluciones:
- Usa el parámetro
max_resultspara limitar el tamaño de la consulta. - Usa rutas de archivo específicas en lugar de comodines.
- Verifica la conectividad de red con P4.
- Monitorea el rendimiento del servidor.
Problemas de memoria
Síntomas: Alto uso de memoria
Soluciones:
- Reduce
max_resultspara consultas grandes. - Procesa archivos en lotes.
- Reinicia el servidor MCP periódicamente para sesiones de larga duración.
Ejecución de herramientas
No se pueden ejecutar herramientas
Síntomas: Conflicto con herramientas integradas u otras herramientas MCP
Soluciones:
- Desactiva cualquier herramienta integrada o en conflicto del servidor MCP en tu entorno o configuración.
- Asegúrate de que las herramientas del servidor MCP P4 estén correctamente registradas y habilitadas.
- Reinicia el servidor MCP después de aplicar cambios de configuración para cargar las herramientas correctas.
Las herramientas correctas no se detectan
Síntomas: Contexto inválido o historial de sesión desactualizado
Soluciones:
- Proporciona un contexto relacionado con P4 al escribir indicaciones.
- Inicia una nueva sesión si la sesión existente es antigua o contiene historial de indicaciones conflictivo.
Patrones de error comunes
- Autenticación: Asegúrate de tener un inicio de sesión válido antes de las operaciones MCP.
- Mapeo del espacio de trabajo: Verifica que las vistas del cliente incluyan los archivos objetivo.
- Permisos: Verifica los permisos de usuario y archivo para operaciones de escritura.
- Red: Verifica la conectividad para servidores P4 remotos.
Obteniendo ayuda
- Revisa los registros: Siempre revisa
logs/p4mcp.logprimero. - Prueba P4: Asegúrate de que
p4 infofuncione antes de solucionar problemas de MCP. - Reporta problemas a la comunidad: Reporta problemas con extractos de registros y detalles del entorno.
Soporte
Perforce P4 MCP Server es un proyecto con soporte comunitario y no está oficialmente soportado por Perforce. Las solicitudes de extracción y los problemas son responsabilidad del moderador o moderadores del proyecto; esto puede ser un individuo o equipo verificado con miembros fuera de la organización de Perforce. Todos los problemas deben reportarse y gestionarse a través de GitHub (no mediante el proceso de soporte estándar de Perforce).
Contribuciones
Damos la bienvenida a contribuciones al proyecto P4 MCP Server.
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulta LICENSE para más detalles.
Avisos de terceros
Este proyecto incluye componentes de terceros. Sus licencias y atribuciones se enumeran en THIRD-PARTY-NOTICES.