Skip to main content
Glama
TylerIlunga

Procore MCP Server

Create Unified Upload

create_unified_upload

Create a project file upload in Procore, returning signed URLs for standard or multi-part uploads. Handles files up to 100 MB as a single segment and larger files via multiple segments.

Instructions

Creates a project-level file upload for the given company and project. Supports both standard (single-part) and segmented (multi-part) uploads with a unified request and response. Returns a segments array containing signed upload URL(s)—one segment for standard uploads, multiple for segmented—each with url, url_expires_at, and headers. The client uploads the file (or parts) to the returned URL(s), then completes via PATCH. Polling the upload status until it is available is mandatory before the file can be downloaded. company_id and project_id default to the values set by procore_set_config when omitted. Creates the unified upload and returns it with its new id (HTTP 201); calling it again creates another record. 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: company_id, project_id, file_name, file_size, content_type, segments. Procore API (v2.1): Core > File Access & Storage. Endpoint: POST /rest/v2.1/companies/{company_id}/projects/{project_id}/uploads

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
md5NoJSON request body field — the md5 for this File Access & Storage operation
sha256NoJSON request body field — the sha256 for this File Access & Storage operation
segmentsYesJSON request body field — upload file segments. Files up to 104857600 bytes (100 MB) require a single segment, while larger files may be split into multiple segments. A maximum of 10000 segments is permitted per file.
analyticsNoJSON request body field — the analytics for this File Access & Storage operation
file_nameYesJSON request body field — the file name for this File Access & Storage operation
file_sizeYesJSON request body field — file size in bytes. Minimum: 1 byte.
company_idYesURL path parameter — unique identifier for the company.
project_idYesURL path parameter — unique identifier for the project.
content_typeYesJSON request body field — the content type for this File Access & Storage operation
url_expires_inNoJSON request body field — the url expires in for this File Access & Storage operation
custom_metadataNoJSON request body field — the custom metadata for this File Access & Storage operation
uploader_tool_nameNoJSON request body field — client-reported tool name matching one of the allowed tools
Behavior5/5

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

Beyond annotations, the description discloses the multi-step workflow: upload to returned signed URLs, then complete via PATCH, and mandatory polling of upload status. It also warns that calling again creates another record (non-idempotent), explains default behavior of company_id/project_id, and details error payloads with common HTTP statuses (401, 403, 404). These add significant behavioral context not present in annotations.

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 long but dense with actionable information: purpose, response structure, workflow, defaults, duplicate-record warning, error handling, required parameters, and API reference. Each sentence adds value, though the structure could be tighter. It is front-loaded with the core purpose, so agents get the essential info early.

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 tool's complexity (12 params, nested objects, multi-step workflow, no output schema), the description is remarkably complete. It covers what the tool does, the response format (segments array with url, url_expires_at, headers), the required follow-up actions (PATCH, polling), error semantics, defaults, and the exact API endpoint. An agent has enough information to invoke and complete the workflow without external documentation.

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

Parameters3/5

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

Schema coverage is 100%, but most schema descriptions are generic placeholders like 'the md5 for this File Access & Storage operation'. The description adds value by listing required parameters and explaining the default behavior of company_id/project_id, which is not in the schema. However, it does not clarify the meaning or usage of optional params like md5, sha256, analytics, url_expires_in, or custom_metadata beyond what the schema provides, so it partially compensates but leaves gaps.

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 a specific verb and resource: 'Creates a project-level file upload for the given company and project.' It clearly distinguishes from sibling tools like create_unified_company_upload by scoping to project-level, and explains the unified support for standard and segmented uploads. The endpoint is also included, reinforcing the precise action.

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 states when to use it (project-level unified uploads) and implicitly differentiates from company-level alternatives via 'project-level'. It also notes that company_id/project_id default from procore_set_config, aiding invocation. However, it does not explicitly name alternative tools for comparison (e.g., create_project_upload) or state when not to use it, just enough context to infer.

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