P4 MCP Server
O servidor Perforce P4MCP é um servidor do Protocolo de Contexto de Modelo (MCP) que se integra ao sistema de controle de versão Perforce P4.
Documentação
Perforce P4 MCP Server
O Perforce P4 MCP Server é um servidor MCP (Model Context Protocol) que se integra ao sistema de controle de versão Perforce P4. Ele é construído sobre FastMCP com bindings diretos de P4 Python para expor ferramentas seguras e estruturadas de leitura/escrita para changelists, arquivos, shelves, workspaces, jobs, reviews e metadados do servidor. Ele também se integra ao P4 DAM por meio de sua API REST para gerenciar recursos.
Recursos · Pré-requisitos · Requisitos do Sistema · Instalação · Implantação · Configurações do Cliente · Configurações do P4 · Ferramentas
Registro de Logs · Solução de Problemas · Suporte · Contribuições · Licença
Recursos
- Integração abrangente com P4: Ferramentas de leitura/escrita para arquivos, changelists, shelves, workspaces, jobs, reviews, streams e informações do servidor.
- Fluxos de trabalho de revisão de código: Suporte ao P4 Code Review para descoberta de reviews, votação, transições de estado, comentários e gerenciamento de participantes.
- Integração com P4 DAM: Acesse ativos e metadados do P4 DAM por meio de assistentes de IA compatíveis com MCP. Pesquise ativos, recupere metadados, gerencie reviews, crie pacotes de ativos, atualize tags de ativos e navegue por projetos. Para saber mais, consulte Configurar acesso ao P4 DAM para o P4 MCP Server na documentação do P4 DAM.
- Segurança em primeiro lugar: Modo somente leitura por padrão, verificações de propriedade, elicitação interativa do MCP (PROCEED/CANCEL) para operações destrutivas de exclusão e obliteração.
- Conjuntos de ferramentas flexíveis: Configure quais categorias de ferramentas habilitar: servidor, arquivos, changelists, shelves, workspaces, jobs, reviews, streams e p4dam.
- Registro de logs robusto: Registro de logs de aplicação e sessão no diretório
logs/. - Telemetria opcional: Estatísticas de uso controladas por consentimento. Desabilitado por padrão.
- Multiplataforma: Suportado em macOS, Linux e Windows com binários pré-compilados.
Pré-requisitos
- Acesso ao servidor P4: Conexão a um servidor P4 com credenciais adequadas
- Autenticação: Login P4 válido (baseado em ticket ou senha)
Requisitos do Sistema
| Componente | Versões Suportadas |
|---|---|
| Sistemas Operacionais | Windows 10+ macOS 12+ Linux (glibc 2.34+, ex.: Ubuntu 22.04+, Rocky Linux 9+) |
| Servidor Perforce P4 | 2026.1 (versões anteriores não testadas) |
| Python | 3.11+ (necessário apenas para compilar a partir do código-fonte) |
Instalação Local do P4 MCP Server
uvx (mais fácil, sem necessidade de instalação)
Se você tiver o uv instalado, pode executar o P4 MCP Server diretamente sem nenhuma instalação manual:
# Run the server
uvx p4mcp-server
# Check version
uvx p4mcp-server --version
# Run with arguments
uvx p4mcp-server --readonly --allow-usage
Isso busca e executa automaticamente a versão mais recente do PyPI. Não é necessária configuração de ambiente virtual Python ou gerenciamento de dependências.
Requisitos:
- uv instalado no seu sistema
- Python 3.11+ (o uv cuidará disso automaticamente)
Binários pré-compilados (recomendado para ambientes offline/isolados)
Baixe o binário apropriado para o seu sistema operacional:
- macOS: p4-mcp-server-mac.zip
- Windows: p4-mcp-server-win.zip
- Linux: p4-mcp-server-linux.zip
Extraia e use o executável diretamente. Nenhuma instalação do Python é necessária.
# 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 a partir do código-fonte
Requisitos:
- Python 3.11+ (com Tkinter)
Compilar:
- macOS:
chmod +x build.sh && ./build.sh package - Linux:
chmod +x build.sh && ./build.sh package - Windows:
build.bat package
Saída:
- macOS e Linux:
p4-mcp-server-<versão>.tgz - Windows:
p4-mcp-server-<versão>.zip
Implantação
Implantação baseada em STDIO
Local
Execute o P4 MCP Server diretamente na sua máquina usando o transporte STDIO padrão.
Adicione o seguinte ao seu 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",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Nota: Este exemplo mostra valores explícitos de
env. SeP4CONFIGestiver definido, você pode omiti-los e usar o exemplo de configuração genérica na seçãoMCP client configuration.
Docker
Execute o P4 MCP Server a partir de um contêiner Docker com transporte STDIO, permitindo que clientes MCP gerenciem o ciclo de vida do contêiner.
Nota: A execução baseada em Docker é atualmente suportada apenas em macOS e Linux.
Pré-requisitos
- Docker instalado e em execução
- Credenciais P4 válidas e acesso a um servidor P4
Baixar a imagem Docker
docker pull ghcr.io/perforce/p4mcp-server:latest
Compilar a partir do código-fonte
cd /path/to/p4mcp-server
docker build -t ghcr.io/perforce/p4mcp-server .
Configurar o Cliente MCP
Adicione o seguinte ao seu 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",
"-e", "P4DAM_API_KEY=your_api_key",
"-v", "/Users/your_username/.p4tickets:/home/mcpuser/.p4tickets:ro",
"ghcr.io/perforce/p4mcp-server:latest"
]
}
}
}
Opções de Configuração
| Flag | Descrição |
|---|---|
-i | Modo interativo (necessário para STDIO) |
--rm | Remover contêiner quando parado |
--hostname | Corresponder restrição de host do workspace |
-e P4PORT | Endereço do servidor P4 |
-e P4USER | Nome de usuário P4 |
-e P4CLIENT | Nome do workspace |
-v | Montar arquivo de tickets P4 |
Autenticação
Usando tickets P4:
# macOS/Linux
-v /Users/your_username/.p4tickets:/home/mcpuser/.p4tickets:ro
Nota: Use o caminho completo para o seu arquivo de tickets (não
~). Após executarp4 login, reinicie o servidor MCP para aplicar o novo ticket.
Nota: Por padrão, o contêiner inicia como root, copia o arquivo de tickets montado por bind para um local legível pelo
mcpusernão-root e, em seguida, reduz privilégios (viagosu) para que o servidor execute comomcpuser. Essa cópia automática permite que um arquivo de tickets com restrição de proprietário (0600) pertencente a um uid estrangeiro funcione em runtimes que preservam a propriedade do host (Docker/podman Linux nativo). Uma montagem por bind:rodo ticket é suportada — o arquivo é copiado, não modificado no local (isso é distinto de um sistema de arquivos raiz somente leitura; veja abaixo). Observe que a cópia automática é executada apenas quando o contêiner inicia como root (o padrão); forçar um uid não-root ou um sistema de arquivos raiz somente leitura altera esse comportamento, conforme descrito abaixo.
Kubernetes / perfis restritos (com aplicação de não-root): a imagem intencionalmente inicia como root e reduz para
mcpuser(uid 1000) viagosu, então o servidor sempre executa como não-root — ambos os caminhos são suportados. PararunAsNonRoot/ PodSecurity restrito / SCC restrito do OpenShift, definasecurityContext.runAsUser: 1000(efsGroup: 1000ao montar o ticket). Nesse modo, a cópia do ticket exclusiva do root no entrypoint é ignorada, então o ticket montado já deve ser legível pelo uid 1000 (montagem com correspondência de proprietário,-e P4PASSWD="your_ticket_content"oupodman -v <host>:/home/mcpuser/.p4tickets:U).
Sistema de arquivos raiz somente leitura (
--read-only/readOnlyRootFilesystem): forneça um/home/mcpusergravável/tmpfs (ex.:--tmpfs /home/mcpuser) para que a cópia do ticket possa ser gravada; caso contrário, a cópia do ticket falha e o P4 relatará um erro de autenticação normal.
Usando uma senha:
-e P4PASSWD="your_password"
Restrições de Host do Workspace
⚠️ Importante: Os contêineres Docker têm seu próprio hostname, que difere da sua máquina local. Se o seu workspace P4 estiver restrito a um host específico, operações como
syncfalharão.
Para resolver isso, defina o hostname do contêiner para corresponder à restrição de host do seu workspace:
--hostname your-hostname
Para descobrir o nome do host do seu workspace:
# macOS/Linux
p4 client -o your_workspace | grep "^Host:"
Montagem do Client Root para Operações de Escrita
⚠️ Importante: Por padrão, o contêiner Docker não pode acessar os arquivos do seu workspace local. Para operações de escrita como
sync,submitoureconcile, você deve montar o diretório client root no contêiner no mesmo caminho.
Adicione uma montagem de volume para o seu client root:
-v /path/to/your/client/root:/path/to/your/client/root
Exemplo de configuração com client root montado:
{
"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",
"-e", "P4DAM_API_KEY=your_api_key",
"-v", "/Users/your_username/.p4tickets:/home/mcpuser/.p4tickets",
"-v", "/path/to/client/root:/path/to/client/root",
"ghcr.io/perforce/p4mcp-server:latest"
]
}
}
}
Para descobrir o seu client root:
p4 client -o your_workspace | grep "^Root:"
Nota: O caminho de montagem dentro do contêiner deve corresponder exatamente ao caminho do client root, pois o P4 rastreia arquivos por seus caminhos absolutos.
Implantação baseada em HTTP
VM
Execute o servidor MCP em uma VM usando o transporte HTTP, permitindo que clientes se conectem pela rede.
Inicie o servidor na VM:
P4PORT=ssl:perforce.example.com:1666 P4USER=your_username P4PASSWD=YOUR_TICKET ./p4-mcp-server --readonly --transport http --port 8000
Configure o cliente MCP:
Adicione o seguinte ao seu mcp.json:
{
"servers": {
"perforce-p4-mcp": {
"type": "http",
"url": "http://<ip-or-hostname>:8000/mcp"
}
}
}
Nota: Certifique-se de que o firewall da VM permita conexões de entrada na porta escolhida. Para uso em produção, considere colocar o servidor atrás de um proxy reverso com TLS.
Docker
Execute o servidor MCP em um contêiner Docker usando transporte HTTP e exponha o endpoint MCP em uma porta do host.
Inicie o contêiner:
docker run --rm -p 8000:8000 \
-e P4PORT=ssl:perforce.example.com:1666 \
-e P4USER=your_username \
-e P4PASSWD=YOUR_TICKET \
-e P4DAM_API_KEY=your_api_key \
ghcr.io/perforce/p4mcp-server:latest \
python3 -m p4mcp.main --readonly --transport http --port 8000
Configure o cliente MCP:
Adicione o seguinte ao seu mcp.json:
{
"servers": {
"perforce-p4-mcp": {
"type": "http",
"url": "http://<ip-or-hostname>:8000/mcp"
}
}
}
Nota: O Docker também suporta implantação baseada em HTTP. A imagem do contêiner usa transporte STDIO por padrão, então o comando de inicialização HTTP deve substituir explicitamente o comando padrão. Se você precisar de operações de escrita, monte também os caminhos do client root e do arquivo de tickets no contêiner.
Configuração do cliente MCP
Nota: Em todos os exemplos de configuração abaixo, se
P4CONFIGestiver definido, você não precisa definir nenhuma variável de ambiente no blocoenv. O servidor usará a configuração do arquivo P4CONFIG especificado.
Dica: Se você tiver o uv instalado, pode usar
uvx p4mcp-serverem vez de/absolute/path/to/p4-mcp-serverno campocommand. Isso elimina a necessidade de baixar ou compilar binários manualmente.Exemplo de configuração do 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", "P4DAM_API_KEY": "your_api_key" } } } }Exemplo de configuração do servidor usando caminho do binário
{ "mcpServers": { "perforce-p4-mcp": { "command": "/absolute/path/to/p4-mcp-server", "env": { }, "args": [ "--readonly", "--allow-usage" ] } } }
IDEs JetBrains (IntelliJ IDEA, Rider, PyCharm, etc.)
Consulte a documentação de integração VCS do JetBrains AI Assistant para etapas de configuração detalhadas.
Claude Code
Consulte a documentação de MCP do Claude Code para mais informações.
Usando uvx (sem necessidade de instalação):
{
"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_api_key"
}
}
}
}
Usando binário pré-compilado:
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Cursor
Consulte a documentação de MCP do Cursor para mais informações.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Eclipse
Consulte a documentação de MCP do Eclipse para mais informações.
{
"servers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Kiro
Consulte a documentação de MCP do Kiro para mais informações.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
VS Code
Consulte a documentação do VS Code para mais informações.
{
"servers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Windsurf
Consulte a documentação de MCP do Windsurf para mais informações.
{
"mcpServers": {
"perforce-p4-mcp": {
"command": "/absolute/path/to/p4-mcp-server",
"env": {
"P4PORT": "ssl:perforce.example.com:1666",
"P4USER": "your_username",
"P4CLIENT": "your_workspace",
"P4DAM_API_KEY": "your_api_key"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Variáveis de ambiente do P4
P4PORT- Endereço do servidor P4. Exemplos:ssl:perforce.example.com:1666,localhost:1666P4USER- Seu nome de usuário do P4P4CLIENT- Seu workspace atual do P4. Opcional, mas recomendado
Variáveis de ambiente de limite de resultados
P4MCP_MAX_RESULTS- Limite no número de linhas que o servidor P4 retorna por comando (p4.maxresults). Padrão:10000. Defina como0para desativar o limite (o padrão do servidor entra em vigor). Quando um comando exceder esse limite, o servidor o aborta com um erro em vez de truncar os resultados, portanto, mantenha o valor generoso. Pode ser substituído pelo argumento de CLI--max-results. Deve ser um inteiro não negativo; um valor inválido falha rapidamente na inicialização antes de qualquer conexão P4 ser tentada.P4MCP_MAX_SCAN_ROWS- Limite no número de linhas que o servidor P4 examina por comando (p4.maxscanrows). Não definido por padrão, portanto, a política de administrador/grupo governa os limites de exame. Pode ser substituído pelo argumento de CLI--max-scan-rows. Deve ser um inteiro não negativo quando fornecido.
Variáveis de ambiente de registro (logging)
P4MCP_LOG_DIR- Diretório para arquivos de log. Padrão:logs/no diretório do executável do servidor. Pode ser substituído pelo argumento de CLI--log-dir.
Variáveis de ambiente SSL/TLS
P4MCP_TLS_CA_MODE- Modo de origem do certificado TLS.system(padrão): usa o armazenamento de confiança do SO viatruststore. Nota: Neste modo,truststoresubstitui o parâmetroverify=— pacotes de CA personalizados definidos viaP4MCP_CA_BUNDLEou--ca-bundlesão ignorados. Para usar um pacote de CA personalizado, definaP4MCP_TLS_CA_MODE=certifi.certifi: desativa a injeção detruststoree usa o comportamento padrão de certificados TLS do Python. Pacotes de CA personalizados (P4MCP_CA_BUNDLE/--ca-bundle) só têm efeito neste modo.
P4MCP_SSL_VERIFY- Defina comofalsepara desativar a verificação SSL para solicitações da API P4 Code Review. Padrão:true. Funciona em ambos os modos TLS.P4MCP_CA_BUNDLE- Caminho para um pacote de certificados CA personalizado (PEM) para solicitações da API P4 Code Review. Tem prioridade sobreP4MCP_SSL_VERIFY. RequerP4MCP_TLS_CA_MODE=certifipara ter efeito.
Variáveis de ambiente de telemetria
OTEL_EXPORTER_OTLP_ENDPOINT- Endpoint do coletor OTLP para exportação de telemetria. Padrão:https://grpc.public.prd.shared.perforce.com.OTEL_EXPORTER_OTLP_PROTOCOL- Protocolo de exportação OTLP. Apenasgrpcé suportado; outros valores voltam paragrpccom um aviso.
Variáveis de ambiente do P4 DAM
P4DAM_API_KEY- Chave de API do P4 DAM. Enviada comoAuthorization: account_key='<key>'com todas as solicitações de API do P4 DAM. Requer uma sessão ativa do P4 DAM. Quando não definida, as ferramentas do P4 DAM não são registradas. O conjunto de ferramentas é silenciosamente ignorado na inicialização.
Descoberta de URL do P4 DAM: A URL base do P4 DAM é lida da propriedade P4
P4.HTH.URLno servidor. Se a propriedade não estiver definida, as chamadas de ferramentas do P4 DAM falham em tempo de execução.SSL para P4 DAM: As solicitações de API do P4 DAM usam as mesmas configurações SSL que o Swarm —
P4MCP_TLS_CA_MODE,--ca-bundle/P4MCP_CA_BUNDLEe--ssl-no-verify/P4MCP_SSL_VERIFY.
Argumentos suportados
-
--readonly- Controla operações de escrita.- Se presente, usa o modo somente leitura. Seguro para exploração e testes.
- Se ausente, habilita operações de escrita. Requer permissões adequadas no seu servidor P4.
-
--allow-usage- Permite estatísticas de uso.- Se presente, permite a coleta anônima de estatísticas de uso.
- Se ausente, desativa todas as estatísticas de uso.
-
--toolsets- Especifica quais categorias de ferramentas habilitar.- Disponíveis:
files,changelists,shelves,workspaces,jobs,reviews,streams,p4dam - Padrão: Todos os conjuntos de ferramentas habilitados.
query_serverestá sempre disponível independentemente da configuração de--toolsets.
- Disponíveis:
-
--search-transform- Habilita a descoberta de ferramentas baseada em busca para reduzir a sobrecarga de tokens.regex— Expõe uma ferramenta de busca por correspondência de padrões regex. Melhor para consultas direcionadas.bm25— Expõe uma ferramenta de busca por relevância em linguagem natural. Melhor para consultas exploratórias.both— Expõe ambas as ferramentas de busca com nomes distintos (regex_search_tools/regex_call_toolesemantic_search_tools/semantic_call_tool).- Se omitido, o catálogo completo de ferramentas é enviado ao cliente (padrão, compatível com versões anteriores).
- Quando habilitado,
query_serverestá sempre diretamente visível ao cliente. - Segurança: As verificações de permissão de administrador (
CheckPermissionMiddleware) e a filtragem de--readonlypermanecem totalmente aplicadas. As buscas consultam o catálogo real de ferramentas internamente, portanto, ferramentas bloqueadas por middleware ou excluídas pelo modo somente leitura nunca são descobríveis ou chamáveis pela interface de busca.
-
--max-results <N>- Limite no número de linhas que o servidor P4 retorna por comando (p4.maxresults).- Padrão:
10000. Defina como0para desativar o limite (o padrão do servidor entra em vigor). - Protege contra consultas descontroladas orientadas por IA que esgotam a memória local ou sobrecarregam o servidor.
- Quando um comando exceder esse limite, o servidor o aborta com um erro — ele não trunca — portanto, mantenha o valor generoso.
- Deve ser um inteiro não negativo; um valor inválido falha rapidamente na inicialização antes de qualquer conexão P4 ser tentada.
Ordem de prioridade:
--max-results>P4MCP_MAX_RESULTS> padrão (10000). - Padrão:
-
--max-scan-rows <N>- Limite no número de linhas que o servidor P4 examina por comando (p4.maxscanrows).- Não definido por padrão, portanto, a política de administrador/grupo governa os limites de exame.
- Deve ser um inteiro não negativo quando fornecido; um valor inválido falha rapidamente na inicialização.
Ordem de prioridade:
--max-scan-rows>P4MCP_MAX_SCAN_ROWS> padrão (não definido). -
--ssl-no-verify- Desativa a verificação de certificado SSL para solicitações da API P4 Code Review.- Útil para ambientes com certificados autoassinados ou CA interna.
- Funciona em ambos os modos TLS
systemecertifi. - Essas opções SSL afetam apenas conexões Swarm HTTPS. Se a URL do Swarm for
http://, elas não têm efeito.
-
--ca-bundle <path>- Caminho para um pacote de certificados CA personalizado (PEM) para solicitações da API P4 Code Review.- Use isto para confiar em uma CA interna sem desativar a verificação completamente.
- Requer
P4MCP_TLS_CA_MODE=certifipara ter efeito. No modo padrãosystem,truststoreusa o armazenamento de confiança do SO e ignora esta configuração. - Se ambos
--ca-bundlee--ssl-no-verifyforem fornecidos,--ca-bundletem prioridade (a verificação é realizada usando o pacote especificado).
Ordem de prioridade:
--ca-bundle>--ssl-no-verify>P4MCP_CA_BUNDLE>P4MCP_SSL_VERIFY> padrão (true). Argumentos de CLI têm prioridade sobre variáveis de ambiente. -
--log-dir <path>- Diretório para arquivos de log.- Especifique um diretório personalizado para arquivos de log (logs de aplicação e de sessão).
- Padrão:
logs/no diretório do executável do servidor. - Também pode ser definido via variável de ambiente
P4MCP_LOG_DIR. - O argumento de CLI tem prioridade sobre a variável de ambiente.
Ordem de prioridade:
--log-dir>P4MCP_LOG_DIR> padrão (logs/no diretório do executável do servidor).
Configurações necessárias
- Use caminhos absolutos para o campo
commandem todas as configurações. - Garanta que as variáveis de ambiente estejam definidas corretamente para cada host.
- Hosts diferentes podem ter análise de argumentos diferente. Consulte a documentação do host.
Configuração do P4
Configuração do usuário
Exemplo de configuração
# 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"
P4USERdeve ser um usuário padrão. O P4 MCP Server executa comandos comop4 describeep4 changesque um usuário do tiposervicenão tem permissão para executar, portanto, um usuário de serviço fará as ferramentas falharem em tempo de execução. ConfigureP4USERcom um usuário Perforce do tipostandard. Consultep4 userna documentação da CLI do P4.
Opções de limite de conexão
Estas opções limitam quanto trabalho um único comando P4 pode fazer, protegendo o servidor contra consultas descontroladas:
max_results— Limita quantas linhas o servidor P4 retorna por comando. Ativado por padrão com um valor generoso para proteger contra consultas descontroladas. Reduza o valor para apertar o limite. Configurado viaP4MCP_MAX_RESULTSou--max-results.max_scan_rows— Limita quantas linhas o servidor examina por comando. Não definido por padrão (governado pela política de administrador/grupo). Configurado viaP4MCP_MAX_SCAN_ROWSou--max-scan-rows.
Configuração do administrador
Gerencie o acesso por meio de propriedades de servidor em nível de grupo e de usuário. O P4 resolve cada propriedade para um único valor usando duas regras, aplicadas em ordem:
- O maior número de sequência vence. O sinalizador
-sé a chave de classificação primária. Ele se aplica a todos os escopos — uma propriedade de grupo em-s5vence uma propriedade de usuário em-s1ou o padrão. - No mesmo número de sequência, o escopo é o desempate: usuário > grupo > global. Entre grupos no mesmo número de sequência, o nome de grupo alfabeticamente primeiro vence.
O P4 não compara valores semanticamente. Ele não sabe que false é mais restritivo que true. O valor da propriedade vencedora é retornado como está e verificado pelo servidor MCP.
Se nenhuma propriedade se aplicar, o MCP permanece habilitado, a menos que seja explicitamente desabilitado.
Interruptor mestre (desativação global)
Para desativar o MCP para todos os usuários:
p4 property -a -n mcp.enabled -v false
Para reativar o controle baseado em grupo/usuário, exclua a propriedade global primeiro:
p4 property -d -n mcp.enabled
Restrições baseadas em grupo
Para impedir o acesso de todos os membros de um grupo específico:
p4 property -a -n mcp.enabled -v false -g noaccessgroup
Você pode definir várias restrições de grupo da mesma maneira.
Quando um usuário pertence a vários grupos com configurações conflitantes, a resolução de propriedades do P4 determina qual valor vence.
O maior número de sequência (-s) vence. Em números de sequência iguais, o nome de grupo alfabeticamente primeiro vence.
Exemplo:
p4 property -a -n mcp.enabled -v false -s1 -g noaccessgroup
p4 property -a -n mcp.enabled -v true -s2 -g accessgroup
Neste exemplo, accessgroup vence porque -s2 é maior que -s1.
Restrições baseadas em usuário
Para bloquear um usuário específico independentemente da associação ao grupo:
p4 property -a -n mcp.enabled -v false -u noaccessuser
No mesmo número de sequência, propriedades de nível de usuário sobrescrevem configurações de grupo e globais (desempate de escopo do P4).
Exemplo: Mesmo se noaccessuser estiver em accessgroup (onde MCP está habilitado), a propriedade de usuário no mesmo número de sequência tem precedência e o MCP é desabilitado.
Nota: Uma propriedade de grupo com valor de
-smaior pode sobrescrever uma propriedade de usuário com número de sequência menor. Para garantir que uma propriedade de nível de usuário sempre vença, atribua a ela um valor alto de-sou garanta que nenhuma propriedade de grupo use uma sequência maior.
Lista de permissões de toolset (global)
Restrinja quais toolsets estão disponíveis em todo o servidor usando mcp.toolsets.allowed. Apenas os toolsets listados serão habilitados; todos os demais serão bloqueados.
Toolsets disponíveis: server, changelists, files, jobs, reviews, shelves, workspaces, streams
Permitir apenas changelists e arquivos:
p4 property -a -n mcp.toolsets.allowed -v changelists,files
Remova a lista de permissões para restaurar todos os toolsets:
p4 property -d -n mcp.toolsets.allowed
Modo somente leitura global
Desabilite todas as operações de escrita (ferramentas de modificação) mantendo as operações de leitura (ferramentas de consulta) disponíveis:
p4 property -a -n mcp.toolsets.write -v false
Reabilite as escritas:
p4 property -a -n mcp.toolsets.write -v true
Quando write=false, todas as ferramentas modify_* são bloqueadas, mas todas as ferramentas query_* continuam funcionando.
Habilitar/desabilitar toolset por grupo
Habilite ou desabilite toolsets individuais para um grupo específico.
Desabilite um toolset para um grupo específico:
p4 property -a -n mcp.toolset.changelists.enabled -v false -g reviewers
Usuários em reviewers são bloqueados de changelists. Usuários em outros grupos (sem configuração explícita) mantêm o acesso padrão.
Para restringir um toolset a apenas um grupo, desabilite-o para todos os outros grupos que não devem ter acesso:
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 os toolsets são habilitados por padrão. Definir
enabled=truepara um grupo é redundante, a menos que você esteja explicitamente sobrescrevendo uma configuração anterior defalse. No mesmo número de sequência, uma propriedade de grupo sobrescreve uma propriedade global (desempate de escopo do P4), então umenabled=truede grupo pode sobrescrever umenabled=falseglobal. Para garantir que uma configuração global não possa ser sobrescrita, atribua a ela um valor alto de-s. Para isolar um toolset a grupos específicos, desabilite-o para os grupos que você deseja bloquear.
Controle de escrita por toolset por grupo
Controle o acesso de escrita para cada toolset no nível de grupo.
Desabilite escritas para um toolset específico por grupo:
p4 property -a -n mcp.toolset.workspaces.write -v false -g reviewers
Isso bloqueia modify_workspaces para o grupo enquanto query_workspaces permanece acessível.
Substituições específicas por ferramenta
Restrinja um grupo a ferramentas específicas dentro de um toolset usando mcp.toolset.<name>.tools.
Permitir apenas query_files (bloquear modify_files) para desenvolvedores:
p4 property -a -n mcp.toolset.files.tools -v query_files -g developers
Permitir consulta e modificação para líderes:
p4 property -a -n mcp.toolset.reviews.tools -v query_reviews,modify_reviews -g leads
Substituições específicas por ferramenta podem restringir o acesso mesmo quando as escritas estão 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: Substituições específicas por ferramenta não podem contornar restrições de escrita. O servidor verifica as permissões de escrita antes de avaliar as listas de ferramentas. Se
write=falseestiver definido em qualquer nível, as ferramentas de escrita são bloqueadas independentemente da lista de ferramentas.
Resolução de conflitos entre múltiplos grupos
Quando um usuário pertence a múltiplos grupos com configurações conflitantes, o P4 resolve cada propriedade para um único valor. O servidor MCP não executa sua própria lógica de múltiplos grupos — ele usa o valor que o P4 retorna.
Regras de resolução do P4 para um determinado nome de propriedade:
- Maior
-s(número de sequência) vence. Esta é a chave de ordenação primária. - No mesmo número de sequência: escopo de usuário > escopo de grupo > escopo global.
- Entre grupos na mesma sequência: o nome do grupo em ordem alfabética primeiro vence.
O P4 não compara valores. Ele escolhe a entrada vencedora pela posição, não pelo conteúdo.
Exemplo — grupos na mesma sequência (padrão):
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
Trocar os valores daria false — developers ainda vence independentemente do valor.
Exemplo — apenas um grupo tem uma configuração:
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
Exemplo — acesso de escrita:
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"
Exemplo — listas de ferramentas (sem união):
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.
Exemplo — usando -s para controlar qual grupo vence:
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)
Dica: Para obter resultados previsíveis com múltiplos grupos, sempre use valores explícitos de
-sem vez de depender da ordenação alfabética dos nomes de grupo.
Desabilitando um toolset específico globalmente
Desabilite um único toolset para todos os usuários sem afetar os demais:
p4 property -a -n mcp.toolset.reviews.enabled -v false
Isso bloqueia tanto query_reviews quanto modify_reviews para todos os usuários. Outros toolsets permanecem inalterados.
Somente leitura de emergência para um grupo específico
Restrinja um grupo específico a somente leitura sem afetar outros grupos:
p4 property -a -n mcp.toolsets.write -v false -g problematic_group
Usuários em outros grupos mantêm acesso total de escrita. Se um usuário pertencer tanto ao grupo restrito quanto a um grupo não restrito, a resolução de propriedades do P4 determina o resultado — tipicamente o nome do grupo em ordem alfabética primeiro vence em números de sequência iguais. Use valores explícitos de -s para resultados previsíveis.
Como as propriedades são resolvidas
O servidor MCP verifica as propriedades nesta ordem. Cada propriedade é resolvida independentemente pelo P4 usando as regras padrão de resolução (maior -s vence, depois usuário > grupo > global em sequência igual, depois nome do grupo em ordem alfabética primeiro).
| Ordem de verificação | Propriedade | Comportamento do servidor MCP |
|---|---|---|
| 1 | mcp.enabled | Se o valor resolvido for false, bloqueia todo o acesso |
| 2 | mcp.toolsets.write | Se o valor resolvido for false e a ferramenta for uma operação de escrita, bloqueia |
| 3 | mcp.toolsets.allowed | Se definido, apenas os toolsets listados estão disponíveis |
| 4 | mcp.toolset.<name>.enabled | Se o valor resolvido for false, bloqueia o toolset |
| 5 | mcp.toolset.<name>.write | Se o valor resolvido for false e a ferramenta for uma operação de escrita, bloqueia |
| 6 | mcp.toolset.<name>.tools | Se definido, apenas as ferramentas listadas dentro do toolset estão disponíveis |
Notas importantes
-
Cada propriedade é resolvida para um único valor pelo P4 antes que o servidor MCP a veja. O P4 usa: maior número de sequência (
-s) primeiro, depois escopo (usuário > grupo > global) como desempate, depois nome do grupo em ordem alfabética. O servidor MCP não executa sua própria resolução de múltiplos grupos ou múltiplos escopos. -
mcp.enabledatua como o interruptor principal. Quando seu valor resolvido éfalse, todo o acesso é bloqueado. -
No mesmo número de sequência, uma propriedade de grupo ou usuário sobrescreve uma propriedade global. Para garantir que um
falseglobal não possa ser sobrescrito, atribua a ele um valor alto de-s. -
A hierarquia de escopo (usuário > grupo > global) só se aplica como desempate em números de sequência iguais. Uma propriedade de grupo em
-s5vencerá uma propriedade de usuário em sequência padrão ou-s1. -
Quando um usuário pertence a múltiplos grupos, o nome do grupo em ordem alfabética primeiro vence (em
-sigual). O valor vencedor é usado como está — o P4 não comparatruevsfalsenem escolhe o valor "mais restritivo". Use valores explícitos de-spara controlar qual grupo tem prioridade. -
Substituições específicas por ferramenta (
mcp.toolset.<name>.tools) podem restringir ainda mais o acesso, mas não podem contornar restrições de escrita. As verificações de escrita são avaliadas antes das listas de ferramentas. -
As alterações de propriedade entram em vigor dentro de 60 segundos devido ao cache do lado do servidor, ou imediatamente em uma nova conexão do servidor MCP.
-
Apenas o valor
false(sem diferenciar maiúsculas de minúsculas) desabilita ou bloqueia o acesso. Qualquer outro valor (incluindotrue,1,yesou strings inválidas) é tratado como não bloqueante.
Ferramentas disponíveis
Ferramentas de consulta (operações de leitura)
query_server - Obter informações do servidor e detalhes do usuário atual
- Ações:
server_info- Obter versão do P4, tempo de atividade e configuraçãocurrent_user- Obter informações do usuário atual e permissões
- Casos de uso - Diagnóstico do servidor, verificação de usuário, teste de conexão
query_workspaces - Informações e gerenciamento de workspaces
- Ações:
list- Listar todos os workspaces (opcionalmente filtrados por usuário)get- Obter uma especificação detalhada do workspacetype- Verificar tipo e configuração do workspacestatus- Verificar status de sincronização do workspace
- Parâmetros:
workspace_name,user,max_results - Casos de uso: Descoberta de workspaces, revisão de configuração, verificação de status
query_changelists - Acessar informações e histórico de changelists
- Ações:
get- Obter informações detalhadas do changelist (arquivos, descrição, jobs)list- Listar changelists com filtros (status, usuário, workspace)
- Parâmetros:
changelist_id,status(pendente/enviado),workspace_name,max_results - Casos de uso: Revisão de código, rastreamento de histórico, análise de changelists
query_files - Operações e informações de arquivos
- Ações:
content- Obter conteúdo do arquivo em uma revisão específicahistory- Obter histórico de revisões do arquivo e registros de integraçãoinfo- Obter detalhes básicos do arquivo (tipo, tamanho, permissões)metadata- Obter metadados do arquivo (atributos, tamanho do arquivo, etc.)diff- Comparar versões de arquivo (depot-para-depot ou misto)annotations- Obter anotações do arquivo com informações de blamesearch- Pesquisar arquivos por padrão de nome (correspondência com curingas)grep- Pesquisar arquivos por padrão de conteúdo (pesquisa de texto)
- Parâmetros:
file_path,file2(para diff),pattern(para pesquisa/grep),case_insensitive(para grep),max_results,diff2(booleano),ranges(para conteúdo)ranges- Lista opcional de pares de linhas[start, end], baseada em 1 e inclusiva (ex.:[[10, 20], [50, 60]]). Aplica-se apenas à açãocontent. Quando definido, a resposta retorna um arraychunkscom uma entrada por intervalo em vez do arquivo inteiro.
- Casos de uso: Análise de código, comparação de arquivos, rastreamento de histórico, análise de blame, descoberta de arquivos, pesquisa de conteúdo, recuperação de intervalos específicos de linhas de arquivos grandes
query_shelves - Operações e inspeção de changelists shelved
- **Ações**:
- `list` - Listar alterações suspensas por usuário ou globalmente
- `diff` - Mostrar diferenças em arquivos suspensos
- `files` - Listar arquivos em um shelf específico
- **Parâmetros**: `changelist_id`, `user`, `max_results`
- **Casos de uso**: Revisão de código, acompanhamento de trabalho em andamento, colaboração
query_jobs - Rastreamento de jobs e gerenciamento de defeitos
- Ações:
list_jobs- Listar jobs associados a um changelistget_job- Obter informações detalhadas do job e status
- Parâmetros:
changelist_id,job_id,max_results - Casos de uso: Rastreamento de defeitos, rastreabilidade de requisitos, gerenciamento de projetos
query_reviews - Descoberta de revisões, detalhes e atividades
- Ações:
list- Listar todas as revisões com filtragem opcionaldashboard- Obter o painel de revisões do usuário atual (minhas revisões, precisa de atenção)get- Obter informações detalhadas da revisãotransitions- Obter transições de estado disponíveis para uma revisãofiles_readby- Obter status de leitura de arquivos por usuáriosfiles- Obter arquivos em uma revisão (com intervalo de versão opcional)activity- Obter histórico de atividades da revisãocomments- Obter comentários em uma revisão
- Parâmetros:
review_id- ID da revisão (obrigatório para get, transitions, files_readby, files, comments, activity)review_fields- Campos separados por vírgula para retornar (ex.: "id,description,author,state")comments_fields- Campos para comentários (padrão: "id,body,user,time")up_voters- Lista de votantes positivos para transiçõesfrom_version,to_version- Intervalo de versão para a ação de arquivosmax_results- Máximo de resultados (padrão: 10)
- Casos de uso: Descoberta de revisão de código, acompanhamento de status de revisão, recuperação de comentários, monitoramento de atividades de revisão
query_streams - Hierarquia de streams, status de integração e validação de workspace
- Ações:
list- Listar streams com filtros opcionais (padrão de caminho, proprietário, tipo)get- Obter uma especificação detalhada do streamchildren- Obter streams filhos de um determinado streamparent- Obter o stream paigraph- Obter o grafo completo do stream (pai + filhos)integration_status- Obter status de integração entre stream e pai (p4 istat)get_workspace- Obter uma especificação de workspace vinculada a um streamlist_workspaces- Listar workspaces vinculados a um streamvalidate_file- Validar caminhos de arquivo contra a view de um streamvalidate_submit- Validar arquivos abertos para submit em um workspace de streamcheck_resolve- Verificar conflitos pendentes de especificação de streaminterchanges- Listar changelists aguardando integração entre streams
- Parâmetros:
stream_name- Caminho do depot do stream (obrigatório para get, children, parent, graph, check_resolve, interchanges)stream_path- Padrão(ns) de caminho para list (ex.:["//depot/..."])filter- Expressão de filtro para list (ex.:"Owner=alice&Type=development")fields- Campos para retornar em list (ex.:["Stream", "Owner", "Type"])workspace- Nome do workspace para get_workspace, validate_file, validate_submitfile_paths- Caminhos de arquivo para validate_fileview_without_edit- Visualizar especificação de stream bloqueada sem abrir para ediçãoat_change- Recuperar especificação histórica de stream em um número de changelistboth_directions- Mostrar status de integração em ambas as direçõesforce_refresh- Forçar atualização do cache istatreverse,long_output,limit- Opções para interchangesunloaded,all_streams,viewmatch- Filtros para listmax_results- Máximo de resultados
- Casos de uso: Exploração de hierarquia de streams, acompanhamento de status de integração, validação de workspace, verificações de compatibilidade de view
query_p4dam_assets - Pesquisar ativos P4 DAM por palavra-chave ou filtros
- Parâmetros:
search_term,project_ids,repository_ids,path,tag,file_extension,user,all_revisions,max_results,offset - Casos de uso: Descoberta de ativos, filtragem por projeto/repositório/tag/extensão, navegação no conteúdo P4 DAM. Use quando você ainda não tiver um caminho de depot.
query_p4dam_asset - Buscar metadados completos de um único ativo P4 DAM
- Parâmetros:
depot_path(obrigatório),identifier,project_id,repository_id,include - Casos de uso: Buscar informações de commit, bundles de ativos, weblinks, atributos personalizados e correspondências de projeto/repositório para um ativo conhecido. Use após
query_p4dam_assetspara obter detalhes completos de um arquivo específico.
query_p4dam_projects - Listar projetos P4 DAM
- Parâmetros:
search_term,limit,offset - Casos de uso: Descobrir projetos disponíveis antes de criar um bundle de ativos ou revisão de arquivo, resolver IDs de projeto para outras chamadas.
query_p4dam_repositories - Listar repositórios em um projeto P4 DAM
- Parâmetros:
project_id(obrigatório),search_term,limit,offset - Casos de uso: Encontrar o tipo de repositório (
helix_streamouhelix_classic) elinked_streams— necessário para fornecerstream_pathou descobrir branches ao criar bundles de ativos ou revisões de arquivo.
query_p4dam_helix_classic_branches - Listar branches Helix Classic em um repositório
- Parâmetros:
project_id(obrigatório),repository_id(obrigatório),limit,offset - Casos de uso: Encontrar o ID do branch necessário ao criar um bundle de ativos ou revisão de arquivo em um repositório Helix Classic.
fetch_p4dam_media - Buscar e renderizar uma URL de mídia P4 DAM como imagem
- Parâmetros:
url(obrigatório —thumbnail_url,preview_url,sprite_urloufile_urldos resultados de ativos) - Casos de uso: Renderizar miniaturas, pré-visualizações e folhas de sprites para ativos de imagem diretamente no cliente. Para arquivos que não são imagem, retorna o tipo MIME e o tamanho em vez do conteúdo da imagem. Passe URLs dos resultados de
query_p4dam_assetsouquery_p4dam_asset— apenasthumbnail_url,preview_urlesprite_urlestão presentes para arquivos de imagem.
query_p4dam_file_reviews - Listar revisões de arquivo (ativo) para um projeto
- Parâmetros:
project_id(obrigatório),depot_path,include,limit,offset - Casos de uso: Navegar por revisões ativas em um projeto, filtrar por caminho de depot, descobrir UUIDs de revisão para consultas de detalhes.
query_p4dam_file_review - Buscar uma única revisão de arquivo por UUID
- Parâmetros:
project_id(obrigatório),review_id(obrigatório) - Casos de uso: Recuperar detalhes completos da revisão — estado, view_paths, asset_bundle, criador e
download_urlpara revisões de bundle.
query_p4dam_workflows - Listar workflows P4 DAM
- Parâmetros:
include,limit,offset - Casos de uso: Descobrir workflows disponíveis e seus estados. Passe
include=['states']para obter todos os estados em uma única chamada — use o estadoshort_namecomo o parâmetrostateem operações de revisão de arquivo.
query_p4dam_workflow - Buscar um único workflow por nome curto ou UUID
- Parâmetros:
workflow_id(obrigatório),include - Casos de uso: Inspecionar os estados de um workflow (
kind: open/review/done,color,position) e regras de transição.
query_p4dam_workflow_states - Listar estados de um workflow
- Parâmetros:
workflow_id(obrigatório),limit,offset - Casos de uso: Listar todos os estados com
short_name,kind,coloreposition. Oshort_nameé o valor a ser passado comostateao criar ou atualizar uma revisão de arquivo.
query_p4dam_custom_attribute_templates - Listar modelos de atributos personalizados para um projeto
- Parâmetros:
project_id(obrigatório) - Casos de uso: Descobrir atributos personalizados disponíveis antes de definir valores — retorna o UUID, nome, tipo (
text,single-select,multi-select,checkbox) eavailable_valuesde cada modelo para tipos select. Passe o UUID paraupdate_p4dam_asset_custom_attributes.
Ferramentas de modificação (operações de escrita)
modify_workspaces - Criação e gerenciamento de workspaces
- Ações -
create,update,delete,switch - Parâmetros -
name,specs(objeto WorkspaceSpec com View, Root, Options, etc.) - Requisitos - Modo somente leitura desativado, permissões apropriadas
- Casos de uso - Configuração de ambiente, manutenção de workspace, troca de branch
modify_changelists - Gerenciamento do ciclo de vida de changelists
- Ações -
create,update,submit,delete,move_files - Parâmetros -
changelist_id,description,file_paths - Segurança - Verificações de propriedade, prompt interativo de PROCEED/CANCEL para operações de exclusão com detalhes dos itens
- Casos de uso - Submissão de código, organização de trabalho, agrupamento de arquivos
modify_files - Operações de sistema de arquivos e controle de versão
- **Ações** - `add`, `edit`, `delete`, `move`, `revert`, `reconcile`, `resolve`, `sync`
- **Parâmetros** - `file_paths`, `changelist`, `force`, `mode` (para operações de resolução)
- **Modos de resolução** - `auto`, `safe`, `force`, `preview`, `theirs`, `yours`
- **Casos de uso** - Edição de arquivos, resolução de conflitos, sincronização de workspace
modify_shelves - Operações de shelving para trabalho em andamento
- Ações -
shelve,unshelve,update,delete,unshelve_to_changelist - Parâmetros -
changelist_id,file_paths,target_changelist,force - Casos de uso - Armazenamento temporário, compartilhamento de código, backup antes de experimentos
modify_jobs - Integração de jobs e changelists
- Ações -
link_job,unlink_job - Parâmetros -
changelist_id,job_id - Casos de uso - Integração com rastreamento de defeitos, vinculação de requisitos
modify_reviews - Criação de reviews, transições, participantes e comentários
- Ações:
create- Criar um novo review a partir de um changelistrefresh_projects- Atualizar associações de projetovote- Votar em um review (positivo, negativo, limpar)transition- Alterar o estado do review (needsRevision, needsReview, approved, committed, rejected, archived)append_participants- Adicionar revisores/grupos a um reviewreplace_participants- Substituir todos os participantesdelete_participants- Remover participantes de um reviewadd_comment- Adicionar um comentário a um reviewreply_comment- Responder a um comentário existenteedit_comment- Editar o corpo e/ou o estado da tarefa de um comentário existenteappend_change- Adicionar um changelist a um review existentereplace_with_change- Substituir o conteúdo do review por um changelistjoin- Participar de um review como participanteleave- Sair de um reviewarchive_inactive- Arquivar reviews inativosmark_comment_read/mark_comment_unread- Marcar o status de leitura de um comentário individualmark_all_comments_read/mark_all_comments_unread- Marcar o status de leitura de todos os comentáriosupdate_author- Alterar o autor do reviewupdate_description- Atualizar a descrição do reviewobliterate- Excluir permanentemente um review
- Parâmetros:
review_id- ID do review (obrigatório para a maioria das ações)change_id- ID do changelist (obrigatório para create, append_change, replace_with_change)description- Descrição do reviewreviewers,required_reviewers- Listas de nomes de usuário dos revisoresreviewer_groups- Grupos de revisores com requisitosvote_value- Valor do voto:up,down,clearversion- Versão do review para votaçãotransition- Estado de destino:needsRevision,needsReview,approved,committed,approved:commit,rejected,archivedjobs,fix_status,cleanup- Opções de vinculação de jobs e limpeza para transiçõesusers,groups- Dados estruturados de participantes para append/replace/deletebody- Texto do corpo do comentáriotask_state- Estado da tarefa do comentário:open,comment,addressed,verified.add_commentaceita apenasopenecomment;addressedeverifiedsão alcançáveis por meio deedit_comment.notify- Modo de notificação:immediate,delayedcomment_id- ID do comentário para respostas, edições ou marcação de lido/não lidocontext- Contexto do comentário (arquivo, números de linha, conteúdo, versão)not_updated_since,max_reviews- Filtros para archive_inactivenew_author,new_description- Valores para ações de atualização
- Casos de uso: Fluxo de trabalho de revisão de código, gerenciamento de estado de review, comentários colaborativos, gerenciamento de participantes, limpeza de reviews
modify_streams - Ciclo de vida de streams, edição de spec, propagação e gerenciamento de workspace
- Ações:
create- Criar um novo stream (mainline, development, release, task, virtual, etc.)update- Atualizar propriedades do stream (nome, descrição, opções, paths, parent_view)delete- Excluir um streamedit_spec- Abrir o spec do stream para edição (p4 stream edit)resolve_spec- Resolver conflitos de spec do streamrevert_spec- Reverter edições do spec do streamshelve_spec- Fazer shelve das edições do spec do stream em um changelist numeradounshelve_spec- Fazer unshelve das edições do spec do streamcopy- Copiar alterações entre streams pai e filhomerge- Mesclar alterações entre streams pai e filhointegrate- Integrar alterações com opções avançadaspopulate- Popular um novo stream com arquivos (branch)switch- Alternar um workspace para um stream diferentecreate_workspace- Criar um novo workspace vinculado a um stream
- Parâmetros:
stream_name- Caminho do depot do stream (obrigatório 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 pai para create em streams não-mainlinename,description- Nome de exibição e descrição do streamoptions- Opções do stream:allsubmit/ownersubmit,unlocked/locked,toparent/notoparent,fromparent/nofromparent,mergedown/mergeanyparent_view- Tratamento da view do pai:inheritounoinheritpaths,remapped,ignored- Mapeamentos da view do streamchangelist- Changelist para operações de edição de spec ou propagaçãoresolve_mode- Modo de resolução para resolve_spec:auto,accept_theirs,accept_yoursparent_stream- Substituir pai para propagação (flag -P)branch- Spec de branch para integrate/populate (flag -b)file_paths- Caminhos de arquivo para propagaçãopreview- Somente pré-visualização, sem alterações (flag -n)force- Forçar operação (flag -f)reverse- Inverter direção (flag -r)max_files- Limitar arquivos processados (flag -m)quiet- Suprimir mensagens informativas (flag -q)output_base- Mostrar revisão base com resolução agendada (flag -Ob para merge/integrate) ou listar arquivos criados (flag -o para populate)virtual- Copiar usando stream virtual (flag -v, somente copy)schedule_branch_resolve- Agendar resolves de branch em vez de branching automático (flag -Rb, somente integrate)integrate_around_deleted- Integrar ignorando revisões excluídas (flag -Di, somente integrate)skip_cherry_picked- Pular revisões cherry-picked já integradas (flag -Rs, somente integrate)source_path,target_path- Caminhos de origem e destino para populateworkspace- Nome do workspace para switchworkspace_name,root,host,alt_roots- Parâmetros de criação do workspace
- Segurança: Validação de existência do stream, detecção de streams bloqueados, avisos de workspace vinculado, verificações de arquivos abertos para alterações que afetam a view
- Casos de uso: Criação e gerenciamento de streams, propagação de branches (merge/copy/integrate), resolução de conflitos de spec, provisionamento de workspaces
create_p4dam_asset_bundle - Criar um pacote de assets P4 DAM
- Parâmetros:
depot_path(obrigatório, deve terminar com.p4bundle),project(obrigatório),repository(obrigatório),view_paths(obrigatório),stream_path,helix_classic_branch,description,hero_file_path - Casos de uso: Criar uma coleção nomeada e com escopo de arquivos do depot para revisão. Forneça
stream_pathpara repositórios Helix Stream,helix_classic_branchpara repositórios Helix Classic.
update_p4dam_asset_bundle - Atualizar um pacote de assets existente
- Parâmetros:
bundle_id(obrigatório),description,view_paths,hero_file_path - Casos de uso: Alterar a descrição de um pacote, ajustar seu escopo de arquivos (
view_paths) ou atualizar a imagem de capa.depot_pathé imutável após a criação.
delete_p4dam_asset_bundle - Excluir um pacote de assets P4 DAM
- Parâmetros:
bundle_id(obrigatório) - Casos de uso: Remover um pacote de assets que não é mais necessário. Irreversível.
sync_p4dam_asset_bundle - Sincronizar arquivos do pacote de assets para um workspace local
- Parâmetros:
view_paths(obrigatório),workspace_root(obrigatório),client_name,bundle_id,stream_path - Casos de uso: Baixar os arquivos com escopo de um pacote de assets via
p4 sync. Cria ou reutiliza um cliente P4 nomeado — sincronizações subsequentes são incrementais. Usestream_pathpara repositórios Helix Stream (aplicaLimitView, requer Perforce 2025.2+).
create_p4dam_file_review - Criar um review de assets P4 DAM
- Parâmetros:
project_id(obrigatório),name(obrigatório),depot_path(obrigatório),view_paths(obrigatório),state(obrigatório),repository,helix_classic_branch,asset_bundle,hero_file_path,description,position,base_commit_id,head_commit_id - Casos de uso: Abrir um review para um único asset ou um pacote de assets (
.p4bundle). Para reviews de pacotes,asset_bundleé detectado automaticamente a partir dedepot_pathquando omitido.
update_p4dam_file_review - Atualizar um review de arquivos P4 DAM
- Parâmetros:
project_id(obrigatório),review_id(obrigatório),state,name,view_paths,hero_file_path,description,position - Casos de uso: Transicionar um review para um novo estado de fluxo de trabalho, atualizar seu nome ou descrição, ajustar o escopo da view. As transições de estado devem ser permitidas pelo fluxo de trabalho do projeto para o usuário atual.
delete_p4dam_file_review - Excluir um review de arquivos P4 DAM
- Parâmetros:
project_id(obrigatório),review_id(obrigatório) - Casos de uso: Remover um review que não é mais necessário. Irreversível. A API retorna o objeto do review excluído em caso de sucesso.
update_p4dam_asset_tags - Adiciona ou remove tags de ativos e tags automáticas
- Parâmetros:
paths(obrigatório — lista de{path, identifier?}),create,delete,delete_auto,propagatable,identifier - Casos de uso: Marcar um ou vários ativos em uma única chamada. Suporta arquivos individuais, revisões específicas e caminhos de pasta recursivos (
//depot/folder/...).createadiciona tags de usuário,deleteremove tags de usuário,delete_autoremove tags geradas automaticamente. Definapropagatable=truepara aplicar tags à revisão mais recente e a todas as revisões futuras.
create_p4dam_comment - Publica um comentário em uma revisão de arquivo ou arquivo, ou responde a um comentário
- Parâmetros:
type(obrigatório),content(obrigatório),project,repository,file_review,commit,path,stream_path,helix_classic_branch,comment - Casos de uso: Comentar em uma revisão de arquivo de pacote de ativos (
file_review), um arquivo específico dentro de uma revisão (file_review_file), um arquivo ou pacote de ativos confirmado sem revisão (commit_file), ou responder a um comentário existente (comment). Os parâmetros obrigatórios dependem do tipo — consulte a descrição detype.
update_p4dam_asset_custom_attributes - Define ou remove valores de atributos personalizados para ativos
- Parâmetros:
paths(obrigatório — lista de{path, identifier?}),create(lista de{uuid, value}),delete(lista de UUIDs de atributos a remover),propagatable - Casos de uso: Definir ou limpar metadados personalizados em um ou mais ativos. Descubra os atributos disponíveis e seus UUIDs primeiro com
query_p4dam_custom_attribute_templates.valueé uma string para tipostext/single-select/checkboxe uma lista de strings paramulti-select.
regenerate_p4dam_preview - Regenera uma imagem de pré-visualização de ativo
- Parâmetros:
depot_path(obrigatório),commit_id(obrigatório) - Casos de uso: Reacionar a geração de pré-visualização quando uma pré-visualização está ausente ou desatualizada.
commit_idé o número do changeset dos resultados dequery_p4dam_asset.
Avisos nas respostas das ferramentas
Quando um comando P4 produz uma mensagem informativa ou de aviso benigna (por exemplo,
file(s) up-to-dateoufile not on client), a ferramenta retorna umstatusde sucesso e inclui o texto da mensagem em uma lista opcional de nível superiorwarnings. O campo aparece somente quando há pelo menos um aviso. Falhas genuínas não são afetadas e ainda retornam umstatusde erro com os campos existentescodeeerror.
Registro de Logs e Dados de Uso
Sistema de registro de logs
Locais dos logs:
- Log do aplicativo:
logs/p4mcp.log- Operações e erros principais do servidor - Logs de sessão:
logs/sessions/*.log- As atividades de sessões individuais são registradas somente quando o sinalizador--allow-usageé especificado nos argumentos de inicialização do servidor.
Dados de Uso
Abordagem de privacidade em primeiro lugar:
- Desativado por padrão: Nenhuma coleta de dados sem consentimento explícito
- Controlado por consentimento: Solicitação na primeira execução para permissão de telemetria
- Transparente: Explicação clara dos dados coletados
- Revogável: Opção fácil de desativar a qualquer momento
Dados coletados (se consentido):
- Frequência de uso das ferramentas (anonimizada)
- Taxas e tipos de erros (sem dados pessoais)
- Métricas de desempenho
- Estatísticas de adoção de recursos
- Versão do servidor P4
Dados não coletados:
- Conteúdo ou nomes de arquivos
- Detalhes do servidor P4, exceto a versão
- Credenciais de usuário ou informações pessoais
- Informações específicas do projeto
Controle:
- Os dados de uso são coletados somente se o argumento
--allow-usagefor fornecido na inicialização.
Solução de Problemas
Problemas de Inicialização do Servidor
Não foi possível iniciar o servidor
Sintomas: O sistema operacional não consegue encontrar ou executar o binário; o erro inclui ENOENT ou "No such file or directory".
Soluções:
- Verifique o caminho: Certifique-se de que o campo
commandusa o caminho absoluto correto para o seu sistema operacional:- macOS/Linux:
/absolute/path/to/p4-mcp-server - Windows:
C:\absolute\path\to\p4-mcp-server.exe
- macOS/Linux:
- Garanta que o binário existe e é executável:
- 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:
- No Windows, garanta que o binário não está bloqueado:
- Clique com o botão direito no arquivo
.exe, selecione Propriedades e, se presente, clique em Desbloquear.
- Clique com o botão direito no arquivo
Problemas de Conexão
Falha ao conectar ao servidor; verifique $P4PORT
Sintomas: Não é possível conectar ao servidor P4
Soluções:
- Verifique a variável de ambiente
P4PORT:echo $P4PORT(macOS) ouecho $env:P4PORT(Windows) - Teste a conexão direta:
p4 info - Verifique a disponibilidade do servidor:
ping perforce.example.com - Verifique a porta e o protocolo (prefixo
ssl:para conexões SSL).
Certificado SSL não confiável (conexão P4)
Sintomas: Erros de confiança SSL ao conectar ao servidor P4 Soluções:
- Confie no servidor:
p4 trust -f -y - Verifique o status de confiança:
p4 trust -l - Para problemas persistentes, verifique a configuração SSL.
Erros de certificado SSL para a API P4 Code Review (revisões)
Sintomas: Erros CERTIFICATE_VERIFY_FAILED ao usar ferramentas de revisão
Soluções:
- Repositório de confiança do sistema: Por padrão, o servidor usa o repositório de confiança do sistema operacional via
truststore. Certifique-se de que o CA corporativo esteja instalado no repositório de certificados do sistema operacional. - Pacote de CA personalizado: Para usar um certificado CA personalizado, você deve primeiro definir
P4MCP_TLS_CA_MODE=certifi(para desativartruststore) e, em seguida, fornecer o caminho do CA via--ca-bundle /path/to/ca.pemouP4MCP_CA_BUNDLE. No modosystempadrão,truststoresubstitui os pacotes de CA personalizados e eles são silenciosamente ignorados. - Desativar verificação: Use
--ssl-no-verifyou definaP4MCP_SSL_VERIFY=false(não recomendado para produção). Isso funciona em ambos os modos TLS.
Observação: Essas configurações SSL se aplicam somente quando a URL do Swarm usa HTTPS. Se o Swarm estiver configurado com uma URL
http://, a verificação SSL não é executada e essas configurações não têm efeito.
Problemas de Autenticação
Usuário não conectado
Sintomas: Falhas de autenticação
Soluções:
- Conecte-se ao P4:
p4 login -a - Verifique o status de login:
p4 login -s - Verifique se o usuário existe:
p4 users -m 1 your_username - Para problemas persistentes, verifique a senha ou use autenticação baseada em ticket.
Senha inválida
Sintomas: Falhas de login
Soluções:
- Redefina a senha por meio de um administrador do P4.
- Use autenticação baseada em ticket:
p4 login -a - Verifique se o nome de usuário está correto:
p4 info
Problemas de Workspace
Cliente desconhecido
Sintomas: Erros de workspace não encontrado
Soluções:
- Liste os workspaces disponíveis:
p4 clients - Verifique a variável de ambiente
P4CLIENT. - Crie um workspace se necessário:
p4 client workspace_name - Verifique a propriedade do workspace:
p4 client -o workspace_name
Arquivo(s) não está(ão) na visão do cliente
Sintomas: Arquivos estão fora do mapeamento do workspace
Soluções:
- Verifique a visão do cliente:
p4 client -o workspace_name - Atualize o mapeamento do workspace para incluir os caminhos necessários.
- Use
p4 where file_pathpara verificar o mapeamento.
Erros de Permissão
Operação não permitida
Sintomas: Permissões insuficientes para operações
Soluções:
- Verifique a propriedade do arquivo:
p4 opened file_path - Verifique as permissões do usuário:
p4 protects file_path - Garanta a associação adequada ao grupo.
- Para operações de administrador, verifique as permissões de administrador.
Arquivo aberto por outro usuário
Sintomas: Conflitos de bloqueio exclusivo
Soluções:
- Verifique quem tem o arquivo aberto:
p4 opened file_path - Entre em contato com o usuário para resolver conflitos.
- O administrador pode forçar operações, se necessário.
Problemas de Desempenho
Operações lentas
Sintomas: Tempos de resposta longos
Soluções:
- Use o parâmetro
max_resultspara limitar o tamanho da consulta. - Use caminhos de arquivo específicos em vez de curingas.
- Verifique a conectividade de rede com o P4.
- Monitore o desempenho do servidor.
Problemas de memória
Sintomas: Alto uso de memória
Soluções:
- Reduza
max_resultspara consultas grandes. - Processe arquivos em lotes.
- Reinicie o servidor MCP periodicamente para sessões de longa duração.
Execução de Ferramentas
Não foi possível executar ferramentas
Sintomas: Conflito com ferramentas MCP integradas ou outras
Soluções:
- Desative quaisquer ferramentas MCP integradas ou conflitantes em seu ambiente ou configuração.
- Garanta que as ferramentas do servidor MCP P4 estejam devidamente registradas e habilitadas.
- Reinicie o servidor MCP após aplicar alterações de configuração para carregar as ferramentas corretas.
Ferramentas corretas não selecionadas
Sintomas: Contexto inválido ou histórico de sessão desatualizado
Soluções:
- Forneça um contexto relacionado ao P4 ao escrever prompts.
- Inicie uma nova sessão se a sessão existente for antiga ou contiver histórico de prompts conflitantes.
Padrões Comuns de Erro
- Autenticação: Garanta login válido antes das operações MCP.
- Mapeamento do workspace: Verifique se as visões do cliente incluem os arquivos de destino.
- Permissões: Verifique as permissões do usuário e do arquivo para operações de escrita.
- Rede: Verifique a conectividade para servidores P4 remotos.
Obtendo Ajuda
- Verifique os logs: Sempre verifique
logs/p4mcp.logprimeiro. - Teste o P4: Garanta que
p4 infofuncione antes de solucionar problemas do MCP. - Relate problemas à comunidade: Relate problemas com trechos de log e detalhes do ambiente.
Suporte
O Perforce P4 MCP Server é um projeto apoiado pela comunidade e não é oficialmente suportado pela Perforce. Pull requests e problemas são responsabilidade do(s) moderador(es) do projeto; isso pode ser um indivíduo ou equipe qualificada com membros fora da organização Perforce. Todos os problemas devem ser relatados e gerenciados via GitHub (não pelo processo de suporte padrão da Perforce).
Contribuições
Aceitamos contribuições para o projeto P4 MCP Server.
Licença
Este projeto está licenciado sob a Licença MIT. Consulte LICENSE para obter detalhes.
Avisos de Terceiros
Este projeto inclui componentes de terceiros. Suas licenças e atribuições estão listadas em THIRD-PARTY-NOTICES.