pipeyard
Mercado de conectores MCP selecionados para setores verticais — Construção, Finanças, Saúde e Logística, com documentação completa, exemplos curl e testes em sandbox.
Documentação
Servidor MCP do Procore
Este projeto implementa um servidor Model Context Protocol (MCP) que conecta o Claude (e outros clientes compatíveis com MCP) à API do Procore. Ele expõe ferramentas para trabalhar com:
- Projetos
- RFIs
- Submissões (Submittals)
- Documentos
- Orçamento e custos
Todas as ferramentas retornam respostas JSON limpas, validam entradas com zod e incluem tratamento robusto de erros para respostas 401, 403, 404 e 429 (limite de taxa) do Procore.
Pré-requisitos
- Node.js: v18+ (recomendado)
- npm: v9+ (acompanha o Node.js recente)
- Conta de desenvolvedor Procore com:
- Um cliente OAuth2 registrado usando o fluxo Client Credentials
- Acesso à API para os projetos/módulos relevantes (RFIs, Submissões, Documentos, Orçamento, etc.)
Instalação
cd C:\Procore
npm install
Se você criou a pasta em outro local, ajuste o caminho cd de acordo.
Obtendo credenciais da API do Procore
- Acesse o Portal do Desenvolvedor Procore.
- Crie um Cliente OAuth usando o tipo de concessão Client Credentials.
- Anote os seguintes valores:
- Client ID
- Client Secret
- Garanta que o cliente tenha escopos de acesso apropriados para:
- Projetos
- RFIs
- Submissões
- Documentos
- Gerenciamento de orçamento e custos
Você usará esses valores no seu arquivo .env.
Configuração de variáveis de ambiente
Crie um arquivo .env na raiz do projeto (ao lado de package.json) com base em .env.example:
cp .env.example .env
Em seguida, edite .env:
PROCORE_CLIENT_ID=your_real_client_id
PROCORE_CLIENT_SECRET=your_real_client_secret
PROCORE_BASE_URL=https://api.procore.com
- PROCORE_CLIENT_ID: Do portal do desenvolvedor Procore.
- PROCORE_CLIENT_SECRET: Do portal do desenvolvedor Procore.
- PROCORE_BASE_URL: Normalmente
https://api.procore.com(você pode substituir para ambientes de sandbox/teste).
Compilar e executar localmente
Instale as dependências:
npm install
Execute em modo de desenvolvimento (TypeScript via tsx):
npm run dev
Compile o TypeScript para dist/:
npm run build
Execute o servidor compilado:
npm start
O servidor MCP usa stdio (entrada/saída padrão), portanto normalmente é iniciado e gerenciado por um cliente MCP, como o Claude Desktop. Geralmente você não o chama diretamente no terminal, exceto para depuração.
Ferramentas disponíveis
Todas as ferramentas retornam JSON. Os argumentos mostrados abaixo são os argumentos das ferramentas, não chamadas HTTP brutas.
-
Projetos
list_projects- Descrição: Lista projetos do Procore para o cliente autenticado, opcionalmente filtrados por
company_id. - Entradas:
company_id(opcional, inteiro): Filtra projetos por empresa.
- Descrição: Lista projetos do Procore para o cliente autenticado, opcionalmente filtrados por
get_project- Descrição: Obtém detalhes de um único projeto por ID.
- Entradas:
id(obrigatório, inteiro): ID do projeto.
-
RFIs
list_rfis- Descrição: Lista RFIs de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
get_rfi- Descrição: Obtém um único RFI por ID em um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.id(obrigatório, inteiro): ID do RFI.
create_rfi- Descrição: Cria um novo RFI em um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.payload(obrigatório, objeto): Payload JSON bruto correspondente ao corpo da API create RFI do Procore.
-
Submissões (Submittals)
list_submittals- Descrição: Lista submissões de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
get_submittal- Descrição: Obtém uma única submissão por ID em um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.id(obrigatório, inteiro): ID da submissão.
create_submittal- Descrição: Cria uma nova submissão em um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.payload(obrigatório, objeto): Payload JSON bruto correspondente ao corpo da API create Submittal do Procore.
-
Documentos
list_folders- Descrição: Lista pastas de documentos de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
list_files- Descrição: Lista arquivos de documentos de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
-
Orçamento
list_budget_line_items- Descrição: Lista itens de linha do orçamento de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
get_budget_summary- Descrição: Obtém o resumo geral do orçamento de um projeto.
- Entradas:
project_id(obrigatório, inteiro): ID do projeto.
Exemplos de chamadas de ferramentas no estilo curl (via MCP JSON-RPC)
Servidores MCP falam JSON-RPC via stdio; normalmente você não os chama diretamente com curl. Esses exemplos ilustram a estrutura do payload que um cliente como o Claude Desktop enviaria.
Substitua 123 / 456 etc. pelos seus IDs reais.
- Listar projetos
echo '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_projects",
"arguments": {
"company_id": 123
}
}
}' | node dist/index.js
- Obter um projeto
echo '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_project",
"arguments": {
"id": 123
}
}
}' | node dist/index.js
- Listar RFIs
echo '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "list_rfis",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
- Criar RFI
echo '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "create_rfi",
"arguments": {
"project_id": 123,
"payload": {
"subject": "RFI subject here",
"question": "Describe the question...",
"responsible_contractor_id": 456
}
}
}
}' | node dist/index.js
- Listar submissões
echo '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "list_submittals",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
- Criar submissão
echo '{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "create_submittal",
"arguments": {
"project_id": 123,
"payload": {
"subject": "Submittal subject",
"spec_section": "01 30 00",
"responsible_contractor_id": 456
}
}
}
}' | node dist/index.js
- Listar pastas
echo '{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "list_folders",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
- Listar arquivos
echo '{
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "list_files",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
- Listar itens de linha do orçamento
echo '{
"jsonrpc": "2.0",
"id": 9,
"method": "tools/call",
"params": {
"name": "list_budget_line_items",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
- Obter resumo do orçamento
echo '{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "get_budget_summary",
"arguments": {
"project_id": 123
}
}
}' | node dist/index.js
Comportamento de tratamento de erros
Todas as ferramentas incluem respostas de erro JSON consistentes. Formato típico:
{
"error": "unauthorized",
"message": "Procore API returned 401 Unauthorized.",
"status": 401,
"statusText": "Unauthorized",
"url": "/rest/v1.0/projects",
"method": "get",
"data": { /* raw Procore response body, if any */ }
}
Status HTTP tratados:
- 401:
unauthorized - 403:
forbidden - 404:
not_found - 429:
rate_limited - Outros 4xx/5xx:
procore_api_error - Validação / outros erros:
tool_error
Como conectar ao Claude Desktop (configuração MCP)
No Claude Desktop, adicione uma nova configuração de servidor MCP no seu claude_desktop_config.json (o caminho pode variar conforme o sistema operacional).
Exemplo de entrada:
{
"mcp_servers": {
"procore": {
"command": "node",
"args": [
"C:/Procore/procore-mcp-server/dist/index.js"
],
"env": {
"PROCORE_CLIENT_ID": "your_real_client_id",
"PROCORE_CLIENT_SECRET": "your_real_client_secret",
"PROCORE_BASE_URL": "https://api.procore.com"
}
}
}
}
- command:
node(ou um caminho explícito para o seu binário Node). - args: Caminho para o
index.jscompilado emdist/. - env: Você pode:
- Inserir seus segredos aqui (com cautela), ou
- Omitir
envpara que o Claude Desktop herde as variáveis de ambiente do seu sistema.
Após salvar a configuração, reinicie o Claude Desktop. O servidor MCP procore deve aparecer como um conjunto de ferramentas disponível, e as ferramentas listadas acima (list_projects, get_project, list_rfis, etc.) poderão ser chamadas diretamente de dentro do Claude.