MCP App Store

Overview

Break ground on a new way to manage construction. Constructable for ChatGPT turns project data into a conversation — ask what's open, what's overdue, or what happened in the field yesterday, and get a straight answer in seconds. Connect your Constructable account to pull project status, RFIs, submittals, and daily reports straight from chat, no digging required.

Tools

create_invoice_submission

ChatGPT
Use this when the user explicitly asks to create a Constructable invoice submission for an existing commitment and billing period. This creates an invoice submission, line items, and optionally uploads a source PDF; do not use it for read-only invoice questions. Use the exact organization UUID from list_organizations.

describe_mutations

ChatGPT
Use this after list_mutations and before running Constructable mutations. Reads mutation implementations and infers the Zod args schema and whether projectId is required. organizationId is required.

describe_tables

ChatGPT
Use this after list_tables when you need the columns for specific Constructable data tables. Returns table names and all queryable columns for only the requested tables; it does not return table rows or change Constructable data.

list_mutations

ChatGPT
Use this before writing Constructable data. Lists mutation names available for the selected organization and agent context. Use describe_mutations before running a mutation you have not already inspected.

list_organizations

ChatGPT
Use this when the user needs to choose or verify which Constructable organizations this MCP client can access. Returns each organization the user may connect, plus whether the connected role has read-only or write-capable MCP permissions.

list_tables

ChatGPT
Use this when the user wants to understand which Constructable data tables are available before asking data questions. Use the exact organization UUID from list_organizations. Returns table names only; use describe_tables to inspect columns for specific tables.

run_constructable_data_script

ChatGPT
Use this to answer data questions by writing a JavaScript program that runs read-only SQLite SELECT queries against Constructable tables. The program can run multiple queries, loop, join or reshape results, and return a final answer. Use list_tables and describe_tables first when the schema is unknown. Execute code to achieve a goal. Available: type QueryInput = { /* The exact organization UUID from list_organizations organizations[].id. Do not use the organization name, slug, or URL. @format uuid / organizationId: string; /* A read-only SQLite SELECT query using placeholders for dynamic values, for example: SELECT id, name FROM projects LIMIT 25. / queryString: string; /* Optional positional values for query placeholders. / args?: unknown[]; /* The Constructable project id for project-scoped tables, or null for organization-scoped tables. / projectId: string | null; } type QueryOutput = unknown declare const codemode: { /* Use this when the user asks to inspect Constructable project or organization data that is available through the queryable tables. Run only read-only SQLite SELECT queries, use list_tables and describe_tables first when the schema is unknown, include projectId for project-scoped tables, and limit results to 25 rows or fewer. @param input.organizationId - The exact organization UUID from list_organizations organizations[].id. Do not use the organization name, slug, or URL. @param input.queryString - A read-only SQLite SELECT query using placeholders for dynamic values, for example: SELECT id, name FROM projects LIMIT 25. @param input.args - Optional positional values for query placeholders. @param input.projectId - The Constructable project id for project-scoped tables, or null for organization-scoped tables. */ query: (input: QueryInput) => Promise<QueryOutput>; } Write an async arrow function in JavaScript that returns the result. Do NOT use TypeScript syntax — no type annotations, interfaces, or generics. Do NOT define named functions then call them — just write the arrow function body directly. Example: async () => { const r = await codemode.searchWeb({ query: "test" }); return r; }

run_constructable_mutation_script

ChatGPT
Use this to write Constructable data by running JavaScript that calls available Constructable mutations. Call list_mutations and describe_mutations first, include organizationId in every mutate call, include projectId when required, and only run mutations after the user has clearly requested the write. Execute code to achieve a goal. Available: type MutateInput = { /* The exact organization UUID from list_organizations organizations[].id. Do not use the organization name, slug, or URL. @format uuid / organizationId: string; /* The exact Constructable mutation class name to run. / mutationName: string; /* The mutation args using camelCase keys. Include ids and timestamps required by the mutation. / args: {}; /* The Constructable project id if the mutation uses project-scoped data. / projectId?: string | null; } type MutateOutput = unknown type GenerateUuidInput = {} type GenerateUuidOutput = { /* @format uuid / id: string; } declare const codemode: { /* Runs one Constructable mutation. Call list_mutations and describe_mutations first, pass the exact organization UUID from list_organizations, and include projectId when describe_mutations says it is required. @param input.organizationId - The exact organization UUID from list_organizations organizations[].id. Do not use the organization name, slug, or URL. @param input.mutationName - The exact Constructable mutation class name to run. @param input.args - The mutation args using camelCase keys. Include ids and timestamps required by the mutation. @param input.projectId - The Constructable project id if the mutation uses project-scoped data. / mutate: (input: MutateInput) => Promise<MutateOutput>; / Generates a UUIDv7 string for new Constructable records. Use this for mutation id fields that create new records. */ generateUuid: (input: GenerateUuidInput) => Promise<GenerateUuidOutput>; } Write an async arrow function in JavaScript that returns the result. Do NOT use TypeScript syntax — no type annotations, interfaces, or generics. Do NOT define named functions then call them — just write the arrow function body directly. Example: async () => { const r = await codemode.searchWeb({ query: "test" }); return r; }

search_project

ChatGPT
Searches a Constructable project across indexed content, including drawings, documents, submittals, specs, and other searchable project records. Use full_text mode for keyword matches and semantic mode for meaning-based matches.

Capabilities

Writes

App Stats

10

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily