MCP App Store
by KeenEthics

Overview

Spend less time managing your finances and more time building your company. QuickStart brings your accounting, banking, subscriptions, SaaS metrics, and reporting into ChatGPT so you can understand what’s happening in your business, get answers from your financial data, and take action without jumping between tools. Built for early-stage tech startups, with a path to NetSuite as you grow.

Tools

configure_report

ChatGPT
After report_catalog selects an accessible report and describe_report identifies supported configuration ids, set or remove a comparison control, apply requested filters, layout additions, and sorts to create temporary state for executing the selected report. - Setting a comparison adds it when absent or changes it when present. - A successful call applies only the changes explicitly included in the request; omitted settings remain at the report defaults. - Include every supported filter, control, layout addition, and sort needed for the user's requested scope in the same call. - If you filter or exclude report values while calculating the answer, do not claim those changes are saved in the report or represented by its link. - Match each explicit temporal value to its describe_report type: date uses date; dateRange uses startDate and endDate; period uses periodId; periodRange uses startPeriodId and endPeriodId. Never use date fields for a period type or period fields for a date type. - When an accounting-period lookup returns both fiscal-year and individual-period values, use the final leaf accounting period for a year-end or as-of-year-end request on a period filter. For another as-of request, use the leaf period containing the requested date. Continue to use fiscal-year values for periodRange filters. This does not prevent an explicitly requested Fiscal year aggregation or breakdown. - At least one configuration change is required. - The tool cannot explicitly remove filters or sorts, remove or reorder layout fields. - A time breakdown cannot retain or set timeframe comparison; remove comparison in the same configuration when needed. - Use the original reportId and returned stateId for immediate execution with run_report. - stateId is an opaque identifier for temporary report configuration accepted by run_report together with reportId. - navigationHref is the personalized report link. - Never claim that it applied unsupported changes.

create_record

ChatGPT
Creates one allowlisted record. Use get_record_model before calling. Only record types with creatable=true can be created. Use only fields and subrecords whose writeOperations includes create and writable sublists. A subrecord value is an object containing fieldValues and/or sublistValues. Apply sublist lines use the advertised templateKey target plus optional fieldValues. Obtain exact apply candidate keys from get_record_apply_candidates using the same body field configuration, then copy a returned templateKey unchanged. For relationship fields, pass {"id": ...} when identifierType=id and {"uniqueKey": {...}} when identifierType=uniqueKey.

delete_record

ChatGPT
Deletes one allowlisted record. Use get_record_model before calling. Only record types with deletable=true can be deleted. Use the exact record id. Require user confirmation before calling this tool.

describe_report

ChatGPT
Use this tool to inspect the structure and available configuration options of one exact report identified by a reportId returned by report_catalog. - It describes the report definition, not its data or results, and does not run or modify the report. - Contents show the current layout. - Available layout shows addable fields, their current placements, and additional placements. Additions preserve existing items. - Filters, sorts, and controls list the configuration options found for the report. - When nextPageToken is returned, call this tool again with that exact pageToken and without reportId. Continue until every requested scope requirement has been found or no page token remains. Follow all pages for an exhaustive description. - Do not infer active filters, active sorts, default values, or fixed configuration. - Returned identifiers and serialized values are inputs for report configuration calls. nextPageToken is an opaque continuation token accepted by this tool's pageToken argument. - Lookup-capable filters provide the exact filter ids and lookup kinds accepted by report_filter_values; never guess selectable values.

discover_preferences

ChatGPT
Authoritative read-only discovery tool for supported QuickStart preferences. Use this to list supported preference keys, check whether a preference is supported, or return detailed metadata for one supported preference. This tool does not apply or persist preference updates. Catalog key values identify preferences in subsequent tool calls through the preferenceKey argument. The label field contains the preference's display name. Without preferenceKey it returns the supported preferences catalog. With preferenceKey it returns detailed metadata for one supported preference. Set includePossibleValues to true with a supported record-reference preference to return a bounded authoritative list of safe display values. If a preference is not returned by this tool, treat it as unsupported by the QuickStart preferences catalog.

dismiss_notification

ChatGPT
Dismiss QuickStart notifications for the current user. Provide either notificationId or notificationIds using exact IDs from notifications. Each ID is processed independently; results identify failures. Other recipients are unaffected. Requires modification access. Require user confirmation before calling this tool.

execute_record_action

ChatGPT
Synchronously executes one explicitly allowlisted action on one record. Use get_record_model before calling and use the exact action and parameter ids and value shapes declared there. Only actions listed for that record type can be executed. Use read_record and inspect availableActions to find action ids currently available for that record instance and current user. Availability is checked again when executing.

execute_record_transform

ChatGPT
Transforms one source record into a new target record through an explicitly allowlisted platform transform. Use get_record_model with sourceRecordType first and use the exact transform id and override fields declared there. A declared body subrecord accepts {"delete": true} to remove it or an object containing fieldValues with its declared scalar fields. Each transform sublist is an array of line envelopes using the advertised lineTarget inputField plus fieldValues. On apply sublists, templateKey selects a candidate and fieldValues is optional. Obtain exact apply candidate keys from get_record_apply_candidates using the same source and body overrides, then copy a returned templateKey unchanged. Omit an optional line target to append a line. Existing unmentioned lines are retained. Returns targetRecordType and targetId. Use read_record with those values as recordType and id to read the saved record.

get_record_apply_candidates

ChatGPT
Returns exact selectable template keys and exposed business fields for one apply sublist without saving a record. Supply the intended record body configuration but omit the apply sublist itself. For a new record, use recordType and create-writable fieldValues. For an existing record, also use id and update-writable fieldValues. For a transform target, also supply sourceRecordType, sourceId, and transformId, and use only that transform's body overrides. Copy a returned templateKey unchanged into the corresponding create_record, update_record, or execute_record_transform apply-sublist line. Candidates marked applied are already selected by the current configuration.

get_record_model

ChatGPT
Discovers exposed record types and their field definitions. Call without recordType to list record type ids, labels, and descriptions. Then call again with an exact recordType id to inspect its identity, fields, scalar types, allowed values, filter operators, sorting fields, write and attachment capabilities, supported file extensions, references, sublists, actions, and currently available transforms. Apply-sublist reads contain applied lines; use get_record_apply_candidates with an intended record configuration to enumerate selectable candidates and obtain exact template keys.

list_record_attachments

ChatGPT
Lists an offset page of attachment metadata and persistent lineId values for one record whose model has fileAttachable=true. Use a returned lineId with set_record_attachment for replace, updateDescription, or delete. Each attachment includes an absolute downloadUrl for its persisted content, or null if content is unavailable. Open downloadUrl verbatim using an authenticated QuickStart session; the endpoint enforces file permissions. File bytes and storage handles are not returned. The result's totalCount is the number of attachments before paging.

list_records

ChatGPT
Lists an offset page of records for one exposed record type. limit must be an integer from 1 to 50 (default 20); larger limits are rejected. To retrieve more records, make additional calls using the returned nextOffset as offset until nextOffset is null. Use get_record_model before choosing recordType. Use get_record_model with recordType before adding a filter or sort; that model lists each filterable/sortable identity and field type, filterOperators, and filterOperatorDefinitions. Pass filter as a JSON object, not a JSON-encoded string; for example {"operator":"and","filters":[{"field":"id","operator":"eq","value":123}]}. When filtering, use a boolean filter group with operator and filters. Group operators are and and or. Choose each predicate operator from the chosen field's filterOperators. Pass sort as a JSON array of objects, not JSON-encoded strings; for example [{"field":"transactionDate","direction":"desc"},{"field":"amount","direction":"asc"}]. Sort order is left-to-right by field and direction. The result's totalCount is the number of records matching the filter before paging. Operator details: eq: Exact equality. Matches records where the field value equals filter.value. Supported scalar types: ID, STRING, LONG, INTEGER, DECIMAL, BOOLEAN, DATE, DATETIME. Use the scalar format required by the field type. For STRING fields with allowedValues, prefer an allowedValues[].value. Predicate example: {"field":"accountType","operator":"eq","value":"CredCard"}. contains: Case-insensitive substring match. Matches STRING fields containing filter.value anywhere in the text. Supported scalar types: STRING. Use a plain text fragment. Wildcard characters %, _, and \ are treated as literal input. Predicate example: {"field":"memo","operator":"contains","value":"fee"}. startsWith: Case-insensitive prefix match. Matches STRING fields beginning with filter.value. Supported scalar types: STRING. Use a plain text prefix. Wildcard characters %, _, and \ are treated as literal input. Predicate example: {"field":"displayName","operator":"startsWith","value":"Bank"}. gte: Inclusive lower-bound comparison. Matches records where the field value is greater than or equal to filter.value. Supported scalar types: ID, LONG, INTEGER, DECIMAL, DATE, DATETIME. Use only ordered scalar types. ID, LONG, and INTEGER use integer numbers or integer strings; DECIMAL uses a number or decimal string; DATE uses yyyy-MM-dd; DATETIME uses an ISO-8601 timestamp. Predicate example: {"field":"amount","operator":"gte","value":100}. lte: Inclusive upper-bound comparison. Matches records where the field value is less than or equal to filter.value. Supported scalar types: ID, LONG, INTEGER, DECIMAL, DATE, DATETIME. Use only ordered scalar types. ID, LONG, and INTEGER use integer numbers or integer strings; DECIMAL uses a number or decimal string; DATE uses yyyy-MM-dd; DATETIME uses an ISO-8601 timestamp. Predicate example: {"field":"transactionDate","operator":"lte","value":"2026-05-19"}.

navigation_targets

ChatGPT
Return accessible QuickStart pages, records, transactions, reports, lists, and setup destinations. Use matching destinations only; never invent a destination or URL. Follow returned navigation hints when provided. Copy returned hrefs exactly into markdown links. For href templates, replace only the supplied {name} placeholders with known path parameter values. Ask for missing required values. For absolute URL templates, URL-encode values as path segments and omit unused optional segments. Never output unresolved placeholders. Do not change the URL origin or prepend a base URL.

notifications

ChatGPT
Read the current user's active QuickStart notifications and their exact click-through links. Does not mark notifications as seen, read, or done.

read_preferences

ChatGPT
Authoritative read-only tool for the current value of one supported QuickStart preference. Provide one supported preference key from the schema. Use discover_preferences first if you need to inspect the supported catalog. If a preference is not supported by the shared QuickStart preferences catalog, treat it as unsupported.

read_record

ChatGPT
Reads one exposed record, including body subrecords, by exact recordType id and record id. Subrecord values are null when absent or recursive objects containing fieldValues and, when declared, sublists descriptors. Read their lines with read_record_sublist using the descriptor's sublistId and parentPath together with the same recordType and record id. availableActions lists exposed action ids currently available for this record instance. Use get_record_model for action metadata. Use get_record_model to discover recordType ids and inspect the identity field before calling.

read_record_sublist

ChatGPT
Reads an offset page of lines from one declared sublist on one exposed record. Use get_record_model before choosing recordType and sublistId; the model lists sublists[].id, line identity, exposed line fields, and line subrecords. For nested sublists, copy sublistId and parentPath from a returned sublists descriptor. Subrecord fields are included, but their sublists are returned as descriptors for separate page reads. Follow nextOffset with the same parentPath and sublistId until it is null. For apply sublists, this reads applied lines only; use get_record_apply_candidates to enumerate selectable candidate lines and obtain their exact template keys before writing. Use read_record when only body fields are needed.

report_catalog

ChatGPT
Use this tool to find, choose, or recommend reports accessible to the current session. - Search by report name and description. Use "all reports" as the query to list all accessible reports. - Use the available name and description to determine each report's purpose. - Treat each result's format as selection metadata. If the user explicitly requests a table or pivot, choose only a result with that format; otherwise do not prefer or reject a report based on format. - Copy returned navigationHref values exactly. - reportId is an opaque identifier for subsequent report tool calls; name contains the report's display name. - nextAfterReportId is a continuation cursor passed as afterReportId with the same query to retrieve the next page. - When searching to choose, recommend, or execute a report, follow nextAfterReportId until you have inspected all matching pages. - When presenting a catalog listing, include reports from only one returned page and never combine pages. - When that listing page has nextAfterReportId, state that more matching reports are available. Display the next page with the same query only when the user requests it. - This tool discovers reports; it does not run them.

report_filter_values

ChatGPT
Use this tool after describe_report when a selected filter value requires an id, or when the user explicitly asks which values are available. - Do not call merely to list filters or when the requested literal value is supported directly by the described schema. - Use the exact reportId, filterId, and lookupKind returned by describe_report. Search only for values relevant to the user's request. - When the user explicitly requests values for every lookup-capable filter, call once per filter, summarize only the first page, and state when more values are available. - Continue with the returned nextOffset and unchanged inputs only when the user requests more values or a complete list. - Each value's id is the exact identifier accepted by configure_report; label contains its display name. - nextOffset is the offset for retrieving the next page of values with the same inputs.

run_report

ChatGPT
Execute bounded results from an accessible report. - For a new execution, pass the exact reportId from report_catalog. - For a personalized report, also pass the exact stateId returned by configure_report. - Omit stateId only when the user requested the report unchanged. - Every successful result returns the exact navigationHref for that execution. Use that navigationHref as the report link in the final answer; do not substitute a link from report_catalog or configure_report. - Report value semantics are strict: only an explicit zero value or zero amount returned in a measure or table cell is zero. A null value, missing measure, missing cell intersection, absent row or section, or empty result means no value was returned. Never display any of these as 0, and never use them as zero in a sum, difference, ratio, or reconciliation. If a requested value or required calculation operand is missing, state that the value or calculation is unavailable. Do not present even a hypothetical or conditional calculation that substitutes zero for a missing value. - A table cursor continues the same report result. Use it when additional rows are needed for the answer; no cursor means no more rows are accessible. - Table columns are returned on the initial page and apply to every continuation page. Each row array is positionally aligned with those columns. - A pivot cursor continues the same report result. Use it when additional cells are needed for the answer; no cursor means no more windows are accessible. - Pivot reports expose at most the first 50 row-major windows of up to 20 rows by 20 columns. - The definitions array is local to each window. Every row/column item and measure uses definitionIndex to reference an entry containing its definitionId and optional label. - Pivot rows and columns map global indices to complete ordered dimension paths; an axis can be empty. Each measure occurrence maps to a global rowIndex or columnIndex. Match each cell to the measure at its rowIndex or columnIndex; a missing cell at an expected intersection means that measure returned no value. - PivotCell.totalType is total or grandTotal and already combines the cell's row and column roles; an omitted totalType means an ordinary value. - Treat values identified as opening balances as brought-forward balances, not period activity. For period totals, activity, and rankings, use nonoverlapping transaction values; exclude opening balances and any totals that include them. Omitting an opening-balance value does not remove it from those totals. - For comparisons, use the matched measure's definitionId and label with its row and column paths to distinguish base, comparative, change, and percent-change values. Bind them to the configured base range and comparison; never infer a period from coordinate or order. - Report an explicitly returned Change or % change value even when its base or comparative value is missing, but do not treat the missing value as zero. Keep it unavailable and do not reconstruct it from the variance. - Copy returned percentage values exactly, including the percent sign. Never recompute a returned percent-change measure from the base and comparative amounts. - Never align a grandTotal cell with the first labeled bucket or recompute it from detail cells. - Only buckets present in the axis paths were returned by the report; never synthesize a requested period or category that is absent from the axis. - A result with truncated=true means more report data exists but the tool limit prevents another continuation. Do not claim that such a result is complete or exhaustive, and state that the returned data was limited. - A successful result with no relevant rows or cells means the report returned no data for its current scope; do not reinterpret it as a failure or infer a missing filter, selector, or personalization. If execution fails, do not claim the report ran or silently substitute data from another report, configured link, record tool, or model knowledge. Report-specific instructions: - Trial balance's Total measure contains signed ending bal…

send_record_email

ChatGPT
Sends one explicitly allowlisted email action on one record as the current user. Use get_record_model.emailActions and read_record.availableEmailActions to select actionId. Uses the company's configured email template and default recipients unless overridden. At least one To recipient is required. Sending has external effects; repeated calls can send duplicate emails. A successful result means the message was submitted for sending, not confirmed delivered.

set_preferences

ChatGPT
Sets a supported QuickStart preference. Use one of the supported preference keys from the schema and provide the target value. For record-based preferences, the target may be an exact record name or an object with an explicit internal id. The result confirms the change without exposing the previous or new value. Require user confirmation before calling this tool.

set_record_attachment

ChatGPT
Mutates one attachment on a record whose model has fileAttachable=true. append requires a validated TemporaryFile contentHandle and preserves every existing attachment. replace requires a lineId from list_record_attachments and a contentHandle; it replaces only that line's file content. updateDescription requires a lineId from list_record_attachments and a description and leaves file content unchanged. The operation is not safely retryable.

submit_contact_support_request

ChatGPT
Submits a QuickStart contact support request to the support team. Use when the user asks to report an issue, ask a question, or send feedback from QuickStart.

todo_list

ChatGPT
Read the current authenticated user's QuickStart todo list, including today's and upcoming open tasks, due dates, unread state, urgency badges, grouping, transaction details, and monetary values. Use this before answering questions about the user's todo-list state, priorities, overdue work, or upcoming work. Returned sections may be incomplete; check mayBeTruncated and returnedCount.

update_record

ChatGPT
Updates body fields and sublists on one allowlisted record. Use get_record_model before calling. Use the exact record id. Body fields, subrecords, and values on targeted sublist lines require writeOperations to include update. A subrecord value is {"delete": true} to remove it, or an object containing fieldValues and/or sublistValues. For sublists, use only an advertised updateModes value and the advertised lineTarget envelope. A templateKey alone selects a candidate on an apply sublist; fieldValues is optional for that operation. Obtain exact apply candidate keys from get_record_apply_candidates using the same existing record and body configuration, then copy a returned templateKey unchanged. For apply sublists, replace retains the listed applied lines and unapplies omitted lines; an empty replacement unapplies all lines. When lineTarget.required is false, omit its inputField to append a line using fields whose writeOperations includes create. For relationship fields, pass {"id": ...} when identifierType=id and {"uniqueKey": {...}} when identifierType=uniqueKey. Require user confirmation before calling this tool.

upload_temporary_file

ChatGPT
Uploads file content to secure temporary attachment storage and returns a contentHandle. Use get_record_model first; recordType must have fileAttachable=true. Pass fileBytes as standard base64, then pass the returned contentHandle to set_record_attachment. This operation does not attach the file to a record and is not safely retryable.

configure_report

Claude

create_record

Claude

delete_record

Claude

describe_report

Claude

discover_preferences

Claude

execute_record_action

Claude

execute_record_transform

Claude

get_record_apply_candidates

Claude

get_record_model

Claude

list_record_attachments

Claude

list_records

Claude

notifications

Claude

read_preferences

Claude

read_record

Claude

read_record_sublist

Claude

report_catalog

Claude

report_filter_values

Claude

run_report

Claude

set_preferences

Claude

set_record_attachment

Claude

submit_contact_support_request

Claude

todo_list

Claude

update_record

Claude

upload_temporary_file

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps