Developers / MCP
Folio and Kit MCP server
Connect Claude, ChatGPT, Notion and other MCP clients to a creator’s Folio and Kit account: endpoint, OAuth sign-in, limits and the full tool reference.
Overview
Folio and Kit runs a remote Model Context Protocol server. Any MCP client can use it to read a creator's deals, contracts, invoices, media kit, rate cards and Folio Value, and to act on them — create a deal, draft a contract or invoice, send it to a brand — on the creator's behalf, after they sign in and approve access.
https://www.folioandkit.com/mcpEvery tool is limited to what the creator's plan already includes in the app, and connecting doesn't cost anything extra. Amounts are in GBP.
Quick start
Claude
- Open Settings → Connectors and choose Add custom connector.
- Name it “Folio and Kit” and paste
https://www.folioandkit.com/mcp. - Select Connect, sign in to Folio and Kit and approve access.
- Enable the connector in a conversation and ask, for example, “What deals do I have in negotiation?”
ChatGPT
- Turn on Developer mode in ChatGPT's settings (under apps and connectors).
- Create a connector with the URL
https://www.folioandkit.com/mcpand OAuth authentication. - Sign in to Folio and Kit when prompted, then use the connector in a chat.
Notion Custom Agents
- A workspace owner allows custom MCP servers in Settings → Notion AI.
- In the agent's Tools & Access, add a custom MCP connection with
https://www.folioandkit.com/mcp. - Sign in to Folio and Kit, then choose which tools the agent may run automatically.
Other clients and testing
Any client that supports remote MCP servers with OAuth works. To explore the server by hand, use the MCP Inspector, pick Streamable HTTP, enter the server URL and connect:
npx @modelcontextprotocol/inspectorMenu names in each assistant change over time — if a step doesn't match, look for “connectors” or “MCP” in its settings.
Authentication
The server uses OAuth 2.1 with PKCE, following the MCP authorization spec. Clients discover everything from the server — there are no API keys to create.
- A request without a valid token gets
401with aWWW-Authenticateheader whoseresource_metadatapoints tohttps://www.folioandkit.com/.well-known/oauth-protected-resource/mcp. - That document (RFC 9728) names the authorization server, which is Folio and Kit's sign-in provider. Its metadata (RFC 8414) is also mirrored at
https://www.folioandkit.com/.well-known/oauth-authorization-server. - The client identifies itself with a Client ID Metadata Document or registers with Dynamic Client Registration.
- The creator signs in and approves access on the consent screen; the client receives an access token.
- Send it on every request as
Authorization: Bearer <token>.
A token acts as the one creator who approved it, with their plan. Creators can disconnect at any time in their assistant's settings, or ask us to revoke access at support@folioandkit.com.
Transport and protocol
- Streamable HTTP at
/mcp(POST for requests; GET and DELETE per the transport spec). - The protocol version is negotiated at initialisation; revisions from 2025-06-18 onwards are supported.
- Server name
folio-and-kit. The server sends instructions describing the product to the model. - Capabilities: tools. Every tool has a
titleandreadOnlyHint,destructiveHintandopenWorldHintannotations.
Plans, limits and errors
Tools follow the creator's plan exactly as the app does. Free accounts can use the rate calculator, up to 2 deals, one media kit and Folio Value; paid features and higher limits come with Creator and Pro — see pricing. The plan badge on each tool below shows which plans can run it; usage limits (for example active deals, contracts or invoices) apply on top.
Expected problems come back as a normal tool result with isError: true and a plain-language message written to be shown to the creator as it is, for example:
Rate Intelligence is available on the Creator or Pro plan. Manage your plan at folioandkit.com/pricing.The same applies to missing or ambiguous records (the message lists the matches and the id to pass), invalid arguments and usage limits.
Each account can make 120 tool calls per minute. Over that, calls return:
Too many requests: Folio and Kit allows 120 tool calls per minute per account. Wait a minute, then try again.Tool results
Every tool returns a text summary for the model. Most also return structuredContent with the same data as JSON, including record ids (dealId, contractId, invoiceId, …).
Tools that act on an existing record accept a brand or client name. If a name matches more than one record, the error lists them with their ids — call the tool again with the id. Fields ending in Pence are in pence; …Gbp fields are in pounds.
Actions that need confirmation
Tools that email a brand or client, or publish the creator's media kit, are marked destructiveHint: true and openWorldHint: true. Deleting, voiding and merging are marked destructive too. MCP clients use these hints to ask the user before running the tool; the server itself does not add a second confirmation.
If you build your own client, ask the creator before calling any tool marked Sends / publishes below, and show them what will be sent and to whom.
Interactive widgets
In clients that support MCP Apps (Claude and ChatGPT among them), some tools also show an interactive card in the conversation. Clients without MCP Apps get the same text result as before, so nothing depends on the widget.
- Rate estimate — Suggested price range for a brand deal, and whether a deal’s rate is fair. Shown for
calculate_rate,get_rate_intelligence. Resourceui://folio/rates. - Money overview — Folio Value and Index, earnings, and invoice status. Shown for
get_folio_value_index,get_earnings_summary,list_invoices,get_invoice. Resourceui://folio/money. - Media kit preview — A preview of the creator’s public media kit with its share link. Shown for
get_media_kit. Resourceui://folio/media-kit. - Deal pipeline — Brand deals grouped by stage, with deliverables and next steps. Shown for
list_deals,get_deal. Resourceui://folio/deals.
Widgets are self-contained HTML (MIME type text/html;profile=mcp-app) and load nothing from other origins, so they need no CSP domains. Their buttons only do things that stay inside the creator's account — re-running a rate estimate, moving a deal to its next stage, ticking off a deliverable. Anything that emails a brand or publishes is still a chat request, where the client's confirmation applies.
Tool reference
72 tools, grouped by area. Open a tool to see its parameters. This list is generated from the server's own tool definitions.
Deals (8)
create_dealCreate dealWriteAll plans
Create a new brand deal in the creator's deal tracker. Only call this when the user is clearly asking to create/add/log a deal. Never invent a brand name — if it's missing, ask the user for it in plain text instead of calling this tool.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand or company name. Required. |
| platforms | object[] | Which platforms this deal covers, only if mentioned, e.g. [{"platform":"Instagram","contentType":"Reel","quantity":2},{"platform":"TikTok","contentType":"Story","quantity":1}]. A deal can span multiple platforms. |
| dealValue | number | The deal value in GBP, as a plain number — only if mentioned. |
| notes | string | Any other relevant detail the user mentioned. |
| contactName | string | Brand contact name, only if mentioned. |
| contactEmail | string | Brand contact email, only if mentioned. |
update_deal_stageMove deal to a stageWriteAll plans
Move an existing deal to a new pipeline stage (e.g. mark it as won, negotiating, etc). The deal must already exist — never use this to create one.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which brand's deal to update. Required. |
| stagerequired | string (enum) | The new stage.outreach · negotiating · contract_sent · live · completed |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
archive_dealArchive dealWriteAll plans
Archive an existing deal (hides it from the active pipeline; reversible, not a delete).
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which brand's deal to archive. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
update_dealUpdate dealWriteAll plans
Update one or more fields on an existing deal (contact details, platform, content type, value, deadlines, notes). Only include fields the user actually mentioned changing.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which brand's deal to update. Required. |
| brandWebsite | string | New brand website, only if mentioned. |
| contactName | string | New contact name, only if mentioned. |
| contactEmail | string | New contact email, only if mentioned. |
| platforms | object[] | Replaces the deal's full platform/deliverable list, only if the user described new or changed platforms — e.g. [{"platform":"Instagram","contentType":"Reel","quantity":2}]. Omit entirely to leave platforms unchanged. |
| dealValue | number | New deal value in GBP, only if mentioned. |
| contentDeadline | string | New content deadline (YYYY-MM-DD), only if mentioned. |
| paymentDueDate | string | New payment due date (YYYY-MM-DD), only if mentioned. |
| notes | string | New/updated notes, only if mentioned. |
| campaignBrief | string | New campaign brief text, only if mentioned. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
list_dealsList dealsReadAll plans
List the creator's brand deals — optionally filtered by pipeline stage. Use when the user asks what deals they have, which brands they're working with, what's in their pipeline, or anything about deal status or deadlines.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| stage | string (enum) | Filter by stage — only set this if the user's current message names a stage. Omit to return all active deals.outreach · negotiating · contract_sent · live · completed |
get_dealGet deal detailsReadAll plans
Get full details of a specific deal — stage, value, platforms, deadlines, contact, brief, notes, linked contracts and invoices. Use when the user asks about a specific brand deal.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand name to look up. Give this or dealId. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
add_deliverableAdd deliverable to dealWriteAll plans
Add a deliverable (a piece of content the creator owes) to an existing deal's checklist, e.g. "1× Instagram Reel".
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which brand's deal to add the deliverable to. Required. |
| descriptionrequired | string | What the deliverable is, e.g. "Instagram Reel with product demo". |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
set_deliverable_doneMark deliverable done or not doneWriteAll plans
Mark a deal deliverable as done (or not done). Use get_deal first to find the deliverableId.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| deliverableIdrequired | string | The deliverableId from get_deal. |
| isCompletedrequired | boolean | true to mark done, false to mark not done. |
Deal analysis (AI) (8)
get_rate_intelligenceCheck if a deal rate is fairWriteCreator · Pro
Assess whether a specific deal's rate is fair — returns a below/at/above-market verdict, a suggested fair range, reasoning, and a counter-offer line if the rate is low. Use whenever the user asks if a deal's rate is good, fair, too low, or how it compares to the market. Requires Creator or Pro plan — a Free-plan user gets an upgrade message instead of a verdict.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name of the deal to assess. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
get_fit_scoreScore audience-brand fitWriteCreator · Pro
Score 1–10 how well a deal's brand fits the creator's audience and niche, with reasons and red flags. Saves the score to the deal.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name of the deal. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
draft_negotiation_emailDraft a negotiation emailWriteCreator · Pro
Write a negotiation email to a deal's brand contact and save it as a draft on the deal (nothing is sent). Types: counter_offer, scope_creep_pushback, follow_up_after_silence, kill_fee_request, content_feedback_pushback, firm_follow_up. Returns a draftId for send_deal_email.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name of the deal. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
| draftTyperequired | string (enum) | What the email should do.counter_offer · scope_creep_pushback · follow_up_after_silence · kill_fee_request · content_feedback_pushback · firm_follow_up |
analyse_briefAnalyse a campaign briefWritePro
Analyse the campaign brief saved on a deal: deliverables, scope-creep flags, questions to ask the brand and an estimated value. The deal must already have a brief (set one with update_deal's campaignBrief). Saves the analysis to the deal.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name of the deal. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
estimate_timeEstimate time for deliverablesWritePro
Estimate realistic hours for each content deliverable (research, filming, editing, revisions, posting) and in total. If a deal is named, the estimate is saved to that deal.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| deliverablesrequired | string[] | The deliverables to estimate, e.g. ["1× Instagram Reel with product demo", "3× Instagram Stories"]. |
| brandName | string | The deal to save the estimate to, only if the user named one. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
check_complianceCheck a caption for ad disclosureWritePro
Check a sponsored post caption for UK ASA/CAP ad-disclosure compliance (is the paid-partnership label present, visible before the fold, not buried in hashtags). If it fails, returns the issues and a compliant rewrite. Saves the check to the deal.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name of the deal. Required. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
| captionTextrequired | string | The full caption text to check. |
| platformrequired | string | Where it will be posted, e.g. "Instagram", "TikTok", "YouTube". |
| platformTagUsed | boolean | true if the creator will also switch on the platform's own paid-partnership tag. |
get_deal_insightsGet deal insightsWritePro
Find patterns across the creator's completed deals — payment speed, content performance, rate trends — plus a monthly revenue forecast. Needs at least 5 completed deals with a value. Saves the latest insights to the dashboard.
Asks before running: Usually (host decides)
No parameters.
send_deal_emailSend a negotiation email to the brandSends / publishesAll plans
Email a saved negotiation draft (draftId from draft_negotiation_email) to the deal's brand contact, from the creator. Optionally override the subject or body. This sends a real email to someone outside the creator's account — show the creator the final text first.
Asks before running: Yes — reaches someone outside your account
| Parameter | Type | Description |
|---|---|---|
| draftIdrequired | string | The draftId returned by draft_negotiation_email. |
| subject | string | Replacement subject line, only if the creator edited it. |
| body | string | Replacement email body, only if the creator edited it. |
Brands (2)
list_brandsList brandsReadAll plans
List the brands the creator has worked with, each with its known name variants (aliases) and deal count. Use to spot duplicates like "Gymshark" and "Gymshark Ltd" before merge_brands.
Asks before running: No (read-only)
No parameters.
merge_brandsMerge duplicate brandsWriteAll plans
Merge one brand into another when they are the same company: every deal moves to the kept brand, its names become aliases, and the merged brand is deleted. Cannot be undone. Get both brandIds from list_brands.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| keepBrandIdrequired | string | brandId of the brand to keep. |
| mergeBrandIdrequired | string | brandId of the duplicate to merge into it and delete. |
Contracts (7)
create_contractDraft contractWriteAll plans
Draft a new contract for a brand deal. Only call this when the user clearly wants a contract drafted, with at minimum the deliverables, fee, payment terms, and usage rights they described — ask in plain text for anything essential that's missing rather than guessing.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand name. Required. |
| brandAddress | string | Brand address, only if mentioned. |
| brandContactName | string | Brand contact name, only if mentioned. |
| brandContactEmail | string | Brand contact email, only if mentioned. |
| deliverablesrequired | object[] | What the creator will deliver, e.g. [{"description":"Instagram Reel","quantity":2}]. Required. |
| totalFeerequired | number | Total fee in GBP. Required. |
| paymentStructurerequired | string | e.g. "100% on completion", "50/50 split". Required. |
| paymentTermsrequired | string | e.g. "30 days". Required. |
| usageRightsrequired | string | e.g. "Organic social only". Required. |
| usageRightsDuration | string | Numeric value only, e.g. "12". Only if mentioned. |
| usageRightsDurationUnit | string (enum) | Unit for usageRightsDuration. Required if usageRightsDuration is set.months · weeks · campaign |
| exclusivity | string | Only if mentioned. |
| exclusivityPeriod | string | Only if mentioned. |
send_contract_for_signatureSend contract for signatureSends / publishesAll plans
Email an existing draft contract to the brand for review and signature.
Asks before running: Yes — reaches someone outside your account
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which brand's contract to send. Required. |
| contractNumber | string | The exact contract number, only if the brand name matches more than one contract. |
list_contractsList contractsReadAll plans
List the creator's drafted contracts — optionally filtered by status. Use when the user asks about contracts, which are signed, which are pending, etc.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| status | string (enum) | Filter by contract status — only set this if the user's current message names a status. Omit to return all contracts.draft · sent · signed · expired |
get_contractGet contract detailsReadAll plans
Get full details of a specific contract — deliverables, fee, payment terms, usage rights, exclusivity, status. Use when the user asks about a specific contract's terms. If the user gives a contract number (e.g. "CON-2026-7216"), use contractNumber — it resolves exactly, unlike brandName which can match several contracts for the same brand.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand name on the contract. Give this or contractNumber. |
| contractNumber | string | The exact contract number, if the user mentioned one (e.g. "CON-2026-7216"). Preferred over brandName when available — it always resolves to exactly one contract. |
| contractId | string | The contractId from list_contracts/get_contract, only if the brand name matches more than one contract. |
get_contracts_by_brandContracts by brandReadAll plans
Return a breakdown of the creator's contracts grouped by brand as a pie chart — how many contracts per brand. Use when the user asks to see their contracts broken down, distributed, or visualized by brand (e.g. "pie chart of contracts by brand", "which brands do I have the most contracts with").
Asks before running: No (read-only)
No parameters.
archive_contractArchive contractWriteAll plans
Archive a Folio-drafted contract: it is hidden from the active contracts list and stops counting toward the plan's contract limit. The record, its signatures and any linked invoice are kept (not a delete). Folio has no un-archive button today.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand name on the contract. Give this, contractNumber or contractId. |
| contractNumber | string | The exact contract number, e.g. "CON-2026-7216". Preferred when known. |
| contractId | string | The contract's id (contractId from list_contracts/get_contract), only if the brand name matches more than one contract. |
scan_contractScan drafted contract for red flagsWriteCreator · Pro
Run the Contract Red Flag Scanner on a contract drafted in Folio: flags risky or missing terms (payment, usage rights, exclusivity, revisions, kill fee) with a suggestion for each, and saves the result on the contract. Not legal advice. For contracts a brand sent the creator, use get_imported_contract instead.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand name on the contract. Give this, contractNumber or contractId. |
| contractNumber | string | The exact contract number, e.g. "CON-2026-7216". Preferred when known. |
| contractId | string | The contract's id (contractId from list_contracts/get_contract), only if the brand name matches more than one contract. |
Imported contracts (7)
list_imported_contractsList imported contractsReadAll plans
List contracts brands sent the creator that were uploaded to Folio for a red-flag scan — brand, file name, overall risk and number of open flags. Contracts drafted in Folio are listed by list_contracts instead.
Asks before running: No (read-only)
No parameters.
get_imported_contractGet imported contract scanReadAll plans
Get the red-flag scan of an imported (brand-supplied) contract: overall risk, summary, each flag numbered with its risk and suggested fix, the extracted terms, and how it compares with the previous version if one was uploaded.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
update_imported_contract_brandUpdate imported contract brand detailsWriteAll plans
Correct the brand name and/or brand contact email on an imported contract (the email is where send_pushback_email sends to). Only include the fields the user wants changed.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
| newBrandName | string | The corrected brand name, only if the user gave one. |
| newBrandContactEmail | string | The corrected brand contact email, only if the user gave one. |
set_contract_flag_dismissedDismiss or restore a contract flagWriteAll plans
Mark one red flag on an imported contract as dismissed (the creator accepts the risk, so it is left out of pushback emails) or restore it. Use get_imported_contract first to find the flagNumber.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
| flagNumberrequired | integer | The flag's number as listed by get_imported_contract (1 = first). |
| dismissedrequired | boolean | true to dismiss the flag, false to restore it. |
delete_imported_contractDelete imported contractWriteAll plans
Permanently delete an imported contract: the uploaded file, its scan and flags. This cannot be undone. Frees an imported-contract slot.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
draft_pushback_emailDraft pushback emailReadCreator · Pro
Draft an email to the brand raising the open (not dismissed) red flags on an imported contract. Returns a subject and body for the creator to review; nothing is saved or sent. Send it with send_pushback_email once the creator is happy.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
send_pushback_emailSend pushback email to brandSends / publishesAll plans
Email the brand about an imported contract, from the creator (replies go to the creator's account email), and log it on the contract. Sends to the brand contact email stored on the imported contract. Only send text the creator has approved.
Asks before running: Yes — reaches someone outside your account
| Parameter | Type | Description |
|---|---|---|
| brandName | string | Brand name (or uploaded file name) of the imported contract. Give this or scanId. |
| scanId | string | The imported contract's scanId from list_imported_contracts, only if the brand name matches more than one. |
| subjectrequired | string | Email subject line. |
| bodyrequired | string | Email body text, as approved by the creator. |
Invoices (12)
create_invoiceCreate invoiceWriteAll plans
Create a draft invoice, typically for a deal that already exists. If the brand matches an existing deal, the client's name/email are filled in automatically. If there's no matching deal, a client email must be given.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand/client this invoice is for. Required. |
| descriptionrequired | string | What the invoice is for, e.g. "Instagram Reel campaign". Required. |
| amountrequired | number | The invoice amount in GBP. Required. |
| dueDaterequired | string | Due date (YYYY-MM-DD). Required. |
| toEmail | string | Client email — only needed if there's no existing deal with this brand. |
| toAddress | string | The client's postal address. Invoices need one — ask the user for it if it isn't known. |
| dealId | string | The deal's id (dealId from list_deals/get_deal), only if the brand name matches more than one deal. |
send_invoice_to_clientEmail invoice to clientSends / publishesAll plans
Email an existing invoice to the client.
Asks before running: Yes — reaches someone outside your account
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | Which client's invoice to send. Required. |
| invoiceNumber | string | The exact invoice number, only if the client name matches more than one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
list_invoicesList invoicesReadAll plans
List the creator's invoices — optionally filtered by status. Use when the user asks about invoices, what's outstanding, what's overdue, or who hasn't paid.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| status | string (enum) | Filter by invoice status — only set this if the user's current message names a status. Omit to return all invoices.draft · sent · viewed · overdue · paid · cancelled |
get_invoiceGet invoice detailsReadAll plans
Get full details of a specific invoice — amount, status, due date, line items, payment history. Use when the user asks about a specific invoice for a brand or client. If the user gives an invoice number (e.g. "INV-2026-0042"), use invoiceNumber — it resolves exactly, unlike brandName which can match several invoices for the same client.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand or client name on the invoice. Give this or invoiceNumber. |
| invoiceNumber | string | The exact invoice number, if the user mentioned one (e.g. "INV-2026-0042"). Preferred over brandName when available — it always resolves to exactly one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
get_earnings_summaryEarnings summaryReadAll plans
Return an aggregated financial snapshot: total earned (paid invoices), money outstanding (sent/overdue invoices), pipeline value (in-play deals), and completed deal count. Use when the user asks how much they've earned, what's outstanding, their pipeline value, or how they're tracking financially.
Asks before running: No (read-only)
No parameters.
issue_invoiceIssue invoiceWriteAll plans
Issue a draft invoice: assigns the next invoice number in the creator's series, sets the due date from their payment terms, and locks the invoice so it can no longer be edited (corrections then need a credit note). Does not email it — use send_invoice_to_client for that.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
record_paymentRecord invoice paymentWriteAll plans
Record a payment the creator has received against an issued invoice. Partial payments are fine; the invoice counts as paid once its payments add up to the total. Recording a second or later payment on the same invoice needs the Creator or Pro plan.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
| amountrequired | number | The amount received, in the invoice's currency (e.g. 250.50). Required. |
| paidAt | string | The date it was received (YYYY-MM-DD). Defaults to today. |
| method | string (enum) | How it was paid. Defaults to bank_transfer.bank_transfer · card · cash · other |
| reference | string | A payment reference, only if mentioned. |
void_invoiceVoid invoiceWriteAll plans
Void an issued invoice that has no payments recorded, cancelling it permanently (its number stays used). If payments have been recorded, issue a credit note instead.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
| reasonrequired | string | Why the invoice is being voided — kept on the invoice's record. Required. |
issue_credit_noteIssue credit noteWritePro
Issue a credit note that cancels an issued invoice in full (the correct way to fix an issued invoice, or one with payments recorded). Also creates a replacement draft invoice for the same client.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
archive_invoiceArchive invoiceWriteAll plans
Archive an invoice: hides it from the active invoices list without changing its status or payment record.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
delete_draft_invoiceDelete draft invoiceWriteAll plans
Delete a draft (not yet issued) invoice. Issued invoices can't be deleted — void them or issue a credit note.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
draft_payment_chaserDraft payment chaser emailReadPro
Draft a payment-chaser email for an overdue invoice, in a tone matched to how late it is. Returns a subject and body for the creator to review — nothing is saved or sent.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| brandName | string | The brand/client name on the invoice. Give this, invoiceNumber or invoiceId. |
| invoiceNumber | string | The exact invoice number (e.g. "INV-2026-0042"). Preferred over brandName when known — it always resolves to one invoice. |
| invoiceId | string | The invoiceId from list_invoices/get_invoice, only if the brand name matches more than one invoice. |
| chaserTyperequired | string (enum) | How overdue the invoice is: day7 (gentle nudge), day14 (polite, names the due date), day30 (firm), day60 (serious, mentions next steps).day7 · day14 · day30 · day60 |
Rates and past deals (9)
get_rate_cardsList rate cardsReadAll plans
List the creator's saved rate cards — platform, content type, label, and min/max rate range. Use when the user asks what they charge, or whether they have a rate card set up for a platform. This is their own price list, not a market comparison — use get_rate_intelligence instead when the user asks whether a specific deal's rate is fair, good, or below/above market.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| platform | string | Filter to a specific platform (e.g. Instagram, TikTok) — only set this if the user's current message names a platform. Omit to return all rate cards. |
calculate_rateCalculate a rateReadAll plans
Estimate what the creator should charge a brand for a piece of sponsored content, using Folio's rate calculator (the same one as the Rate Card screen). Returns a suggested range, a confidence level and a breakdown. If the creator has logged a matching past deal, the minimum is never below what they were actually paid. Nothing is saved — use create_rate_card to save a result.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string (enum) | The platform the content is for. UGC means content the brand posts itself.Instagram · TikTok · YouTube · Twitter/X · LinkedIn · UGC · Other |
| deliverableType | string | Content type, exactly as listed for the platform — Instagram: Feed post, Story, Reel / Short; TikTok: TikTok; YouTube: YouTube video, YouTube Short; Twitter/X: Sponsored tweet; LinkedIn: LinkedIn post; UGC: Product Video, Video Ad, Unboxing, Testimonial/Review, Tutorial, Product Photo, Photo Ad, Blog; Other: Other. Omit to use the platform's first option. |
| followers | integer | Follower count on that platform. Needed for every platform except UGC. |
| engagementRate | number | Engagement rate as a percentage, e.g. 3.5. Defaults to 3. |
| niche | string (enum) | Content niche. Defaults to "other".financeB2B · tech · beauty · fashion · fitness · travel · parenting · food · entertainment · other |
| market | string (enum) | UK (£) or IN (India, ₹). Defaults to UK.UK · IN |
| deliverableCount | integer | How many of that deliverable in the bundle. Defaults to 1. |
| usageRights | boolean | Brand can use the content in paid ads. |
| exclusivity | string (enum) | Exclusivity period the brand wants. Defaults to none.none · 30_days · 60_days · 90_days |
| repurposing | boolean | Brand can repurpose the content across channels. |
| includesPhotos | boolean | UGC video formats only: bundle product photos with the video. |
| rawFootageRights | boolean | UGC video formats only: brand gets the unedited source footage. |
create_rate_cardSave a rate cardWriteAll plans
Run the rate calculator and save the result as a new entry on the creator's Rate Card (their saved price list, also used by their media kit and deal checks). Rates always come from the calculator — there is no way to type a price in directly.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string (enum) | The platform the content is for.Instagram · TikTok · YouTube · Twitter/X · LinkedIn · UGC · Other |
| deliverableType | string | Content type, exactly as listed for the platform — Instagram: Feed post, Story, Reel / Short; TikTok: TikTok; YouTube: YouTube video, YouTube Short; Twitter/X: Sponsored tweet; LinkedIn: LinkedIn post; UGC: Product Video, Video Ad, Unboxing, Testimonial/Review, Tutorial, Product Photo, Photo Ad, Blog; Other: Other. Omit to use the platform's first option. |
| followers | integer | Follower count on that platform. Needed for every platform except UGC. |
| engagementRate | number | Engagement rate as a percentage, e.g. 3.5. Defaults to 3. |
| niche | string (enum) | Content niche. Defaults to "other".financeB2B · tech · beauty · fashion · fitness · travel · parenting · food · entertainment · other |
| market | string (enum) | UK (£) or IN (India, ₹). Defaults to UK.UK · IN |
| deliverableCount | integer | How many of that deliverable in the bundle. Defaults to 1. |
| usageRights | boolean | Brand can use the content in paid ads. |
| exclusivity | string (enum) | Exclusivity period the brand wants. Defaults to none.none · 30_days · 60_days · 90_days |
| repurposing | boolean | Brand can repurpose the content across channels. |
| includesPhotos | boolean | UGC video formats only: bundle product photos with the video. |
| rawFootageRights | boolean | UGC video formats only: brand gets the unedited source footage. |
| label | string | Optional name to tell apart cards with the same platform and content type, e.g. "Agency rate". |
update_rate_cardUpdate a rate cardWriteAll plans
Change the inputs of a saved rate card and recalculate its range, as editing it on the Rate Card screen does. Only include the fields that change; everything else keeps the card's saved values. Changing the platform resets the content type to that platform's first option unless one is given.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| rateCardIdrequired | string | The rateCardId from get_rate_cards. |
| platform | string (enum) | New platform, only if it changes.Instagram · TikTok · YouTube · Twitter/X · LinkedIn · UGC · Other |
| deliverableType | string | Content type, exactly as listed for the platform — Instagram: Feed post, Story, Reel / Short; TikTok: TikTok; YouTube: YouTube video, YouTube Short; Twitter/X: Sponsored tweet; LinkedIn: LinkedIn post; UGC: Product Video, Video Ad, Unboxing, Testimonial/Review, Tutorial, Product Photo, Photo Ad, Blog; Other: Other. Omit to use the platform's first option. |
| followers | integer | Follower count on that platform. Needed for every platform except UGC. |
| engagementRate | number | Engagement rate as a percentage, e.g. 3.5. Defaults to 3. |
| niche | string (enum) | Content niche. Defaults to "other".financeB2B · tech · beauty · fashion · fitness · travel · parenting · food · entertainment · other |
| market | string (enum) | UK (£) or IN (India, ₹). Defaults to UK.UK · IN |
| deliverableCount | integer | How many of that deliverable in the bundle. Defaults to 1. |
| usageRights | boolean | Brand can use the content in paid ads. |
| exclusivity | string (enum) | Exclusivity period the brand wants. Defaults to none.none · 30_days · 60_days · 90_days |
| repurposing | boolean | Brand can repurpose the content across channels. |
| includesPhotos | boolean | UGC video formats only: bundle product photos with the video. |
| rawFootageRights | boolean | UGC video formats only: brand gets the unedited source footage. |
| label | string | New name for the card; an empty string removes it. |
delete_rate_cardDelete a rate cardWriteAll plans
Permanently delete one saved rate card entry. This can't be undone.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| rateCardIdrequired | string | The rateCardId from get_rate_cards. |
list_past_dealsList logged past dealsReadAll plans
List the deals the creator has logged as already closed on their Rate Card screen (their deal history). These set a floor under calculate_rate: it never suggests less than they were paid for the same platform and content type. Not the same as the deal tracker — use list_deals for active brand deals.
Asks before running: No (read-only)
No parameters.
add_past_dealLog a past dealWriteAll plans
Log a deal the creator has already closed to their deal history on the Rate Card screen, so the rate calculator never suggests less than they were actually paid. Use list_deals/create_deal for deals still in progress.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| descriptionrequired | string | A short description of the deal in the creator's words, e.g. "5 Instagram Reels for Gymshark". |
| platformrequired | string (enum) | The platform the content was for.Instagram · TikTok · YouTube · Twitter/X · LinkedIn · UGC · Other |
| contentTyperequired | string | Content type, exactly as listed for the platform — Instagram: Feed post, Story, Reel / Short; TikTok: TikTok; YouTube: YouTube video, YouTube Short; Twitter/X: Sponsored tweet; LinkedIn: LinkedIn post; UGC: Product Video, Video Ad, Unboxing, Testimonial/Review, Tutorial, Product Photo, Photo Ad, Blog; Other: Other. |
| feeAmountrequired | number | The total fee for the whole deal (all deliverables), as a plain number. |
| quantity | integer | How many deliverables the fee covered. Defaults to 1. |
| niche | string (enum) | Content niche, if known.financeB2B · tech · beauty · fashion · fitness · travel · parenting · food · entertainment · other |
| market | string (enum) | UK (£) or IN (India, ₹).UK · IN |
| dealDate | string | When the deal closed (YYYY-MM-DD), if known. |
update_past_dealEdit a logged past dealWriteAll plans
Correct a deal in the creator's deal history. Only include the fields that change.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| pastDealIdrequired | string | The pastDealId from list_past_deals. |
| description | string | A short description of the deal in the creator's words, e.g. "5 Instagram Reels for Gymshark". |
| platform | string (enum) | The platform the content was for.Instagram · TikTok · YouTube · Twitter/X · LinkedIn · UGC · Other |
| contentType | string | Content type, exactly as listed for the platform — Instagram: Feed post, Story, Reel / Short; TikTok: TikTok; YouTube: YouTube video, YouTube Short; Twitter/X: Sponsored tweet; LinkedIn: LinkedIn post; UGC: Product Video, Video Ad, Unboxing, Testimonial/Review, Tutorial, Product Photo, Photo Ad, Blog; Other: Other. |
| feeAmount | number | The total fee for the whole deal (all deliverables), as a plain number. |
| quantity | integer | How many deliverables the fee covered. Defaults to 1. |
| niche | string (enum) | Content niche, if known.financeB2B · tech · beauty · fashion · fitness · travel · parenting · food · entertainment · other |
| market | string (enum) | UK (£) or IN (India, ₹).UK · IN |
| dealDate | string | When the deal closed (YYYY-MM-DD), if known. |
delete_past_dealDelete a logged past dealWriteAll plans
Permanently remove a deal from the creator's deal history (it stops setting a floor under calculate_rate). This can't be undone.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| pastDealIdrequired | string | The pastDealId from list_past_deals. |
Media kit (7)
get_media_kitGet media kitReadAll plans
Return the creator's Media Kit — their public shareable page (platforms, rates, brand collabs) — including the link to share with a brand. Use when the user asks for their media kit link, wants to share their media kit, or asks what's on it.
Asks before running: No (read-only)
No parameters.
update_media_kitEdit media kitWriteAll plans
Edit the text sections of the creator's media kit: name, bio, why-work-with-me, rate justification, rate list, brands worked with, and contact details. Only include fields that change. If the kit is published, the public page shows the change straight away.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| displayName | string | Name shown at the top of the kit. |
| bio | string | The "About me" text. |
| whyWorkWithMe | string | The "Why work with me" text. |
| rateCardJustification | string | The sentence or two shown with the rate card. |
| rateCard | object[] | Replaces the whole rate list on the kit (in GBP). To show saved rate cards, read them with get_rate_cards first. |
| brandsWorkedWith | string[] | Replaces the whole list of brand names shown as past collaborations. |
| contactEmail | string | Contact email brands should use. |
| bookingLink | string | Optional booking/calendar link; an empty string removes it. |
set_media_kit_platformsChoose media kit platformsWriteAll plans
Choose which of the creator's platforms (from list_platforms) appear on their media kit. Pass null to show all of them, including any added later.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| platformIdsrequired | object | platformIds to show, or null to show every platform. |
update_showcase_itemsEdit showcase itemsWriteAll plans
Change the type, caption or platform tag of images/videos already in the media kit's content showcase (ids from get_media_kit). Only include fields that change. Uploading new items isn't available here — that's done in the Folio app.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| itemsrequired | object[] | The items to change. |
remove_showcase_itemRemove showcase itemWriteAll plans
Remove an image or video from the media kit's content showcase and delete the uploaded file. This can't be undone.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| showcaseItemIdrequired | string | The showcaseItemId from get_media_kit. |
set_media_kit_publishedPublish or hide media kitSends / publishesAll plans
Publish the creator's media kit (anyone with the link can see it: name, bio, audience stats, rates, brands and contact details) or hide it (the link shows a not-found page). Only call this when the user clearly asks to publish/unpublish, show/hide, or make their media kit live.
Asks before running: Yes — reaches someone outside your account
| Parameter | Type | Description |
|---|---|---|
| isPublishedrequired | boolean | true to publish, false to hide. |
generate_media_kit_copyDraft media kit copyReadCreator · Pro
Draft the media kit's "About me", "Why work with me" and rate justification text from the creator's profile, platforms and rate cards. Nothing is saved — show the drafts to the user, and only if they want them, save with update_media_kit (aboutMe goes in bio).
Asks before running: No (read-only)
No parameters.
Platforms (4)
list_platformsList platformsReadAll plans
List the creator's social platforms with handle, follower count, engagement rate and profile link, as set in Folio's settings.
Asks before running: No (read-only)
No parameters.
add_platformAdd platformWriteAll plans
Add a social platform to the creator's profile. Its follower and engagement figures show in the audience stats of their media kit, including the public page if it's published.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string (enum) | Which platform.TikTok · Instagram · YouTube · Twitter/X · LinkedIn · Pinterest · Facebook · Twitch · Snapchat · Other |
| handle | string | Their handle on that platform, only if mentioned. |
| followerCount | integer | Follower count, only if mentioned. |
| engagementRate | number | Engagement rate as a percentage, e.g. 3.5, only if mentioned. |
| profileUrl | string | Link to their profile, only if mentioned. |
update_platformUpdate platformWriteAll plans
Update a platform's handle, follower count, engagement rate or profile link. Only include fields that change; pass null to clear one. Changes show on the media kit, including the public page if it's published.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| platformIdrequired | string | The platformId from list_platforms. |
| handle | object | New handle, or null to clear. |
| followerCount | object | New follower count, or null to clear. |
| engagementRate | object | New engagement rate (%), or null to clear. |
| profileUrl | object | New profile link, or null to clear. |
delete_platformRemove platformWriteAll plans
Permanently remove a platform from the creator's profile; it also disappears from their media kit. This can't be undone.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| platformIdrequired | string | The platformId from list_platforms. |
Pitches (3)
generate_pitchDraft outreach pitchWriteCreator · Pro
Draft a cold outreach pitch email to a brand the creator wants to work with, and save it to their Pitch Generator history. Only call this when the user clearly asks for a pitch or outreach email to be written for a specific brand.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| brandNamerequired | string | The brand to pitch. Required. |
| brandWebsite | string | Brand website, only if mentioned. |
| platforms | object[] | Which platforms/content types to propose, only if mentioned, e.g. [{"platform":"Instagram","contentType":"Reel","quantity":1}]. Can span multiple platforms. |
| targetValue | number | Target fee in GBP, only if mentioned. |
| notes | string | Any specific angle, product, or context the user mentioned. |
list_pitchesList saved pitchesReadAll plans
List the outreach pitches saved in the creator's Pitch Generator history, newest first, 10 at a time — brand, date, subject and the full email body. Pass offset to fetch older pitches when hasMore is true.
Asks before running: No (read-only)
| Parameter | Type | Description |
|---|---|---|
| offset | integer | How many of the newest pitches to skip, for paging (0, 10, 20…). Defaults to 0. |
delete_pitchDelete saved pitchWriteAll plans
Permanently delete one saved pitch from the creator's Pitch Generator history. Use list_pitches first to find the pitchId. This cannot be undone.
Asks before running: Yes — deletes or can't be undone
| Parameter | Type | Description |
|---|---|---|
| pitchIdrequired | string | The pitchId from list_pitches. |
Account and Folio Value (5)
get_folio_value_indexGet Folio Value and Folio IndexReadAll plans
Return the creator's Folio Value (private £ valuation) and Folio Index (0-100 public reliability score shown on their media kit) — current numbers, tier, confidence level, the banked/locked-in/in-play cashflow breakdown, what moved since last month, and the single biggest available opportunity to raise it. Use when the user asks about their Folio Value, Folio Index, Folio Score, their valuation, their reliability score, why it changed, or how to improve it.
Asks before running: No (read-only)
No parameters.
get_profileGet creator profileReadAll plans
Return the creator's Folio profile — display name, legal name and address used on contracts, email, VAT number, bio, niches, audience location, current plan, and their platforms with follower counts and engagement. Use when the user asks about their profile, account details or which platforms Folio has on file.
Asks before running: No (read-only)
No parameters.
update_profileUpdate creator profileWriteAll plans
Change fields on the creator's Folio profile (Settings → Profile): display name, bio, and the legal name, address and VAT number used on contracts. Only include fields the user explicitly asked to change. Invoice details live in the business profile (update_business_profile) instead.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| displayName | string | New display name. Only if the user asked to change it. |
| legalName | string | New legal name as it should appear on contracts. Only if the user asked to change it. |
| address | string | New postal address as it should appear on contracts. Only if the user asked to change it. |
| bio | string | New short bio. Only if the user asked to change it. |
| vatNumber | string | New VAT number. Only if the user asked to change it. |
get_business_profileGet business profileReadAll plans
Return the business details printed on the creator's invoices — entity type, legal and trading name, company number, business address, VAT registration, payment terms and footer note — plus whether a payment method is on file and what is still missing before invoices can be sent. Bank details are never returned.
Asks before running: No (read-only)
No parameters.
update_business_profileUpdate business profileWriteAll plans
Change the business details printed on the creator's future invoices (already-issued invoices keep the old details). Only include fields the user explicitly asked to change; everything else is kept, and an empty string clears an optional field. Bank details and payment links can only be changed in the Folio app.
Asks before running: Usually (host decides)
| Parameter | Type | Description |
|---|---|---|
| entityType | string (enum) | How the creator trades. Only if the user asked to change it.sole_trader · limited_company · partnership |
| legalName | string | Legal name of the person or company. Only if the user asked to change it. |
| tradingName | string | Trading name, if different from the legal name. Only if the user asked to change it. |
| companyNumber | string | Companies House number (required for limited companies). Only if the user asked to change it. |
| addressLine1 | string | Business address line 1. Only if the user asked to change it. |
| addressLine2 | string | Business address line 2. Only if the user asked to change it. |
| city | string | Town or city. Only if the user asked to change it. |
| postcode | string | Postcode. Only if the user asked to change it. |
| country | string | Two-letter country code, e.g. GB. Only if the user asked to change it. |
| vatRegistered | boolean | Whether the creator is VAT registered. Only if the user asked to change it. |
| vatNumber | string | VAT number in the format GB123456789 (required when VAT registered). Only if the user asked to change it. |
| paymentTermsDays | integer | Days a brand has to pay an invoice. Only if the user asked to change it. |
| invoiceFooterNote | string | Note printed at the bottom of invoices. Only if the user asked to change it. |
Data and privacy
- The server never returns bank details or payment links, and they can't be changed through MCP.
- We log each tool call (tool, time, whether it worked). Changes made through a connected assistant also appear in the creator's activity feed.
- We don't see the conversation with the assistant — only the tool calls it sends.
The creator's assistant handles the data it receives under the creator's own terms with that platform. See the privacy policy and terms.
Support
Questions, problems connecting, or building an integration? Email support@folioandkit.com. New tools and changes are announced in the changelog.