The Jotform MCP connector routes your AI agent's tool calls to Jotform's own MCP server through Scalekit. Each user signs in to Jotform once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 7 tools.
- Tools
- 7
- What they doRead · write · destructive
- 4 · 2 · 14 read2 write1 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
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 Jotform MCP connection
In AgentKit > Connections, create a Jotform MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Jotform 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 = 'jotformmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Jotform 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: 'jotformmcp_fetch',toolInput: { id: 'YOUR_ID' },})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 = "jotformmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Jotform MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={"id":"YOUR_ID"},tool_name="jotformmcp_fetch",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_tooljotformmcp_analyze_submissionsPerform AI-powered analysis on one or more forms' submissions using a natural-language query.Read-onlyAnalyze Submissions
Perform AI-powered analysis on one or more forms' submissions using a natural-language query.
Inputs
analysisQuerystringrequired- A natural-language query describing the desired analysis. Examples: "What are the most common responses?", "Show submission trends by month", "Analyze sentiment in feedback", "Give me a statistical breakdown of all answers".
formIDsarrayrequired- Form IDs whose submissions will be analyzed. Provide a single form ID by default. Only supply more than one ID when the user explicitly requests cross-form comparison or combined analysis. Use the search_asset tool first if you need to find the form ID.
limitnumberrequired- Maximum number of submissions to include in the analysis. Higher values provide more comprehensive results but increase processing time.
jotformmcp_fetchFetch metadata and information for a Jotform form by its ID or URL.Read-onlyFetch
Fetch metadata and information for a Jotform form by its ID or URL.
Inputs
idstringrequired- The form id or the submission id to fetch information and metadata from
jotformmcp_get_submissionsList submission IDs for a form with optional filters.Read-onlyGet Submissions
List submission IDs for a form with optional filters.
Inputs
filterobjectrequired- No description.
form_idstringrequired- The ID of the form to list submissions from
jotformmcp_searchSearch Jotform assets by query with optional filters, ordering, and limit.Read-onlySearch
Search Jotform assets by query with optional filters, ordering, and limit.
Inputs
filterobjectrequired- No description.
limitnumberrequired- Maximum items fetched per underlying request (default: 20).
order_bystringrequired- Sort order for the results. The default value is "last_activity", only use another option if a sorting is really needed.one of
last_activitymost_recent_createdleast_recent_createdsubmissions_countlast_submission user_querystringrequired- A natural-language instruction describing what the user wants to find and list from assets.
jotformmcp_assign_formAssign a form to a user by email address with an optional message.WriteAssign Form
Assign a form to a user by email address with an optional message.
Inputs
assignee_emailstringrequired- The email address to assign the form to
assignee_messagestringrequired- The message to assign the form to. This will be used in the email that will be sent to the assignee.
assignee_namestringrequired- The name of the assignee. This will be used in the email that will be sent to the assignee.
form_idstringrequired- The ID of the form to assign
jotformmcp_create_formCreate a new Jotform form based on a natural-language description.WriteCreate Form
Create a new Jotform form based on a natural-language description.
Inputs
descriptionstringrequired- Description of the form to create
jotformmcp_edit_formEdit an existing form using a natural-language instruction.DestructiveEdit Form
Edit an existing form using a natural-language instruction.
Inputs
descriptionstringrequired- High-level natural-language instruction describing what to change (e.g., add/move/rename questions). Avoid specifying internal types or identifiers; another agent will infer the appropriate field types.
form_idstringrequired- The ID of the form to edit
No tools match.