The Model Context Protocol (MCP) is an open standard that lets an AI application connect to outside systems through a common interface. A system like Procore, Primavera P6, or your ERP is wrapped in an "MCP server" that exposes a defined set of tools, and any MCP-compatible client (Claude Desktop, Cursor, or a custom agent) can discover and call them. For construction teams, MCP is the layer that turns "the AI can talk about our project" into "the AI can look up our project, under rules we set."
This guide explains what MCP is in plain terms, why it matters for construction data, how servers and gateways differ, what happens when an API has thousands of operations, how to govern it, and how to start without creating a new risk. It draws on the MCP servers and gateway we have built and published for Procore, Primavera P6, and multi-server tool routing.
MCP in plain terms
Before MCP, every AI integration was custom. If you wanted a chatbot to read Procore budgets, someone wrote glue code for that one chatbot and that one API. Switch models or tools and you started over.
MCP standardizes the connection. It defines how a client and a server talk (JSON-RPC messages over a transport), how a server describes what it can do, and how the client calls it. The full specification lives at modelcontextprotocol.io.
A useful mental model: MCP is to AI agents roughly what a standard plug is to appliances. The plug doesn't decide what the appliance does or whether it is safe. It just means you don't rewire the house for each one.
The core terms
| Term | What it means | Construction example |
|---|---|---|
| MCP client | The AI application that connects to servers and lets a model use their tools | Claude Desktop, Cursor, or an agent platform your team uses |
| MCP server | A program that exposes a system's capabilities over MCP | A Procore MCP server that can list projects, read budgets, or create RFIs |
| Tool | A named action the model can call, with a typed input schema | list_projects, get_project_details, a critical path analysis on an XER file |
| Resource | Read-only context the server can share | A schedule summary or a project document |
| Prompt | A reusable, server-defined prompt template | "Summarize schedule risk for this project" |
| Transport | How client and server exchange messages | Local stdio for a desktop tool, or streamable HTTP for a hosted server |
| MCP gateway | A control layer in front of one or many servers that handles auth, routing, policy, and telemetry | One endpoint that fronts your Procore, P6, and ERP servers with per-team API keys |
Most of the value for construction sits in tools. Resources and prompts are useful, but tools are what let an agent actually query a budget or analyze a schedule.
Why MCP matters for Procore, P6, and ERP data
Construction data is spread across systems that were never designed to talk to each other: a project management platform, a CPM scheduler, an accounting ERP, a CRM, field tools, and a pile of spreadsheets that reconcile them. That fragmentation is exactly where people want AI help, and exactly where generic chatbots fail, because they can't see any of it.
MCP matters here for four reasons:
- Live answers instead of pasted exports. An agent with Procore tools can call the API for the current project list or budget rather than working from a CSV someone uploaded last week.
- One integration, many clients. Build the Procore server once and use it from a desktop assistant, an internal agent, or an automation. You aren't locked to one AI vendor.
- A real boundary. Tools are explicit. You decide which operations exist, which are read-only, and which require approval. That is far easier to reason about than a model with a broad API token.
- Observable behavior. Every tool call is a discrete event with inputs and outputs you can log, review, and use to improve the tools.
What MCP does not do: it doesn't clean your data, define your cost codes, reconcile your schedule to your ERP, or decide who should see what. Those are still integration and governance problems. MCP gives you a clean place to enforce the answers.
How an MCP tool call actually works
When a user asks an agent "What's the budget status on this project?", the flow looks like this:
- The client connects to the MCP server and receives the list of available tools with their descriptions and input schemas.
- The model reads the request and the tool list, then decides which tool to call and with what arguments.
- The client sends the call to the server. The server authenticates to Procore with credentials it holds, makes the API request, and returns the result.
- The model reads the result and either calls another tool (for example, budget line items after finding the project ID) or answers.
In our Construct.Chat demo, this is exactly what you see: the agent runs list projects, then the project details call, then a series of financial calls, and the platform logs each request, its parameters, and its response. That log is how we spot a failed tool, check whether an endpoint URL or required parameter changed, and fix it.
Step 1 is where large APIs get into trouble.
Servers vs. gateways
An MCP server wraps one system. A gateway sits in front of servers and controls access to them. Small setups only need servers. Production setups with multiple systems, teams, or customers usually need both.
| MCP server | MCP gateway | |
|---|---|---|
| Scope | One system (Procore, P6, an ERP) | Many servers behind one endpoint |
| Main job | Translate tool calls into API calls | Auth, routing, policy, rate limits, telemetry |
| Credentials | Holds the system credentials | Issues and manages client keys; maps them to allowed servers and tools |
| Who configures it | Integration engineers | Platform, IT, and security |
| When you need it | Always, for each system | When more than one team, agent, or system is involved |
Our Tool Runtime gateway is a working example. You select which MCP servers and which specific tools an API key can reach, set rate limits per key, and hand the resulting configuration to Cursor, Claude, or any client. Every call is logged with the organization, user, API key, server, input, and output, which makes debugging and review practical instead of theoretical.
You can also build gateway behavior into a large server. Our P6 MCP server includes its own gateway runtime with discovery, workflow planning, policy enforcement, approvals, audit logging, caching, rate limiting, and metrics in front of the P6 REST API.
Tool routing at scale: the problem with thousands of tools
Here is the issue most first MCP builds hit. Every tool's name, description, and schema is sent to the model as context. A handful of tools is fine. Thousands are not.
Generating one tool per endpoint from Procore's OpenAPI specs produced 2,755 tools in our Procore MCP server. Our P6 catalog covers 585 REST operations across 101 entities. Hand either list to a model and two things happen: the context fills with tool definitions before any work starts, and the model gets worse at picking the right tool.
The fix is routing. Instead of exposing every endpoint, you expose a small set of meta-tools that let the agent find what it needs:
- Discover: search the catalog by intent ("RFIs overdue on this project").
- Describe: get the full schema and dependencies for the few candidate operations.
- Plan: work out the order of calls, including which IDs must be fetched first.
- Call: execute through a single governed dispatch path.
In our Procore MCP, router mode reduces the 2,755-tool surface to roughly 25 meta-tools. Retrieval uses hybrid search (keyword plus embeddings, fused into one ranking) over the tools, capabilities, workflows, and policies, and a bandit tuner adjusts the ranking per tenant and persona. The server also supports an expanded mode (all tools, for clients that select tools themselves) and a hybrid mode where a persona or focus area, such as RFIs, pulls in only the relevant set.
The P6 server takes the same approach: 24 gateway tools for session context, discovery, planning, validation, execution, approvals, and audit sit in front of the 585 operations.
Routing has a second benefit: dependencies. Many construction API calls only work if you already have the right company, project, or object IDs. A catalog with dependency metadata lets the planner fetch them in order instead of letting the model guess.
The deeper write-ups are in routing 2,755 Procore API tools and the P6 MCP server.
Governance: what makes MCP safe to run against live data
An MCP server with write access to Procore or your ERP is a production integration that a language model can trigger. Treat it that way. These are the controls we build in by default:
- Credentials stay on the server. The model never sees a client secret or token. Clients authenticate to the server or gateway with their own key.
- Tenant isolation. In multi-organization setups, each organization's credentials are partitioned so no two organizations share tokens or reach each other's data. Both our Procore and P6 servers are built this way.
- Read-first scopes. Start with read-only tools. Add writes one workflow at a time.
- Policy on every call. Restrict deletes, require validation for creates, limit by environment (sandbox vs. production), and apply rate limits and quotas.
- Human approval for risky actions. The P6 server can preview a mutation and route policy-gated actions to a named user for approval before anything changes.
- A single dispatch chokepoint. In the Procore server, every call passes through one path: schema validation, rate limiting, policy, idempotency, the handler, output shaping, PII redaction, then audit. One path is one place to enforce and inspect.
- Telemetry you actually review. Log which tools were called, with what inputs, what came back, and what failed.
This maps to our design principles: least privilege by default, evidence on every output, and boring where it counts. For a fuller treatment, see governing AI agents in construction and our governance page.
Not every question needs a live API
One pattern worth copying: run analysis offline when you can. Our P6 MCP server includes 13 tools that work on an exported XER file with no live P6 connection: parsing, activities, critical path, resource use, schedule quality, WBS, relationships, calendars, schedule summary, and earned value.
A scheduler can export the file, point the agent at it, and get a schedule quality review without anyone issuing API credentials. The same server runs live REST tools alongside it when live access is warranted. For many teams, that is the right first project.
How to start: a practical checklist
- Pick one question worth answering. "Which projects have budget changes this month?" or "Where is float eroding on this schedule?" A specific question beats "connect AI to Procore."
- Map the systems and data it needs. Name the APIs, objects, and IDs involved. Note where systems disagree (job numbers, cost codes) because the agent will hit those gaps too.
- Start read-only. Expose only the tools that question needs. No create, update, or delete yet.
- Decide server, gateway, or both. One system and one team: a server. Multiple systems, teams, or clients: put a gateway in front.
- Plan for API size. If the API has more than a few dozen operations, use discovery and routing rather than exposing everything.
- Keep credentials server-side and isolated. Use the vendor's supported auth (for Procore, see developers.procore.com), a sandbox environment first, and per-organization separation.
- Turn on logging from day one. Capture tool name, inputs, outputs, latency, and errors.
- Test with real users and real questions. Review the logs weekly. Fix tool descriptions, add missing tools, retire unused ones.
- Add writes deliberately. One workflow at a time, with validation, policy, and approval where the impact warrants it.
- Deploy like any production service. Containerized, behind HTTPS, with health checks and metrics, using streamable HTTP for remote access.
Common mistakes
- Turning every endpoint into a tool. It works in a demo with five endpoints. With hundreds or thousands it fills context and degrades tool selection.
- Handing the model a broad token. If the server uses an admin credential for everyone, every user effectively has admin rights through the agent.
- Writes on day one. Start by proving the agent reads correctly. Then add carefully scoped writes.
- No logs. Without a record of tool calls, you can't debug failures, prove what the agent did, or improve it.
- Assuming MCP fixes the data. If Procore and the ERP disagree about a job's committed cost, the agent will surface that disagreement, not resolve it. Fix it at the source or flag it explicitly.
- Hand-writing hundreds of tools. Generate them from the vendor's OpenAPI spec so they stay current when the API changes.
- Treating the local desktop setup as production. A stdio server on one laptop is fine for exploration. Shared use needs a hosted server with auth, isolation, and monitoring.
How we approach it
We have built and published the patterns in this guide, and the details are in our demos and repos:
- Procore MCP architecture: 2,755 tools generated from Procore's OpenAPI specs, five layers (transport, mode, resolver, dispatch, generated clients), router mode with about 25 meta-tools, capabilities, workflows, personas and policies, multi-tenant headers, and a single governed dispatch path.
- Primavera P6 MCP server: 585 operations across 101 entities generated from the OpenAPI spec and scraped P6 docs, a gateway runtime with discovery, YAML workflow playbooks, approvals and audit, plus 13 offline XER tools.
- Tool Runtime gateway: a registry of MCP servers, per-key selection of servers and tools, rate limits, and input/output telemetry on every call.
- Construct.Chat agents: an agent using Procore MCP tools on live project and financial data, with every tool call logged for debugging and improvement. More on that in construction AI agents with MCP tools.
A few principles carry through all of them. We generate tools from the source spec instead of hand-writing them. We route instead of dumping the full tool list into context. We keep credentials server-side and partitioned by organization. We put policy and audit on one dispatch path. And we start read-only, with telemetry on from the first call.
For most construction teams the best first project is narrow: one system, one set of read-only questions, a sandbox, and logging. Once that is trustworthy, adding the next system or the first write workflow is a small step. Many of these builds are public on our GitHub repos page, and the wider set of agent guides is under agents.
Where to go next
- Watch the Procore MCP architecture walkthrough to see routing across 2,755 tools.
- Read how we built the Primavera P6 MCP server, including offline XER analysis.
- Read governing AI agents in construction before putting agents on live data.
- Have a system you want agents to work with safely? Tell us what you want to build.
Frequently asked questions
What is the Model Context Protocol (MCP)?
MCP is an open standard for connecting AI applications to external systems. A system is wrapped in an MCP server that exposes tools with typed inputs, and any MCP-compatible client can discover and call them. It replaces one-off integrations for each AI tool and each API.
Can MCP connect AI agents to Procore?
Yes. A Procore MCP server authenticates to the Procore API with server-side credentials and exposes operations such as listing projects or reading budgets as tools. Because Procore's API is very large, a production server should use discovery and routing rather than exposing every endpoint at once.
What is the difference between an MCP server and an MCP gateway?
A server wraps one system and translates tool calls into API calls. A gateway sits in front of one or many servers and controls who can reach which tools, with API keys, rate limits, policy, and telemetry. Most multi-team or multi-system deployments need both.
Is it safe to let an AI agent write to Procore, P6, or our ERP?
It can be, with controls. Keep credentials on the server, start read-only, apply policy on every call, require human approval for risky changes, test in a sandbox, and log every tool call. Add write workflows one at a time once reads are proven.
Can an agent analyze a P6 schedule without live API access?
Yes. Our P6 MCP server includes 13 offline tools that work on an exported XER file, covering critical path, schedule quality, resources, WBS, relationships, calendars, and earned value. No live P6 credentials are needed for that path.
Where should a construction company start with MCP?
Pick one specific question, such as budget changes this month or float erosion on a schedule. Expose only the read-only tools that question needs, in a sandbox, with logging on. Expand to more systems or write workflows once that is trustworthy.
Next step
Have a problem like this?
Tell us the outcome you need. We'll tell you honestly how we'd approach it, and reply within two business days.
Keep learning

AI agents & MCP · May 10, 2026
Routing 2,755 Procore API Tools Through MCP Without Drowning the Model
A walkthrough of the Procore MCP server architecture: generated tools for every endpoint, router-mode meta-tools, hybrid retrieval, and a single dispatch chokepoint for safety and audit.

Scheduling & P6 · May 25, 2026
Building an MCP Server for Oracle Primavera P6
A walkthrough of P6 MCP: a governed MCP server that turns 585 Primavera P6 REST operations into a small discovery, planning, and execution surface, plus offline XER analysis.

AI agents & MCP · April 29, 2026
MCP Gateway with Telemetry: How Tool Runtime Governs Agent Tools
Tool Runtime pulls many MCP servers into one governed endpoint. Here is how the gateway composes tools per API key, logs every call, and why production agents need this layer.