approve_draw
ChatGPTApprove a draw request on behalf of the calling user. Only the project's most recent draw can be approved; naming an older one is refused. If the draw is not already fully approved, approving it moves it to under review. Use get_draw_copilot_readiness to check whether a draw is ready before approving it, and revoke_draw_approval to undo your approval.
batch_update_budget_lines
ChatGPTUse for two or more budget line changes: creates (under an existing subcategory), updates and deletes run in order, and one failure rolls back all.
batch_update_budget_transactions
ChatGPTUse for two or more budget transaction changes: creates (Original Budget, Approved or Pending Budget Change on a budget line), updates and deletes run in order, and one failure rolls back all.
batch_update_schedule
ChatGPTApply several schedule changes in one request: create, update and delete tasks and milestones. The batch is atomic, so if any operation fails none are applied. Deletes also remove every task nested under the deleted one.
create_approval_workflow
ChatGPTCreate a named approval workflow on a project. WorkflowType picks what it approves (0 invoice, 1 commitment, 5 document, 6 budget, 7 requisition) and Workflow lists its approval stages in order. Fails if a workflow with the same name already exists on the project.
create_bid_package
ChatGPTCreate a bid package (RFP) on a project. The data field is a JSON string with Title and BudgetLine (required) and optionally ContractType, BidRounds, SquareFootage, Description, Deadline, BidManagerIds, MilestoneIds and ProposalForm. File attachments are not supported over MCP (1 MiB request limit); create the record without attachments and add files in the web app.
create_budget_line
ChatGPTAdd a top category, subcategory or budget line to the project's budget structure. Subcategories and budget lines need the ParentId of the node they sit under. For two or more budget line changes, use batch_update_budget_lines.
create_budget_scenario
ChatGPTCreate a new budget scenario on a project that is in early-planning mode. Two dispatch modes: create a blank scenario (Name + GrossSquareFootage) or clone an existing scenario at a percentage of its budget amounts (Name + GrossSquareFootage + SourceScenarioId + Percentage). Features - Two creation modes — blank scenario or copy-from-existing with configurable percentage scaling (via SourceScenarioId + optional Percentage). - Auto-status downgrade — if the project already has a FINAL scenario, the new scenario is created as REJECTED (single approved scenario invariant). - Cross-project source protection — SourceScenarioId from another project returns 404, not 403, so cross-project id enumeration is neutralized. Warnings / Limits - Early-planning only — the target project's early_planning flag must be true, else the endpoint returns 409. Enable early-planning on the project first in the Northspyre app. - Name uniqueness — scenario names must be unique within a project; collision returns 400. - Copy-mode responses can be large — cloning from a source scenario with many budget transactions returns all of them in Transactions. Blank-mode responses have an empty array. See also - update_budget_scenario to update Name or GrossSquareFootage. - delete_budget_scenario to remove a non-FINAL scenario. - get_budget_scenarios to list scenarios in a project.
create_budget_transaction
ChatGPTCreate an Original Budget transaction and link it to a budget scenario. This endpoint creates Original Budget transactions ONLY — not reallocations or other transaction types. Features - Auto-sequenced — transaction number and requisition period are assigned automatically - Scenario-linked — the transaction is paired to the scenario_id in the path Warnings / Limits - 400 when BudgetLineName doesn't match a budget line on the project, or when the project's original budget is locked - 404 when the scenario doesn't exist or belongs to another project See also - get_budget_categorization to discover valid budget line names - For two or more budget transaction changes, use batch_update_budget_transactions.
create_coi
ChatGPTRecord a certificate of insurance (COI) for a vendor on a project, with one or more coverage components (insurer, policy number, coverage type, limits, effective and expiration dates).
create_commitment_line_item
ChatGPTAdd a line item to a commitment, or start a new commitment by omitting CommitmentId. Requires the budget line nickname, final amount, title, description and the requisition period (RequisitionId from list_requisitions) it belongs to. Type defaults to Base Contract (or the existing commitment's type); Stage is Staged or Approved.
create_external_cost_codes
ChatGPTStore custom accounting cost codes for a project. The body maps each cost code type (any name) to a list of codes, each with a required name and any other fields. Fails if the project already has external cost codes; use update_external_cost_codes to replace them.
create_external_vendor
ChatGPTStore a vendor from an external accounting system on a project. If a vendor with the same details already exists it is returned instead of creating a duplicate.
create_invoice
ChatGPTRecord a vendor invoice on a project, with at least one line item. Each line item needs an amount and a budget line nickname. If TotalAmount is sent it must equal the sum of the line items. The invoice number must be unique for the vendor. This records the invoice in Northspyre; it does not pay it.
create_invoice_line_item
ChatGPTAdd a line item to an existing invoice. Requires the amount and the budget line nickname; optionally set the vendor, description and stage (Staged or Approved).
create_lien_waiver
ChatGPTCreate a lien waiver for a vendor on a project, optionally from a waiver template, with its type, progress and signed and notarized status.
create_pay_period
ChatGPTOpen a new pay period on a payment tracker, optionally with the date it opens.
create_payment
ChatGPTRecord a payment that was already made outside Northspyre (for example in the organization's accounting system) against an invoice. Requires the invoice id, amount and check number. This only records the payment in Northspyre; it does not move money.
create_payment_tracker
ChatGPTCreate a construction payment tracker for a general contractor on a project. Requires a name, the budget line node it tracks and the project vendor id of the contractor; optionally set the default retainage percent and G702 options.
create_requisition_period
ChatGPTAdd a requisition period (draw period) to a project. InsertionType says whether it goes at the beginning, middle or end of the existing periods and Order gives its position; optionally set its end date.
create_schedule_task
ChatGPTAdd a task or milestone to the project schedule. Only Name is required; optionally set its parent, dates, duration, completion, constraint, predecessors and assignees.
create_vendor
ChatGPTAdd an existing organization vendor to a project, identified by GlobalVendorId. Optionally set its project-specific details such as role, budget line and lien waiver requirement.
delete_approval_workflow
ChatGPTArchive an approval workflow so it is no longer used for new items on the project. Find workflow ids with list_approval_workflows.
delete_budget_line
ChatGPTDelete a budget classification node — a leaf budget line, a subcategory, or a top_category — from a project. Features - All three node types — the node type is resolved from its position in the budget hierarchy; no Type field is required - Cascade — deleting a subcategory or top_category also removes its empty child lines - A leaf delete also cleans up the line's scenario linkages, cost-code links, and schedule-task pairings Warnings / Limits - Blocked (400) when the target leaf line has budget transactions, a request-for-proposal association, or an active construction scope of work - Deleting a subcategory or top_category removes its empty descendant lines and is blocked (400) if any descendant line has budget transactions, a request-for-proposal association, or an active construction scope of work - A deleted line is gone: a follow-up GET returns 404 See also - update_budget_categorization to rename or re-categorize instead of deleting
delete_budget_scenario
ChatGPTDelete a budget scenario and its scenario-scoped budget transactions from a project. This operation is irreversible — there is no soft-delete or trash-bin. Shared budget transactions (attached to other scenarios OR marked global) are preserved. Features - Cascade of non-shared budgets — budget transactions unique to the deleted scenario are removed with it. - Shared / global preservation — budget transactions shared with other scenarios or marked global are kept. Warnings / Limits - FINAL scenarios cannot be deleted — approved scenarios return 400. Revert the scenario in the Northspyre app first. - REJECTED scenarios are deletable — only FINAL blocks delete; other statuses are removable. - Last-in-project blocked (early-planning projects only) — on early-planning projects the ONLY remaining scenario cannot be deleted, because the project's cash flow view needs at least one scenario. Non-early-planning projects are not subject to this guard and can drain their scenarios cleanly. On an early-planning project, create a replacement scenario first, then delete the original. - No confirmation prompt — this endpoint is destructive and synchronous. Callers should confirm with the end user before invoking. See also - update_budget_scenario to update fields instead of deleting.
delete_budget_transaction
ChatGPTDelete a single budget transaction by id. Scenario linkages, attachment links, and any approval-workflow instance are cleaned up as part of the delete. Warnings / Limits - Deletes only the single record, even if it was created across multiple scenarios - 400 when a guard rejects the delete — a reallocation type, a locked requisition period, an exported-to-accounting transaction, or a FINAL (approved) scenario - 404 when the transaction doesn't exist or belongs to another project See also - For two or more budget transaction changes, use batch_update_budget_transactions.
delete_coi
ChatGPTDelete a certificate of insurance (COI) from a project.
delete_commitment_line_item
ChatGPTDelete a commitment line item. Approved line items cannot be deleted.
delete_external_cost_codes
ChatGPTDelete all of a project's custom accounting cost codes.
delete_external_vendor
ChatGPTDelete an external accounting system vendor from a project. Find ids with list_external_vendors.
delete_invoice
ChatGPTDelete an invoice and its line items from a project.
delete_invoice_line_item
ChatGPTDelete a line item from an invoice. Only line items that are not yet approved can be deleted.
delete_lien_waiver
ChatGPTDelete a lien waiver from a project. The waiver is marked deleted rather than erased.
delete_project_metadata
ChatGPTDeletes project metadata for the specified key. Returns 204 No Content on success, 404 if the metadata key was not found.
delete_schedule_task
ChatGPTDelete a task or milestone from the project schedule, together with every task nested under it.
get_anticipated_cost_report
ChatGPTGenerate an Anticipated Cost Report (ACR) for a specific subproject. The ACR provides comprehensive cost tracking including: - Hierarchical budget categories with high-level categories, subcategories, and budget lines - Budget line details with actual costs, commitments, and exposures - Grand totals and contingency calculations - Cost per unit metrics (square foot, acre, residential unit, etc.) - Allowances and budget reallocations - Vendor associations for each budget line Parameters: - subproject_id: The ID of the subproject to generate the report for - include_pending_transactions: Include transactions that are pending approval (default: False) - include_unused_budget_lines: Include budget lines with no activity (default: True) - draw_tree_id / draw_tree_name: Group the report against one of the project's configurable draw trees instead of the original budget structure. Mutually exclusive. Grouping by a draw tree requires the Complex Capital Management add-on, so these parameters return 403 for organizations without it; the report itself is unaffected when both are omitted. Returns: A comprehensive ACR report with hierarchical budget categories, all totals, and metrics. Response Structure: - budget_categories: Hierarchical tree of high-level → subcategory → budget lines - all_budget_line_totals: Flattened list of all budget line totals - grand_total: Overall project financial summary - grand_total_offset_by_remaining_contingencies: Grand total adjusted for contingencies - contingencies: Contingency budget lines and totals - allowances: Allowance budget lines and totals - unit_type_amounts: Unit quantities for cost per unit calculations - is_paid_to_date_accurate: Whether paid_to_date data is from accounting integration - total_partial_payments: Sum of partial payments not yet fully invoiced
get_bid
ChatGPTGet one bid with full context from its bid package (RFP): proposal form, qualifying questions, discussion, invited vendors and every other submitted bid.
get_bid_submission
ChatGPTGet a vendor's submitted proposal for one bid round: the proposal form with the vendor's values, bid amount, notes, attachment download links and submission time.
get_budget_categorization
ChatGPTGet the project's budget structure as a tree: top categories, subcategories and budget lines, with each line's nickname, Northspyre cost category and allowance flag. Budget line nicknames are what other tools take as BudgetLine. Optionally filter by created or updated date.
get_budget_scenarios
ChatGPTList the project's budget scenarios (early-planning budget versions) with the budget transactions in each one.
get_budgets
ChatGPTList every budget transaction on a project: original budget amounts, approved changes and reallocations, each with its budget line, amount, title, scenario and approval details.
get_cash_flow_report
ChatGPTReturns comprehensive cash flow data including chart periods with spending/funding/projected amounts, hierarchical budget line table data, optional LIHTC metrics, funding source periods, and traunch ending markers. Supports filtering by forecast metric, period granularity, LIHTC mode, scenario (for early planning projects), and specific budget line IDs. For a general chart or overview, use Yearly periods: a multi-year project's month-by-month data is too large to read as a chart. Use a finer period only when month-level detail or a short, recent window is asked for. When you show Yearly by default, say in one short sentence that the full detail is on the project's Cash Flow page.
get_coi
ChatGPTGet one certificate of insurance (COI) with its insured vendor, producer, coverages, limits and expiration dates.
get_commitment
ChatGPTGet one commitment with all its line items, total amount, vendor, approval date and backup documentation links. Find commitment ids with list_commitments.
get_commitment_line_item
ChatGPTGet one commitment line item: its commitment, type, budget line, stage, vendor, estimate, proposed and final amounts, live exposure and requisition period.
get_commitment_report
ChatGPTGet the commitment and potential cost report for one project (subproject): committed amounts and potential exposures by budget category and subcategory, total potential costs and the project contingency. Pass the project id as subproject_id.
get_cost_analytics
ChatGPTGet portfolio cost analytics for one budget line across all projects you can access. Use this rather than list_cost_analytics for a question about one or a few budget lines: the list covers every budget line in the portfolio, far more data than such a question needs. Use a BudgetLineId from list_cost_analytics.
get_data_inbox_item
ChatGPTGet the full detail of one data inbox item: a document (invoice, commitment, insurance certificate, lien waiver and so on) received by email or upload. Includes its stage, project, vendor, extracted line items, AI analysis, comments and approval workflow activity. Find item ids with list_inbox.
get_draw_budget_line_table
ChatGPTGet the draw request budget line table for a draw: the budget tree (high levels, categories and budget lines) and the allowances, each with its original and revised budget, commitments, retainage, percent complete and current due. Omit draw_id for the project's most recent draw. It covers the whole budget, so the response can be large. To compute the table against a draw tree or with alternate budget line nicknames, use get_draw_request_budget_lines instead, which requires the draw id. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_draw_copilot_readiness
ChatGPTCheck whether a draw request is ready to submit to a lender, as Draw Copilot does in the Northspyre app. Returns one consolidated readiness report for a single draw: budget lines drawn past their revised budget, invoices in the draw with no supporting attachment, vendors invoiced beyond their contract, vendors with invoices missing a lien waiver, vendors with unmet insurance requirements, and the funding position across the project's sources. `ChecklistItems summarises the six checks: Details is a count for five of them and the shortfall amount for insufficient_funds. The five arrays carry the rows behind the counts and are empty when there is nothing to fix; the sixth check is the InsufficientFunds object. Omit draw_id to analyse the most recent draw. InsufficientFunds.InsufficientFunds is positive when the draw exceeds what the sources have left and zero or negative when the sources cover it. Rows can be listed without being counted: findings a user has dismissed in the app, and invoices whose IsAttachmentRequired is false. A project with an active draw whose order number is missing, zero, negative or not a finite number, or a draw that shares its order number with another draw, is refused with a message naming the draws and the fix to make in the app. Use get_draw_request_budget_lines` for the draw's budget line detail rather than this endpoint.
get_draw_key_transactions
ChatGPTGet what happened on a draw: the vendors funded with their amounts and shares, the commitments added and the budget adjustments, largest first. Omit draw_id for the project's most recent draw. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_draw_quick_stats
ChatGPTGet a draw's headline totals (invoiced, hard costs, change orders and original budget change) and each total's percent change from the previous draw, the draw numbered one less. Percent changes are percent points: 12.5 means 12.5 %. Omit draw_id for the project's most recent draw. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_draw_request_budget_lines
ChatGPTGet the budget line table for one draw request: the budget hierarchy (categories, subcategories and budget lines) with each line's budget and draw amounts. Pass the project id as subproject_id and the draw's requisition_id from list_requisitions. Optionally compute it against a budget scenario or a draw tree from list_draw_trees.
get_draw_sources_summary
ChatGPTGet how much each funding source (equity, loans and other sources) contributes to a draw: the amount drawn this period, in earlier periods and to date, and the percent contributed, with project totals. Omit draw_id for the project's most recent draw. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_draw_sworn_statement
ChatGPTGet the owner's sworn statement for a draw: budget lines grouped by category and high level, each with its original budget, changes, committed, invoiced, current due, previously paid, percent complete and balance remaining, and its vendors with whether a lien waiver is required, plus grand totals. Omit draw_id for the project's most recent draw. It covers the whole budget, so the response can be large. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_invoice
ChatGPTGet one invoice with its line items, total, vendor, stage, payment status, approval date and backup documentation links.
get_lien_waiver
ChatGPTGet one lien waiver with its vendor, signed and notarized status, template, type and progress.
get_material_tariff_rate
ChatGPTCurrent US import tariff rate for a named building material (for example steel, aluminum, copper, softwood_lumber) and the most recent recorded change to that rate. Use this, not get_tariff_data, when the user names a material rather than an HS code. Rates are in percent and combine the base duty with any Section 232 / 301 overlay; rate CHANGES are in percentage points (pp). country_of_origin is optional and ISO 3166-1 alpha-2; omit it for the rate that applies to most origins. Returns the budget lines the material maps to, so the answer can name which parts of a budget are affected. Rates are indicative at material granularity, not customs classifications. Returns status=no_data when the requested material is not in the catalog, including when the published schedule can no longer be resolved into a rate. Data may be served from a shared cache: overlay rates up to 6 hours old and base duties up to 24 hours old, so cite the returned fetched_at and source_url, never the current time. This tool returns rate data only; it does NOT compute dollar exposure.
get_mri_cost_codes
ChatGPTGet the MRI cost codes mapped to each budget line on a project. Only works for projects connected to MRI.
get_nexus_cost_codes
ChatGPTGet the Nexus cost codes mapped to each budget line on a project. Only works for projects connected to Nexus.
get_past_draws_summary
ChatGPTGet the past draws summary: the current due of every draw up to and including this one, by budget line, category and high level, keyed by draw number, with the project's draws, the budget tree with its vendors, allowances and totals. Omit draw_id for the project's most recent draw. It covers every draw and the whole budget, so the response can be large. A project whose draws are missing order numbers or share one is refused with a message naming the draws to fix in the app.
get_payment
ChatGPTGet one recorded payment: the invoice it pays, amount, check number, external payment id and dates.
get_payment_tracker
ChatGPTGet one payment tracker with its scopes of work (G703 schedule of values) and grand totals for a pay period. Defaults to the latest pay period; pass pay_period_id for another one.
get_portfolio_approval
ChatGPTGet one item from the approvals queue with its approval status and workflow progress. Pass its type, and project_id for budget transactions.
get_project
ChatGPTGet one project (subproject): its development project, address, asset type, dates, constructed area, approved budget, amount invoiced to date, custom metadata and your access level.
get_project_information
ChatGPTGet the inbound email addresses for projects. Each project has its own addresses for forwarding invoices, commitments, insurance certificates, lien waivers and other documents into Northspyre. Pass subproject_id for one project; omit it to get every project you can access.
get_quickbooks_desktop_cost_codes
ChatGPTGet the QuickBooks Desktop cost codes mapped to each budget line on a project. Only works for projects connected to QuickBooks Desktop.
get_quickbooks_online_cost_codes
ChatGPTGet the QuickBooks Online cost codes mapped to each budget line on a project. Only works for projects connected to QuickBooks Online.
get_realpage_cost_codes
ChatGPTGet the RealPage cost codes mapped to each budget line on a project. Only works for projects connected to RealPage.
get_sage_300_cost_codes
ChatGPTGet the Sage 300 cost codes mapped to each budget line on a project. Only works for projects connected to Sage 300.
get_sage_intacct_cost_codes
ChatGPTGet the Sage Intacct cost codes mapped to each budget line on a project. Only works for projects connected to Sage Intacct.
get_schedule
ChatGPTGet the project schedule: every task and milestone as a tree, with dates, baseline dates, completion percentage, linked budget line, predecessors and assignees.
get_source_draw_summary
ChatGPTGet the source draw summary for one project (subproject): for each draw and funding source, the amount drawn previously and this period, total funded to date, balance remaining and percent contributed. Pass the project id as subproject_id.
get_synced_email_body
ChatGPTReturn part of one synced email's body, starting at a character offset, up to 10,000 characters per call. Use it to read past the truncated body from list_synced_emails, or to jump to a body_excerpts offset. Keep calling with next_offset until it is absent to read the whole body.
get_tariff_data
ChatGPTCurrent US import tariff rate and the most recent rate change for an HS code + country of origin (ISO 3166-1 alpha-2). Rates are in percent; rate CHANGES are in percentage points (pp), not percent. Data may be served from a shared cache: overlay rates up to 6 hours old and base duties up to 24 hours old, so cite the returned fetched_at / last_change_date, never the current time. Returns status=no_data when the source has no record for the pair. This tool returns public rate data only; it does NOT compute dollar exposure for a commitment — exposure figures must come from an existing signal observation, not from arithmetic on this result.
get_vendor
ChatGPTGet one vendor on a project with its contacts, address, budget line, business designations and lien waiver and insurance requirements.
get_vendor_analytics
ChatGPTGet key statistics for one vendor across the portfolio: approved contract, invoiced, balance remaining, projected contract, overrun, percent complete and cost per square foot or unit. Use the vendor's GlobalVendorId.
get_weather_forecast
ChatGPTMulti-day weather forecast for a NorthSpyre project's location: daily high/low temperatures in FAHRENHEIT, the condition for each day, current conditions, and any active severe-weather alerts. Data may be served from a shared cache up to 1 hour old - cite the returned fetched_at, never the current time. Returns status=no_data when the project has no resolvable location or the provider returned no forecast. This tool returns public forecast data only; it does NOT assess which scheduled work is at risk - that assessment must come from an existing signal observation.
get_yardi_cost_codes
ChatGPTGet the Yardi cost codes mapped to each budget line on a project. Only works for projects connected to Yardi.
invite_vendor_to_bid
ChatGPTInvite a vendor to an existing bid package (RFP), identified by bid_id, the id of any vendor bid submitted to it (from list_bids or get_bid). Northspyre emails the invitation to the vendor. Send UserEmail to invite a specific contact, HelpFindContact=true to have Northspyre find a contact, or both.
list_approval_workflows
ChatGPTList the active approval workflows on a project, paginated. Each workflow has a name, a type (invoice, commitment, document, budget or requisition) and its ordered approval stages.
list_bids
ChatGPTList submitted bids on the project's bid packages (RFPs), paginated, with vendor, amount, status and the RFP's title, deadline and bid managers. Filter by budget line or bid manager email.
list_budget_lines
ChatGPTList the project's budget lines with their category, allowance flag and the accounting cost codes mapped to each line. Optionally filter by created or updated date.
list_cois
ChatGPTList the project's certificates of insurance (COIs), paginated, with the insured vendor, producer, coverages, limits and expiration dates.
list_commitments
ChatGPTList the project's commitments (contracts with vendors), paginated. Each commitment groups its line items: base contract, change orders, estimates and proposed costs. Filter by stage, type, vendor, budget line, requisition or date, and sort by title, vendor, amount or type.
list_cost_analytics
ChatGPTGet portfolio cost analytics for every budget line across all projects you can access: budget, commitments, invoiced, remaining and cost per square foot or unit, per project and in total.
list_draw_approvals
ChatGPTList the approvals recorded on a draw's approval workflow, oldest first, with each approver's name and email and when they approved. Empty when the draw has no approval workflow. Omit draw_id for the project's most recent draw. If a draw on the project is missing its order number, name the draw with draw_id: this report is computed from the draw id alone.
list_draw_disbursements
ChatGPTList who is paid on a draw: each vendor with approved invoices on it, the vendor's mailing address, the name checks are payable to and the amount due, ordered by company name. Omit draw_id for the project's most recent draw. If a draw on the project is missing its order number, name the draw with draw_id: this report is computed from the draw id alone.
list_draw_trees
ChatGPTList the draw structures available for a project's reports. The first entry is the project's original budget structure. It is the default, and it is not a stored tree: its `Id is null and neither its Id nor its Name can be passed to a report. To compute against it, omit both report parameters. Every OTHER entry is a stored draw tree, and its Id and Name are both accepted by the draw_tree_id / draw_tree_name parameters on get_draw_request_budget_lines and get_anticipated_cost_report. Names are matched case-insensitively, so if this list shows two trees whose names differ only in case, pass either name exactly as shown, or use Id`.
list_external_cost_codes
ChatGPTGet the custom accounting cost codes stored for a project, keyed by cost code type. These are for accounting systems without a built-in Northspyre integration.
list_external_vendors
ChatGPTList the vendors from an external accounting system that are stored for a project, with vendor code, contact name, address and the Northspyre vendor they map to.
list_inbox
ChatGPTList the project's data inbox, paginated: documents (invoices, commitments, insurance certificates, lien waivers and so on) received by email or upload, with stage, vendor, amount, subject and sender. Filter by stage.
list_invoice_payments
ChatGPTList the payments recorded against one invoice: amount, check number, external payment id and dates.
list_invoices
ChatGPTList the project's invoices with their line items, amounts, vendor, stage, payment status and backup documentation links. Filter by invoice number, stage, payment status or created/updated date.
list_lien_waivers
ChatGPTList the project's lien waivers, paginated, with vendor, signed and notarized status, type and progress.
list_payment_trackers
ChatGPTList the project's construction payment trackers, paginated. A payment tracker follows one general contractor's contract on a budget line through its pay periods (AIA G702/G703 style).
list_payments
ChatGPTList the payments recorded on a project's invoices. Optionally filter by the payment's id in the accounting system (external_id).
list_portfolio_approvals
ChatGPTList the approvals in your queue across all projects, paginated: data inbox items, budget transactions and draw requests. By default it returns items waiting on your approval; filter by type, project or items waiting on others.
list_project_ids
ChatGPTList the ids of every project (subproject) you can access in the organization. Use list_projects or search_projects when you also need names and details.
list_projects
ChatGPTList the projects (subprojects) you can access, with each one's development project, address, asset type, dates, constructed area, approved budget, amount invoiced to date, custom metadata and your access level.
list_recall_transcripts
ChatGPTList the meeting transcripts stored in the organization: transcripts of meetings recorded with Northspyre's meeting recorder (powered by Recall.ai). Each transcript includes the meeting title, platform, start and end times, participant names and the full transcript text. This does not read your conversation with the assistant.
list_requisitions
ChatGPTList the project's requisition periods (draws) in order, with each one's name, status and end date. Requisition ids are the draw ids other tools take.
list_synced_emails
ChatGPTList emails synced into Northspyre from users' connected mailboxes, newest first (most relevant first when searching), with subject, sender, recipients, body and the projects each email is linked to. Always narrow the request to a project plus a search term, sender, or date range rather than listing everything. Returns 25 emails per page by default (at most 50). Bodies longer than 4,000 characters are truncated and report body_total_chars; when searching, passages that match past the cut are returned in body_excerpts. Read the rest of a body with get_synced_email_body. Users limited to specific projects only see emails linked to those projects.
list_users
ChatGPTList users in the organization by name and email, paginated. Pass project_id to list only users on that project, or search to filter by name.
list_vendor_analytics
ChatGPTGet key vendor statistics across all vendors in the portfolio: approved contract, invoiced, balance remaining, projected contract, overrun, percent complete and cost per square foot or unit.
list_vendors
ChatGPTList the vendors on a project, paginated: name, role, contacts, address, budget line, minority- and women-owned business designations, lien waiver and insurance requirements.
revoke_draw_approval
ChatGPTRevoke the approval the calling user recorded on a draw request. Removes only your own approval; other users' approvals cannot be revoked. Only the project's most recent draw can be changed. The draw stays under review after the approval is removed, as it does in the app. The response is the removed approval as it stood just before deletion, so its `Id` no longer resolves.
search_projects
ChatGPTFind a project (subproject) by name, or by its development project name. Each subproject belongs to one development project, and a development project can have many subprojects. The query is matched against both subproject names and development-project names using a 3-tier search (exact -> prefix -> contains); the first tier with any hit wins. Returns an envelope with: - selected_project: the resolved project when exactly one matched (including a development project that has a single subproject). Pass its project_id to other tools. - requires_selection: true when multiple subprojects matched. Present candidates to the user and ask which subproject to query against. - candidates: every matching subproject, each annotated with match_type and matched_via ("subproject_name" or "development_project_name").
set_project_metadata
ChatGPTSets or updates project metadata for the specified key. If the key doesn't exist, it will be created.
update_approval_workflow
ChatGPTRename an approval workflow or replace its approval stages. Send only the fields to change. Find workflow ids with list_approval_workflows.
update_bid_package
ChatGPTChange a bid package (RFP). The package is identified by bid_id, the id of any vendor bid submitted to it (from list_bids or get_bid), so a package with no submitted bids yet is edited in the Northspyre app. The data field is a JSON string with only the fields to change. File attachments are not supported over MCP (1 MiB request limit); create the record without attachments and add files in the web app.
update_budget_categorization
ChatGPTUpdate a single leaf-level budget line's project nickname, its system cost-category mapping, and its allowance flag. Features - Nickname rename — renaming propagates to every existing transaction that references the line (the nickname is the transaction foreign key) - System category — remap to a valid NorthSpyre cost category - Allowance flag — mark the line as an allowance item Warnings / Limits - Returns a single leaf node (LineItems is always empty), unlike get_budget_categorization which returns the full tree - 400 on a duplicate nickname or budget-categorization editing being disabled for the project; 404 on an unknown system category or a budget_line_id that isn't a leaf in this project See also - get_budget_categorization to discover budget lines and their current values
update_budget_line
ChatGPTRename or reconfigure a top category, subcategory or budget line in the project's budget structure (name, nickname, cost category, allowance and basis-eligible flags). Send only the fields to change. For two or more budget line changes, use batch_update_budget_lines.
update_budget_scenario
ChatGPTUpdate the Name and/or GrossSquareFootage of a budget scenario. At least one of the two fields must be present in the body. Approving or reverting a scenario is done in the Northspyre app. Features - Partial updates — send only the fields you want to change; omitted fields are left untouched. - Falsy-input rejection — empty-string Name and zero GrossSquareFootage return 400 rather than being silently ignored. - Cross-project protection — updating a scenario_id from another project returns 404, same shape as not-found. Warnings / Limits - FINAL scenarios are read-only — approved scenarios return 400. Revert the scenario in the Northspyre app before updating. - Name uniqueness — renaming to a name that already exists in the project returns 400. See also - create_budget_scenario to create a scenario. - delete_budget_scenario to remove a scenario.
update_budget_transaction
ChatGPTUpdate an existing budget transaction's amount, budget-line assignment, title, or description. Features - Partial update — send only the fields you want to change (at least one is required) - Re-categorize — move the transaction to a different budget line by name Warnings / Limits - 400 on an empty body or an unknown BudgetLineName; edits may be blocked by approval workflows or a locked requisition period - 404 when the transaction doesn't exist or belongs to another project See also - For two or more budget transaction changes, use batch_update_budget_transactions.
update_cash_flow_budget_line
ChatGPTUpdates a budget line's cash flow projection settings (start date, end date, curve type and projection variable) and its pinned values. Partial update: fields absent from the body are left unchanged. StartDate, EndDate, ProjectionType and ProjectionVariable accept null to clear the value; a ProjectionType sent without ProjectionVariable clears the variable, so the report applies the new curve's default. Changing the curve also turns off the budget line's 'equalize monthly projections' mode, which the cash flow report publishes and this endpoint neither accepts nor returns. PinnedValues replaces every pin on the budget line; send [] to clear them. Each pin must cover exactly one calendar month, one semi-month (1st-15th or 16th-end) or one calendar quarter, all pins in one request must use the same period type, and pins must not overlap. Every pin must overlap the budget line's projection window: its StartDate to EndDate as updated by this request, intersected with the project timeline. A missing StartDate falls back to the project start; a StartDate before the project start is refused, not moved. The window end is capped by the project timeline - the project end date, or five years from the project start when it has none, as the report does - and a supplied EndDate past the project end is refused rather than capped, so the cap bites on a stored end date or an open-ended project. A pin that only partly overlaps the window is accepted, because the report clamps the edge periods the same way. A pin cannot land on a period that is already actualized, or on a budget line whose EndDate has passed. Shrinking the window while stored pins would fall outside it is refused unless PinnedValues is sent in the same request; a stored pin whose dates cannot be read is not covered by that refusal. Interest reserve and Advanced Developer Fee budget lines accept date changes and a pin clear only. The response carries the persisted projection settings. Its PinnedValues are the pins this request wrote, echoed rather than re-read; when the request sends no PinnedValues they are read back from storage. A stored pin the endpoint cannot read is omitted from the response.
update_coi
ChatGPTChange a certificate of insurance (COI): its details, existing coverage components (UpdatedComponents) or new ones (NewComponents). Send only the fields to change.
update_commitment_line_item
ChatGPTChange a commitment line item's description, budget line, amount, title, vendor, requisition period or stage. Send only the fields to change; omitted fields are left unchanged. Approved line items in a locked requisition period cannot be changed.
update_external_cost_codes
ChatGPTReplace all of a project's custom accounting cost codes with the ones sent, creating them if none exist. Cost codes not included in the body are removed.
update_inbox_item
ChatGPTApprove or reject a data inbox item as the calling user, optionally with notes. Approving may post the underlying record (for example the invoice); the response says whether it posted.
update_invoice
ChatGPTChange an invoice's payment status, invoice date or description. Other invoice fields are changed through its line items.
update_invoice_line_item
ChatGPTChange an invoice line item's amount, budget line, vendor, description or stage. Send only the fields to change; omitted fields are left unchanged.
update_lien_waiver
ChatGPTChange a lien waiver's vendor, stage, signed or notarized status, template, type or progress. Send only the fields to change.
update_payment
ChatGPTCorrect a recorded payment's invoice, amount, check number or external payment id. InvoiceId, PaymentAmount and CheckNo are required. This changes the record only; it does not move money.
update_payment_tracker
ChatGPTChange a payment tracker's name, budget line, contractor, default retainage or invoice and G702 options. Send only the fields to change.
update_portfolio_approval
ChatGPTApprove or reject an item in your approvals queue as the calling user, optionally with a comment. Rejecting a data inbox item requires a comment.
update_requisition_period
ChatGPTReplace a requisition period's name, status, end date and approval workflow. Fields left out are cleared, so send the current values of anything that should not change.
update_schedule_task
ChatGPTChange a schedule task or milestone. Send only the fields to change.
update_vendor
ChatGPTChange a project vendor's name, role, contact email, address, vendor code, budget line, business designations or lien waiver and insurance settings. Send only the fields to change.
whoami
ChatGPTDescribe the current MCP session: who you are, which organizations you may use over MCP and with what access (ro/rw), which one is selected, the token's scopes, whether writes are possible, and -- when tools are being refused -- the denial code explaining why.
batch_update_schedule
Claudecreate_approval_workflow
Claudecreate_bid
Claudecreate_budget_line
Claudecreate_budget_scenario
Claudecreate_budget_transaction
Claudecreate_coi
Claudecreate_commitment_line_item
Claudecreate_external_cost_codes
Claudecreate_external_vendor
Claudecreate_invoice
Claudecreate_invoice_line_item
Claudecreate_lien_waiver
Claudecreate_pay_period
Claudecreate_payment
Claudecreate_payment_tracker
Claudecreate_requisition_period
Claudecreate_schedule_task
Claudecreate_vendor
Claudedelete_approval_workflow
Claudedelete_budget_line
Claudedelete_budget_scenario
Claudedelete_budget_transaction
Claudedelete_coi
Claudedelete_commitment_line_item
Claudedelete_external_cost_codes
Claudedelete_external_vendor
Claudedelete_invoice
Claudedelete_invoice_line_item
Claudedelete_lien_waiver
Claudedelete_project_metadata
Claudedelete_schedule_task
Claudeget_anticipated_cost_report
Claudeget_bid
Claudeget_bid_submission
Claudeget_budget_categorization
Claudeget_budget_scenarios
Claudeget_budgets
Claudeget_cash_flow_report
Claudeget_coi
Claudeget_commitment
Claudeget_commitment_line_item
Claudeget_commitment_report
Claudeget_cost_analytics
Claudeget_data_inbox_item
Claudeget_draw_copilot
Claudeget_draw_export
Claudeget_draw_request_budget_lines
Claudeget_invoice
Claudeget_lien_waiver
Claudeget_material_tariff_rate
Claudeget_mri_cost_codes
Claudeget_nexus_cost_codes
Claudeget_payment
Claudeget_payment_tracker
Claudeget_portfolio_approval
Claudeget_project
Claudeget_project_information
Claudeget_quickbooks_desktop_cost_codes
Claudeget_quickbooks_online_cost_codes
Claudeget_realpage_cost_codes
Claudeget_recall_transcripts
Claudeget_sage_300_cost_codes
Claudeget_sage_intacct_cost_codes
Claudeget_schedule
Claudeget_source_draw_summary
Claudeget_tariff_data
Claudeget_vendor
Claudeget_vendor_analytics
Claudeget_weather_forecast
Claudeget_yardi_cost_codes
Claudeinvite_vendor_to_bid
Claudelist_approval_workflows
Claudelist_bids
Claudelist_budget_lines
Claudelist_cois
Claudelist_commitments
Claudelist_cost_analytics
Claudelist_draw_trees
Claudelist_external_cost_codes
Claudelist_external_vendors
Claudelist_inbox
Claudelist_invoice_payments
Claudelist_invoices
Claudelist_lien_waivers
Claudelist_payment_trackers
Claudelist_payments
Claudelist_portfolio_approvals
Claudelist_project_ids
Claudelist_projects
Claudelist_recall_transcripts
Claudelist_requisitions
Claudelist_synced_emails
Claudelist_users
Claudelist_vendor_analytics
Claudelist_vendors
Claudesearch_projects
Claudeset_project_metadata
Claudeupdate_approval_workflow
Claudeupdate_bid
Claudeupdate_budget_categorization
Claudeupdate_budget_line
Claudeupdate_budget_scenario
Claudeupdate_budget_transaction
Claudeupdate_cash_flow_budget_line
Claudeupdate_coi
Claudeupdate_commitment_line_item
Claudeupdate_draw_approval
Claudeupdate_external_cost_codes
Claudeupdate_inbox_item
Claudeupdate_invoice
Claudeupdate_invoice_line_item
Claudeupdate_lien_waiver
Claudeupdate_payment
Claudeupdate_payment_tracker
Claudeupdate_portfolio_approval
Claudeupdate_requisition_period
Claudeupdate_schedule_task
Claudeupdate_vendor
Claudewhoami
Claude