MCP App Store
by KeenEthics
Business & Operations
Knowify icon

Knowify

by Knowify Inc

Overview

Knowify helps users inspect tenant-scoped construction and service business data from ChatGPT, including project records, report models, invoices, time entries, schemas, and platform knowledge needed to answer operational questions.

Tools

list_items_create

ChatGPT
Create a checklist or punch-list item on a project. A ListItem is a single to-do, deficiency, or work item tracked at the project, milestone, or task level. Use this to add items the user describes ("add a punch list item to job 102345 for ...", "create a task on phase X to ..."). REQUIRED: ProjectId, Description. OPTIONAL: MilestoneId/TaskId to scope, Deadline (ISO date), ResourceIds to assign, UnitsTotal/UnitName for measurable items. ASSIGNMENT: ListItems without ResourceIds are created unassigned; the assignee is not inferred from context. An intended assignee (including "a task for me") is expressed as that person's Resource Id in ResourceIds — the current user's own Resource Id is available at knowify://me. An unassigned item appears on nobody's task list until someone assigns it in the app. Default applied by the API: Done=false. Returns the new ListItem in the same shape as a GET on /api/v2/list-items/{id}.

list_items_delete

ChatGPT
Soft-delete a list item by Id. The item is marked Inactive (ObjectState) rather than physically removed, so it stops appearing in default list queries but related history is preserved. There is no API-level undo from this tool — recovery would require an admin action.

list_items_update

ChatGPT
Update fields on an existing list item. Only the fields you send are changed (PATCH semantics). Common uses: - Mark complete: { Id, Done: true } — server stamps DateCompleted + CompletedBy. - Reassign: { Id, ResourceIds: [42, 18] } — pass the FULL desired set, not a delta. - Reschedule: { Id, Deadline: "2026-07-01" }. Returns the full updated ListItem.

platform_knowledge

ChatGPT
Schemas, guides, and domain reference for the Knowify data model. Pair with query when you need raw data. Modes: - No args → returns categorized index of all available knowledge - search: 'todos' → finds matching content across all guides and schemas - search: 'retainage', scope: 'schema/report' → search only report schemas - search: 'create a project', scope: 'api' → hybrid search over OpenAPI operations - uri: 'overview' → reads a specific resource in full Search is useful for discovering model names from common terms. Example: platform_knowledge({ search: 'todos' }) reveals that todos are 'ListItems'. Example: platform_knowledge({ search: 'profitability', scope: 'schema/report' }) finds the right report. Example: platform_knowledge({ search: 'how do I create a project', scope: 'api' }) finds the right endpoint.

query

ChatGPT
Use platform_knowledge to read a model's schema before your first query against it. BEHAVIORS: - Most ENTITY models auto-filter to ObjectState = 'Active'. To include inactive records on entities, add where: { ObjectState: { $in: ["Active", "Inactive"] } } - REPORT models have no ObjectState column — the backing report function already returns only active rows. An ObjectState filter on a report fails in Postgres with "column does not exist". - Enum fields accept string values (e.g. BusinessState: "Open"), not integers - Use "fields" (not "attributes") to select specific columns - Models have 20-40 columns. Use "fields" to select only the columns relevant to the question. RESULT SEMANTICS: - Rows contain internal query-layer artifacts: numeric keys (Id, ProjectId, MilestoneId, ResourceId, …), raw schema column names, association and scope names, and hash-prefixed enum codes (e.g. "#ACTIVE"). These are fetch-and-join machinery, not user-facing values — inside the Knowify product they are never shown to people. - The human-meaningful representation of a record is its name field (ProjectName, ClientName, …), dates in the tenant's timezone, formatted money, and statuses in plain words; a record is identified to a person by its name. DATA MODEL EXAMPLES: { table: "Projects", where: { BusinessState: "Open" }, include: ["Client"], fields: ["Id", "ProjectName", "ClientId", "BusinessState"], limit: 10 } { table: "TimeEntries", scopes: ["active-check-ins"], include: [{ association: "Resource", fields: ["Description"] }] } { table: "Clients", where: { "$Projects.BusinessState$": "Open" }, include: ["Projects"] } REPORT MODELS (require 'params' scope): JobsReport, BillsSummaryReport, InvoicesSummaryReport, TimeEntriesReport, SalesReport, PurchasesReport, PurchasesAndItemsReport, BillableItemsReport, SubcontractorsReport, SubcontractorDocsReport, QuotingPerformanceReport, CatalogAnalysisReport, ServiceJobsSummaryReport, ServiceVisitsReport, WipReport, AssignmentsReport Report example: { table: "JobsReport", scopes: [["params", { date_type: "created", start_date: "2024-01-01", end_date: "2024-12-31" }]], where: { Status: "#ACTIVE" }, fields: ["ProjectName", "ClientName", "ContractTotal", "Profit"] } WHERE OPERATORS: Comparison: $eq, $ne, $gt, $gte, $lt, $lte Pattern: $like, $iLike, $startsWith, $endsWith Set: $in, $notIn Range: $between, $notBetween Logical: $and, $or, $not Fuzzy: $fuzzy (typo-tolerant) Cross-model: { "$Association.Field$": value } Direct value implies $eq: { Status: "Active" }

Capabilities

Writes

App Stats

5

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily