SmartSuite MCP Server
The SmartSuite MCP Server provides governed, auditable programmatic access to SmartSuite workspaces, enabling AI agents to manage data, schema, automations, and more.
Key capabilities:
Records: List, get, search, query, create, update, delete (soft-delete), and restore records; list soft-deleted records; batch operations with dry-run support.
Schema Management: Create, describe, update, and delete solutions and applications (tables); manage fields of all types (text, number, select, linked record, rollup, lookup, formula, AI-populated, etc.); restore soft-deleted fields.
Formula Analysis: Analyze, validate, create, and update formula fields with dependency graphs and complexity metrics.
Automations: List, describe, create, update, and delete automations; configure AI prompts; review usage limits and credentials.
Views & Dashboards: List, describe, create, update, and delete views (grid, kanban, calendar, timeline, gantt, map, chart) and dashboards; manage widgets (19 types).
Forms: List, describe, create, update, and submit forms.
Record View Layout: Add, update, and remove sections, tabs, and fields; move fields; set display logic and conditional visibility.
SmartDocs & Files: Read and append SmartDoc fields; upload files, resolve file handles to signed URLs, move/copy attachments between fields.
Comments: List and create comments on records.
My Work: List and update assigned tasks (mentions, checklists, records) with filtering.
Solution Migration: Match solutions across workspaces, diff schemas (tables, fields, views, forms, dashboards), export diffs as JSON or XLSX.
Cross-Workspace Access: List and read from non-primary workspaces (opt-in, read-only).
Security & Governance: Access modes (readonly, readwrite, admin); allow/deny lists for solutions/apps; explicit opt-in for deletes/restores; audit logging; dry-run previews; log redaction.
Diagnostics: Validate server configuration and connectivity.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SmartSuite MCP Server list my SmartSuite solutions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SmartSuite MCP Server
A locally-hosted Model Context Protocol (MCP) server that gives AI coding agents and desktop assistants governed, auditable access to SmartSuite data.
Works with Claude Desktop, Claude Code, Cursor, Cline, and any other MCP-compatible client.
What this is
The SmartSuite MCP server runs on your machine and communicates with your MCP client over stdio. It proxies requests to the SmartSuite REST API using your account credentials. The server enforces access modes, validates inputs, redacts secrets from logs, and writes local audit logs for all write operations.
Related MCP server: safe-code-mcp
Installation
Option 1: Claude Desktop extension (.mcpb)
Download the latest smartsuite-mcp-server-*.mcpb from the Releases page, then double-click to install in Claude Desktop. You'll be prompted for your account ID and API key. No Node.js required.
Option 2: npm (global)
npm install -g @smartsuite/mcp-serverOption 3: npx (no install)
npx @smartsuite/mcp-serverOption 4: Docker
docker pull smartsuite/mcp-server:latestQuick start: Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"smartsuite": {
"type": "stdio",
"command": "smartsuite-mcp",
"args": [],
"env": {
"SMARTSUITE_ACCOUNT_ID": "your-account-id",
"SMARTSUITE_API_KEY": "your-api-key",
"SMARTSUITE_BASE_URL": "https://app.smartsuite.com/api/v1",
"SMARTSUITE_MCP_MODE": "readwrite"
}
}
}
}Restart Claude Desktop. You should see the SmartSuite tools in the connector panel.
Quick start: Claude Code
claude mcp add smartsuite \
--env SMARTSUITE_ACCOUNT_ID=your-account-id \
--env SMARTSUITE_API_KEY=your-api-key \
--env SMARTSUITE_BASE_URL=https://app.smartsuite.com/api/v1 \
--env SMARTSUITE_MCP_MODE=readwrite \
-- smartsuite-mcpQuick start: Docker
docker run --rm -i \
-e SMARTSUITE_ACCOUNT_ID=your-account-id \
-e SMARTSUITE_API_KEY=your-api-key \
-e SMARTSUITE_MCP_MODE=readonly \
smartsuite/mcp-server:latestAccess modes
Mode | Read | Create/Update | Delete | Schema writes |
| ✅ | ❌ | ❌ | ❌ |
| ✅ | ✅ | opt-in | opt-in |
| ✅ | ✅ | opt-in | opt-in |
Set with SMARTSUITE_MCP_MODE. Default is readonly.
Cross-workspace access
A SmartSuite API key can often reach several workspaces. By default this server is locked to the single workspace named in SMARTSUITE_ACCOUNT_ID (the "primary" workspace). Set SMARTSUITE_ENABLE_CROSS_WORKSPACE=true to let the server read from other workspaces the key can access.
When enabled:
A new read-only tool
smartsuite_list_workspaceslists the workspaces you can reach (slug, name, solution count, plan). It's hidden when the flag is off.Read tools gain an optional
workspaceparameter — pass a workspace slug or name to run that single call against a non-primary workspace. Omit it to use the primary.Cross-workspace access is read-only. Writes, updates, and deletes always target the primary workspace only; passing
workspaceto a write tool is rejected, regardless of access mode.Restrict the reachable set with
SMARTSUITE_ALLOWED_WORKSPACES(comma-separated slugs or names). Empty means all workspaces the key can access. The primary is always allowed.
// Example: enable cross-workspace, limited to two workspaces
"env": {
"SMARTSUITE_ENABLE_CROSS_WORKSPACE": "true",
"SMARTSUITE_ALLOWED_WORKSPACES": "s36h7yr5,Reveal Risk"
}// Then, in the client:
smartsuite_list_workspaces() → see what's reachable
smartsuite_list_solutions({ workspace: "Reveal Risk" }) → read another workspace by name
smartsuite_describe_application({ applicationId, workspace: "s36h7yr5" }) → by slugConfiguration
Required
Variable | Description |
| Your SmartSuite account ID |
| Your SmartSuite API key |
Optional
Variable | Default | Description |
|
| API base URL |
|
| Access mode: |
|
| Hard cap for list/query tools |
|
| Max records per batch create/update |
|
| Enable delete tools |
|
| Enable restoring soft-deleted records from the trash |
|
| Enable schema write tools (create/update fields, formulas, forms, and automations) |
| (all) | Comma-separated solution IDs to allow. Enforced on every tool call (a tool targeting an application resolves the app's solution and is blocked if it's outside the list). |
| (all) | Comma-separated application IDs to allow. Enforced on every tool call. |
| (none) | Comma-separated application IDs to block. Always enforced. |
|
| Allow read access to other workspaces your API key can reach (see Cross-workspace access) |
| (all) | Comma-separated workspace slugs or names reachable when cross-workspace is enabled; empty allows all accessible workspaces |
|
| Log level: |
| stderr | Path to write logs (default: stderr) |
|
| HTTP request timeout in milliseconds |
|
| Number of retries for rate limits and transient errors |
|
| Application schema cache TTL (5 min) |
|
| Return field context (label, type, help text, linked field) with every record response |
| (cwd) | Base directory for solution-migration project files (mappings/diff/xlsx, under |
Governance note: When a solution or application allowlist is set, enforcement is centralized — it applies to reads, writes, and config tools alike, and to tools identified only by a view/dashboard/widget id (their parent is resolved and checked).
get_file_url(which takes an unscoped file handle) is disabled while an allowlist is active. For a locked-down deployment, also keepSMARTSUITE_ENABLE_CROSS_WORKSPACE=false— the allowlist scopes the primary workspace; cross-workspace and the migration/diff tools are a separate surface.
Tool list
Discovery & Schema
Tool | Description |
| Validate configuration and connectivity |
| List workspaces your API key can access (only when cross-workspace is enabled) |
| List accessible SmartSuite solutions |
| Get solution details |
| List applications; pass |
| Application schema with field slugs, options, help text, and the record term. Pass |
| readwrite + enable_schema_write |
| readwrite + enable_schema_write |
| List fields for an application, with help text |
| Detailed field metadata: choice options, help text (+ format), linked-record targets and display format, formula expression + return type, record-title template, auto-number config, and native AI field config |
| readwrite + enable_schema_write |
| readwrite + enable_schema_write |
| readwrite + enable_schema_write |
| readwrite + enable_schema_write |
| readwrite + enable_schema_write + enable_delete |
Formulas
Tool | Mode | Description |
| readonly | Review formula fields. Application-wide: every formula with return type, validity, native complexity score + tier, and structural metrics (function count, nesting depth, reference counts). Pass |
| readonly | Validate a formula expression against an application without writing anything. Returns |
| readwrite + enable_schema_write | Create a formula field. Validates the expression first (an invalid formula is never created); dry-run preview unless |
| readwrite + enable_schema_write | Update a formula field's expression, label, and/or return type. Validates first; dry-run preview unless |
Records
Tool | Mode | Description |
| readonly | List records with optional sort and field projection; pass |
| readonly | Get a record by ID |
| readonly | Text search across specified fields |
| readonly | Structured filter query |
| readwrite | Create a new record |
| readwrite | Update one record |
| readwrite | Batch update with dry-run support |
| readwrite + enable_delete | Delete records with confirmation |
Comments
Tool | Mode | Description |
| readonly | List comments on a record |
| readwrite | Add a comment to a record |
Views & Dashboards
Tool | Description |
| List views for an application (grid, kanban, calendar, timeline, gantt, map, chart, form). Pass |
| Full configuration for one view: filters, sort, group-by, visible/collapsed fields, sharing settings. For form views, returns form config (title, submit label, branding, redirect, per-field prefill/help) |
| List dashboards for an application with their tabs |
| Full dashboard config: tabs, branding, style. Pass |
Forms
Tool | Mode | Description |
| readonly | List an application's forms with page/field counts, sharing state, and public URL |
| readonly | Full form structure: settings, sharing, and the page-by-page layout (bound fields + content elements, sections, conditions) |
| readwrite + enable_schema_write | Create a form; validates label + field slugs. Dry-run unless |
| readwrite + enable_schema_write | Update form settings, fields, or full |
| readwrite | Submit a form — creates a record through the form's pipeline. Call without |
Automations
Tool | Description |
| List a solution's automations (id, name, enabled state, trigger, action types). Scoped per solution |
| Full automation config: trigger and all action groups |
| Resolve one step's full schema: a trigger (label, inputs+options, exposed fields, condition fields) or a chosen action (label, integration, inputs). Select an action with |
| Workspace automation run usage and plan: plan category, run limit, used, remaining, percent used, enforced |
| Integration credentials a solution's automations use (Gmail, Slack, Teams, webhooks, …) |
| Members available to a solution (id, name, email, job title, status) |
| Create an automation (trigger + actions). Requires |
| Update an automation (label, trigger, actions, timezone) — applies only provided fields, preserves the rest. Trigger/actions you supply replace wholesale. Requires schema-write |
| Delete an automation. Requires schema-write and |
My Work
Tool | Mode | Description |
| readonly | List the authenticated user's assigned work (comment mentions, checklist items, assigned records). Returns a summary (totals, overdue count, breakdowns by type/priority/solution) plus items. Filter by |
| readwrite | Update a My Work item: mark it resolved/open and/or set or clear its due date |
Record-view layout (sections & tabs)
Edit the sections (labeled field groupings) and tabs on an application's record detail view. A section
groups the fields that follow it (until the next section). When tabs are enabled the record view
renders per-tab layouts, so the section tools require tabId — a tab id, "all" (every tab), or
"top" (the hidden top-level layout) — and refuse a silent top-level write. When tabs are disabled,
tabId is omitted. All require readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE, and preview
unless confirm:true.
Tool | Description |
| Add a section. Place it after a field with |
| Update a section's |
| Remove a section by slug. Removes only the grouping — fields under it are preserved |
| Add a tab. Enables tabs if off (the first tab mirrors the current layout); optional |
| Update a tab's |
| Remove a tab by id. Fields stay in the top-level layout; removing the last tab disables tabs |
| Move/arrange a field in the layout — reorder it, place it under a section ( |
| Hide ( |
| Add/modify/remove display (visibility) logic on a |
Solution migration (schema diff)
Compare a solution across workspaces and produce a diff package, for promoting lower-environment
changes up to production. Set your primary workspace to production (the migration target) and read
the lower environment via cross-workspace access (SMARTSUITE_ENABLE_CROSS_WORKSPACE). All four are
read-only against SmartSuite — they only write local files under SMARTSUITE_MIGRATION_DIR. The diff
covers tables, fields, views, and forms in full; dashboards are compared at the report-config level
(per-widget contents are not yet diffed).
Tool | Description |
| Match lower→prod solutions by exact name (ids differ across workspaces). Propose, then |
| For a confirmed solution pair, match its tables by name (table ids and slugs both regenerate across workspaces); persists the table-id map |
| Diff schemas (lower→prod). Fields match by slug; cross-table references remapped and system values ignored, so only real changes surface. |
| Render the diff as XLSX (Summary + Detail tabs) alongside the JSON |
SmartDocs
Tool | Mode | Description |
| readonly | Read a SmartDoc field as plain text and raw value |
| readwrite | Append markdown to a SmartDoc field |
Files
Tool | Mode | Description |
| readonly | Resolve a file field handle to a signed CDN download URL |
| readwrite | Upload a local file to a SmartSuite file field |
| readwrite | Move (or copy) attachments from one file field to another — one record ( |
Security model
Credentials never reach the LLM. API key and account ID are loaded from environment variables and never included in tool responses or logs.
Secrets are redacted from all log output.
Access mode is enforced server-side. Write tools return a clear error in
readonlymode.Destructive operations require explicit opt-in (
SMARTSUITE_ENABLE_DELETE=true) and a confirmation argument.Batch writes require dry-run acknowledgement or
confirm=true.Application allowlists and denylists prevent access to sensitive tables.
Cross-workspace access is opt-in and read-only. Disabled by default; when enabled, other workspaces can be read but never written, and can be scoped with
SMARTSUITE_ALLOWED_WORKSPACES.All write operations write a local audit log (tool, account, application, record, timestamp, success/failure). Field values are not logged by default.
See SECURITY.md for the full security model.
Troubleshooting
"config error: Missing required environment variable"
Set SMARTSUITE_ACCOUNT_ID and SMARTSUITE_API_KEY in your MCP client config.
"SmartSuite API error 401" Check that your API key is correct and not expired.
"This operation is blocked in readonly mode"
Set SMARTSUITE_MCP_MODE=readwrite to enable writes.
Tools not appearing in Claude Desktop Restart Claude Desktop after updating the config file.
Logs polluting MCP output
Ensure SMARTSUITE_LOG_FILE is set to a file path, or that no other code writes to stdout. The server only writes JSON-RPC to stdout.
Development
# Install dependencies
npm install
# Type-check
npm run typecheck
# Build
npm run build
# Run tests
npm test
# Bundle single file for Docker/MCPB
npm run bundle
# Build and package the Claude Desktop extension (.mcpb)
npm run pack:mcpb
# Output: mcpb/smartsuite-mcp-server-<version>.mcpbProject structure
src/
index.ts Entry point
server.ts MCP server bootstrap and tool dispatch
config.ts Environment variable loader
logger.ts Structured JSON logger (stderr or file)
errors.ts Error classes and codes
auth.ts SmartSuite auth header builder
smartSuiteClient.ts SmartSuite REST API client with schema cache
workspaces.ts Workspace resolver (slug/name → slug) and allowlist
tools/
registry.ts Tool definitions (names, schemas, annotations)
context.ts Shared tool context type
diagnostics.ts
workspaces.ts
solutions.ts
applications.ts
fields.ts
formulas.ts Formula analysis, validation, and field create/update
forms.ts Form review, create/update, and submit (form-type reports)
mywork.ts My Work — the authenticated user's assigned items
records.read.ts
records.write.ts
files.ts
attachments.ts Move/copy attachments between file fields
comments.ts
views.ts
automations.ts Automation review, usage/limits, and create/update/delete
layout.ts Record-view layout: sections, tabs, field move, hide/show, display logic
migration.ts Solution migration tools (match, diff, export)
smartdocs.ts
migration/
types.ts Migration mapping + diff data model
match.ts Name-matching (solutions, tables)
normalize.ts System-noise strip + cross-reference remap
diff.ts Schema diff engine (field/table/solution classification)
project.ts Per-project mapping/diff file persistence
xlsx.ts Dependency-free XLSX writer
types/
config.ts Config interface
smartsuite.ts SmartSuite API types
utils/
audit.ts Audit log writer
pagination.ts Cursor encode/decode
prosemirror.ts ProseMirror/SmartDoc → plain text
redaction.ts Secret redaction
retry.ts Exponential backoff retry
safeJson.ts Safe JSON stringifyLicense
MIT
Available Tools
86 toolssmartsuite_add_dashboard_widgetA
SOME TYPES HAVE NO AUTO-FILL TEMPLATE and fail with a 400 unless you supply params: countdown-widget needs {target_date:"YYYY-MM-DD", target_time:"YYYY-MM-DDThh:mm:ss" (a FULL datetime, not a clock time), display_days/display_hours/display_minutes}; heading-widget and text-block-widget need {content: } — a plain string is rejected with "Expected a dictionary". The other 19 types create from widgetType alone. Add a widget to a dashboard tab. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply dashboardId, widgetType, and optionally tabId (defaults to the first tab), name, position {x,y}, size {width,height}, and params. VALID widgetType values — content: text-block-widget, heading-widget, simple-banner-widget, hero-widget, faq-widget, divider-widget; data: list-view-widget, card-view-widget, kanban-view-widget, calendar-view-widget, timeline-view-widget, chart-widget, pivot-widget, summary-card-widget, progress-widget, comparison-widget, filter-widget, record-details-widget, data-schema-widget; other: spacing-widget, button-row-widget, webpage-widget, record-picker-widget, countdown-widget, world-clock-widget (these last six have no auto-fill template — supply params). LAYOUT: x/width are column units (4 = full width), y/height are pixels. If you omit position/size, the widget gets its natural per-type default size (e.g. summary-card/progress/comparison are width 1, height 128; charts width 2; list/calendar width 4) — so metric cards render at the right height. If you omit position, the widget is appended BELOW existing widgets on the tab (not stacked at 0,0, which would overlap/hide widgets) — set position only to place deliberately (e.g. side-by-side metric cards need explicit x). The widget is created with a valid accent color and non-null description/collapsed defaults so the UI highlight-color editor works; pass color (hex) to choose the accent. PARAMS is widget-type-specific and passed through as-is. It is now OPTIONAL: if you omit params, the tool fills a minimal valid template for the widget type (data widgets default to showing the dashboard's own application with sensible default fields), so any of the 19 types can be created with just dashboardId + widgetType. Supply params only to customize — e.g. text-block/heading {content:}, divider {color}, data widgets {solution, application, source, ...window objects, filters, fields}. To customize a data widget precisely, describe an existing widget of the same type (smartsuite_describe_dashboard includeWidgets:true) and adapt it. The response includes filledFromTemplate:true when a default template was used. SUMMARY-CARD (metric) notes: the number renders in params.color — keep it a visible accent (never white/#FFFFFF, or it is invisible on the light card); function_type is count|sum|avg|min|max (avg, NOT "average"); the card needs the drill_in skeleton + appearance/size/mode the template provides; height 156 (128 clips padding). CHART: params must include totals, benchmarks, advanced_options, and categories or it 400s (the template includes them).
Inputs: widgetType (required), dashboardId (required), name, size, +4 more.
smartsuite_add_layout_sectionA
Add a section (a labeled grouping) to an application's record-view layout. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE. A section groups the fields that follow it (until the next section) in the record detail view. By default edits the top-level layout; pass tabId to edit a specific tab's layout when tabs are enabled. Place it after a field with afterField (the section appears just after that field; fields after it fall under the section), or omit to append at the end. Dry-run preview unless confirm:true.
Inputs: title (required), applicationId (required), tabId, hidden, +4 more.
smartsuite_add_layout_tabA
Add a tab to an application's record-view layout. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE. Enables tabs if not already on (the first tab mirrors the current top-level layout so existing fields stay visible; later tabs start empty). Optional description, position (0-based; default end), and tab-bar style ("basic"/"process"/"journey") / align (container-level). Dry-run preview unless confirm:true.
Inputs: name (required), applicationId (required), align, style, +3 more.
smartsuite_analyze_formulasARead-only
Review and analyze formula fields in a SmartSuite application. Without fieldSlug: returns every formula field with its return type, validity (valid:false = broken formula), native complexity score + tier, and structural metrics (function count, nesting depth, reference counts) — sortable by name or score. With fieldSlug: returns full detail for one formula plus its dependency graph (resolved [field].[field] reference chains across linked tables) as both an ASCII tree and a Mermaid flowchart. Set deep:true to also compute the cross-table Impact Index (samples record counts and link fan-out — several extra API calls).
Inputs: applicationId (required), deep, sortBy, fieldSlug.
smartsuite_append_smartdoc_contentA
Append markdown content to a SmartDoc field. Requires readwrite or admin mode. Does not replace existing content.
Inputs: content (required), recordId (required), fieldSlug (required), applicationId (required), +1 more.
smartsuite_create_applicationA
Create a new table (application) in a solution. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply a name and the solutionId. The table is created with a default "Title" primary field and a record term ("what each record is called", default "Record") — the record term is always set explicitly so it is never left empty (an empty record term can break list-view/grid widget creation against the table). PASS fields TO CREATE THE TABLE AND ALL ITS FIELDS IN ONE REQUEST: an array of { fieldType, label, params? } entries (same shape as smartsuite_create_field — params ARE honoured here, and the params that carry a field's configuration are validated: a linkedrecordfield without linked_application, or a rollup/lookup without linked_field + field_selection, is rejected rather than created half-built, and select choices get their stored value filled in from the label when omitted). This is the ONLY true bulk field path SmartSuite offers and it is dramatically faster than adding fields afterwards — one request for all of them, versus ~1s per field via smartsuite_create_fields against an existing table. So when a table is new, always create its fields here. SmartSuite also adds its own default field set (Title, Description, Assigned To, Status, Due Date, Priority, …) alongside yours. Dry-run preview unless confirm:true.
Inputs: name (required), solutionId (required), fields, confirm, +1 more.
smartsuite_create_automationA
Create an automation in a solution. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. You supply the trigger (an object with trigger_reference.trigger_id and inputs) and the actions; use smartsuite_describe_automation_step on a similar existing automation to learn the exact trigger/action/input shapes and option values — note that a BRAND-NEW solution has no such automation to copy, so build the first one in the UI and read it back, or expect to discover required keys one 400 at a time (the errors are precise, e.g. "trigger.trigger_reference.trigger_id is required"). Pass actions either as the native nested actionGroups ([{actions:{actions:[...]}}]) or as a flat actions array (wrapped into one group automatically). Pass credentialId once to fill it onto the trigger and every action that omits one. automaticDescription (the UI display phrase) and timezone are optional.
Inputs: label (required), trigger (required), solutionId (required), actions, +4 more.
smartsuite_create_commentA
Add a comment to a SmartSuite record. Requires readwrite or admin mode.
Inputs: text (required), recordId (required), applicationId (required).
smartsuite_create_dashboardA
Create a dashboard in an application. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply applicationId and a unique label (checked; suggests an alternative if taken). Optionally pass tabs (array of tab names, or {name, order} objects) — otherwise one default tab is created. Add widgets afterward with smartsuite_add_dashboard_widget. Dry-run preview unless confirm:true.
Inputs: label (required), applicationId (required), tabs, confirm, +1 more.
smartsuite_create_fieldA
Create a field of any type in an application (including rollup and lookup fields — not just formulas). Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. You supply fieldType + label and an OPTIONAL sparse params object; SmartSuite fills type defaults, so most fields need no params. Provide params only where they matter, e.g.: singleselectfield/multipleselectfield/statusfield → {choices:[{label, value?, value_help_text?, weight?}]} where value is the stored option key (omit it and one is derived from the label, e.g. "Ready for Review" → "ready_for_review"; SmartSuite itself silently stores NO options for a choice that reaches it without a value) where value_help_text is the option DESCRIPTION shown in the dropdown and weight is its NUMERIC value (used by formulas/rollups); e.g. {choices:[{label:"High", value_help_text:"Ship this week", weight:3}]}. Choice colors and order are auto-assigned if omitted so the dropdown renders correctly (status choices take no weight/description); linkedrecordfield → {linked_application:"", entries_allowed:"single"|"multiple"} (REQUIRED — without it SmartSuite creates the field with a null target and an error badge, and still reports success; camelCase linkedApplication, as returned by describe_application, is accepted and converted; the reciprocal backlink field is auto-created on the target table immediately, but its VALUES are populated asynchronously — measured 15-45s after a link is written, so a read-back sooner than that shows [] on the reciprocal side and is not a failure); rollupfield → {linked_field:"", field_selection:"", function: exactly one of "sum"|"min"|"max"|"average"|"range" — there are no others. These are the only tokens that compute: SmartSuite accepts ANY string here without error and the field then returns null on every record, so a guessed token yields a field that looks valid and is silently empty. There is no "count" rollup (use a countfield to count linked records) and no "concatenate" (use a formula field with ARRAYJOIN([link].[field], "; ")). field_selection must point at a numeric field — a non-numeric target leaves the rollup invalid; lookupfield → {linked_field, field_selection}; countfield → {linked_field:""} — THE way to count linked records (there is no rollup "count"). SmartSuite fills every other default; add suffix/prefix/color to label the number, and field_filter:{operator:"and"|"or", fields:[{field, comparison, value}]} with include_filters:true for a CONDITIONAL count (e.g. only linked records whose status is not complete); numberfield → {precision, separator}; currencyfield → {currency:"USD"}; textfield → {max_length}. (For formula fields use smartsuite_create_formula_field.) AI FIELDS: to make a field AI-populated, pass aiPrompt — a plain-text prompt where {{field_slug}} inserts a live reference to another field (e.g. "Summarize {{title}} for {{s096c9e74e}}"). The tool builds the correct rich-text instructions with field-reference pills and enables the AI agent. The agent's OTHER settings go in params.ai_agent and are honoured as passed — name them explicitly, because the defaults matter: enable_internet_search (DEFAULT FALSE — an agent asked to find something online or cite a source cannot search unless you set this true, and will invent the answer), run_automatically (defaults true — the agent fills the field when a record is saved), and model (a credential reference of the form "cred:"; list them with smartsuite_list_automation_credentials). (This is the reliable way to set dynamic AI prompts — do NOT hand-build ai_agent.instructions.) The slug is generated and the field is placed in the record-view layout. Dry-run preview unless confirm:true.
Inputs: label (required), fieldType (required), applicationId (required), params, +2 more.
smartsuite_create_fieldsA
Create MULTIPLE fields in one call — use this instead of calling smartsuite_create_field repeatedly. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Pass applicationId and fields: an array of { fieldType, label, params?, aiPrompt? } entries with exactly the same shape and semantics as smartsuite_create_field (see that tool for the per-type params guide). Slugs are generated. Every entry is validated before anything is written, so a malformed entry fails the whole call cleanly rather than half-creating the batch. Note SmartSuite has no bulk add-field API, so this performs one request per field (~1s each — a 20-field batch takes ~20s); it is sequential on purpose, because parallel field adds get rate-limited and silently drop fields. If a field fails, the batch continues and the result reports every field individually with created:true/false plus the error, so you can re-call with just the failures. Fields append to the end of the table in the order given (SmartSuite ignores field positioning on create — use smartsuite_move_layout_field to rearrange). TO CREATE A TABLE AND ITS FIELDS TOGETHER, pass fields to smartsuite_create_application instead — that provisions all of them in a SINGLE request and is far faster. Dry-run preview unless confirm:true.
Inputs: fields (required), applicationId (required), confirm.
smartsuite_create_formA
Create a new form for a SmartSuite application. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. The label is checked for uniqueness and any supplied field slugs are validated against the application schema first. Without confirm:true returns a dry-run preview; set confirm:true to create. Optionally seed the first input page with fields and set form settings.
Inputs: label (required), applicationId (required), title, fields, +5 more.
smartsuite_create_formula_fieldA
Create a new formula field in a SmartSuite application. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. The expression is validated first — an invalid formula is never created — and a local lint pass reports the semantic traps SmartSuite's validator accepts (see smartsuite_validate_formula); those warnings are advisory and never block. Without confirm:true returns a dry-run preview (validation result + what would be created); set confirm:true to create. The field slug is generated automatically and the field is appended to the end of the table (SmartSuite ignores field positioning on create — use smartsuite_move_layout_field to rearrange).
Inputs: label (required), formula (required), applicationId (required), confirm, +1 more.
smartsuite_create_recordA
Create a new record in a SmartSuite application. Requires readwrite or admin mode. Call smartsuite_describe_application first to learn field slugs.
Inputs: fields (required), applicationId (required).
smartsuite_create_recordsA
Batch-create multiple records in one call. Requires readwrite or admin mode. Supports dry-run (default) then confirm. Respects the server batch-size cap (SMARTSUITE_MAX_BATCH_WRITES). Returns created record IDs and any per-row failures. Call smartsuite_describe_application first to learn field slugs.
Inputs: records (required), applicationId (required), dryRun, confirm.
smartsuite_create_solutionA
Create a new solution. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Only a name is required; the server assigns a slug, a default logo, and private-to-you permissions. Optionally set logoIcon and logoColor. Add tables to it with smartsuite_create_application. Dry-run preview unless confirm:true.
Inputs: name (required), confirm, logoIcon, logoColor.
smartsuite_create_viewA
Create a view (report) in an application. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply applicationId, label (must be unique — the tool checks and suggests an alternative if taken), and viewMode (grid, card, kanban, calendar, timeline, gantt, chart, map). Optionally set the initial configuration: visibleFields (array of field slugs), filters (array of {field, comparison, value}) with filterOperator ("and"/"or"), sort (array of {field, direction:"asc"|"desc"}), and groupBy (array of {field,...}). TWO MODES NEED A FIELD BINDING OR THEY OPEN UNUSABLE: a calendar requires dateField (a date-type slug) — without it the view is created, reports success, and shows nothing; a kanban requires stackBy (a status or single-select slug) for its columns — groupBy is a different axis and leaves the board with no columns (swimlaneBy sets the optional second axis). Both are reported back on the view and a missing one returns a warning. Omit config to create a view with SmartSuite defaults. Field slugs are validated against the schema. Dry-run preview unless confirm:true. (For forms use smartsuite_create_form; dashboards are separate.)
Inputs: label (required), viewMode (required), applicationId (required), sort, +9 more.
smartsuite_delete_automationADestructive
Delete an automation. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true AND SMARTSUITE_ENABLE_DELETE=true. Without confirm:true it returns a preview of what would be deleted; pass confirm:true to permanently delete. Destructive — cannot be undone.
Inputs: solutionId (required), automationId (required), confirm.
smartsuite_delete_dashboardA
Delete a dashboard and all its widgets. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true AND SMARTSUITE_ENABLE_DELETE=true. Refuses non-dashboard reports. Without confirm:true returns a preview; pass confirm:true to permanently delete. Destructive — cannot be undone.
Inputs: dashboardId (required), confirm.
smartsuite_delete_fieldADestructive
Delete a field from a table by slug. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true AND SMARTSUITE_ENABLE_DELETE=true. Destructive — removes the field and its data (system fields are refused). Useful e.g. to replace a formula field with a rollup: create the rollup, then delete the old formula. The response lists everything IN THIS TABLE that references the field — formulas, AI field prompts, rollup/lookup/count targets, filter conditions, display logic, and view configs — because SmartSuite deletes the field without repairing any of them and gives no warning; a dead reference only surfaces when someone opens the thing that broke. Automations and other tables are not checked. Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), confirm.
smartsuite_delete_recordsADestructive
Delete records (soft-delete to the trash). Requires readwrite or admin mode AND SMARTSUITE_ENABLE_DELETE=true. Supports dry-run. The response returns the deleted recordIds; they can be recovered with smartsuite_restore_records (when SMARTSUITE_ENABLE_RESTORE=true) or listed via smartsuite_list_deleted_records.
Inputs: recordIds (required), applicationId (required), dryRun, confirm, +1 more.
smartsuite_delete_viewA
Delete a view (report). Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true AND SMARTSUITE_ENABLE_DELETE=true. Refuses to delete the only remaining view of an application, and refuses forms/dashboards (use their own tools). Without confirm:true returns a preview; pass confirm:true to permanently delete. Destructive — cannot be undone.
Inputs: viewId (required), confirm.
smartsuite_describe_applicationARead-only
Describe a SmartSuite application schema, including field slugs, types, and options, plus the record term (custom record terminology). Always call this before creating or updating records so you know field slugs and valid values. Set includeLayout:true to also return the record-view layout (sections with collapse flags, and the field row arrangement of the active layout mode). TOKEN COST: the schema is large; a full table is ~1k+ tokens. The schema is STABLE within a session — call this once per table and reuse the result; do NOT re-describe the same application (use forceRefresh only after you change the schema). When you only need field slugs/types/choices (e.g. to build or query records), use verbosity:"compact" or the lighter smartsuite_list_fields instead of the default.
Inputs: applicationId (required), verbosity, forceRefresh, includeFields, +1 more.
smartsuite_describe_automationARead-only
Get the full configuration for one automation: trigger config and all action groups, plus name, enabled state, and timezone. Use smartsuite_list_automations to find automation IDs.
Inputs: solutionId (required), automationId (required).
smartsuite_describe_automation_stepARead-only
Resolve the full schema of one automation step — its trigger (default) or a chosen action — by calling the automation engine's dynamic description. For a trigger: returns label, inputs (with dropdown options), context outputs, the fields the trigger exposes to downstream actions, and the fields usable in conditions. For an action: returns label, integration, and inputs (with options). Use smartsuite_describe_automation first to see the action list; select an action with actionIndex or actionInstanceId. This view is for UNDERSTANDING a step (labels, types, option values) and is slimmed — do NOT feed it back into update_automation to edit an action; it omits full input encodings (e.g. an AI action's model), and saving a rebuild from it can strip those settings.
Inputs: solutionId (required), automationId (required), step, actionIndex, +1 more.
smartsuite_describe_dashboardARead-only
Get the full configuration for a single SmartSuite dashboard: tabs, footer/branding, style, and sharing settings. Set includeWidgets:true to also fetch every widget on every tab (type, name, position, size, and parsed params). Widget types include content widgets (hero, simple-banner, heading, faq, text-block, divider) and data widgets (chart, pivot, summary-card, progress, comparison, list-view, card-view, kanban-view, calendar-view, timeline-view, record-details, filter, data-schema).
Inputs: dashboardId (required), applicationId (required), includeWidgets.
smartsuite_describe_fieldARead-only
Get detailed metadata for a single field in a SmartSuite application, including help text, choice options, linked-record targets, and — for formula fields — the formula expression and its computed return type.
Inputs: fieldSlug (required), applicationId (required).
smartsuite_describe_formARead-only
Get the full structure of a SmartSuite form for review: settings (title, description, submit label, redirect, branding, logo), sharing (enabled, public URL, password protection), and the page-by-page layout. Each page is an input (form), review, or submission page. Input-page items are parsed into bound fields (slug, label, required, help text) and content elements (heading, html_block/paragraph, callout, consent, divider, image, video, recaptcha, pdf_viewer), including section groupings and conditional-visibility flags.
Inputs: formId (required), applicationId (required).
smartsuite_describe_viewARead-only
Get the full configuration for a single SmartSuite view: filters, sort, group-by, visible/collapsed fields, sharing/permission settings, and the raw view state. Use smartsuite_list_views to find view IDs.
Inputs: viewId (required), applicationId (required).
smartsuite_diagnosticsARead-only
Validate SmartSuite MCP server configuration and connectivity. Returns server version, mode, and account info. Does not return the API key.
Inputs: no named parameters.
smartsuite_diff_schemasARead-only
Step 3 of solution migration: compare table/field schemas (lower → prod) for confirmed mappings and write the diff package. Fields match by slug (stable across cloned workspaces); cross-table references are remapped via the table map and system-generated values are ignored, so only real differences surface. With scope "all" (default) it also diffs views and forms in full and dashboards at the report-config level (matched by name); scope "schema" limits to tables + fields. Classifies added / removed / modified (with per-property detail and compatible/risky risk). Writes diff.json and returns a summary.
Inputs: project (required), scope, solution.
smartsuite_export_diffARead-only
Step 4 of solution migration: render the project diff as a human-readable XLSX (summary tab + per-change detail) alongside the JSON. Run smartsuite_diff_schemas first. Returns the written file paths.
Inputs: project (required), format.
smartsuite_get_automation_limitsARead-only
Get the workspace's automation run usage and plan limit (account-wide). Returns plan category (e.g. enterprise), the automation run limit, runs used, remaining, percent used, and whether the limit is enforced. Use this for "how much of our automation quota are we using?" and plan-type questions.
Inputs: no named parameters.
smartsuite_get_file_urlARead-only
Resolve a SmartSuite file handle to a signed CDN download URL. SmartSuite file fields (type: filefield) return an array of file objects — each has a "handle" property. Pass that handle here to get a temporary URL for downloading the file. Example field value: [{ "handle": "abc123", "filename": "report.pdf", "size": 12345, "mimetype": "application/pdf" }] Note: a file handle is not scoped to a solution, so this tool is disabled when a solution/application allowlist (SMARTSUITE_ALLOWED_SOLUTIONS / SMARTSUITE_ALLOWED_APPLICATIONS) is configured.
Inputs: fileHandle (required).
smartsuite_get_recordARead-only
Get a single SmartSuite record by ID.
Inputs: recordId (required), applicationId (required), fields, includeFieldContext.
smartsuite_get_smartdoc_contentARead-only
Retrieve the content of a SmartDoc field as plain text and raw value.
Inputs: recordId (required), fieldSlug (required), applicationId (required).
smartsuite_get_solutionARead-only
Get details for a specific SmartSuite solution.
Inputs: solutionId (required).
smartsuite_list_applicationsARead-only
List SmartSuite applications (tables). Optionally filter by solution. Returns full table objects by default (heavy — includes each table's field structure); set slim:true to return only {id, name, slug, solution, fieldCount}, which is the safe way to inventory a multi-table solution without exceeding the token budget. The response includes a total (pre-limit count).
Inputs: slim, limit, solutionId.
smartsuite_list_automation_credentialsARead-only
List the integration credentials configured for a solution's automations (e.g. Gmail, Slack, Microsoft Teams, webhooks, SmartSuite). Returns each credential's id, integration, auth method, and label. Use this to review which external integrations a solution's automations connect to.
Inputs: solutionId (required).
smartsuite_list_automationsARead-only
List automations for a solution. Automations are scoped per solution (not per table). Returns each automation's id, name, enabled state, trigger reference, action count/types, and generated description.
Inputs: solutionId (required).
smartsuite_list_commentsBRead-only
List comments on a SmartSuite record.
Inputs: recordId (required), applicationId (required), limit, cursor.
smartsuite_list_dashboardsARead-only
List dashboards for a SmartSuite application. Returns id, name, description, order, tab count, and the tab list (id/name/order) for each dashboard. Use smartsuite_describe_dashboard for branding and widget detail.
Inputs: applicationId (required).
smartsuite_list_deleted_applicationsARead-only
List soft-deleted applications (tables) in a solution's trash (read-only). Returns id, name, and recordTerm for each. Note: SmartSuite exposes no public endpoint to restore a deleted application, so this is listing only (restore a table from the SmartSuite UI).
Inputs: solutionId (required).
smartsuite_list_deleted_fieldsARead-only
List soft-deleted fields in a solution (read-only). Returns each deleted field's slug, label, and fieldType. Solution-scoped — the API does not attribute deleted fields to their source application, so results are not app-filtered. Restore one with smartsuite_restore_field (supplying the applicationId it belonged to).
Inputs: solutionId (required).
smartsuite_list_deleted_recordsARead-only
List soft-deleted records in a solution's trash (read-only). Solution-scoped — spans all applications in the solution; pass applicationId to filter to one. Returns id, title, applicationId, applicationName, deletedBy (member id), and deletedAt. Use the returned ids with smartsuite_restore_records. Respects allow/deny lists.
Inputs: solutionId (required), cursor, fields, pageSize, +1 more.
smartsuite_list_fieldsARead-only
List a SmartSuite application's fields as a token-lean column list: slug, label, type, choice options (value+label), and linked-app targets — omitting help text and false flags. Cheapest way to learn a table's fields; prefer this over smartsuite_describe_application when you just need field slugs/types/choices and not the record layout or help text. The result is stable within a session — call once per table and reuse it.
Inputs: applicationId (required).
smartsuite_list_formsARead-only
List forms (form-type report views) for a SmartSuite application. Returns each form's id, name, description, page count, bound-field count, sharing state, and public form URL (when sharing is enabled). Forms are how external/internal users submit records; in ITSM dashboards they are launched from button-row widgets.
Inputs: applicationId (required).
smartsuite_list_my_workARead-only
List the authenticated user's assigned work ("My Work") — comment mentions, assigned checklist items, and records assigned via people fields — for answering questions like "what's on my plate?", "how many open items are overdue?", or "what's assigned to me in this solution?". Returns a summary (totals, overdue count, breakdowns by item type / priority / solution) plus the items themselves (with a truncated text preview). Defaults to open items; set status:"resolved" for completed work (which also returns per-period counts).
Inputs: limit, period, status, itemType, +4 more.
smartsuite_list_recordsARead-only
List records from a SmartSuite application. Use smartsuite_describe_application first to learn field slugs. For large result sets, pass format:"compact" and a fields projection to cut token usage substantially.
Inputs: applicationId (required), ids, sort, limit, +4 more.
smartsuite_list_solution_membersARead-only
List the members available to a solution (id, name, email, job title, status). These are the members automations can assign work to or run as. Also useful for resolving member ids seen in records, assignments, and credentials.
Inputs: solutionId (required).
smartsuite_list_solutionsARead-only
List SmartSuite solutions (workspaces) accessible to the authenticated user.
Inputs: limit, cursor.
smartsuite_list_viewsARead-only
List views for a SmartSuite application (grid, kanban, calendar, timeline, gantt, map, chart, form). Dashboards are excluded — use smartsuite_list_dashboards for those. Returns a slim list by default: id, name, type, description, order, and isDefault (the lowest-order view, inferred since SmartSuite has no explicit default flag). Set includeConfig:true to also return each view's filters, sort, group-by, and visible/collapsed fields.
Inputs: applicationId (required), includeConfig.
smartsuite_match_applicationsBRead-only
Step 2 of solution migration: for one confirmed solution pair, match its tables (applications) by exact name (table ids AND slugs both regenerate across workspaces, so name is the only handle). Same confirm/overrides flow as match_solutions. Persists the lower→prod table-id map into the project.
Inputs: project (required), solution (required), confirm, overrides.
smartsuite_match_solutionsARead-only
Step 1 of solution migration: match solutions in a lower-environment workspace to those in your primary (production) workspace by exact name, since object ids differ across workspaces. Set your primary workspace to production (the migration target). Requires SMARTSUITE_ENABLE_CROSS_WORKSPACE. Without confirm, returns proposed matches (exact / ambiguous / unmatched) for review. Re-call with confirm:true to confirm unambiguous matches, and overrides:[{sourceId,prodId}] to resolve ambiguous/unmatched ones. Persists to a project mapping file.
Inputs: project (required), sourceWorkspace (required), confirm, overrides, +1 more.
smartsuite_move_attachmentsA
Move attachments (files) from one file field to another. Requires readwrite/admin mode. Copies the source field's files into the target field (handles reference existing storage — no re-upload) and clears the source. Target one record with recordId, or every record that has source files with allRecords:true (capped at SMARTSUITE_MAX_RECORDS). mode "append" (default) keeps the target's existing files; "replace" overwrites. Set clearSource:false to copy instead of move. Both fields must be filefield type. Dry-run preview unless confirm:true.
Inputs: applicationId (required), sourceFieldSlug (required), targetFieldSlug (required), mode, +4 more.
smartsuite_move_layout_fieldA
Move/arrange a field in the record-view layout — reorder it, place it under a section, or move it to a different tab. Requires readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE. To move a field to ANOTHER tab, pass toTab = the destination tab id: the field is removed from its current tab and added to the destination (this is the cross-tab move — plain reorder can't pull a field in from another tab). Otherwise it reorders within the current layout. Pass afterField = a field slug OR a section__ slug to position this field right after it (right after a section marker = first field under that section); omit afterField for the end. In two-column layouts the field is placed alone in its row — which is NOT the same as full width: the column span lives on the field as params.width (1 = half, so the row renders with an empty right slot; 2 = spans both columns). Pass fullWidth:true/false to set it; that is a change_field write, so with fullWidth and no afterField/toTab this only changes the span and does not reorder anything. When tabs are enabled and toTab is NOT used, tabId is required (a tab id, "all", or "top") — with tabs on, the record view renders per-tab layouts, so a top-level edit is saved but invisible. Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), tabId, toTab, +3 more.
smartsuite_normalize_dashboard_widgetsA
Repair a dashboard's widgets: reset them to their natural per-type size and/or re-stack them to remove overlaps. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Fixes dashboards built with wrong sizes (e.g. metric cards left too tall — which re-saving in the UI does not correct) or with widgets piled on top of each other (all near position (0,0), so they overlap and hide each other). Dry-run preview (before→after per widget) unless confirm:true. SIZE: by default HEIGHT is normalized; dimension:"both" also fixes width; restrict with widgetTypes (e.g. ["summary-card-widget"]). REFLOW: pass reflow:true to re-lay-out the tab — widgets sharing the same current row (same position_y) are kept side-by-side, and rows are stacked top-to-bottom by their tallest widget so nothing overlaps (reflow repositions ALL widgets on the tab, regardless of widgetTypes). Use tabId to limit to one tab.
Inputs: dashboardId (required), tabId, reflow, confirm, +2 more.
smartsuite_query_recordsARead-only
Query records using a structured SmartSuite filter. Use smartsuite_describe_application first to learn field slugs and valid values for choice fields.
Inputs: filter (required), applicationId (required), sort, limit, +4 more.
smartsuite_remove_dashboard_widgetA
Remove a widget from a dashboard. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true AND SMARTSUITE_ENABLE_DELETE=true. Without confirm:true returns a preview; pass confirm:true to permanently delete. Destructive — cannot be undone.
Inputs: widgetId (required), confirm.
smartsuite_remove_layout_fieldA
Remove a field's PLACEMENT from the record-view layout without deleting the field. Requires readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE. Its main use is clearing ORPHANED layout entries — slugs still laid out after the underlying field was deleted, which nothing else can reach (delete_field 404s because the field is already gone, and move_layout_field refuses a slug that is not in the schema). Pass removeOrphans:true to clear every orphaned entry at once, or slug to remove one specific placement; a dry run lists any orphans it finds either way. Removing the placement of a field that still exists hides it from the record view (the field and its data are untouched) and is called out in the preview. Dry-run preview unless confirm:true.
Inputs: applicationId (required), slug, tabId, confirm, +1 more.
smartsuite_remove_layout_sectionADestructive
Remove a section from an application's record-view layout by its section__… slug. Requires schema-write. Removes only the section grouping; fields that were under it are preserved (they just rejoin the surrounding layout). Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), tabId, confirm.
smartsuite_remove_layout_tabADestructive
Remove a tab from an application's record-view layout by its tab id. Requires schema-write. Fields remain in the top-level layout (not deleted). Removing the last tab disables tabs. Dry-run preview unless confirm:true.
Inputs: tabId (required), applicationId (required), confirm.
smartsuite_restore_fieldA
Restore a soft-deleted field back into its application. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply the applicationId the field belonged to and its slug (from smartsuite_list_deleted_fields). Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), confirm.
smartsuite_restore_recordsA
Restore soft-deleted records from the trash. Requires readwrite or admin mode AND SMARTSUITE_ENABLE_RESTORE=true. Without confirm:true returns a preview; pass confirm:true to restore. Get record IDs from the smartsuite_delete_records response, the audit log, or smartsuite_list_deleted_records.
Inputs: recordIds (required), applicationId (required), confirm.
smartsuite_search_recordsBRead-only
Search records using a text query across specified fields.
Inputs: query (required), applicationId (required), limit, cursor, +3 more.
smartsuite_set_automation_ai_promptA
Set the dynamic prompt on an automation's AI ("AI Workflow Agent" / ai-custom-prompt) action. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Supply promptTemplate as plain text where {{field_slug}} inserts a live reference to a field (resolved against applicationId — the table the automation works on). The tool builds the correct rich-text prompt (with field-reference pills) and writes it to the action, leaving the rest of the automation intact — this is the reliable way to author workflow AI prompts (do NOT hand-build the prompt). If the automation has multiple AI actions, pass actionInstanceId. Dry-run preview unless confirm:true. (Reads via GetAutomation, so it works even in solutions where listing automations fails.)
Inputs: solutionId (required), automationId (required), applicationId (required), promptTemplate (required), +2 more.
smartsuite_set_display_logicA
Add, modify, or remove display (visibility) logic on a field, section, or tab — show it only when conditions on other fields are met. Requires readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE. Set target ("field"|"section"|"tab") + targetId (field slug / section__ slug / tab id) and conditions: an array of {comparison, field, value} combined by operator ("and"/"or"); pass clear:true to remove the rule. Example: show the Priority field only when Status is complete → target:"field", targetId:"priority", conditions:[{comparison:"is", field:"status", value:"complete"}]. Common comparisons: is, is_not, is_empty, is_not_empty, contains. Dry-run preview unless confirm:true.
Inputs: target (required), targetId (required), applicationId (required), clear, +3 more.
smartsuite_set_field_help_textA
Set or modify a field's help text (any field type). Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. helpText is lightweight markdown — paragraphs (blank-line separated), bullet lists (-/*), ordered lists (1.), and inline bold / italic — converted to SmartSuite's rich help_doc. Pass helpText:"" to clear it. displayFormat controls how it shows: "tooltip" (info icon) or "below_field_name". The full field definition is read and rewritten (other params preserved). Applies asynchronously. Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), confirm, helpText, +1 more.
smartsuite_set_field_visibilityA
Hide or show a field in the record view. Requires readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE. hidden:true hides the field (adds it to the layout's record-wide hidden_fields list); hidden:false shows it. Hidden fields stay in the layout structure but aren't displayed; this is record-wide (not per-tab). Dry-run preview unless confirm:true.
Inputs: slug (required), hidden (required), applicationId (required), confirm.
smartsuite_submit_formA
Submit a SmartSuite form — creates a record through the form's submission pipeline, exactly as a user filling out the form would. Two-step: call WITHOUT values to get the form's input spec (fields to collect, with type and choice hints); then call WITH values (keyed by field slug, using normal SmartSuite record value shapes) to submit. Validates that supplied fields are on the form and that required fields are present. Submitting requires readwrite or admin mode (it creates a record).
Inputs: formId (required), applicationId (required), values.
smartsuite_update_applicationA
Update table (application) attributes — rename the table (name) and/or change its record term (e.g. "record" → "invoice"). Requires readwrite/admin + SMARTSUITE_ENABLE_SCHEMA_WRITE. Dry-run preview unless confirm:true. (This is the table rename tool; for field renames use smartsuite_update_field.)
Inputs: applicationId (required), name, confirm, recordTerm.
smartsuite_update_automationA
Update an existing automation. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Fetches the current automation and applies only the fields you provide — label, trigger, actionGroups/actions, automaticDescription, timezone — preserving the rest (including first_created and the untouched trigger/actions). Pass credentialId to fill missing credentials. IMPORTANT — preserve fidelity: trigger and action groups you supply REPLACE the existing ones wholesale (no per-action merge). To change only the label/description, OMIT trigger and actions so they are preserved byte-for-byte. Do NOT rebuild an action or trigger from smartsuite_describe_automation_step output — that view is SLIMMED (it drops input encodings such as an AI action's model setting); reconstructing from it and saving will strip those settings and can leave the automation invalid (which the engine then marks disabled). If you must edit one action, start from the raw automation object and change only the target input. The enabled state is engine-computed from validity — you cannot set it directly; a disabled result means the automation is invalid (see the returned statusReason).
Inputs: solutionId (required), automationId (required), label, actions, +5 more.
smartsuite_update_dashboardA
Update a dashboard: rename (label), change description, and/or edit tabs, footer, and style. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. tabs REPLACES the tab set — pass the full desired list as {id?, name, order?}; include a tab's existing id to rename/reorder it (get ids from smartsuite_describe_dashboard), omit id to add a new tab, drop a tab to remove it (its widgets go too). tabsEnabled toggles the tab bar; tabsPosition is "left"/"top". footer/style are merged onto the existing config.
Inputs: dashboardId (required), tabs, label, style, +4 more.
smartsuite_update_dashboard_widgetA
params is MERGED onto the widget's existing params, so a partial patch (e.g. just chart_type) changes only what it names — the API itself replaces params wholesale and rejects a partial patch with "Field required" for everything omitted. Update a dashboard widget's settings and/or layout. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Change position {x,y} and size {width,height} to move/resize (x/width columns, y/height pixels), rename (name), toggle showName/collapsedByDefault, set color/description, move to another tab (tabId), or replace params. NOTE: params is replaced wholesale — to tweak it, read the widget first via smartsuite_describe_dashboard(includeWidgets:true) and pass the full new params object. Updating params can also reset the widget height, so pass size in the same call to preserve it.
Inputs: widgetId (required), name, size, color, +6 more.
smartsuite_update_fieldA
Update a field's label and/or params (any type). Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. params is a PATCH — only the keys you pass are changed (shallow-merged onto the existing params); everything else (choices, nested, links) is preserved. Read the field first with smartsuite_describe_field to see current params. Note: choices is replaced wholesale, not merged — to edit select options pass the FULL choices array (each choice may set value_help_text=description and weight=numeric value; colors auto-assigned if omitted). Applies asynchronously. Dry-run preview unless confirm:true. (For help text use smartsuite_set_field_help_text; for formula expressions use smartsuite_update_formula_field.) AI PROMPT: pass aiPrompt (plain text with {{field_slug}} references) to (re)build the field's dynamic AI instructions; it preserves the existing ai_agent model/settings and replaces only the prompt.
Inputs: slug (required), applicationId (required), label, params, +2 more.
smartsuite_update_formA
Update a form's settings and/or structure. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Provide any of: settings (title/description/submitLabel/redirectToUrl/displaySmartSuiteBranding) to merge; fields to replace the first input page's fields (slugs validated against the schema); or formState as a full raw form_state object (advanced escape hatch, replaces everything). Without confirm:true returns a dry-run preview; set confirm:true to apply.
Inputs: formId (required), applicationId (required), title, fields, +6 more.
smartsuite_update_formula_fieldA
Update an existing formula field's expression, label, and/or return type. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. The current definition is fetched and only the supplied fields are changed (other params preserved). The new expression is validated first, and linted for the semantic traps SmartSuite accepts as valid (advisory only). Without confirm:true returns a dry-run preview (new vs previous); set confirm:true to apply.
Inputs: fieldSlug (required), applicationId (required), label, confirm, +2 more.
smartsuite_update_layout_sectionA
Update an existing record-view layout section (title, description, collapsed, hidden) by its section__… slug. Requires schema-write. Pass description:"" to clear it. Dry-run preview unless confirm:true.
Inputs: slug (required), applicationId (required), tabId, title, +4 more.
smartsuite_update_layout_tabA
Update a record-view tab (name, description, position) by its tab id, and/or the tab-bar style/align. Requires schema-write. Pass description:"" to clear it. Dry-run preview unless confirm:true.
Inputs: tabId (required), applicationId (required), name, align, +4 more.
smartsuite_update_my_workA
Update one of the authenticated user's My Work items: mark it resolved/open and/or set its due date. Requires readwrite or admin mode. Use smartsuite_list_my_work to find the item id. Returns the updated item.
Inputs: itemId (required), status, dueDate.
smartsuite_update_recordA
Update an existing record. Requires readwrite or admin mode. Only supply fields you want to change.
Inputs: fields (required), recordId (required), applicationId (required).
smartsuite_update_recordsA
Batch update multiple records. Supports dry-run mode. Requires readwrite or admin mode.
Inputs: records (required), applicationId (required), dryRun, confirm.
smartsuite_update_viewA
Update a view (report): rename it (label), change its description, and/or change its configuration — visibleFields, filters (+filterOperator), sort, groupBy. Requires readwrite/admin mode AND SMARTSUITE_ENABLE_SCHEMA_WRITE=true. Only the parts you pass are changed; each provided config window replaces that window (e.g. passing sort replaces the sort rules). Field slugs are validated. Refuses forms/dashboards (use their own tools). Use smartsuite_list_views / smartsuite_describe_view to find the viewId and current settings.
Inputs: viewId (required), sort, label, filters, +7 more.
smartsuite_upload_fileA
Upload a file from the local filesystem to a SmartSuite file field. Requires readwrite or admin mode. The file is read from the local path and posted as multipart form data.
Inputs: filePath (required), recordId (required), fieldSlug (required), applicationId (required), +1 more.
smartsuite_validate_automationARead-only
Check an automation for the errors SmartSuite shows inline in the automation list — most importantly "Trigger output with id not found", which means an action still references a trigger output (a field) that no longer exists (the field was deleted or its slug changed), so the automation is broken. Reproduces the UI check: resolves the trigger's current outputs and flags every action-input reference to a missing trigger output. Returns userEnabled (the ON/OFF toggle), status (engine validity: enabled/disabled/pending + reason), valid, and an errors[] list (each with the missing outputId and where it is used). Read-only. Works even in solutions where listing automations fails (uses GetAutomation).
Inputs: solutionId (required), automationId (required).
smartsuite_validate_formulaARead-only
Validate a SmartSuite formula expression against an application WITHOUT writing anything (safe in any mode). Returns {valid, safe, warnings} when valid, or a descriptive error message when not (syntax errors, unknown functions, missing field references). Field references use [slug] and chain across linked/compound fields as [slug].[slug]. Use this to check a formula before creating or updating a field. Also runs a local lint pass for the traps SmartSuite accepts as valid (reversed DATEDIFF, FIND(...)>0, percent fields divided by 100, 1-based MID, unwrapped array functions, LOG/CEILING argument confusion) and returns them as advisory lint warnings.
Inputs: formula (required), applicationId (required), returnType.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 86 tools
Most tools target a distinct resource+action (list_records, create_record, delete_field, add_layout_tab, etc.), and descriptions clarify boundaries well. There are a few genuinely overlapping clusters — list_records/search_records/query_records for reading, and create_field/create_fields/create_formula_field for writing — but the descriptions explicitly steer between them.
Every tool follows the identical smartsuite_verb_noun convention (smartsuite_list_records, smartsuite_create_view, smartsuite_update_automation). Verb choices are stable (list/get/create/update/delete/describe) and readable throughout.
86 tools is far beyond the 3-15 sweet spot and heavy even for a large platform surface. While the server covers many distinct subdomains (records, fields, views, forms, dashboards, automations, layout, migration), the volume makes discovery and selection costly.
Coverage is exceptional: full CRUD plus restore for records and fields, views, forms, dashboards/widgets, automations, layout sections/tabs/fields, comments, files, and a full migration workflow. Almost no dead ends in the described domain.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP gateway and cloud hosting for MCP servers, agents and apps like RAG, managed from your agent.
Cloud-hosted MCP server for secure AI access to enterprise data sources via CData Connect AI.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA governed MCP server for integrating AI agents with customer data, featuring role-based access control, field redaction, and human-in-the-loop approval for secure support operations.1-
- FlicenseNot gradedqualityDmaintenanceA local MCP server that provides controlled repository access with policy-based file filtering, secret redaction, and audit logging for AI coding agents.-
- FlicenseNot gradedqualityDmaintenanceA single MCP server that exposes safe, permission-checked tools for AI assistants to reach file systems, databases, APIs, Git, cloud services, and business applications.-
- AlicenseNot gradedqualityBmaintenanceA local-first MCP server that lets AI agents use gated APIs without holding keys, enforcing declarative policies, injecting secrets server-side, and auditing access without content.684 npm3Apache 2.0