MCP App Store
by KeenEthics
Finance
SpecterSystems.io icon

SpecterSystems.io

by Specter Systems

Overview

Specter Systems helps merchants and brokers complete business financing intake, upload bank statements and supporting documents, and track financing applications. Authenticated Specter users can review their own recent applications, facilities, lender submissions, and offer status.

Tools

accept_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Approves a pending Heartbeat action so it can be applied. Confirm with the user first. Optionally set the customer lifecycle. After accepting, call execute_heartbeat_action to apply it. May dispatch a prepared message to external recipients. Operates on one stored proposal by ID; it does not accept arbitrary operation names, register tools, or expose hidden model-callable tools.

add_note

ChatGPT
For non-merchant Specter broker/operator users only. Adds a note to a CRM record's activity timeline (lead, merchant, deal, or submission). Use when the user asks to add a note or log a comment on a record. 'entity_type', 'entity_id', and 'body' are required. This writes live CRM/FOS data.

archive_fos_setup_deal_status

ChatGPT
Tenant-admin-only setup helper. Archives a deal/facility status definition by stable value in the authenticated tenant. Use only after explicit admin confirmation.

archive_fos_setup_group

ChatGPT
Tenant-admin-only setup helper. Deletes/archives a manual group for Deals, Leads, or Merchants by ID, scoped to the authenticated tenant and entity type. Use only after explicit admin confirmation.

bulk_update_facilities

ChatGPT
Applies ONE uniform update to up to 100 facilities/applications in a single call — use this instead of many update_facility calls when the user asks to move a set of deals to the same status (e.g. "move these 9 to closed_follow_up"). Every facility gets the same field values; for per-deal tailored notes, follow with update_facility per record. Returns a per-ID success/failure list. Backend tenant isolation, permission checks, and audit history apply to each record.

close_deal

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL deal close-out on a facility: transitions the lifecycle stage, optionally sets the tenant deal status slug, creates a follow-up task, and adds a note — with per-step results. PREFER THIS over separate transition_application_stage + update_facility + create_task + add_note calls when the user asks to mark a deal funded/closed and schedule follow-up. Steps run in order and stop on the first failure. Backend lifecycle gates, tenant isolation, permission checks, and audit history apply.

compare_application_offers

ChatGPT
Reads and compares available offers for one authenticated facility/application. Use when the user asks which offer is better or wants financing terms side by side. This is read-only.

convert_lead_to_facility

ChatGPT
For non-merchant Specter broker/operator users only. Converts an existing lead into a deal/facility (auto-creates the merchant if missing and advances the lead). Use when the user asks to convert a lead to a deal. Provide lead_id; product_type and requested_amount are optional. This writes live CRM/FOS data.

create_application_facility

ChatGPT
Creates an authenticated facility/application record inside the user's Specter tenant. Use for internal users or brokers who explicitly ask to create a facility after authentication. This is additive but writes live CRM/FOS data.

create_capital_source

ChatGPT
For non-merchant Specter broker/operator users only. Merchant applicant accounts must not use this tool. Creates a new lender-board/capital-source record in the authenticated user's Specter tenant after the user clearly asks to add the lender. Use for lender details extracted from chat, files, PDFs, or product guides. Do not pass tenant_id, user_id, API keys, portal credentials, bank account data, tax IDs, SSNs, or other secrets. Backend tenant scope, RBAC, duplicate-name checks, validation, and audit events remain authoritative.

create_communication_channel

ChatGPT
Creates the communication channel for an entity that does not have one yet. Use ONLY after get_communication_channel_for_entity returns channel: null — a lead or counterparty nobody has messaged has no channel, and send_channel_message requires a channel_id it cannot invent. Provide entity_type, entity_id, and a display_name (the business or person's name, which is what the thread is labelled with). Creating the channel does not message anyone: it opens the thread so a later send has somewhere to land. Tenant-scoped and RBAC-enforced; if a channel already exists, read it with get_communication_channel_for_entity instead of creating a second one.

create_fos_setup_deal_status

ChatGPT
Tenant-admin-only setup helper. Creates a deal/facility status definition in the authenticated tenant only. Use for admin setup assistance when a required deal status is missing.

create_fos_setup_group

ChatGPT
Tenant-admin-only setup helper. Creates a manual group for Deals, Leads, or Merchants in the authenticated tenant only. Use for admin setup assistance when a required board/list group is missing. Never invent cross-tenant IDs and do not use inside Workflow Builder automation design.

create_lead

ChatGPT
For non-merchant Specter broker/operator users only. Creates a new lead (prospect) in the authenticated user's Specter tenant. Use when the user explicitly asks to add or create a lead. Only 'name' is required; include contact and business details when the user provides them. This writes live CRM/FOS data.

create_lender_submission

ChatGPT
Creates an authenticated lender submission for a specific facility/application. Use only when the user explicitly asks to submit or prepare a facility for a lender. This writes live submission pipeline data.

create_merchant

ChatGPT
For non-merchant Specter broker/operator users only. Creates a new merchant / counterparty (business) in the authenticated user's Specter tenant. Use when the user asks to add a merchant or business. 'name' and 'type' are required; default 'type' to "business" for a company. Optional business contact and profile fields are only for populating the CRM record when the user provides them. Do not request tax IDs or other government identifiers in chat; enter those through the secure Specter portal. This writes a business record, not a login account, and does not grant merchant access.

create_message_draft

ChatGPT
Writes a proposed reply to a conversation and stores it for a human to review. It does NOT send anything: the draft waits until a person approves it. Use this whenever you want to suggest a response — for example after an inbound reply to an outreach message. Read the thread first with list_conversation_messages so the draft answers what was actually said. A conversation can hold only one pending draft; if one already exists this returns a conflict.

create_offer

ChatGPT
For non-merchant Specter broker/operator users only. Creates a financing offer, optionally linked to a facility/deal or submission. Use when the user asks to add or record an offer. 'funded_amount' is required; link it with facility_id when known. This writes live CRM/FOS data.

create_task

ChatGPT
For non-merchant Specter broker/operator users only. Creates a task attached to a CRM record (lead, merchant, deal, or submission). Use when the user asks to add a task, follow-up, or to-do. 'entity_type', 'entity_id', 'task_type', and 'title' are required; use task_type "custom" for a general task. This writes live CRM/FOS data.

create_workflow_draft

ChatGPT
Creates a new Workflow V3 draft for the authenticated tenant. Use only after the user asks to create a workflow and the graph has been validated or intentionally saved as an incomplete draft. This operation only persists workflow configuration; it does not dispatch the configured node actions or register new model-callable tools. The MCP server forces is_draft=true; publish_workflow is required before the draft runs live automation.

decline_and_notify

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL decline: transitions the facility to outcome, optionally sets the tenant declined status slug, sends a merchant-facing decline message (skipped when no message body is given), and records an internal note with the decline reason — with per-step results. PREFER THIS over separate transition + update_facility + send_channel_message + add_note calls when the user asks to decline or kill a deal. Steps stop on the first failure.

defer_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Defers a pending Heartbeat action to revisit later, optionally until a specific time. Use when the user wants to snooze the proposed next step.

execute_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Applies an already-accepted Heartbeat action — performs the field update or sends the prepared message. Executing an already-applied action is an idempotent no-op (already-sent work is never repeated). Confirm with the user first; this writes live data. Field updates can be undone with revert_heartbeat_action, but outbound sends cannot. Operates on one stored, accepted proposal by ID; it does not accept arbitrary operation names or register additional model-callable tools.

file_support_ticket

ChatGPT
Files a platform support ticket as the authenticated user — the same reporter-side ticket system as the in-app "report a problem" flow. USE THIS whenever the platform itself misbehaves during a conversation: an endpoint returns wrong or oversized data, a filter is ignored, a tool result truncates so a task cannot be completed, or the user reports something broken. Include what was attempted, the exact call that misbehaved, and what came back wrong in the body. The ticket lands with the Specter system admins; identity (tenant, reporter) is stamped server-side. Tell the user the ticket reference from the response. This creates a record but sends nothing to any customer.

find_my_free_slots

ChatGPT
For non-merchant Specter broker/operator users only. The signed-in user's OPEN windows — their working hours in their own time zone minus what their calendar (Google or Outlook) already holds — for a day or a span of days. Answers "when am I free tomorrow?", "find me 45 minutes with the merchant this week", and is what to call BEFORE proposing a meeting time (propose_meeting) so the time is one the person can take. Give day (today / tomorrow / a weekday name / YYYY-MM-DD) and optionally days=N (up to 14), duration (minutes; default: their default meeting length) and limit. Each slot is a start, an end and its length; the answer also carries the working day it was cut from. When connected is false, repeat the reason to the user verbatim. Read-only.

get_application_details

ChatGPT
Gets one authenticated facility/application by ID, including currently available related entities and pipeline status. Use after list_my_recent_applications when the user asks about a specific application. Requires account authorization and does not mutate data.

get_application_history

ChatGPT
Reads timeline/history for a facility/application visible to the authenticated user, including related activity/events the backend exposes. Use when the user asks what happened on an application or wants recent changes. It is read-only.

get_assignments_for_entity

ChatGPT
For non-merchant Specter broker/operator users only. Reads who is currently assigned to one record, across every role, with each assignee's name and email resolved. Call this BEFORE set_assignments_for_entity: that tool REPLACES a role's whole assignee list, so adding a person means sending the existing ones back alongside them, and this is where you read them. Read-only.

get_bank_statement

ChatGPT
Gets one bank statement visible to the authenticated user. Use when the user asks for statement details, analysis, linked facility, risk signals, or included periods. It is read-only.

get_bank_statement_history

ChatGPT
Reads timeline/history for a bank statement visible to the authenticated user. Use when the user asks how a statement or its analysis changed. It is read-only.

get_bank_statement_period

ChatGPT
Gets one bank statement period visible to the authenticated user. Use for period-level revenue, balances, NSF, DSR, fraud, and MCA-position analysis. It is read-only.

get_business_research

ChatGPT
Gets one business research record by its own ID. Prefer get_facility_business_research when you have an application or facility; use this only when you already hold a research record ID. It is read-only.

get_communication_channel_for_entity

ChatGPT
Gets the communication channel for a specific entity visible to the authenticated user. Use before reading or sending messages tied to a facility, submission, lead, counterparty, or lender. A successful result exposes channel.id/channel_id in the model-visible response; pass that exact value to send_channel_message. If channel is null, no channel exists yet — open one with create_communication_channel and use the id it returns; do not guess REST paths. It is read-only.

get_credit_report

ChatGPT
Gets one stored credit report, optionally with its tradelines in the same call. Use when the user asks about a specific credit pull, its scores, or the individual tradelines behind it. Reads a stored pull only — it does not order a new one. It is read-only.

get_email_blast

ChatGPT
For non-merchant Specter broker/operator users only. Reads one email blast in full: what was sent, to how many, and how each recipient landed. Read-only.

get_facility_business_research

ChatGPT
Gets the stored business research for one application/facility: owner name, registration state, initial filing date, Secretary of State active status and good standing, court records and legal actions (business and owner), research notes, source URLs, and AI-synthesized risk signals. Use for '/research', 'what do we know about this business', 'is this business legitimate', 'any liens or court records'. Reads stored research only — it does not run a new search. It is read-only.

get_facility_credit_reports

ChatGPT
Lists the stored credit reports for one application/facility. Use when the user asks about credit, scores, or the owner's credit profile on a deal. Reads stored pulls only — it does not order a new credit report. It is read-only.

get_fos_setup_catalog

ChatGPT
Tenant-admin-only setup helper. Lists which manual settings are supported for Deals, Leads, and Merchants, including group and status setup endpoints. Use in the admin sidepanel before creating setup records. Do not use inside Workflow Builder automation design.

get_full_workup

ChatGPT
ONE-CALL deep briefing for a single facility/application: everything in get_underwriting_packet (enriched deal, submissions, offers, bank statements, timeline) PLUS statement periods, tax years, the offer comparison, and a communications snapshot (latest channel + recent messages). PREFER THIS over get_underwriting_packet followed by separate period/tax/offer/comms reads when preparing a full underwrite or /analyze. Read-only. Sections may carry a section_errors entry instead of failing the whole workup.

get_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Reads ONE Heartbeat action in full — its payload (for a meeting: title, start, end, and the complete guest list with each guest's email), its status, and its acceptance preview. Use this to answer questions about a specific proposed action, such as who is invited to a meeting or what a field change would set, before or after accepting it. This operation only reads one stored proposal record; it never executes its payload or registers additional tools.

get_lead

ChatGPT
For non-merchant Specter broker/operator users only. Returns one lead's full record — contact details, business information, status and tags. The free-text notes field is NOT shown to you, and no tool reads a lead's notes back — never claim to have read them or to know what they say. Use this after search_records has resolved a name to an id, and ALWAYS before update_lead or set_lead_status: those change a live record, and this is how you see the current values so you do not overwrite something a person entered. It is read-only.

get_lender_submission

ChatGPT
Gets one lender submission visible to the authenticated user. Use when the user asks for lender submission details, current status, requested terms, offered terms, approved terms, or lender response context. It is read-only and tenant/user scope is enforced by the backend.

get_my_calendar_settings

ChatGPT
For non-merchant Specter broker/operator users only. Which calendar the signed-in user's meetings and follow-ups land on: their preference (auto | google | outlook), what it resolves to right now, and whether Google Calendar and their Outlook mailbox are connected — outlook.needs_reconnect means the mailbox was connected before calendar access was part of the grant. Use it to explain why a calendar read or booking was refused, and to tell the user which setting to change (Settings → Calendar; Outlook connects under Settings → Integrations → Outlook). Read-only; the preferences are changed by the user on the page, not through this tool.

get_my_daily_brief

ChatGPT
For non-merchant Specter broker/operator users only. The signed-in user's DAY in one read: the meetings still ahead, tasks due today, anything overdue, leads whose follow-up date is today, how many Heartbeat actions are waiting, and the open windows left to book into — with a one-sentence summary. This is what /digest should answer from: one call, instead of stitching together list_tasks, list_leads and list_heartbeat_actions. Pass day (today / tomorrow / a weekday name / YYYY-MM-DD, in the user's own time zone) to brief a different day; default today. When calendar_connected is false, repeat calendar_reason to the user verbatim — the rest of the brief is still real. Read-only.

get_my_specter_profile

ChatGPT
Reads the authenticated user's Specter profile, active tenant, and role context. Use before user-specific application, facility, or submission requests to confirm identity and authorization. Requires a connected Specter account or bearer token; it does not mutate data.

get_offer

ChatGPT
For non-merchant Specter broker/operator users only. Gets one offer by ID: full terms, fees, commission, counter values, conditions, and the presented/accepted/declined/expired timestamps. Use after list_offers or compare_application_offers has identified which offer matters. Read-only.

get_pipeline_snapshot

ChatGPT
ONE-CALL pipeline briefing scoped to the authenticated user's data access: deal counts per lifecycle stage, SLA-at-risk deals, closing-soon deals (decision/funding), and stalled deals with no stage movement in stale_days days. Lists are capped (top 10 per bucket) — it is a briefing, not a report. PREFER THIS over multiple search_records calls when the user asks how the pipeline looks, what needs attention today, or for a digest. Read-only.

get_public_application_form

ChatGPT
Fetches the public signed intake form for a merchant or broker without requiring a Specter user account. Use when a non-user wants to apply for business financing or a broker wants to start signup. It returns the live form schema and public bank-login/upload configuration; it does not submit anything.

get_sms_blast

ChatGPT
For non-merchant Specter broker/operator users only. Reads one SMS blast in full: what was sent, to how many, and how each recipient landed. Use to answer "how did that blast do" before deciding whether to retarget it. Read-only.

get_sms_sender_access

ChatGPT
Reports which phone numbers the authenticated user may send SMS from. Use before sending SMS through MCP: send_channel_message and send_conversation_message accept sender_phone, and the backend rejects a number the user has no access to. This returns an ACCESS MAP, not a complete list of numbers — read it as an exclusion list. blocked_numbers are the numbers this user may NOT send from (assigned to another user, or a Zoom line with no assignee). allowed_numbers are numbers explicitly assigned to this user. A number restricted to nobody in particular is unrestricted and appears in NEITHER list, and when is_admin is true both lists come back empty because the whole tenant pool is available. So an empty allowed_numbers never means the user cannot send — do not refuse on that basis. To name a specific number, take one from allowed_numbers; otherwise send without sender_phone and let the backend choose, and only warn the user if the number you intended appears in blocked_numbers. It is read-only.

get_submission_history

ChatGPT
Reads timeline/history for a lender submission visible to the authenticated user. Use when the user asks for submission history, status changes, lender events, or related activity. It is read-only.

get_task

ChatGPT
For non-merchant Specter broker/operator users only. Reads one task in full by its ID, after a list tool surfaced it. Read-only.

get_task_stats

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL task posture for the tenant: totals by status, SLA at-risk and breached counts, due today, breakdowns by type and priority, completion rate and average completion time. Takes no arguments. Use for "how are we doing on tasks" instead of paging a list and counting. Read-only.

get_tax_return

ChatGPT
Gets one tax return visible to the authenticated user. Use when the user asks for tax return details, years, profitability summary, linked application, or risk signals. It is read-only.

get_tax_return_history

ChatGPT
Reads timeline/history for a tax return visible to the authenticated user. Use when the user asks how a tax return or its analysis changed. It is read-only.

get_tax_return_year

ChatGPT
Gets one tax return year visible to the authenticated user. Use for annual tax metrics, extracted fields, profitability, ownership, and document URLs. It is read-only.

get_thread_for_entity

ChatGPT
For non-merchant Specter broker/operator users only. Finds the INTERNAL collaboration thread attached to a record — where colleagues discuss a deal among themselves. This is NOT merchant messaging: outbound and inbound email/SMS with the merchant live on communication channels, via get_communication_channel_for_entity. Returns exactly one thread, or a not-found error when the record has none, which means nobody has started an internal discussion — not that the record is missing. Use it to get the thread_id that list_thread_messages needs. Read-only.

get_underwriting_packet

ChatGPT
ONE-CALL briefing for a single facility/application: the enriched deal (revenue, credit, health score, AI summary, assignments) PLUS its lender submissions, offers, bank statements with risk signals, and recent timeline. PREFER THIS over separate get_application_details / list_application_submissions / list_application_bank_statements / get_application_history calls whenever the user asks broadly about one deal ('tell me about', 'summarize', 'what's the status of', /lookup, /analyze prep) — it replaces 4-5 round trips with one. Read-only. Sections may carry a section_errors entry instead of failing the whole packet.

get_workflow

ChatGPT
Gets one Workflow V3 workflow by ID, including its full trigger, nodes, and edges. Use before editing, auditing, re-validating, or publishing an EXISTING workflow when its graph is not already in this conversation — update_workflow_draft and validate_workflow_draft need the full graph, and this is the only way to read it back. Read-only. The model-visible response is size-capped: if any array carries a truncated marker or the body itself is truncated, the graph is INCOMPLETE — never send it back through update_workflow_draft (that call replaces nodes and edges wholesale and would delete the missing ones); tell the user to make that edit in the builder instead.

get_workflow_builder_tenant_capabilities

ChatGPT
Reads tenant-scoped Workflow V3 readiness for communication nodes, including Zoom SMS sender phones, Twilio SMS configuration status, and the email sender validation path. Use before configuring email/SMS actions so the assistant does not invent sender emails, sender phones, provider IDs, or integration settings. It never returns provider secrets.

get_workflow_fos_entity_fields

ChatGPT
Reads the field schema for one FOS entity type available to Workflow V3. Use before configuring conditions, mappings, or node data fields. It is read-only.

list_application_bank_statements

ChatGPT
Lists bank statement records visible to the authenticated user, optionally filtered to one facility/application, counterparty, or status. Use when the user asks for statements, statement files, processing state, or statement analysis linked to an application. It is read-only.

list_application_submissions

ChatGPT
Lists lender submissions visible to the authenticated user, optionally filtered to one facility/application, lender, status, or recent-day window. Use when the user asks where an application was submitted, recent lender activity, or submission status. It is read-only.

list_application_tax_returns

ChatGPT
Lists tax return records visible to the authenticated user, optionally filtered to one facility/application, counterparty, or status. Use when the user asks for tax returns, profitability, tax years, or tax-document analysis linked to an application. It is read-only.

list_available_email_senders

ChatGPT
Lists email sender identities available to the authenticated user. Use before sending email through MCP so the user can pick a permitted sender. Each entry carries replies_tracked: true means the mailbox is integrated and the recipient's reply comes back into the system; false means the address can send but nothing reads its inbox, so any reply is lost. Prefer a replies_tracked sender, and if only untracked ones exist say so before sending rather than picking one silently. It is read-only.

list_bank_statement_periods

ChatGPT
Lists periods/months for a bank statement visible to the authenticated user. Use when the user asks for monthly revenue, balances, NSF counts, DSR, fraud signals, or period-level statement details. It is read-only.

list_blasts

ChatGPT
For non-merchant Specter broker/operator users only. Lists past outreach BLASTS — SMS and email merged into one timeline, newest first. Use for "what did we send", "how did last week's blast do", or to find the blast id another blast tool needs. This is sent history, not an audience: preview_blast_audience answers who a FUTURE send would reach. Read-only.

list_capital_sources

ChatGPT
For non-merchant Specter broker/operator users only. Merchant applicant accounts must not use this tool. Lists lender-board/capital-source records visible to the authenticated user. Use before creating a lender when the user asks to add one from chat, a file, or a product guide, so you can check for an existing record by exact or near name. It is read-only and backend tenant scope/RBAC remain authoritative.

list_channel_messages

ChatGPT
Lists messages in a communication channel visible to the authenticated user. Use to retrieve SMS, email, internal notes, or thread context before answering or sending. Returns the whole channel; the endpoint has no thread filter, so pick the replies out yourself, or use list_email_records with thread_id for one email thread. Do NOT reach for list_thread_messages — that reads INTERNAL staff threads at a different route, in a different id space. It is read-only.

list_communication_channels

ChatGPT
Lists communication channels visible to the authenticated user. Each row carries TWO separate snapshots. last_message_ (at, preview, medium, direction) is the newest message in the channel WHICHEVER WAY IT WENT — it answers "what was the last thing that happened here", and when direction is inbound the preview is the customer's words, not ours. last_outbound_ (at, preview, medium) is the newest message WE SENT, kept separately so a reply since does not bury it — that is what answers "what did we last SEND them" and "have we followed up". A NULL last_outbound_at means we have never sent on this channel; say that rather than reporting their inbound message back as ours. It is the newest outbound message ROW, written when the send is QUEUED, so a send the carrier later rejected still moves it — read the message back with list_channel_messages (status, dispatch_error) before telling anyone it reached them. Both come off this ONE call across many records, so answer either question from this list instead of calling get_communication_channel_for_entity and then list_channel_messages per record. To answer "which of these records had ANY activity since X" in one call, pass workspace + entity_ids (the record IDs) + last_message_after (X); for "which of them did WE write to since X" use last_outbound_after instead — last_message_after also passes channels where only the customer wrote. Only drill into a specific channel's messages when you need more than the latest one in each direction. Read-only.

list_conversation_messages

ChatGPT
Lists messages in a conversation visible to the authenticated user. Use when a user asks for a specific SMS/email conversation thread. It is read-only.

list_email_blasts

ChatGPT
For non-merchant Specter broker/operator users only. Lists email blasts only, filterable by status and source. Email blasts are recorded automatically from bulk email sends and are read-only — there is no email equivalent of the SMS retarget tools. Prefer list_blasts unless the user asked specifically about email.

list_email_records

ChatGPT
Lists email audit records visible to the authenticated user. EXACTLY ONE entity filter applies: the handler checks lead_id, then counterparty_id, then facility_id, then submission_id, then thread_id, and stops at the first one sent — the rest are ignored SILENTLY, so send one. There is no direction, sender, recipient or limit filter and no pagination. Records come back newest first, EXCEPT when you send thread_id, which returns that thread oldest-first so it reads as a conversation. Only about the first 20 survive into what you receive, so a truncated result is never proof a record does not exist. Use when the user asks for recent email activity or lender email history. It is read-only.

list_facilities

ChatGPT
For non-merchant Specter broker/operator users only. Lists deals (facilities) across the whole book, filtered by stage, status, group, assignee, counterparty or free text. This is the tenant-wide deal list — list_my_recent_applications is only the caller's recent ones, and get_pipeline_snapshot gives counts rather than rows. To answer "how many", read pagination.total rather than counting the rows you got back: only about the first 20 survive into what you receive, so narrow with a filter rather than paging through everything. Read-only.

list_fos_setup_deal_statuses

ChatGPT
Tenant-admin-only setup helper. Lists deal/facility status definitions for the authenticated tenant before creating or changing deal settings. Leads and Merchants do not currently have tenant-editable status registries.

list_fos_setup_groups

ChatGPT
Tenant-admin-only setup helper. Lists existing tenant groups for Deals, Leads, or Merchants before creating or changing settings. Use entity_type=deals, leads, or merchants. Do not use inside Workflow Builder automation design; Workflow Builder should use read-only workflow lookup tools.

list_heartbeat_actions

ChatGPT
For non-merchant Specter broker/operator users only. Lists Heartbeat actions — proactive next steps the system proposed for leads, merchants, and deals (send a message, update a field, follow up). Defaults to status=pending (awaiting the user); use it for a daily digest or "what needs me". This operation only reads stored proposal records; it never executes, registers, discovers, or enables model-callable operations. Approval, application and reversal are separate tools already exposed in tools/list.

list_leads

ChatGPT
For non-merchant Specter broker/operator users only. Lists and filters the lead pipeline — by status, owner, tag or free-text search — for questions like which leads to work next, or how many sit at a status. Use search_records instead when the user names one specific person or business. It is read-only.

list_message_drafts

ChatGPT
Lists reply drafts awaiting human approval, optionally filtered by status or conversation. Use to check whether a conversation already has a pending draft before writing another. It is read-only.

list_my_calendar_events

ChatGPT
For non-merchant Specter broker/operator users only. The signed-in user's OWN calendar — Google or Outlook, whichever their calendar preference resolves to — for a day or a window. Answers "what is on my calendar tomorrow?", "am I free Thursday at 2?", "what meetings need me this week?". Prefer day (YYYY-MM-DD, or simply today / tomorrow / yesterday / a weekday name, resolved in the user's own time zone; days=N for a span) over from/to RFC3339 instants. Entries this CRM booked carry record {entity_type, entity_id} so you can name the lead or deal. When connected is false, repeat the answer's reason to the user verbatim — it names the setting that fixes it — and do not call anything else. Read-only.

list_my_recent_applications

ChatGPT
Lists recent financing application/facility records visible to the authenticated user. Use when the user asks what applications, deals, facilities, or funding requests they recently have in Specter. Filters are intentionally narrow: page size, recent-day window, status/stage, and search text.

list_my_tasks

ChatGPT
For non-merchant Specter broker/operator users only. Lists tasks assigned to the AUTHENTICATED user — the answer to "what is on my plate", "what do I owe today", "what am I behind on". The assignee is taken from the session and cannot be changed: to see someone else's tasks use list_tasks with assigned_to. Filter to status=pending or in_progress for open work; without a status filter this includes completed and cancelled tasks too. Read-only.

list_notes

ChatGPT
For non-merchant Specter broker/operator users only. Reads a record's notes and activity timeline, newest first — including the notes add_note writes. Use it before saying anything about what has or has not happened on a record: add_note is how notes get written, and this is the only way to read them back. To answer "how many", read pagination.total rather than counting rows. Read-only.

list_offers

ChatGPT
For non-merchant Specter broker/operator users only. Lists offers visible to the authenticated user, with their status, terms, lender, and expires_at. This is what answers "which offers are expiring", "what is outstanding on this deal", and "has anyone accepted yet" — compare_application_offers only ranks the offers on ONE facility, and there was previously no way to read offers across records at all. The endpoint has no expiry filter, no date filter, no sort and no pagination, and only about the first 20 rows survive into what you receive — the rest are replaced by a truncated marker, in no defined order. So NARROW with facility_id, submission_id, status or lender_id rather than scanning everything, then compare expires_at in what comes back; a truncated result is never evidence an offer does not exist. Read-only.

list_sms_blasts

ChatGPT
For non-merchant Specter broker/operator users only. Lists SMS blasts only, filterable by status and source. Prefer list_blasts unless the user asked specifically about texts, or you need the status/source filters this one adds. Read-only.

list_sms_records

ChatGPT
Lists SMS audit records visible to the authenticated user, filtered by facility, lead, counterparty, agent, conversation, provider, direction, or phone. There is NO submission filter and NO limit — the endpoint returns every matching record, newest first, and only about the first 20 survive into what you receive (the rest become a truncated marker), so narrow by an entity rather than scanning, and never read a truncated result as proof a record does not exist. Use when the user asks for recent SMS activity or text-message history. It is read-only.

list_submissions

ChatGPT
For non-merchant Specter broker/operator users only. Lists lender submissions across the whole book, filtered by deal, lender, status or age. This is the tenant-wide submission list; list_application_submissions covers ONE deal. Use it for "what is outstanding with lenders", "what has been sitting with a lender for a week", or "what did this lender come back on". Only about the first 20 rows survive into what you receive, so narrow with a filter rather than scanning, and never read a truncated result as proof something does not exist. Read-only.

list_system_errors

ChatGPT
System-admin only. Reads Specter platform error logs across ALL tenants for operational debugging — either the captured error records in the CRM database (source "db", the default) or live Google Cloud Logging entries from Cloud Run (source "gcp"). The backend enforces Specter system-admin access; tenant admins, brokers, operators, and merchant accounts cannot use this tool. Use it to investigate crashes, 5xx responses, panics, and recent failures: filter by level (ERROR/FATAL/WARN), a lookback window (since, e.g. "24h"), a free-text query, or a specific tenant_id. Returns each entry's time, level, message, error detail, and request id, plus (for gcp) source location, stacktrace, HTTP status, and Cloud Run revision. Read-only.

list_tasks

ChatGPT
For non-merchant Specter broker/operator users only. Lists tasks across the tenant, filtered by the record they hang off, their type, status, priority, or who they are assigned to. Use for "what is open on this deal" (entity_type + entity_id), "what is overdue", or another user's queue (assigned_to). For the caller's OWN tasks prefer list_my_tasks. To answer "how many", read pagination.total rather than counting the rows returned — that is only the page. Read-only.

list_tax_return_years

ChatGPT
Lists year-level records for a tax return visible to the authenticated user. Use when the user asks for annual tax metrics, revenue, profitability, ownership, or extracted year details. It is read-only.

list_team_members

ChatGPT
For non-merchant Specter broker/operator users only. Lists the people in this tenant — name, email, role, status — so a person named in conversation ("assign Zach", "who is Yoni") can be turned into an ID before any assignment is written. Match on email first; names repeat. Each row carries TWO different IDs and they are not interchangeable: id is the AGENT id and user_id is the USER id. The assignment tools want user_id. Read-only.

list_thread_messages

ChatGPT
For non-merchant Specter broker/operator users only. Reads the messages colleagues posted on an internal thread, newest-first. Get the thread_id from get_thread_for_entity. These are INTERNAL notes between staff — merchant-facing email and SMS live on communication channels, via list_channel_messages. Messages flagged internal-only are NOT returned here, so a thread can hold discussion this call does not show; say that rather than reporting the thread as complete. Read-only.

list_workflow_builder_catalog

ChatGPT
Reads workflow-editor reference metadata: supported triggers, node categories, action configuration, connection handles, and field schemas. These are saved workflow configuration types, not callable MCP tools. This read-only operation does not execute nodes, invoke actions, or unlock tools. All model-callable operations are already declared in tools/list.

list_workflow_facility_groups

ChatGPT
Lists the authenticated tenant's Facility/Deal groups for Workflow V3 configuration, including real group IDs, names, canonical slugs, colors, sort order, active/archive state, and default UI state. Use this before setting facility group_id or moving deals between groups/tabs. It is read-only; never guess a group_id or rely on runtime group creation when this tool can verify the existing tenant group.

list_workflow_facility_statuses

ChatGPT
Lists the authenticated tenant's Facility/Deal status registry for Workflow V3 configuration, including stable automation values, labels, colors, stages, queues, active/archive state, system flag, and terminal flag. Use this whenever a workflow condition, trigger, or update references a facility status. It is read-only; never invent status values when this tool can verify them.

list_workflow_fos_entities

ChatGPT
Lists FOS entity types available to Workflow V3 configuration for the authenticated tenant. Use before building entity-triggered workflows or field conditions. It is read-only.

list_workflow_lead_groups

ChatGPT
Lists the authenticated tenant's Lead groups for Workflow V3 configuration, including real group IDs, names, canonical slugs, colors, sort order, active/archive state, and default UI state. Use this before setting lead group_id or moving leads between groups/tabs. It is read-only; never guess a lead group_id or use a facility group ID for a lead.

list_workflow_node_types

ChatGPT
Reads the supported node configuration schemas for the tenant's workflow editor. Use to explain or configure saved workflow graphs. Node types are workflow data, not dynamically callable tools. This read-only operation never runs a node, performs its action, or changes which MCP tools are available.

list_workflows

ChatGPT
Lists the authenticated tenant's Workflow V3 workflows as a compact index: id, name, status (draft/active), trigger type, node/edge counts, and timestamps — graphs are omitted; fetch one with get_workflow. Use to find an existing workflow the user names ('publish the new-deal one', 'edit my routing workflow') before fetching, editing, or publishing it. Read-only.

onboard_lead

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL lead intake: creates the lead, creates a linked follow-up task, and optionally sends an intro SMS/email — with per-step results. PREFER THIS over separate create_lead + create_task + send_channel_message calls whenever the user asks to onboard, intake, or add-and-follow-up a new prospect. Steps run in order and stop on the first failure; the response reports exactly which steps completed. This writes live CRM/FOS data and can send an outbound message.

preview_blast_audience

ChatGPT
For non-merchant Specter broker/operator users only. Counts how many LEADS match a set of filters — status, tags, owner, group — and returns a small sample, without sending anything. Use it to answer "how many leads would this reach" before planning outreach, and state the count to the user: these filters routinely resolve to a different set than the person pictured, and exclude_do_not_contact and exclude_recently_sent move the number most. You must pass at least one POSITIVE selector — lead_ids, statuses, group_ids, owner_ids, tags or search. A call carrying only exclusions or has_email/has_phone comes back with no_selection set and a count of 0, which means you selected nobody, NOT that the pipeline is empty; say so rather than reporting there are no leads. The ids it returns are LEAD ids from the leads table; do not pass them to a tool that expects CRM record ids, which are a different set entirely. It is read-only and sends nothing.

preview_blast_retarget

ChatGPT
For non-merchant Specter broker/operator users only. Counts who a re-send of an earlier SMS blast would reach, and sends NOTHING. Always call this before send_blast_retarget and tell the user eligible_count — that number is the whole point of the preview, and there is no recipient ceiling on the send. Pass the SAME target to both calls: preview and send each recompute the audience independently, so a different target sends to a different set than the one you showed. Recipients already retargeted from this blast are excluded, which is why a second preview of the same target can legitimately come back with zero. It sends nothing, but it is not inert: it refreshes each recipient's reply and opt-out status from inbound SMS as a side effect.

propose_meeting

ChatGPT
For non-merchant Specter broker/operator users only. Drafts a calendar meeting tied to a lead, merchant (counterparty) or deal (facility) as a PENDING Heartbeat action. NOTHING IS SENT by this call: the invite goes out only when a person accepts the action (in the Heartbeat review queue, or accept_heartbeat_action + execute_heartbeat_action after the user explicitly says so). Before calling, confirm with the user the time (an RFC3339 start_time with offset), the duration, and WHO is invited: the record's contact is invited unless include_contact is false; set include_assigned_users to also invite every user assigned to the record; name anyone else under attendees. The organizer is the record's owner (deal opener, lead owner, merchant assignee) and it lands on their connected calendar. Optionally tie the meeting to a task: task.task_id links an existing task, task.create makes one on accept (due at the meeting by default, assigned to the organizer). Answers the pending action with its id; tell the user it is waiting for their accept.

publish_workflow

ChatGPT
Publishes a Workflow V3 draft for the authenticated tenant. The backend re-validates the STORED draft graph at publish time and refuses an invalid one, so for an already-saved draft the assistant may publish by workflow_id even when the graph is not in this conversation (use get_workflow first only when the user wants the contents summarized or changed). Use after the user explicitly confirms publishing. This activates the stored automation: later matching triggers can run its configured record changes and outbound communications under the tenant's permissions. It does not register or expose additional model-callable tools. The input requires confirm_publish=true.

recalculate_bank_statement

ChatGPT
Recalculates stored bank statement aggregates and risk signals for one visible statement. Use only when the user asks to refresh/recalculate statement analysis. This writes derived analysis fields and may affect underwriting views.

recalculate_tax_return

ChatGPT
Recalculates stored tax return risk/profile analysis for one visible tax return. Use only when the user asks to refresh/recalculate tax-return analysis. This writes derived analysis fields and may affect underwriting views.

refresh_specter_session

ChatGPT
Refreshes an existing Specter Systems session with a refresh token from the auth backend. Use only when app-level OAuth is unavailable and an authenticated user's access token has expired. It sends the refresh token in the Authorization header; model-visible output redacts new tokens and secrets.

reject_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Rejects a pending Heartbeat action so it is not applied. Use when the user declines the proposed next step. Optionally include a reason.

remove_assignment_for_entity

ChatGPT
For non-merchant Specter broker/operator users only. Removes ONE person or team from ONE role on ONE record, leaving everyone else in that role untouched. Prefer this over set_assignments_for_entity when the user named somebody to take off — it cannot accidentally unassign the others. The removed person is notified, so it is marked destructive.

reorder_fos_setup_deal_statuses

ChatGPT
Tenant-admin-only setup helper. Reorders deal/facility statuses for the authenticated tenant. Use only when an admin explicitly asks to change status ordering.

reprocess_facility_documents

ChatGPT
Re-runs document analysis over the files a facility ALREADY has and fills in extracted fields that are empty. It cannot overwrite data: if the merchant already holds contact details, owner name, SSN, date of birth or EIN, the call is REFUSED with 409 would_overwrite_existing_data and nothing is written. Use when a facility's documents were misread and its fields came out blank. It SPENDS processor and model budget on every call and is not free to retry, so name the facility and confirm with the user before calling, call it for one facility at a time, and never retry a failure without asking again. On a 409, report the populated_fields list from the response verbatim — those are the fields blocking the repair, and the user needs to know which to clear or fix in the app. Not available to merchant applicant accounts.

request_missing_docs

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL stip chase for a facility: the backend computes which documents are missing (bank-statement months with no coverage, expected tax years absent), composes a request message listing exactly those items (or uses your message override), and sends it to the merchant's channel. Returns the computed gap list plus per-step results. PREFER THIS over manually reading statements/tax returns and calling send_channel_message when the user asks what's missing on a file or to chase documents.

revert_heartbeat_action

ChatGPT
For non-merchant Specter broker/operator users only. Undoes an APPLIED Heartbeat action by restoring the fields it changed to their previous values — only if they have not changed since (otherwise it reports a conflict and skips). Only field updates are revertible; outbound messages cannot be undone. Use when the user wants to roll back a Heartbeat change.

search_records

ChatGPT
For non-merchant Specter broker/operator users only. Searches the tenant's CRM records — leads, merchants/counterparties, deals, and more — by ONE free-text query that matches name, business name, first/last name, email, or phone. This is the DEFAULT way to turn any person or business the user names into a concrete record with its id: use it FIRST for a lookup, a who-is / find / pull-up question, or before drafting, messaging, or acting on someone — the name, email, or phone the user gave IS the query. Do not ask the user for an id and do not hand-build a REST path when this fits. It resolves specific records, not whole-collection totals: for how-many counts, read the collection endpoint instead. Returns each match's entity_type, entity_id, name, and a short subtitle. Read-only; tenant-scoped and RBAC-enforced.

search_workflow_agents

ChatGPT
Searches/list agents in the authenticated tenant for Workflow V3 assignment configuration. Use to resolve a named user/agent or current profile user to a verified agent_id before configuring assignment actions or task assignee_id. It is read-only; never invent an agent_id if no exact or clearly intended match is returned.

search_workflow_builder_tools

ChatGPT
Read-only local reference search for Workflow V3 terminology. Returns suggested entity, trigger, field and node names and references to separately registered tools. It never executes, registers, unlocks or dispatches any other tool, never reads tenant records, and never creates, updates, validates or publishes a workflow. Every referenced operation is independently listed with its own input schema and annotations and must be called separately. This helper is optional.

select_specter_tenant

ChatGPT
Completes sign-in for users who have access to more than one tenant. Use after sign_in_to_specter returns requires_tenant_selection=true. It sends the tenant_selection_token and selected tenant_id to the live auth backend; model-visible output redacts session tokens and secrets.

send_blast_retarget

ChatGPT
For non-merchant Specter broker/operator users only. Re-sends an SMS blast to the slice of its original audience named by target — by default everyone who never replied. This sends real texts to real merchants and CANNOT be undone. There is NO recipient ceiling: the audience is whatever the preview resolves to, which can be thousands. So call preview_blast_retarget FIRST, tell the user the eligible_count, and pass that same number as confirm_recipient_count here; a mismatch means you are sending to an audience the user never saw. Pass the SAME target you previewed — the send recomputes the audience server-side, so a different target reaches a different set. Counts from the preview are advisory: state landed/failed from THIS call's response, never the preview's. Re-running an identical retarget is refused with a no-recipients error because each source recipient is stamped once, but changing target produces a fresh audience with no second confirmation, so treat every target change as a new send that needs its own preview and approval.

send_channel_message

ChatGPT
Sends a message in an existing visible communication channel as the authenticated user. channel_id is required and this tool does not create a missing channel. THE CHANNEL IS THE RECORD THE MESSAGE IS FILED UNDER, so it must be the channel of the person you are writing to — never reuse a channel you happen to have from an earlier step. Messaging somebody through an unrelated record files your message in that record's history and checks the wrong contact against do_not_contact. If the recipient has no record, say so and offer to create one rather than borrowing a channel. Resolve the exact ID with get_communication_channel_for_entity; never guess a communications REST path. Use only after the user explicitly asks to send or reply. For email/SMS, include only the intended recipient fields and message body; backend sender permissions, channel access, dispatch, and audit logging apply. A SUCCESSFUL RESPONSE MEANS QUEUED, NOT DELIVERED: the backend accepts the message, returns 200, and dispatches to the carrier afterwards, so a send that fails at the carrier (no connected sender, rate limit, expired auth, bad number) still answers 200 here. Report it as "queued" or "sending" and NEVER as "sent". To find out what actually happened, read the message back with list_channel_messages: status becomes sent or failed, and a failed row carries dispatch_error and failure_class saying why.

send_channel_messages

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL batch outreach: sends one personalised message to each of up to 25 recipients, resolving each recipient's channel for you. PREFER THIS over a chain of get_communication_channel_for_entity + send_channel_message calls whenever the user asks to message, text, or email MORE THAN ONE person — working through a list, a batch, or 'the next few'. One call means the user approves the batch once instead of once per recipient. Recipients are independent: an invalid number fails only its own entry, and the response reports every recipient's outcome with sent/failed counts, so report queued, skipped, and rejected entries separately. An ok entry is queued, not proof of carrier delivery. Duplicate destinations after the first entry are skipped. Include expected_last_message_id when replying to a conversation you have reviewed; if it changed, reread before composing a replacement. Never retry the whole batch after partial success or an ambiguous timeout. Each entry needs the message text plus recipient_phone (sms) or recipient_email (email) — supply the real contact you looked up; the backend will not substitute one. Identify the thread with channel_id when you already have it, otherwise entity_type + entity_id.

send_conversation_message

ChatGPT
Sends a reply in a visible conversation as the authenticated user. Use only after the user explicitly asks to send or reply. The backend fills the conversation recipient, verifies sender access, dispatches email/SMS where applicable, and records audit data. A SUCCESSFUL RESPONSE MEANS QUEUED, NOT DELIVERED: dispatch to the carrier happens after the 200, so a send that fails at the carrier still answers 200 here. Report it as "queued" or "sending", never "sent", and read the message back with list_conversation_messages to learn what happened — status becomes sent or failed, and a failed row carries dispatch_error and failure_class.

send_offer_to_merchant

ChatGPT
For non-merchant Specter broker/operator users only. ONE-CALL offer delivery: creates the financing offer on the facility, formats a summary (amount, factor rate, term, payback), and sends it to the merchant's channel — with per-step results. PREFER THIS over separate create_offer + send_channel_message calls when the user asks to send or present an offer. Steps stop on the first failure.

set_assignments_for_entity

ChatGPT
For non-merchant Specter broker/operator users only. Assigns people or teams to one role on one record — "assign this deal to Zach", "put Yoni and me on it", "make Sarah the closer". This REPLACES the role's entire assignee list. Anyone currently in that role and absent from assignments is unassigned and notified they were removed, so read get_assignments_for_entity first and send the existing people back alongside the new one whenever the user said ADD rather than "only". Send user_id from list_team_members, not id: the backend looks the number up in the users table first and only falls back to treating it as an agent id, so an agent id that collides with an unrelated user id silently assigns the wrong person. Roles are per entity type and a role the entity does not use writes a row nothing reads: facility -> opener, closer, originator, processor, assigned, admin, team_lead; counterparty -> assigned, admin; lead -> owner, admin; submission -> assigned, owner, sent_by; task -> assigned; bank_statement -> owner, closer, admin; tax_return -> owner, admin; business_research -> assigned, admin; credit_memo -> prepared_by, reviewed_by, approved_by; credit_report -> owner; capital_source -> admin; fos_call_record -> assigned; fos_sms_record -> assigned. A TEAM is not a role: assign a team under the entity's normal role with type=team. business_research carries assignments too, but only get_assignments_for_entity can reach them: the write routes resolve entity_type through the RBAC resource map, which has no case for it, and answer 400 before the handler runs. Assigning notifies the people involved, so it is marked destructive.

set_assignments_for_records

ChatGPT
For non-merchant Specter broker/operator users only. Puts the SAME people on the SAME role across many records at once — "assign all the missing-docs deals to me", "give Yoni the whole Salesfloor queue". One call, one role, one assignee list, many record ids. Every caveat on set_assignments_for_entity applies here multiplied by the number of records: this REPLACES the role on each one, so anyone currently holding it on any of those records and absent from assignments is unassigned — SILENTLY, because unlike the single-record write this path sends no removal notice, so the people dropped never find out. There is no per-record exception — if the records have different people on them today, assign them one at a time instead. Send user_id from list_team_members, not id. Only facilities and leads support bulk assignment — every other entity type is rejected outright, so assign those one at a time. Roles are per entity type and a role the entity does not use writes a row nothing reads: facility -> opener, closer, originator, processor, assigned, admin, team_lead; counterparty -> assigned, admin; lead -> owner, admin; submission -> assigned, owner, sent_by; task -> assigned; bank_statement -> owner, closer, admin; tax_return -> owner, admin; business_research -> assigned, admin; credit_memo -> prepared_by, reviewed_by, approved_by; credit_report -> owner; capital_source -> admin; fos_call_record -> assigned; fos_sms_record -> assigned. A TEAM is not a role: assign a team under the entity's normal role with type=team. business_research carries assignments too, but only get_assignments_for_entity can reach them: the write routes resolve entity_type through the RBAC resource map, which has no case for it, and answer 400 before the handler runs. Notifies everyone newly assigned, once per bulk call rather than once per record. It is marked destructive for the removals it does not announce.

set_lead_status

ChatGPT
For non-merchant Specter broker/operator users only. Moves a lead to a new pipeline status — the usual write after a call, text or reply. Transitions are VALIDATED against the lead's current status, so not every target is reachable from where the lead is now: read the current status with get_lead first, and if the change is rejected say which status the lead is in rather than retrying. Pass notes to record why it moved. This writes live CRM/FOS data.

show_application_summary

ChatGPT
Renders a compact application or intake summary card from already retrieved data. Use after a data tool when a concise visual summary helps the user. This render-only tool does not call external systems or mutate data.

sign_in_to_specter

ChatGPT
Authenticates an existing Specter Systems user with email and password. Use only when the user explicitly asks to sign in and app-level OAuth is unavailable. This calls the live auth backend and may return a tenant-selection challenge; model-visible output redacts session tokens and secrets. It does not create, update, or delete CRM/FOS business records.

submit_public_financing_application

ChatGPT
Submits a completed public financing application for a merchant or broker. Use only after the applicant reviews the answers and consents to submit them to Specter Systems. This creates or updates live intake/application records and may trigger downstream intake automation. Do not collect or submit SSNs, payment card data, health data, or unrelated personal data.

transition_application_stage

ChatGPT
Transitions an authenticated facility/application to a lifecycle stage accepted by the FOS workflow. Use only when the user explicitly asks to move an application stage. Backend lifecycle gates, tenant isolation, permission checks, notifications, and audit history apply.

update_bank_statement

ChatGPT
Updates narrow bank statement header fields visible to the authenticated user. Use only when the user explicitly asks to correct statement metadata such as its name, status, or Drive folder URL. Do not use to submit raw financial account credentials or card data.

update_bank_statement_period

ChatGPT
Updates narrow period-level bank statement analysis fields visible to the authenticated user. Use only when the user explicitly asks to correct extracted period metrics. Do not collect full account credentials, card data, or unrelated sensitive data.

update_facility

ChatGPT
Updates fields on one authenticated facility/application — most commonly its STATUS (a tenant-defined deal status slug such as closed_follow_up; list them with list_fos_setup_deal_statuses), plus notes, follow-up notes, priority, or assigned agent. Use this for status/group moves like "move to closed follow up" — those are statuses, NOT lifecycle stages (transition_application_stage only handles intake/underwriting/decision/funding/servicing/outcome). Backend tenant isolation, permission checks, and audit history apply.

update_fos_setup_deal_status

ChatGPT
Tenant-admin-only setup helper. Updates a deal/facility status definition by stable value in the authenticated tenant. List statuses first unless the exact value is already known from the setup API.

update_fos_setup_group

ChatGPT
Tenant-admin-only setup helper. Updates a manual group for Deals, Leads, or Merchants by ID, scoped to the authenticated tenant and entity type. List groups first unless the exact group_id is already known from the setup API.

update_lead

ChatGPT
For non-merchant Specter broker/operator users only. Edits a lead's contact and business details — the same fields a person edits in the lead record. Only the fields you pass are changed; omit everything else and it keeps its current value. Call get_lead first so you are not overwriting something someone entered. Two fields are deliberately not editable here: status is validated as a pipeline transition, so use set_lead_status; and the lead's free-text notes are never shown to you, so writing them here would replace text you cannot read — use add_note, which appends a separate note rather than overwriting the field. This writes live CRM/FOS data.

update_lender_submission

ChatGPT
Updates narrow fields on a lender submission visible to the authenticated user, such as lender response, contact, requested terms, offered terms, and approved terms. Use only after the user asks to change those submission details. Backend permissions, tenant isolation, validation, and audit/event handling still apply.

update_lender_submission_status

ChatGPT
Transitions an authenticated lender submission to a new workflow status. Use only when the user explicitly asks to update status. This may trigger notifications or downstream workflow behavior, so it is marked destructive.

update_tax_return

ChatGPT
Updates narrow tax return header fields visible to the authenticated user, such as name, status, folder URL, and profitability summary. Use only when the user explicitly asks to correct tax return metadata.

update_tax_return_year

ChatGPT
Updates narrow year-level tax return analysis fields visible to the authenticated user. Use only when the user explicitly asks to correct extracted tax-year metrics. Do not collect or submit SSNs through this tool.

update_workflow_draft

ChatGPT
Updates an existing Workflow V3 definition for the authenticated tenant. Use when the user approves changes to a draft or wants to repair validation errors. Validate the updated graph before publish. Backend tenant permissions and validation still apply.

upload_application_document

ChatGPT
For non-merchant Specter broker/operator users only. Merchant applicant accounts must not use this tool; they are limited by backend enforcement to signed-form submission, public document upload, and merchant-portal/applicant-facing updates. Uploads a ChatGPT-supplied bank statement or supporting document to an authenticated Specter facility/application. Use immediately after create_application_facility when the applicant attached files in chat. This stores the file in Specter, attaches it to the facility files list, creates a document link, and starts document preprocessing when possible. Do not say files are attached unless this tool succeeds for the supplied files.

upload_public_bank_statement

ChatGPT
Uploads a bank statement or supporting document to a specific public signed-form submission field. Use only when the applicant has supplied a file for their application. This writes the file to live Specter storage and can replace the file association for that form field depending on backend rules.

validate_public_financing_application

ChatGPT
Validates a public merchant or broker application before final submission. Use after collecting answers from the signed form. The applicant_data object must contain only fields from the fetched form schema; do not request SSNs, card data, health data, or unrelated personal data.

validate_workflow_draft

ChatGPT
Validates a proposed Workflow V3 graph without saving or publishing it. Use after drafting or modifying a workflow and before create, update, publish, or execution. Inputs must use registered triggers, node types, handles, and config schemas from the workflow catalog.

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

App Stats

145

Tools

1

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily