Skip to main content
Glama
TylerIlunga

Procore MCP Server

Update Incident

update_incident
Idempotent

Update an existing incident's attributes, including title, status, description, location, and custom fields. Only changed fields are sent; omit fields to keep their current values.

Instructions

Updates the specified incident's attributes. Cannot update status, assignees, or distribution_members if the incident has an active workflow instance. To update nested records (injuries, witness statements, etc.), use their dedicated endpoints. Pass run_configurable_validations=true to enforce custom validation rules. Send only the fields you intend to change; omitted fields keep their current values. 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, and id must identify an existing parent record — resolve it with the matching list tool first. Returns the modified incident on success. 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, id. Procore API: Project Management > Incidents. Endpoint: PATCH /rest/v1.0/projects/{project_id}/incidents/{id}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesURL path parameter — unique identifier of the incident. Use the `id` from the List or Create Incidents response.
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 ...
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, etc.), the description discloses critical behaviors: the inability to update status/assignees/distribution_members when an active workflow instance exists, the automatic nesting under 'incident' in the payload, the project_id default, and specific HTTP error statuses. This adds substantial transparency well beyond the structured hints, and nothing contradicts the annotations.

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

Conciseness5/5

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

Despite its length, the description is tightly structured and every sentence earns its place. It leads with the core action, then constraints, usage tips, return value, error behavior, required parameters, and API reference. It avoids repeating schema definitions and remains scannable for a tool with 29 parameters.

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

Completeness5/5

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

Given the complexity (29 parameters, no output schema), the description covers all essential operational information: what it does, when not to use it, how to handle partial updates, required parameters, project_id defaulting, return value, common error statuses, and the exact endpoint. This is complete enough for an agent to invoke correctly without additional lookups.

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?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic value by explaining that record fields are passed as top-level arguments but nested under 'incident' in the request, that project_id defaults from procore_set_config, and that run_configurable_validations enforces custom validation rules. These are not obvious from the schema alone, though the description does not detail every parameter individually.

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 'Updates the specified incident's attributes,' which is a specific verb+resource pairing. It immediately distinguishes itself from nested-record tools by stating 'To update nested records (injuries, witness statements, etc.), use their dedicated endpoints,' making the scope unmistakable even among a huge sibling tool list.

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

Usage Guidelines5/5

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

Explicitly provides when-not-to-use guidance by directing nested-record updates to dedicated endpoints. It also tells the agent to resolve the id with the matching list tool first, explains partial update semantics ('Send only the fields you intend to change; omitted fields keep their current values'), and explains the project_id default from procore_set_config. This is clear, actionable usage context beyond what the schema states.

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