MCP App Store
by KeenEthics

Overview

Connect your AI tool to your construction delivery data in Aphex — ask questions and draft reports grounded in the live site record.

Tools

aphex_get_diary_entries

ChatGPT
Paginated diary content. In range mode, while pageInfo.nextCursor is set, call again with the same dates, detail/records, and cursor set to pageInfo.nextCursor. In entryIds mode, while pageInfo.remainingEntryIds is non-empty, call again with those ids and the same detail/records. For personnel, headcount, or labour questions use records=["labour"]; for plant or equipment questions use records=["plant"]. Get diary content for one or more entries (entryIds) or a date range (startDate+endDate). Returns a JSON object: entries is one object per returned entry carrying entryId, date, name, state, templateId, taskIds (linked planner tasks), title and subtitle (display-ready labels), url (opens that entry in Aphex — cite it whenever you quote or summarise the entry), and markdown (that entry's rendered record, including weather when logged). Optional records=[notes|labour|plant|delays|photos|tasks] returns only those sections (header and weather still appear) and overrides detail. Each entry stands alone, so attribute every figure and quote to the entry it came from rather than merging them into one undifferentiated account. Returns the latest saved version of each entry, which is NOT the same as a finalised one: Reviewed is the final record, while Open and Awaiting Review are provisional drafts that are returned in full and may still change. Every returned entry carries its state, and provisional entries are additionally flagged in their header — do not present a provisional entry as the final record. Only entries with no saved version at all are skipped. detail=full (default) returns everything: summary, tasks, labour/plant/materials (labour/plant rows include optional fields when set: type, subcontractor name/id, start/end, hours, costCode, task, and notes — notes also carry diary-chat relocated phrases such as unresolved subcontractors), verbatim notes with author and time, and photos with signed URLs (valid ~5 days — re-call this tool to refresh expired links). detail=summary returns the summary block only — the narrative account incl. delays/safety/early-warning, with no typed rows, notes, or photos — cheaper for week-wide narrative questions. Provide exactly one mode: either entryIds (one or more, from aphex_list_diary_entries) OR startDate+endDate (YYYY-MM-DD). Sending both, sending neither, or sending only one of startDate/endDate is an error — the schema cannot express this, so it is checked when the tool runs and the error tells you which mode to pick. Ordering: a date range is returned oldest first (chronological), so a multi-day record reads forward in time; entryIds are returned in the order you supplied them. Note this is the opposite of aphex_list_diary_entries, which is newest first because it is a capped discovery list. A page returns at most 50 entries and at most ~40k characters of combined markdown. Never treat a partial page as the full range. When you pass several entryIds, every id that returns no content is reported in skippedEntries with a reason — not_found (no such entry in this project), deleted, or no_saved_version — so an id you supplied is never dropped without explanation; a single entryId that cannot be returned is an error instead. Boundary: counts/dates/state → aphex_list_diary_entries; narrative/delays → detail=summary; exact numbers/quotes/photos → detail=full.

aphex_list_diary_entries

ChatGPT
Paginated diary metadata, newest first. Call again with the same filters and cursor set to pageInfo.nextCursor until nextCursor is null. List site diary entries for a project as JSON metadata rows (no content), optionally filtered by date range and/or linked taskIds. Returns at most 50 rows. Each row includes entryId (for aphex_get_diary_entries), date (YYYY-MM-DD), name, title and subtitle (display-ready labels — title falls back to "Site diary — {date}" when the entry is unnamed), url (opens the entry in Aphex; cite this when referring to an entry), shift, templateId (which diary template the entry belongs to — a project can have several), taskIds (planner tasks linked on the latest version), taskCount, clipboardCount, lifecycle actors (createdBy/submittedBy/reviewedBy/compiledBy/lockedBy/unlockedBy), and state: Reviewed is the final published record; Open / Awaiting Review are provisional. clipboardCount is notes and photos combined and does NOT tell you whether an entry has photos — an entry with clipboardCount 2 may hold two text notes and no photo. To find photos, call aphex_get_diary_entries with detail=full and look for Photo blocks. shift lets you answer e.g. "which diaries were night shift" without a get. Use this first to find which entries exist and choose entryIds or a date range; it never returns diary content — call aphex_get_diary_entries for that. Boundary: counts/dates/state → this tool; narrative/delays → aphex_get_diary_entries with detail=summary; exact numbers/quotes/photos → aphex_get_diary_entries with detail=full.

aphex_list_projects

ChatGPT
List all projects the authenticated user has access to across all regions. Each row includes id, name, region, organisationId, organisationName, timezone, url (opens the project in Aphex — cite it when referring to a project), capabilities and userAccess. These three flags answer different questions and are easy to confuse. capabilities.mcp is resolved for YOUR session — whether the organisation-level MCP gate will pass for you on this project — so you never have to reason about who you are. capabilities.diary is different: it is the ORGANISATION diary product entitlement (what it has bought) and says nothing about your own access. userAccess.diary is about YOU on THIS project, combining your project role, your diary seat and the project's diary access. To pick projects for the diary tools, filter on capabilities.mcp AND userAccess.diary — a false on either means every diary call for that project will be denied, capabilities.mcp with an organisation-level MCP error and userAccess.diary with a permission error. An organisation can have capabilities.diary true while userAccess.diary is false on every project. These flags are hints computed from the same rules and the same fields as the real checks, not the checks themselves — the diary tools always re-verify, so treat them as the best ordering signal available rather than a guarantee. A role, entitlement, or MCP toggle changed in the last few seconds can show here before the diary tools honour it, so if a project that looked available is denied, wait roughly ten seconds and retry once before treating it as inaccessible. Pass each row's region, organisationId, and id as projectId directly into tools that need them.

aphex_get_diary_entries

Claude

aphex_list_diary_entries

Claude

aphex_list_projects

Claude

Example Prompts

Click any prompt to copy it.

App Stats

6

Tools

2

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily