Skip to main content
Glama
TylerIlunga

Procore MCP Server

Create Incident

create_incident

Create a project incident with title and event date, attach related records like injuries or property damages, and enforce custom validation rules. Idempotent via UUID deduplication.

Instructions

Creates a new incident in the specified project. Requires at minimum a title and event_date. Optionally attach associated records (injuries, near_misses, environmentals, property_damages) in a single request. Pass run_configurable_validations=true to enforce any custom validation rules configured for the Incidents tool. The operation is idempotent via UUID-based deduplication. Pass the record's fields as top-level arguments — they are nested under "incident" in the request payload for you. project_id defaults to the value set by procore_set_config when omitted. Acts on the incident and returns Procore's response for the operation. Failures come back as an error payload carrying the HTTP status — commonly 401 when the token has expired, 403 without tool permission, and 404 when an id does not resolve. Required parameters: project_id. Procore API: Project Management > Incidents. Endpoint: POST /rest/v1.0/projects/{project_id}/incidents

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleNoJSON request body field — incident Title
statusNoJSON request body field — status (Not updatable if an incident has a workflows instance)
privateNoJSON request body field — indicates whether an Incident is private
type_idNoJSON request body field — the ID of the Incident Type. Defaults to the company's General type if not provided. The type must be active.
form_idsNoJSON request body field — forms to attach to the response
injuriesNoJSON request body field — associated Injuries to create
hazard_idNoJSON request body field — unique identifier of the hazard
image_idsNoJSON request body field — images to attach to the response
event_dateNoJSON request body field — iso8601 datetime of Incident occurrence. If time is unknown, send in the date at 0:00 project time converted to UTC.
project_idYesURL path parameter — unique identifier for the project.
recordableNoJSON request body field — indicates whether an Incident is recordable
descriptionNoJSON request body field — description of the Incident
location_idNoJSON request body field — the ID of a Location
near_missesNoJSON request body field — associated Near Misses to create
assignee_idsNoJSON request body field — an array of Login Information IDs to assign to the Incident. Assignees gain visibility into the Incident and its related records. Not updatable if the Incident has a workflows instance.
time_unknownNoJSON request body field — indicates that the time of the Incident occurrence is unknown
upload_uuidsNoJSON request body field — array of uploaded file UUIDs.
environmentalsNoJSON request body field — associated Environmentals to create
custom_status_idNoJSON request body field — the ID of the Custom Status. Mutually exclusive with the status field — setting one sets the other. Not updatable if the Incident has a workflows instance.
file_version_idsNoJSON request body field — file Versions to attach to the response
property_damagesNoJSON request body field — associated Property Damages to create
drawing_revision_idsNoJSON request body field — drawing Revisions to attach to the response
distribution_member_idsNoJSON request body field — an Array of the IDs of the Distribution Members (Not updatable if an incident has a workflows instance)
contributing_behavior_idNoJSON request body field — the ID of a Contributing Behavior
contributing_condition_idNoJSON request body field — the ID of a Contributing Condition
run_configurable_validationsNoQuery string parameter — whether or not Configurable validations from the Incident/Injury Configurable Field Set should be run (default: false). See (https://developers.procore.com/reference/configurable-field-sets#list-pr...
witness_statements_attributesNoJSON request body field — associated Witness Statement to create
custom_field_%{custom_field_definition_id}NoJSON request body field — value of the custom field. The data type of the value passed in corresponds with the data_type of the Custom Field Definition. For a lov_entry data_type the value passed in should be the ID of one ...
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description claims 'The operation is idempotent via UUID-based deduplication,' but the annotations set idempotentHint to false. This is a direct contradiction, so the score is 1 despite the description also detailing error payloads and HTTP statuses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient, covering creation, required fields, optional associations, validation, idempotency, payload nesting, error handling, and API endpoint in one paragraph. It could be slightly more structured, but every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 28 parameters and no output schema, the description covers the key aspects: required fields, optional attachments, payload nesting, defaults, error responses, and API context. It is arguably complete enough for an agent to use, though the idempotency contradiction introduces uncertainty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value beyond the schema by clarifying that fields should be passed as top-level arguments and are nested under 'incident' in the payload, and explaining the project_id default from configuration. Since schema coverage is 100%, the baseline is 3, but this contextual information raises it to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Creates a new incident in the specified project,' which is a specific verb+resource statement. It clearly differentiates from sibling tools like list_incidents, show_incident, update_incident, and delete_incident by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contextual guidance, stating that a title and event_date are required, and that associated records can be attached in a single request. It also explains when to use run_configurable_validations=true and notes that project_id defaults to procore_set_config. However, it does not explicitly name alternative tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TylerIlunga/procore-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server