list_projectsLABSCO SUMMARY
Site questions get raised and answered without a trip to the portal.
Projects, RFIs and submittals are all readable and writable from one connection, so the gap between noticing something on site and it existing as a tracked, numbered record closes to a single sentence.
What it is
A connection to the Procore construction management API covering projects, RFIs and submittals, with documents and budget on the same footing. Inputs are validated before a request goes out, and every answer comes back as clean JSON.
What you get
- The project list for the authenticated client, filterable, and the details of any single project
- RFIs listed for a project, read individually, and created without opening the web interface
- Submittals listed, read and created the same way
- Documents, budget and cost covered by the same server
- Procore's error responses handled explicitly — unauthorized, forbidden, not found and rate-limited each surface as themselves rather than as a generic failure
Requirements
Node.js 18 or newer, and a Procore Developer account with an OAuth2 client registered for the client-credentials flow. The client id, client secret and API base URL go in a .env file, and the client's scopes have to cover the modules you intend to use — RFIs, submittals, documents, budget.
Setup effort
Build from source
USE CASES
Raising an RFI while the question is still fresh
Find the project, then file the RFI against it directly — the question becomes a tracked record instead of a note that gets typed up later, or not at all.
Checking what is still open on a job
List the RFIs for a project and read the ones that matter, so a status question is answered from the live record rather than from last week's export.
Chasing a submittal through approval
List the submittals on the project and open the one you are waiting on, to see where it actually sits before you chase anyone.
Logging a new submittal for review
Create the submittal against the right project in one step, with inputs validated before the request goes out, so a rejected field surfaces immediately rather than as a silent failure.
Getting a read across several projects at once
Walk the project list and pull the open items on each, which is how a portfolio-level answer gets assembled without opening a tab per job.
12 tools
Listed in project docs. Your client may show a different list.
get_projectlist_rfisget_rficreate_rfilist_submittalsget_submittalcreate_submittallist_folderslist_fileslist_budget_line_itemsget_budget_summaryBEFORE YOU INSTALL
What to know first
Tools you get
12 tools named in the project's documentation. Only create_rfi and create_submittal write; nothing updates, answers or closes an RFI.
Requires
- Node.js v18 or later
- PROCORE_CLIENT_ID in your environment
- PROCORE_CLIENT_SECRET in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/zeniasupp0rt-cmyk/procore-mcp-server
cd procore-mcp-server
npm install
cp .env.example .env
npm run buildMCP Clients
Claude Desktop
{
"mcpServers": {
"procore": {
"command": "node",
"args": [
"C:/Procore/procore-mcp-server/dist/index.js"
],
"env": {
"PROCORE_CLIENT_ID": "<YOUR_PROCORE_CLIENT_ID>",
"PROCORE_CLIENT_SECRET": "<YOUR_PROCORE_CLIENT_SECRET>",
"PROCORE_BASE_URL": "https://api.procore.com"
}
}
}
}C:/Procore/procore-mcp-server/dist/index.js is the author's own path — put the full path to dist/index.js in your clone there (npm run build creates it). <YOUR_PROCORE_CLIENT_ID> and <YOUR_PROCORE_CLIENT_SECRET> are the ID and secret of your Procore OAuth client.