submit_activity will not run without an ai object naming the reasoning, the model and a confidence, and that number is measured against the activity's own threshold rather than a global one, so the same call can pass in one workflow and stop in another. get_entry_history keeps that context on the record afterwards, which is what makes an agent-driven edit auditable later. The tools also push back on invention rather than trusting the caller: get_form says to omit user values that match no field and note the omission instead of fabricating form data. One tool is present but inert — scaffold_module returns a structured capability_unavailable message on this backend and sends you to design_workflow.
An MCP surface over an Inistate workspace in 21 tools, covering workspace and module discovery, entry queries, activities that move an entry through its states, file upload and download, module design and validation, and a switchable tool surface.
- A session opening that skips a step when it can: list_workspaces selects the workspace and returns its module list outright when exactly one matches, set_workspace returns that list too so list_modules is only for a refresh, and any tool accepts workspaceId directly for stateless operation.
- Two depths of schema: get_module_schema at tier=basic returns fields and states for query work, tier=extended adds activities and flows, and both carry the listings you can access with their designed filter in the same shape as list_entries takes; get_module_canvas returns the full definition with stable IDs and is round-trippable back through update_module.
- Filtering by the names on the form rather than internal keys: list_entries takes field display names as filter keys, with equality values or operator objects — contains, startsWith, endsWith, min, max, above, below, between, after, before, empty, exists, yes, no, is, not, excludes — {or:[…]} for OR, AND across keys, and 'me' for a User-field self-match.
- Transitions that carry their own justification: submit_activity requires an ai object of reasoning, model and confidence, and that confidence is compared against the activity's own threshold before the transition goes through; get_entry_history returns creates, edits, state changes and comments with field-level detail and the AI traceability context attached.
- A bulk path that costs one turn: submit_activities applies one activity across many entries, each item with its own input, running sequentially and failing soft on the server so one bad item does not abort the ones behind it, with a per-item ai object replacing the top-level default outright.
- Uploads over a presigned route: request_upload_url is the default path for files up to 500MB and returns an uploadUrl valid for around an hour, confirm_upload verifies the object and returns the path used as a File or Image field value, and upload_file is the base64 fallback capped at 50MB with .exe, .bat, .cmd, .dll and .msi blocked.
- Module design end to end: design_workflow scaffolds a ModuleSchema from a natural-language description and an industry, validate_design checks a draft without submitting it, create_module builds either a workflow module or a fields-only record list, and update_module replaces whole sections matched by id so renaming survives.
- A tool surface you can change mid-session: switch_mode moves between configure (entry CRUD plus module design), runtime (entry CRUD plus get_module_schema) and frontend, which adds a REST reference for building a custom Vue or React UI against the Inistate API.
An Inistate workspace and an API token, supplied as INISTATE_API_TOKEN. create_module needs an Administrator, Consultant or Workspace Admin role on top of that.
One command plus a key — npx -y inistate-mcp, then supply credentials
