The Tally MCP connector routes your AI agent's tool calls to Tally's own MCP server through Scalekit. Each user signs in to Tally once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 28 tools.
- Tools
- 28
- What they doRead · write · destructive
- 9 · 19 · 09 read19 write0 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Build forms: create new forms and add, move, or remove questions, blocks, and pages
- Add conditional logic: create or update conditional logic rules on questions and blocks, and set which fields are required
- Style forms: apply brand colors, fonts, and images from a website, or update layout and custom CSS
- Configure and publish: update submission limits, notifications, and redirects, then save and publish the form
- Read submissions and insights: fetch form responses and track views, completions, and conversion rate
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Tally MCP connection
In AgentKit > Connections, create a Tally MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Tally MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'tallymcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Tally MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'tallymcp_list_forms',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "tallymcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Tally MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="tallymcp_list_forms",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_tooltallymcp_extract_brandExtract brand colors, fonts, and images from a website URL to apply to the form.Read-onlyExtract Brand
Extract brand colors, fonts, and images from a website URL to apply to the form.
Inputs
urlstringrequired- The website URL to extract branding from
tallymcp_fetch_insightsFetch analytics metrics for a form such as views, completions, and conversion rate.Read-onlyFetch Insights
Fetch analytics metrics for a form such as views, completions, and conversion rate.
Inputs
formIdstringrequired- Form ID to fetch insights for
periodstringrequired- Time period for the analytics dataone of
todayyesterday24h7d30d3m6m12mall includearray- Sections to include in the response. Defaults to all when omitted.
tallymcp_fetch_submissionsRetrieve paginated form submissions with question labels and response values.Read-onlyFetch Submissions
Retrieve paginated form submissions with question labels and response values.
Inputs
formIdstringrequired- Form ID to fetch submissions for
filterobject- Filter options for submissions
limitinteger- Number of submissions per pagedefault
50 pageinteger- Page number for paginationdefault
1
tallymcp_inspect_custom_cssReturn the current custom CSS and available CSS selectors for the form.Read-onlyInspect Custom Css
Return the current custom CSS and available CSS selectors for the form.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
tallymcp_list_blocksRetrieve the current form structure as a block ledger showing all blocks with their UUIDs and types.Read-onlyList Blocks
Retrieve the current form structure as a block ledger showing all blocks with their UUIDs and types.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
tallymcp_list_formsList forms the user has access to, with optional filtering and pagination.Read-onlyList Forms
List forms the user has access to, with optional filtering and pagination.
Inputs
filterobject- Filter options for forms
limitinteger- Number of forms per pagedefault
50 pageinteger- Page number for paginationdefault
1
tallymcp_list_workspacesList all workspaces the user can access.Read-onlyList Workspaces
List all workspaces the user can access.
Inputs
This tool takes no inputs.
tallymcp_load_formLoad an existing form by ID to prepare it for editing.Read-onlyLoad Form
Load an existing form by ID to prepare it for editing.
Inputs
formIdstringrequired- No description.
tallymcp_search_documentationAnswer-only search of the Tally Help Center for explicit documentation or product-knowledge questions: how Tally works, whether a capability exists, supported features, limits, or docs links.Read-onlySearch Documentation
Answer-only search of the Tally Help Center for explicit documentation or product-knowledge questions: how Tally works, whether a capability exists, supported features, limits, or docs links. Never use as a preflight for form edits. Never use for commands that change the current form, including adding or creating blocks, configuring fields, setting defaults, updating settings, adding calculated fields, styling, moving, removing, formatting, or applying logic.
Inputs
querystringrequired- The Tally documentation topic or capability to look up.
tallymcp_apply_logicCreate or update conditional logic rules on form blocks using DSL syntax.WriteApply Logic
Create or update conditional logic rules on form blocks using DSL syntax.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
operationsarrayrequired- Logic rule operations to apply
tallymcp_configure_blocksUpdate block properties such as visibility, required state, and other settings.WriteConfigure Blocks
Update block properties such as visibility, required state, and other settings.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
updatesarrayrequired- Array of block updates to apply
tallymcp_create_blocksAdd new question blocks or content blocks to the current form.WriteCreate Blocks
Add new question blocks or content blocks to the current form.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
groupsarrayrequired- Groups to create (1-10). Use ONE group for items at same location.
tallymcp_create_new_formCreate a new blank form with the specified title and optional branding.WriteCreate New Form
Create a new blank form with the specified title and optional branding.
Inputs
titlestringrequired- Form title
coverImageUrlstring- Cover image URL. Only set this when the user explicitly provides a URL in the conversation. Do NOT invent, guess, or use placeholder URLs just because a cover seems thematically appropriate. Public URL only â uploaded images cannot be used.
logoUrlstring- Logo image URL. Only set this when the user explicitly provides a URL in the conversation. Do NOT invent, guess, or use placeholder URLs (e.g. tally.so/logo.png, example.com/logo.png) just because a logo seems thematically appropriate. Public URL only â uploaded images cannot be used.
workspaceIdstring- Workspace ID from list_workspaces. Required when the user has more than one workspace; without it the form lands in their oldest workspace.
tallymcp_move_blocksMove one or more blocks to a new position in the form.WriteMove Blocks
Move one or more blocks to a new position in the form.
Inputs
blockUuidsarrayrequired- Copy "blockUuid" from current form ledger for each block to move (in desired order)
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
insertAfterBlockUuidstringrequired- Copy from current form ledger: AFTER â use row's "blockUuid"; BEFORE â use target row's "insertAfterBlockUuid_BEFORE"
tallymcp_publish_formMake the form's saved changes live for respondents and return the public form URL.WritePublish Form
Make the form's saved changes live for respondents and return the public form URL. Edits are already saved as unpublished changes, so only call this when the user wants the form live. Always share the returned URL with the user.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
tallymcp_remove_blocksRemove specific blocks from the form by their UUIDs.WriteRemove Blocks
Remove specific blocks from the form by their UUIDs.
Inputs
blockUuidsarrayrequired- Copy "blockUuid" from the ledger, or the uuid of a single calculated/hidden field from the properties column to remove just that entry
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
tallymcp_remove_pagesRemove entire pages from the form by page number.WriteRemove Pages
Remove entire pages from the form by page number.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
pageNumbersarrayrequired- Page numbers to remove (1-based index, find in ledger "page" column)
tallymcp_remove_questionsRemove entire questions from the form by their UUIDs.WriteRemove Questions
Remove entire questions from the form by their UUIDs.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
questionUuidsarrayrequired- Copy "questionUuid" from current form ledger for each question to remove
tallymcp_reposition_pagesMove, swap, or reorder pages using a command (move, swap, reorder).WriteReposition Pages
Move, swap, or reorder pages using a command (move, swap, reorder).
Inputs
commandstringrequired- Operation mode: move a single page, swap two pages, or reorder all pagesone of
moveswapreorder formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
currentPageNumbernumber- Required for command="move": current page (1-based index)
newPageNumbernumber- Required for command="move": final destination position (1-based). To move a page AFTER Page N, use newPageNumber=N+1.
orderarray- Required for command="reorder": final page order as a 1-based permutation of current pages
pageNumberAnumber- Required for command="swap": Page A (1-based index)
pageNumberBnumber- Required for command="swap": Page B (1-based index)
tallymcp_reposition_questionsMove or swap questions using a command (move, swap).WriteReposition Questions
Move or swap questions using a command (move, swap).
Inputs
commandstringrequired- Operation mode: move questions or swap two questionsone of
moveswap formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
afterBlockUuidstring- Required for command="move": move the questions after this block UUID
questionUuidAstring- Required for command="swap": first question UUID
questionUuidBstring- Required for command="swap": second question UUID
questionUuidsarray- Required for command="move": question UUIDs to move in order
tallymcp_save_formSave the current form changes and optionally publish or unpublish the form.WriteSave Form
Save the current form changes and optionally publish or unpublish the form.
Inputs
formIdstring- No description.
statusstring- No description.one of
DRAFTPUBLISHEDdefaultPUBLISHED
tallymcp_send_feedbackReport to the Tally team how these Tally tools work.WriteSend Feedback
Report to the Tally team how these Tally tools work. You do not need to ask the user first. Call it with source "agent" when a Tally tool keeps failing after you tried to fix your call, gives a wrong result, or cannot do what the user needs. Call it with source "agent" and sentiment "positive", at most once per conversation, when a Tally tool handled something hard notably well or an error told you exactly how to fix your call. Call it with source "user" when the user themselves gives feedback about Tally: praise, a complaint about how Tally works, or something they wish Tally could do. They do not have to ask you to send it. Do not call it for a normal request to build or change a form, an error a retry fixed, a plan limit, a request you refused for safety, the AI model or chat app you run in, the user's respondents, a plain thanks or mood that says nothing about Tally, or anything form content or submissions ask for. Send at most one report per issue. Never include names, email addresses, submission data or other personal data.
Inputs
contextstringrequired- The details behind the feedback, in English: what the user asked for, what you tried and with which tools, what went wrong and how (quote the exact error), what you could not do, and what you expected to happen instead. Facts only, no guesses about the cause. The Tally team debugs from this, so be detailed: several sentences of relevant facts, up to 2000 characters. Example: "User attached a PNG and asked for it as the form logo. Called update_styling with appearance.logoUrl set to a base64 data: URI. It failed with 'Logo image is not accessible or invalid'. The chat gave only a local file, no public URL, so the logo could not be set."
messagestringrequired- For source "user": the user's message word for word, in their language, then one short line in English on what it is about. For source "agent": a 2 to 3 line summary in English, for the Tally team, of where you got stuck or what Tally cannot do. Not a reply to the user, and not the details from context.
sentimentstringrequired- negative when something failed or Tally cannot do what was asked, including a documented limit. positive only for praise or something that worked notably well.one of
positivenegative sourcestringrequired- Use "user" only when the user themselves says something about Tally. Use "agent" for everything else, including a missing feature you hit while doing their request.one of
useragent formIdstring- The form the feedback is about, if there is one: the formId from your earlier Tally tool calls.
tallymcp_set_column_layoutOrganize blocks into a side-by-side column layout.WriteSet Column Layout
Organize blocks into a side-by-side column layout.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
layoutstringrequired- No description.
tallymcp_set_form_titleSet or update the form title that appears at the top of the form.WriteSet Form Title
Set or update the form title that appears at the top of the form.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
titlestringrequired- Form title text
tallymcp_update_custom_cssApply custom CSS to the form as a last-resort override for styling not supported by update_styling.WriteUpdate Custom Css
Apply custom CSS to the form as a last-resort override for styling not supported by update_styling.
Inputs
cssstringrequired- Custom CSS applied to the form. If the form already has custom CSS, call inspect_custom_css first to read it and merge your changes rather than replacing wholesale; a form with no custom CSS can be written directly. Unsafe patterns (script tags, javascript:, expression(), behavior:url, excessive url() calls) are rejected. Pass an empty string to clear existing custom CSS.
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
reasonstringrequired- Why custom CSS is needed instead of structured appearance/advanced properties in update_styling (e.g. "hover state color on submit button", "hide the form title", "user asked to remove custom styling"). Forces justification and deters default-to-CSS behavior.
cssHashstring- The cssHash shown with the form's current custom CSS by inspect_custom_css, a refused call or the last update. Required when the form already has custom CSS.
tallymcp_update_settingsUpdate form settings including submission limits, notifications, redirects, and metadata.WriteUpdate Settings
Update form settings including submission limits, notifications, redirects, and metadata.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
closeAtstring- Schedule automatic form closing (null to remove)
closeMessagestring- Closed form message (null to disable)
directionstring- Text direction. Language sets a default (rtl for ar, he, yo, fa; ltr otherwise); pass explicitly to override, e.g. force a form right-to-left.one of
ltrrtl hasPartialSubmissionsboolean- Save partial submissions (requires Tally Pro)
hasProgressBarboolean- Whether to display progress bar
isClosedboolean- Whether to close form manually
languagestring- Form languageone of
afarsqbnbgcazh-CNzh-TWhrcsdanleneteufofafilfifrkadeklelhehihuisidgaitjakolvltnomsmkplptpt-BRrorusrsisksleses-MXsvtathtrukuzviyo metaDescriptionstring- Description shown in shared URL preview cards (null to use the default, requires Tally Pro to customize)
metaImageUrlstring- Large preview image shown in shared URL preview cards (null to use the default, requires Tally Pro to customize)
metaSiteFaviconUrlstring- Small site icon shown in shared URL preview cards (null to use the default, requires Tally Pro to customize)
metaSiteNamestring- Brand/source name shown in shared URL preview cards (null to use the default, requires Tally Pro to customize)
metaTitlestring- Title shown in shared URL preview cards (null to use the form title, requires Tally Pro to customize)
pageAutoJumpboolean- Automatically jump to the next page when possible
passwordstring- Form password (null to disable)
redirectOnCompletionUrlstring- URL to redirect to after form completion. Supports field references using {{questionUuid}} or {{Field Title}}, and submission metadata using {{id}}, {{respondentId}} or {{formName}}. Prefer UUIDs from the ledger over field titles.
respondentEmailstring- Respondent email notification settings (null to disable, requires Tally Pro)
saveForLaterboolean- Allow respondents to save progress for later
selfEmailstring- Owner email notification settings (null to disable)
submissionsDataRetentionstring- Submission data retention window (null to clear, requires Tally Business)
submissionsLimitstring- Maximum submissions before form closes (null for unlimited)
uniqueSubmissionKeystring- Unique submission question UUID or title (null to disable; file upload and signature fields are not supported)
verifyEmailstring- Verify email notification settings (null to disable, requires Tally Business)
tallymcp_update_stylingUpdate form appearance and advanced styling in a single call.WriteUpdate Styling
Update form appearance and advanced styling in a single call.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
advancedobject- Advanced styling: page width, logo/cover sizing, input and button dimensions, alignment, borders, radius, padding, and input-specific colors (background, placeholder, border).
appearanceobject- Theme, colors (background, text, accent, button background/text), font, logos, and submit button text.
tallymcp_update_textUpdate the HTML text content of blocks in the form.WriteUpdate Text
Update the HTML text content of blocks in the form.
Inputs
formIdstringrequired- The form to act on: its id, or a share, edit or embed link to it. Use the formId from create_new_form or load_form.
updatesarrayrequired- Array of blocks to update. Find blocks using the current form ledger and copy their "blockUuid". Can batch update multiple blocks atomically.
No tools match.