# Inistate MCP (npm · inistate-mcp)

MCP server for the Inistate platform: module discovery, entry management, and activity submission.

- Trust score: 69/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.inistate.com`: 36/100, [markdown](https://verifymcp.io/servers/inistate-inistate-mcp/mcp.md), [page](https://verifymcp.io/servers/inistate-inistate-mcp/mcp)
- npm · `inistate-mcp`: 69/100 (this document), [markdown](https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp.md), [page](https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp)

## Channel facts

- Registry: `npm`
- Package: `inistate-mcp`
- Version: `1.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (97 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (97 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 38 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4060 tokens (~156/item across 26 items; 21 tools + 5 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 83% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add inistate-inistate-mcp -- npx -y inistate-mcp
```

### Codex

```bash
codex mcp add inistate-inistate-mcp -- npx -y inistate-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "inistate-inistate-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "inistate-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add inistate-inistate-mcp --command npx --arg -y --arg inistate-mcp
```

### Hermes

```yaml
mcp_servers:
  inistate-inistate-mcp:
    command: "npx"
    args: ["-y", "inistate-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "inistate-inistate-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "inistate-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 69, +26)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional regression] Maintenance: pass → unverified
- [functional regression] License: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 43, −11)

- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-31 (score 54, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 49, −31)

- [security regression] Known CVEs: partial → unverified
- [security regression] Malware scan: pass → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-29 (score 80, +30)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: Apache-2.0

### 2026-07-27 (score 50)

First indexed and scored.

## MCP tools (21)

### `list_workspaces` (~72 tokens)

List Workspaces

List workspaces the current user has access to. Typically the first call of a session. If exactly one workspace matches, it is selected automatically and its module list is returned — no set_workspace or list_modules needed; otherwise call set_workspace next.

Input parameters:

- `search` (string): Optional name filter (case-insensitive)

### `set_workspace` (~147 tokens)

Set Active Workspace

Set the active workspace for the current session. The response includes the workspace's module list — go straight to list_entries / get_form / get_module_schema with those names; list_modules is only needed to refresh. In stateless/remote mode, prefer passing workspaceId directly to each tool instead.

Workflow sequences after workspace is set:
\- Design: design_workflow → create_module (validates internally)
\- Execute: list_entries → get_form → submit_activity
\- Modify: get_module_canvas → validate_design → update_module
\- Query: list_entries → get_entry / get_entry_history

Input parameters:

- `workspaceId` (string|number, required): Workspace ID (or exact name) from list_workspaces

### `list_modules` (~70 tokens)

List Modules

List all discoverable modules in the current workspace. set_workspace already returns this list — call this only to refresh it or when operating stateless without set_workspace.

Input parameters:

- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `get_module_schema` (~121 tokens)

Get Module Schema

Get the canvas schema for a module. Use tier=basic (default) for fields and states only. Use tier=extended to also include activities and flows. Use basic for query operations. Use extended when you need to understand available activities and state transitions.

Input parameters:

- `module` (string, required): Module name from list_modules
- `tier` (string): basic = fields + states. extended = + activities and flows.
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `get_module_canvas` (~130 tokens)

Get Module Canvas

Get the full module definition with stable IDs. The output is round-trippable — modify and send back via update_module. Use this when modifying a module to preserve IDs for renaming.

Modify workflow: list_modules → get_module_canvas → (apply changes) → validate_design → update_module.
Load resource inistate://schema before modifying to know valid field types, colors, and actors.

Input parameters:

- `module` (string, required): Module name or numeric ID
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `list_entries` (~336 tokens)

List Entries

Query entries with filters, sorting, pagination. Filter keys are field display names; values are equality (simple) or operator objects (contains/startsWith/endsWith/min/max/above/below/between/after/before/empty/exists/yes/no/is/not/excludes). Use {or:[…]} for OR; multiple keys are AND-ed. Use 'me' for User-field self-match. See FilterOperators in inistate://schema/runtime for the full set.

Token control: use `fields` to restrict the returned `data` to just the columns you need. For modules with many fields this can shrink the response by an order of magnitude. System fields (id, state, audit metadata, etc.) are always returned regardless.

Input parameters:

- `currentPage` (integer)
- `fields` (array): Field display names (or raw field names) to include in each entry's `data`. Strongly preferred over returning everything when the module has many or large fields — prunes both DB I/O and response tok…
- `filters` (object)
- `module` (string, required): Module name from list_modules
- `pageSize` (integer): Default 50, max 500
- `search` (string): Free-text against document ID and indexed text fields
- `sortBy` (string)
- `sortDirection` (string)
- `state` (string)
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `get_entry` (~84 tokens)

Get Entry

Read a single entry by its ID. Returns current field values, state, audit metadata, and available activities.

Input parameters:

- `entryId` (string|number, required): Entry ID
- `module` (string, required): Module name from list_modules
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `get_form` (~173 tokens)

Get Activity Form

Get the form fields, current values, and options for a module activity. Call this before the FIRST submit_activity on each (module, activity) pair — the form schema is stable within a session, so reuse it for subsequent entries (per-entry current values come from get_entry/list_entries). Never fabricate form data — if required fields cannot be confidently populated, ask the user.

Input parameters:

- `activity` (string): Activity name: create, edit, view, or any custom activity name from get_module_schema
- `entryId` (string|number|null): Entry ID for edit/view/custom activities. Omit for create.
- `module` (string, required): Module name from list_modules
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `submit_activity` (~415 tokens)

Submit Activity

Perform an activity on a module entry: standard (create [no entryId], edit, delete, changeStatus, comment, duplicate, manage) or any custom activity from get_module_schema. Call get_form before the first submission per (module, activity); reuse its schema for further entries. The `ai` object is REQUIRED (reasoning + model + confidence). If confidence < the activity's threshold, the transition is suppressed and the entry is flagged. Server-side guard rules (human/hybrid actor, state-change confirm, confidence-inflation) may block — see inistate://guardrails. Input shapes: ActivitySubmission in inistate://schema/runtime.

Input parameters:

- `activity` (string)
- `ai` (object, required): REQUIRED — AI agent traceability
- `assignees` (array): Usernames
- `comment` (string): Optional. Add only when it carries information not already in the field values or reasoning. Keep short and precise.
- `confirmed` (boolean): Set true only after explicit user authorization. Required for: changeStatus, state override, hybrid actor, retry after flag. Does not unlock human-actor activities. See inistate://guardrails.
- `due` (string): ISO 8601
- `entryId` (string|number): Omit for create
- `entryIds` (array): For bulk ops
- `input` (object): Field values keyed by display name. File/Image: {name,path}. Module: {id,value} (both required). User: {id,value,username} (all three required). Plural variants (Users/Modules/Files/Images): arrays o…
- `module` (string, required)
- `state` (string): Target state name
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `submit_activities` (~320 tokens)

Submit Activities (Bulk)

Bulk variant of submit_activity: one module + one activity applied to many entries, each item with its own input. Use instead of N sequential submit_activity calls when creating/editing many rows — one tool turn instead of N. A per-item `ai` wholly replaces the top-level default (no partial merge). Items run sequentially fail-soft on the server: one failure does not abort the rest; per-item outcomes (success, entryId, flagged, validation details) return in `results` — use `clientRef` to correlate. Max 100 items; chunk beyond that. Guardrails match submit_activity at batch level: actor='human' rejects the whole batch; actor='hybrid', activity='changeStatus', or any state override (top-level or per-item) requires `confirmed: true`.

Input parameters:

- `activity` (string)
- `ai` (object, required): Default AI traceability applied to every item that does not specify its own. Same field semantics as submit_activity.ai.
- `confirmed` (boolean): REQUIRED when the activity is 'changeStatus', any per-item or top-level `state` override is supplied, or the activity's actor is 'hybrid'. Set true ONLY after surfacing the planned bulk action to the…
- `items` (array, required): 1-100 items. Each item carries only what differs from the top-level activity.
- `module` (string, required)
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `get_entry_history` (~121 tokens)

Get Entry History

Get the audit trail and comments for an entry. Returns chronological list of actions (create, edit, state changes, comments) with field-level change details and AI traceability context.

Input parameters:

- `entryId` (string|number, required): Entry ID to get history for
- `module` (string, required): Module name from list_modules
- `page` (integer): Page number (0-based, 50 items per page)
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `upload_file` (~180 tokens)

Upload File (Fallback)

FALLBACK ONLY — use request_upload_url + confirm_upload first; call this only after that presigned flow has actually failed. Uploads via base64. Returns { path, filename, mimeType, size } — use path as the File/Image field value in submit_activity. Max 50MB. Blocked: .exe, .bat, .cmd, .dll, .msi.

Input parameters:

- `file` (string, required): Base64-encoded file content
- `mimeType` (string): MIME type of the file
- `module` (string, required): Module name. Required — scopes the file to the module's storage folder.
- `name` (string, required): Original filename (e.g. 'report.pdf')
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `download_file` (~118 tokens)

Download File

Download a file by module name. Construct the URL from a File/Image field value: field.path = '/s/{guid}/{fileName}'. Returns a pre-signed S3 URL (1hr TTL).

Input parameters:

- `fileName` (string, required): Original filename
- `guid` (string, required): Short ID from the file URL
- `moduleName` (string, required): Module name (resolved to vectorId internally)
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `request_upload_url` (~226 tokens)

Request Upload URL

DEFAULT upload path for every file (up to 500MB); upload_file is only the fallback if this flow fails. Flow: 1) call this tool, 2) PUT the raw bytes to uploadUrl with Content-Type exactly matching contentType (S3 rejects mismatches with 403), 3) call confirm_upload({ s3Key }) — its returned path is the File/Image field value for submit_activity. uploadUrl expires in ~1 hour; call again on expiry.

Input parameters:

- `contentType` (string): MIME type. Must match the Content-Type header used in the PUT request.
- `fileName` (string, required): Original filename including extension (e.g. 'report.pdf')
- `fileSize` (integer, required): File size in bytes. Must be > 0 and ≤ 500MB (524288000).
- `module` (string, required): Module name. Required — scopes the file to the module's storage folder.
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `confirm_upload` (~123 tokens)

Confirm Upload

Confirm a presigned upload after the PUT to uploadUrl succeeded. The server verifies the object in S3 and returns { url, filename, mimeType, size } — url is the /s/ path usable as a File/Image field value. Returns 400 if the file is not in S3 (ensure the PUT completed first).

Input parameters:

- `s3Key` (string, required): The s3Key returned from request_upload_url.
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `design_workflow` (~165 tokens)

Design Workflow

Generate a scaffolded ModuleSchema template from a natural language description. Use when the user wants to create a new module or workflow.

Design workflow: design_workflow → (complete template) → validate_design → create_module → get_module_schema(tier=extended).
Load resources inistate://schema and inistate://design-guide before designing for valid field types, colors, and design rules.

Input parameters:

- `description` (string, required): Natural language description of the desired workflow. Include: entity type, lifecycle states, activities, who performs each, what data is collected.
- `industry` (string): Industry context, free text — mapped to financial_services, healthcare, legal, hr, procurement, it_service, or general (default). Affects audit fields, confidence thresholds, actor suggestions.

### `validate_design` (~103 tokens)

Validate Design

Validate a module schema without submitting anything. create_module (and update_module on full-canvas payloads) runs these same checks internally, so this tool is optional there — use it to iterate on a draft, or before a partial update_module where the merged canvas cannot be checked client-side.

Input parameters:

- `mode` (string): create = new module (all rules). update = merge (omitted sections acceptable).
- `schema` (object, required): A complete or partial ModuleSchema object

### `create_module` (~210 tokens)

Create Module

Create a new module. Supports workflow modules (states, activities, flows) and record list modules (fields only). Requires Administrator, Consultant, or Workspace Admin role. Validates internally with the same rules as validate_design and returns structured errors without creating anything — a separate validate_design call beforehand is optional. See inistate://schema/configure for field types, color palette, and design rules.

Input parameters:

- `activities` (array): Custom activities. Omit for record list modules.
- `description` (string)
- `flows` (array): State transition rules. Omit for record list modules.
- `icon` (string): Emoji identifier
- `information` (array): Field definitions. Items matched by id on update enable renaming.
- `name` (string, required): Module name
- `states` (array): Workflow states. Omit for record list modules.
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `update_module` (~232 tokens)

Update Module

Update an existing module. Merges changes into the existing canvas; items matched by id enable renaming. Omitted sections are left unchanged. Always call get_module_canvas first to obtain the stable module id and item ids. Full-canvas payloads (information included) are validated internally like create_module; for partial payloads, validate the merged canvas with validate_design first.

Input parameters:

- `activities` (array): Custom activities. Omit for record list modules.
- `description` (string)
- `flows` (array): State transition rules. Omit for record list modules.
- `icon` (string): Emoji identifier
- `id` (string|number, required): Module id from get_module_canvas. Identifies which module to update.
- `information` (array): Field definitions. Items matched by id on update enable renaming.
- `name` (string): New module name (for renaming)
- `states` (array): Workflow states. Omit for record list modules.
- `workspaceId` (string|number): Workspace ID. Omit if set via env or set_workspace; required in stateless/remote mode.

### `scaffold_module` (~65 tokens)

Scaffold Module from Existing Data

Not available on this backend — calls return a structured capability_unavailable message. Local-runtime only; use design_workflow to draft a module here.

Input parameters:

- `name` (string)
- `source` (string, required)
- `state` (string)
- `table` (string)

### `switch_mode` (~111 tokens)

Switch tool surface. 'configure' (default) = entry CRUD + module design tools and design resources. 'runtime' = entry CRUD plus get_module_schema (available in every mode). 'frontend' = configure + the inistate://frontend-guide resource (REST reference for building Vue/React UIs that call the Inistate API directly) — use it when the user wants a custom UI. The tool/resource list refreshes via list_changed after this call.

Input parameters:

- `mode` (string, required): Target mode

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 69
- 2026-08-01: 43
- 2026-07-31: 54
- 2026-07-30: 49
- 2026-07-29: 80
- 2026-07-28: 50
- 2026-07-27: 50

## Links

- npm package: https://www.npmjs.com/package/inistate-mcp
- Socket report: https://socket.dev/npm/package/inistate-mcp
- Repository: https://github.com/inistate/inistate-mcp
- Website: https://inistate.com/
- Changelog RSS feed: https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/inistate-inistate-mcp/inistate-mcp
