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.
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 a P4 Code Review para descoberta de reviews, votação, transições de estado, comentários e gerenciamento de participantes.
- Segurança em primeiro lugar: Modo somente leitura por padrão, verificações de propriedade, elicitação interativa via MCP (PROCEED/CANCEL) para operações destrutivas de delete e obliterate.
- Conjuntos de ferramentas flexíveis: Configure quais categorias de ferramentas habilitar: server, files, changelists, shelves, workspaces, jobs, reviews e streams.
- Registro de logs robusto: Logs de aplicação e sessão no diretório
logs/. - Telemetria opcional: Estatísticas de uso com consentimento. Desabilitada por padrão.
- Multiplataforma: Suportado em macOS, Linux e Windows com binários pré-compilados.
Pré-requisitos
- Acesso ao P4 Server: Conexão a um P4 Server 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+) |
| Perforce P4 Server | 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 qualquer 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ário configurar ambiente virtual Python ou gerenciar 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-<version>.tgz - Windows:
p4-mcp-server-<version>.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"
},
"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",
"-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.
Usando uma senha:
-e P4PASSWD="your_password"
Restrições de Host do Workspace
⚠️ Importante: 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:"
Montando o Client Root para Operações de Escrita
⚠️ Importante: Por padrão, o contêiner Docker não pode acessar os arquivos locais do seu workspace. Para operações de escrita como
sync,submitoureconcile, você deve montar o diretório do seu 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",
"-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 \
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: 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" } } } }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 detalhadas de configuração.
Claude Code
Consulte a documentação 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"
}
}
}
}
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"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Cursor
Consulte a documentação 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"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Eclipse
Consulte a documentação 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"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Kiro
Consulte a documentação 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"
},
"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"
},
"args": [
"--readonly", "--allow-usage"
]
}
}
}
Windsurf
Consulte a documentação 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"
},
"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 P4P4CLIENT- Seu workspace P4 atual. Opcional, mas recomendado
Variáveis de ambiente de limite de resultados
P4MCP_MAX_RESULTS- Limite máximo 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 tentativa de conexão P4.P4MCP_MAX_SCAN_ROWS- Limite máximo 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 varredura. 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
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): use 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: desative a injeção detruststoree use o comportamento padrão de certificado 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 certificado 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.
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 - 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ão 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 transformam 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 máximo 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 — 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 tentativa de conexão P4.
Ordem de prioridade:
--max-results>P4MCP_MAX_RESULTS> padrão (10000). - Padrão:
-
--max-scan-rows <N>- Limite máximo 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 varredura.
- 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 HTTPS Swarm. Se a URL do Swarm for
http://, elas não têm efeito.
-
--ca-bundle <path>- Caminho para um pacote de certificado CA personalizado (PEM) para solicitações da API P4 Code Review.- Use isso para confiar em uma CA interna sem desativar completamente a verificação.
- 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). Os argumentos de CLI têm prioridade sobre as variáveis de ambiente. -
--log-dir <path>- Diretório para arquivos de log.- Especifique um diretório personalizado para arquivos de log (logs de aplicativo 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á com que as ferramentas falhem 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
Essas 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 do 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 do grupo em ordem alfabética 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 desativado.
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 primeiro a propriedade global:
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 do grupo em ordem alfabética 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 em nível de usuário substituem configurações em nível de grupo e global (desempate de escopo do P4).
Exemplo: Mesmo se noaccessuser estiver em accessgroup (onde o MCP está habilitado), a propriedade do usuário no mesmo número de sequência tem precedência e o MCP é desativado.
Nota: Uma propriedade de grupo com um valor de
-smaior pode substituir uma propriedade de usuário com um número de sequência menor. Para garantir que uma propriedade em nível de usuário sempre vença, dê a ela um valor alto de-sou garanta que nenhuma propriedade de grupo use um número de sequência maior.
Lista de permissões de conjuntos de ferramentas (global)
Restrinja quais conjuntos de ferramentas estão disponíveis em todo o servidor usando mcp.toolsets.allowed. Apenas os conjuntos de ferramentas listados serão habilitados; todos os outros são bloqueados.
Conjuntos de ferramentas 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 conjuntos de ferramentas:
p4 property -d -n mcp.toolsets.allowed
Modo somente leitura global
Desative 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
Reative 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 conjunto de ferramentas por grupo
Habilite ou desabilite conjuntos de ferramentas individuais para um grupo específico.
Desabilite um conjunto de ferramentas 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 conjunto de ferramentas 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 conjuntos de ferramentas são habilitados por padrão. Definir
enabled=truepara um grupo é redundante, a menos que você esteja explicitamente substituindo uma configuração anterior defalse. No mesmo número de sequência, uma propriedade de grupo substitui uma propriedade global (desempate de escopo do P4), portanto, umenabled=truede grupo pode substituir umenabled=falseglobal. Para garantir que uma configuração global não possa ser substituída, dê a ela um valor alto de-s. Para isolar um conjunto de ferramentas para 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 do grupo.
Desative gravações 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.
Permita apenas query_files (bloqueie modify_files) para desenvolvedores:
p4 property -a -n mcp.toolset.files.tools -v query_files -g developers
Permita consulta e modificação para leads:
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 gravações 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 vários 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 do usuário > escopo do 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 vários grupos, use sempre valores explícitos de
-sem vez de depender da ordem alfabética dos nomes dos grupos.
Desativando um toolset específico globalmente
Desative um único toolset para todos os usuários sem afetar os outros:
p4 property -a -n mcp.toolset.reviews.enabled -v false
Isso bloqueia tanto query_reviews quanto modify_reviews para todos os usuários. Os demais 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 — normalmente 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 de resolução padrã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, bloqueie todo o acesso |
| 2 | mcp.toolsets.write | Se o valor resolvido for false e a ferramenta for uma operação de escrita, bloqueie |
| 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, bloqueie o toolset |
| 5 | mcp.toolset.<name>.write | Se o valor resolvido for false e a ferramenta for uma operação de escrita, bloqueie |
| 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 forfalse, todo o acesso é bloqueado. -
No mesmo número de sequência, uma propriedade de grupo ou usuário substitui uma propriedade global. Para garantir que um
falseglobal não possa ser substituído, 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 na sequência padrão ou-s1. -
Quando um usuário pertence a vários 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 em até 60 segundos devido ao cache no lado do servidor, ou imediatamente em uma nova conexão com o servidor MCP.
-
Apenas o valor
false(sem diferenciar maiúsculas de minúsculas) desativa 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, etc.)diff- Comparar versões de arquivo (depot a 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) - 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
query_shelves - Operações e inspeção de changelists shelved
- Ações:
list- Listar alterações shelved por usuário ou globalmentediff- Mostrar diferenças em arquivos shelvedfiles- Listar arquivos em um shelf específico
- Parâmetros:
changelist_id,user,max_results - Casos de uso: Revisão de código, rastreamento 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 reviews, detalhes e atividade
- Ações:
list- Listar todos os reviews com filtragem opcionaldashboard- Obter o painel de reviews do usuário atual (meus reviews, precisa de atenção)get- Obter informações detalhadas do reviewtransitions- Obter transições de estado disponíveis para um reviewfiles_readby- Obter status de leitura de arquivos por usuáriosfiles- Obter arquivos em um review (com intervalo de versão opcional)activity- Obter histórico de atividade do reviewcomments- Obter comentários em um review
- Parâmetros:
review_id- ID do review (obrigatório para get, transitions, files_readby, files, comments, activity)review_fields- Campos separados por vírgula a retornar (ex.: "id,description,author,state")comments_fields- Campos para comentários (padrão: "id,body,user,time")up_voters- Lista de up voters 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 reviews de código, rastreamento de status de reviews, recuperação de comentários, monitoramento de atividade de reviews
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 de stream
- `children` - Obter streams filhos de um determinado stream
- `parent` - Obter o stream pai
- `graph` - Obter o grafo completo do stream (pai + filhos)
- `integration_status` - Obter o status de integração entre stream e pai (p4 istat)
- `get_workspace` - Obter uma especificação de workspace vinculada a um stream
- `list_workspaces` - Listar workspaces vinculados a um stream
- `validate_file` - Validar caminhos de arquivo contra a view de um stream
- `validate_submit` - Validar arquivos abertos para submit em um workspace de stream
- `check_resolve` - Verificar conflitos pendentes de especificação de stream
- `interchanges` - Listar changelists aguardando integração entre streams
- **Parâmetros**:
- `stream_name` - Caminho de depósito do stream (obrigatório para get, children, parent, graph, check_resolve, interchanges)
- `stream_path` - Padrão(ões) de caminho para list (ex.: `["//depot/..."]`)
- `filter` - Expressão de filtro para list (ex.: `"Owner=alice&Type=development"`)
- `fields` - Campos a retornar para list (ex.: `["Stream", "Owner", "Type"]`)
- `workspace` - Nome do workspace para get_workspace, validate_file, validate_submit
- `file_paths` - Caminhos de arquivo para validate_file
- `view_without_edit` - Visualizar especificação de stream bloqueada sem abrir para edição
- `at_change` - Recuperar especificação histórica de stream em um número de changelist
- `both_directions` - Mostrar status de integração em ambas as direções
- `force_refresh` - Forçar atualização do cache do istat
- `reverse`, `long_output`, `limit` - Opções para interchanges
- `unloaded`, `all_streams`, `viewmatch` - Filtros para list
- `max_results` - Resultados máximos
- **Casos de uso**: Exploração de hierarquia de streams, rastreamento de status de integração, validação de workspace, verificações de compatibilidade de view
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 desabilitado, 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 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 resolve) - Modos de resolve -
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 de 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 (up, down, clear)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 existenteappend_change- Adicionar um changelist a um review existentereplace_with_change- Substituir o conteúdo do review por um changelistjoin- Entrar em um review como participanteleave- Sair de um reviewarchive_inactive- Arquivar reviews inativosmark_comment_read/mark_comment_unread- Marcar status de leitura de comentário individualmark_all_comments_read/mark_all_comments_unread- Marcar 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 alvo: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 de tarefa do comentário:open,commentnotify- Modo de notificação:immediate,delayedcomment_id- ID do comentário para respostas 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 especificação, propagação e gerenciamento de workspaces
- 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 especificação do stream para edição (p4 stream edit)resolve_spec- Resolver conflitos de especificação de streamrevert_spec- Reverter edições de especificação de streamshelve_spec- Shelve de edições de especificação de stream em um changelist numeradounshelve_spec- Unshelve de edições de especificação de 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 de depósito 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 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 de view do streamchangelist- Changelist para edição de especificação ou operações de propagaçãoresolve_mode- Modo de resolve para resolve_spec:auto,accept_theirs,accept_yoursparent_stream- Substituir pai para propagação (flag -P)branch- Especificação 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 resolve agendado (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 branch 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 de workspace
- Segurança: Validação de existência do stream, detecção de stream bloqueado, 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 branch (merge/copy/integrate), resolução de conflitos de especificação, provisionamento de workspaces
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 reais não são afetadas e ainda retornam umstatusde erro com os campos existentescodeeerror.
Registro e Dados de Uso
Sistema de registro
Locais de registro:
- Log do aplicativo:
logs/p4mcp.log- Operações e erros principais do servidor - Logs de sessão:
logs/sessions/*.log- Atividades de sessões individuais são registradas somente quando o flag--allow-usageé especificado nos argumentos de inicialização do servidor.
Dados de Uso
Abordagem focada em privacidade:
- Desativado por padrão: Nenhuma coleta de dados sem consentimento explícito
- Mediante consentimento: Solicitação na primeira execução para permissão de telemetria
- Transparente: Explicação clara dos dados coletados
- Revogável: Opção de desativação fácil a qualquer momento
Dados coletados (se houver consentimento):
- Frequência de uso das ferramentas (anonimizada)
- Taxas e tipos de erro (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 de projetos
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
commanduse 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 exista e seja 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 esteja 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 (reviews)
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 desabilitartruststore) e, em seguida, fornecer o caminho do CA via--ca-bundle /path/to/ca.pemouP4MCP_CA_BUNDLE. No modo padrãosystem,truststoresubstitui os pacotes de CA personalizados e eles são silenciosamente ignorados. - Desabilitar verificação: Use
--ssl-no-verifyou definaP4MCP_SSL_VERIFY=false(não recomendado para produção). Isso funciona em ambos os modos TLS.
Nota: 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 é realizada 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:
- Faça login no P4:
p4 login -a - Verifique o status do 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 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 integradas ou outras ferramentas MCP
Soluções:
- Desative quaisquer ferramentas integradas ou conflitantes do servidor MCP 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 conflitante.
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 issues são de 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 é licenciado sob a Licença MIT. Consulte LICENSE para detalhes.
Avisos de Terceiros
Este projeto inclui componentes de terceiros. Suas licenças e atribuições estão listadas em THIRD-PARTY-NOTICES.