Mipiti MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MIPITI_API_KEY | Yes | Your Mipiti API key | |
| MIPITI_API_URL | No | API base URL | https://api.mipiti.io |
| SERVER_VERSION | Yes | Identifier for the running server's MCP surface. For local runs, any sentinel string is fine (e.g., 'local'). |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| generate_threat_modelA | Generate a complete threat model from a feature description. Analyzes the feature using the Security Properties (Confidentiality, Integrity, Availability, Usage) methodology with capability-defined attackers. Produces trust boundaries, asset inventory, attacker inventory, control objective matrix, and assumptions. Runs a multi-step AI pipeline. Progress is reported automatically. Similar-model short-circuit: if the backend finds an existing
model in the workspace whose feature description substantially
overlaps with the new one, it does NOT generate a duplicate. This
tool returns
|
| refine_threat_modelA | Refine an existing threat model based on an instruction. Updates the model's assets, attackers, trust boundaries, and control objectives based on the instruction. Creates a new version. Progress is reported automatically. Refine CANNOT silently replace an entity's identity under a stable ID or silently drop an entity. Behavior:
|
| query_threat_modelA | Ask a natural-language question about an existing threat model. Read-only; no side effects (no new version, no mutation). Uses AI to answer questions grounded in the model's assets, attackers, control objectives, assumptions, and current security posture, returning Use this for interpretation or summary questions ("what are the biggest gaps?", "which attackers target the token store?"). Do NOT use it to change the model — use |
| list_threat_modelsA | List saved threat models in the current workspace. Read-only; no side effects. Returns |
| rename_threat_modelA | Rename a threat model. Metadata change only, does not create new version. |
| set_threat_model_parentA | Set (or clear) a model's parent on the recursive composition tree. The composition substrate (Layer 0) builds an ancestor chain from
each model's Pass Returns the updated threat model. |
| declare_foundationA | Mark a model as a shared foundation that advertises providable controls. Mutating: records this model as a foundation and stores its advertised controls; other models can then delegate to them (see Each entry in |
| list_relianceA | List a model's cross-model dependency edges, in both directions. Read-only; no side effects. Returns Use this to inspect existing dependencies before creating or deleting edges ( |
| create_relianceA | Declare a cross-model dependency: this model relies on a provider control. Two modes (the target is ALWAYS a provider control — credit terminates at a proven mechanism):
The provider must be a model in the SAME workspace as the consumer (reliance
is workspace-scoped and does not reach across workspace boundaries). The edge
enters |
| confirm_relianceA | Promote a draft reliance edge to active (the credit-soundness gate). Refuses unless LLM validation returned |
| delete_relianceA | Delete a cross-model reliance / delegation edge. Destructive and immediate. Mutating: permanently removes the edge. Any credit the consumer model derived from it (a delegated objective or a relied-upon control) is withdrawn, which can move the consumer's coverage/posture. Does not affect either model's own controls. Returns Use |
| propose_attach_foundationA | Propose which of this model's objectives each foundation capability covers. Read-only: returns candidate (objective ↔ provider control) pairs with a
match score. Nothing is created or credited. Feed the chosen subset to
|
| attach_foundationA | Create draft delegation edges for selected (objective, control) pairs.
|
| list_tagsA | List the workspace's tags. Read-only; no side effects. Returns Use this to discover tag IDs before calling tag risk/compliance/export tools or before adding/removing members. Args: (none beyond the version guard) |
| create_tagA | Create a tag, optionally seeding it with member models. Tags group models for viewing/reporting without asserting any relationship between them and without moving credit. Tag names are unique per workspace. |
| delete_tagA | Delete a tag (the grouping only; member models are not affected). |
| add_model_to_tagC | Add a model to a tag. A model may belong to many tags (overlapping). |
| remove_model_from_tagA | Remove a model from a tag (the model itself is not deleted). |
| list_model_tagsA | List every tag a given model belongs to. Read-only; no side effects. Membership is overlapping — a model may appear under many tags. Use this to see a single model's groupings; use |
| get_tag_risk_viewA | Aggregate per-control-objective risk rows across a tag's member models. Read-only; no side effects. The tag-based aggregate posture view: one row per CO across all member models. Each row is delegation-aware ( Use this for a portfolio/audit-scope posture rollup. For a single model, use |
| select_tag_compliance_frameworksA | Select compliance frameworks for a tag (scope-level). Mutating. Records the given frameworks against the tag AND propagates them to every member model, so the tag becomes a compliance scope (e.g. an audit boundary) spanning several models — the same capability a system has. Re-calling replaces the tag's framework selection. Discover valid ids with |
| get_tag_compliance_reportA | Cross-model compliance coverage report scoped to a tag's members. Read-only; no side effects. Aggregates requirement coverage across every model the tag contains — the same as a system-level compliance report but over a freely-composed set of models. Select the tag's frameworks first with |
| export_tag_reportA | Export the signed auditor report for a tag as HTML. Read-only; no side effects. Aggregates every member model's report plus the cross-model dependency graph and attestation status into one signed HTML document — the tag equivalent of the system auditor export. Returns Use for a portfolio/audit-scope deliverable. For a single model use |
| delete_threat_modelA | Delete a threat model and all associated data. Destructive and permanent — cannot be undone. Mutating: removes the model along with every version, its controls, assertions, findings, attestations, and tag/reliance memberships. Reliance edges from other models that pointed at this one are invalidated, which can move those consumers' posture. Confirm intent before calling. To keep a copy first, use |
| get_threat_modelA | Get a specific threat model by ID. Returns the full threat model including trust boundaries, assets, attackers, control objectives, and assumptions. Important for agents reading model state:
|
| export_threat_modelA | Export a threat model as CSV, PDF, or HTML. Read-only; no side effects on the model. Renders the model's current state into a downloadable document. The export runs server-side and may take some time for large models; progress is reported automatically while it completes. For CSV the content is returned inline as UTF-8 text; for PDF/HTML it is returned base64-encoded. For a re-importable, fully self-contained audit bundle (all versions, controls, assertions, attestations) use |
| export_threat_model_archiveA | Export the self-contained JSON audit archive for a threat model. Read-only; no side effects on the source model. Runs as a backend job: this tool starts the job, waits for it to finish (reporting progress as it goes), then fetches and decodes the JSON envelope. The archive is a complete, independently-verifiable snapshot: every version, controls, assertions (with Tier 1 / Tier 2 verification verdicts and attested flags), findings, risk acceptances, assumption overrides, attestations, and instance sufficiency signatures. It verifies standalone — CI OIDC JWTs against the issuer's public JWKS, workspace signatures against the workspace's published key, and sufficiency signatures against the origin instance's key. To restore the archive into a workspace (same or different instance),
pass the returned envelope to |
| import_threat_model_archiveA | Import a JSON audit archive (from Mutating: creates a NEW threat model in the target workspace. Requires
write access to that workspace. A fresh model_id is assigned on every
import, so the same envelope can be imported any number of times
without collisions; title collisions in the target workspace
auto-suffix Use to move or clone a model between workspaces or across instances;
the envelope round-trips through |
| get_controlsA | Get implementation controls for a threat model. Returns the controls that should be implemented to satisfy the model's
control objectives. Mostly read-only, with one side effect: if
controls have never been generated for this model, the first call
triggers generation. Generation may finish inline or continue in the
background — if results look incomplete, poll
By default excludes ORPHANED controls (controls whose every mapped CO
is tombstoned because its asset/attacker pair was removed in a later
version). Pass For one control's full detail pass |
| get_control_generation_statusA | Poll the async control-generation status for a threat model. When Return shape:
Read-only; no side effects (polling does not trigger or alter generation). |
| regenerate_controlsA | Regenerate controls from the model's control objectives. Mutating. Re-authors controls from the current COs. Controls whose descriptions
survive regeneration unchanged KEEP their implementation status,
evidence, notes, assertions, and Jira / compliance mappings. Controls
whose descriptions change or disappear are soft-deleted (still
queryable via May run as a background job; this tool waits for completion and returns
the final result. To rebuild everything, omit |
| update_control_statusA | Update the implementation status of a security control. Mutating. Sets the control's status to "implemented" or "not_implemented".
Marking a control "implemented" REQUIRES at least one assertion on the
control — check its |
| refine_controlA | Refine a control's description with AI-gated CO sufficiency check. Two modes:
The AI evaluates whether the mitigation group still collectively satisfies all mapped control objectives. If rejected, returns {accepted: false, reason, per_co} with per-CO reasoning. Side effect on accepted refinements: every assertion attached
to this control is superseded — their claims were authored against
the prior description and are not guaranteed to align with the new
one. The response includes |
| remap_controlA | Mechanical, non-AI-gated remap of a control's CO mappings. Distinct from Rejects target co_ids that do not exist on the model or are tombstoned (the pair was removed in a later version) — map to live COs only. |
| apply_control_changesetA | Apply a batch of control operations atomically as ONE transaction. Use this to reorganize a model's controls in a single step — for example to deduplicate controls (remap several onto the right objectives and delete the redundant ones at once), instead of many separate calls. All operations commit together or not at all. Mapping-only: remap/delete/set_groups change objective mappings and retire controls but never re-author a control's description, so a kept or reused control keeps its status, evidence, and assertions. The orphan guard is evaluated on the FINAL state of the batch, so a delete paired with a covering remap or add in the same changeset is allowed; a changeset that would leave any previously-covered control objective uncovered is rejected as a whole and nothing is written. |
| assign_control_to_componentsA | Replace a control's component scope. Components are the canonical code-binding for controls. A control scoped to one or more components is visible to coding agents working in those repos (matched via Component.repo_url + Component.path); an unscoped control is visible everywhere. Use this tool when:
|
| assign_asset_to_componentsA | Replace an asset's component scope. Mirror of An asset's component scope can be:
Mechanical, non-AI-gated. Validates only that every referenced component exists on the model. |
| model_coherence_reportA | Static-analysis report on coherence between the model's component declarations, the code-binding strings on its controls and assertions, and the structural reachability of every CO. Pass The report carries up to twelve finding types, grouped below by
concern. Each finding includes the entity IDs it concerns
( Component / assertion bindings:
Reachability findings (deterministic composer; indeterminate verdicts surface as findings, never auto-decided by an LLM):
Use this before relying on component-scoped control discovery,
when assertion verification fails for path/repo reasons, or to
enumerate structural-completeness gaps the operator should
address before treating the model as audit-ready. |
| get_reachability_verdictsA | Composer verdicts for every live CO on the model. Pass Pure derivation over the model's structural primitives — components, asset.component_ids, trust_boundary.passes, attacker.trust_boundary_ids + attack_vector, and Assumption.exclusion predicates. NOT persisted on the CO. Re- running this call against the model JSON produces the same result every time — that's the verification an auditor performs. |
| get_composition_overviewA | Composition index for a model — counts, tree metadata, warnings. Read-only; no side effects. Cheapest call in the composition surface (~1-2KB). Use it first to learn whether composition is available for this model, where the model sits on the recursive tree (parent + ancestor chain + child ids), how many own vs inherited entities and COs there are per kind, and whether any structural warnings (cycle, parent missing, max depth exceeded) need surfacing before drilling into sub-resources. Return shape:: When composition is not available on the backend, the same shape is
returned with all counts zeroed and |
| list_effective_entitiesA | Effective entity set (own ⊕ inherited) keyed by kind. Returns the entity set this model sees after composition with ancestors: trust boundaries, components, assets, attackers, and (when applicable) attack paths. Each entry carries its provenance — whether it originates on this model or is inherited from an ancestor — plus a fully-qualified id so cross-model references are unambiguous. Pair with Return shape:: When composition is disabled on the backend, Omitting |
| list_effective_control_objectivesA | Effective control objectives with origin classification. Returns every CO visible on the effective model, each tagged with
its origin: Return shape:: When composition is disabled on the backend, returns an empty list
and |
| get_effective_coverageA | Effective coverage rollup with credited inheritance. Read-only. Per effective CO: whether it is covered, how much credit
comes from controls owned by this model vs inherited from ancestors,
and the list of contributing controls (with the owning model id,
origin tag, verification status, and mitigation group). This is the
surface that drives the composition view's coverage / compliance
numbers — it reflects composed (own ⊕ inherited) math, NOT the
per-model coverage shown by Return shape:: When composition is not available on the backend, Paginated: omitting |
| get_reach_verdictsA | Per-CO reachability verdicts over the composed effective topology. Same shape as Return shape:: When composition is disabled on the backend, Omitting |
| list_effective_attack_pathsB | Effective AttackPath set + lifted missing/dangling suggestions. AttackPaths inherit from ancestors with the same own / inherited
provenance as other entities. The Return shape:: When composition is disabled on the backend, |
| list_reconciliation_candidatesA | Reconciliation candidates between this model and its ancestors. When a model inherits entities (assets, attackers, components, trust
boundaries) from an ancestor and the operator has authored a
locally-named entity that looks like the same real-world thing, the
reconciliation engine surfaces the pair as a candidate so the operator
can decide whether to alias it onto the inherited qualified id. Tier
Paginated. Use this on child models in a recursive tree to find duplicates that should be collapsed before they distort coverage. Return shape:: When composition is disabled on the backend, |
| apply_certain_reconciliation_matchA | Apply a certain-tier reconciliation candidate. Mutates state. Soft-deletes the descendant's own duplicate entity; the inherited
entity becomes the canonical surface for the effective-model
resolver. Use after surveying candidates via
The server re-validates the candidate against current live state before applying; if the model has moved since the candidate was detected, returns 400 and the operator should refresh the candidate list and retry. Bumps model version and emits an activity event on success. |
| reject_reconciliation_candidateA | Reject a reconciliation candidate. Mutates state. Records the operator's "these are NOT duplicates" decision at org
scope so the candidate detector filters this pair out of the active
queue on subsequent reads. Idempotent on the natural key
Persistence is at org scope, not model state — the rejection is durable across sessions and teammates but does NOT bump model version. |
| unreject_reconciliation_candidateA | Remove a persisted reconciliation rejection. Mutates state. The pair becomes eligible to surface in the active candidate queue
again on the next read of Does NOT bump model version (rejection is org state, not model state). |
| list_reconciliation_rejectionsA | List persisted reconciliation rejections for a model. Read-only. Returns the operator's "these are NOT duplicates" decisions
on this model in When composition is not available on the backend, returns
|
| lift_composition_entityA | Promote a shared-anchor entity from two sibling descendants to their lowest common ancestor. Mutates state across THREE models. The operator has confirmed (via the composition lift-candidate view)
that the entity Conflict resolution. The server re-detects field-level and
attached-state conflicts against current live state before applying.
If new conflicts have surfaced since the operator's last candidate
fetch, the call returns 400 with the missing conflict keys; refresh
the lift-candidate view and resubmit with resolutions covering every
key. Each entry in Over-application gate. The lift extends visibility to every descendant
of the LCA, not just the two source descendants. The server runs an
over-application gate that refuses lifts touching descendants outside
an acknowledged set; pass Each affected model (LCA + both descendants) bumps version and emits a
|
| split_composition_entityA | Push an ancestor-owned entity down to one or more descendants and soft-delete the ancestor's copy. Mutates state across the ancestor + every target descendant. Inverse of The route's |
| preview_undo_lift_compositionA | Preview the inverse plan (or divergence refusal) for a prior
Read-only counterpart to |
| undo_lift_composition_eventA | Apply the inverse of a previous Re-runs the divergence detector immediately before applying and
refuses with 409 + the structured refusal block when state has
materially evolved since the forward lift (assertions submitted on
the lifted entity, downstream COs added that reference it, the
entity edited, etc.). On success, persists the inverse state
operations across the LCA + every affected source descendant and
emits a structured |
| preview_undo_split_compositionA | Preview the inverse plan (or divergence refusal) for a prior
Counterpart to |
| undo_split_composition_eventA | Apply the inverse of a previous Mirror of |
| get_control_objectiveA | Get a single control objective with its composer verdict. Read-only. Returns the CO's typed fields, the IDs of any controls that map to
it, and the deterministic reachability verdict — the structural
derivation that backs any reach claim on the CO. For the full CO
matrix use Tombstoned COs ( |
| set_co_calA | Set the per-CO ISO/SAE 21434 Cybersecurity Assurance Level (CAL). CAL is a 1-4 grade on each individual control objective that
expresses how much assurance the control program owes for that
specific objective. It lives on the Pass |
| get_assetB | Get a single asset. Soft-deleted assets carry |
| get_attackerC | Get a single attacker. Soft-deleted attackers carry |
| get_componentA | Get a single component. Speculative components ( |
| get_trust_boundaryB | Get a single trust boundary, including its |
| get_assumptionA | Get a single assumption with its override applied. Mirrors |
| get_controlA | Get a single control with verified-status enrichment and an
Returns the control directly (not wrapped in an array). 404 if the control doesn't exist on the requested version. |
| get_mitigation_groupsA | Get the current mitigation group structure for a control objective. Returns the grouped view of controls for this CO with details (id, description, status) for each control:
Use cases:
|
| set_mitigation_groupsA | Declaratively set the mitigation-group structure for a control objective. Mutating; runs as a polled background job (an LLM sufficiency check evaluates whether the new structure satisfies the CO) and returns once complete. Replaces ALL mitigation-group assignments for this CO. Call
Mitigation groups define alternative paths to satisfy a CO:
|
| add_evidenceA | Attach an auxiliary evidence item (doc, link, or artifact reference) to a control. Mutating. Evidence is contextual metadata only — it does NOT count toward a
control's implementation status; only assertions prove controls.
Use |
| remove_evidenceA | Remove one evidence item from a control by its position in the control's evidence array. Mutating. Evidence is auxiliary metadata (see |
| import_controlsA | Import existing security controls into a threat model. Accepts structured JSON or free-text. Controls are auto-mapped to COs and deduplicated against existing ones. The parse/map/dedup runs as a background job (polled for progress), then — because this mutates the model — you are asked to confirm before the controls are saved. |
| delete_controlA | Soft-delete a security control, optionally with a justification. Destructive (mutating): the control is retired, not permanently erased. Blocks with HTTP 409 when the control is the ONLY control covering any control objective — removing it would leave that CO uncovered. Add a replacement control (or refine the threat model) before deleting. |
| check_control_gapsA | Analyze control coverage and surface control objectives that lack sufficient controls. Read-only (does not mutate the model); runs as a polled background job and uses LLM reasoning. Complements the deterministic |
| get_control_objectivesA | Get the control objective matrix for a threat model. Read-only. Returns COs, each with references to the controls that cover it. By
default returns a compact summary (total count only); pass
offset/limit to page through full CO records. For a single CO with
its reachability verdict use |
| assess_modelA | Run the deterministic assurance assessment over a threat model. Read-only — no LLM calls, no mutation. Evaluates each control objective from its controls' implementation
status and returns summary counts (mitigated / at_risk /
unassessed) plus progressive metrics (defined / implemented /
verified). For LLM-based reasoning about which COs are
under-covered and what controls to add, use Use summary_only=True to get just the counts without per-CO assessments. |
| get_review_queueB | Returns controls not reviewed in 90+ days. Lists implemented/verified controls whose assertions have not been checked recently. For each stale control, verify assertions against codebase. |
| add_assetA | Add a new asset to a threat model. Creates a new version. The caller supplies identity-bearing fields (name, description,
security_properties, notes) plus optional component scoping; the
backend LLM-reasons the factor decomposition (and composes the
LLM-gated against a re-add of a previously soft-deleted asset on the same model. Three possible outcomes:
Fails with a tool error on:
|
| edit_assetA | Edit an existing asset. Only provided fields changed. The composed LLM-gated on identity-bearing fields (name, description, security_properties). Factor and notes edits skip the gate. Outcomes when identity fields change:
Editing a soft-deleted asset is rejected — |
| remove_assetA | Soft-delete an asset. Creates a new version. The asset's ID is preserved forever — never reused. Its linked
(asset × attacker) CO pairs are tombstoned, which orphans any
controls mapped to them. Use |
| restore_assetB | Un-soft-delete an asset. Revives its tombstoned COs with their original IDs, un-orphaning any linked controls. |
| add_attackerA | Add a new attacker to a threat model. Creates a new version. The caller supplies identity-bearing fields (capability, position,
archetype, trust_boundary_ids); the backend LLM-reasons the factor
decomposition. Override any factor post-create via Three outcomes (normal create / auto-restore / similar-rejection)
mirror |
| edit_attackerA | Edit an existing attacker. Only provided fields changed. The composed LLM-gated on identity-bearing fields (capability, archetype, position). Factor and trust_boundary edits skip the gate. 503 on evaluator outage, 502 on malformed response, 400 when
factor fields are sent without |
| remove_attackerA | Soft-delete an attacker from a threat model. Mutating: creates a new model version. The attacker's ID is preserved (so a later restore reinstates the same ID and all its links). Control objectives anchored to this attacker are tombstoned, and any controls left with no live anchor become orphaned (derived at read time, never hard-deleted). Nothing is permanently destroyed, so removal is reversible. Use to drop an attacker that no longer applies. To change an attacker's fields instead, use edit_attacker; to bring a removed one back, use restore_attacker. |
| restore_attackerA | Un-soft-delete an attacker previously removed with remove_attacker. Mutating. Reinstates the attacker under its original ID, revives the control objectives that were tombstoned when it was removed, and un-orphans any controls that were anchored to it. Only affects an attacker that is currently soft-deleted. Returns the updated threat model. |
| reevaluate_threat_model_factorsA | Re-run the LLM factor judgment on every asset and attacker in a threat model. Useful for re-baselining factors after a bug fix or feature-description change, without regenerating the whole model (which would destroy controls, assertions, components). Each entity's factors and rationale are replaced with a fresh
LLM-judged decomposition; the composed impact / likelihood is
re-derived deterministically from the new factors. Each re-rating
is recorded as a rating revision in the audit trail with
The platform's LLM factor judgment is a starting point. For
deployment-specific factor adjustments (e.g., elevated
regulatory_scope because your tenant is HIPAA-covered, or
Commodity prevalence because your endpoint is public-internet
exposed), use Per-entity soft-fail: an LLM failure on one entity is recorded in
the response's Soft-deleted assets and attackers are skipped. |
| get_verdict_divergenceA | Where the LLM's verdicts disagree with the model's authored state. Two coverage divergence kinds, distinguished by the LLM's
Rows are sorted by confidence, so the strongest calls come first. Each
section is paginated: its Also returns |
| accept_coverage_divergencesA | Accept a set of coverage divergences as mapping changes, in one batch. Each accepted Read the rows first with |
| dismiss_verdict_divergencesA | Dismiss a set of divergences (the structural model was right, the LLM was not) WITHOUT changing the model. Use for rows you have reviewed and judged not valid. A dismissal is keyed to the divergence's current verdict input hash, so it auto-clears (the row reappears) once the underlying control or objective changes. Works for coverage AND group_sufficiency rows. |
| recompute_verdictsA | Re-run coverage and group-sufficiency verdict evaluation for a model. Enqueues a fresh evaluation of every control's coverage verdict and every live control objective's group-sufficiency verdict, bypassing the normal quiet-period batching. Evaluation runs in the background; re-read the model's divergence report (or coverage surfaces) shortly after to see updated verdicts. Cost visibility: the response carries Returns a 503-mapped error when verdict observability is unavailable on the deployment. |
| retry_verdictsA | Re-trigger a model's parked verdict re-evals after a transient failure. When a verdict re-evaluation fails transiently — a provider outage, exhausted credits, or a timeout — it is parked and reads as "unavailable / treated as unverified", recovering only after a delay. This forces an immediate, non-destructive re-run of ONLY the parked/failed re-eval slots, across every verdict kind (coverage, group-sufficiency, per-control sufficiency, coherence). It changes no assertions, controls, or verdict content, so no IDs churn. Evaluation runs in the background — re-read the sufficiency or verification report shortly after to see updated verdicts. Prefer this over |
| get_recompute_quoteA | Get the informational pre-flight cost estimate for
Nothing is charged from the estimate — actual usage is metered as the
evaluation runs. The estimate carries Returns a 503-mapped error when verdict observability is unavailable on the deployment. |
| revalidate_threat_model_entitiesA | Re-run quality validation on a threat model's existing assets and attackers, as if they were freshly generated. A fast first-pass check judges every entity; only the ones it flags get a deeper review that confirms them, sharpens their wording, or flags them for you. Use this to apply validation improvements to an already-generated model, or to clear stale quality warnings — without regenerating the whole model (which would destroy controls, assertions, and components). It is non-destructive: an entity that should be removed is left in place with a quality warning rather than deleted, so no control objective loses its asset or attacker anchor. The result is saved as a new model version; controls and control objectives carry forward. May consume credits for the entities that need the deeper review; a model
already in good shape costs nothing. Returns the updated model envelope:
|
| list_compliance_frameworksA | List the compliance frameworks available to map controls against. Read-only; no side effects. Returns both built-in frameworks (e.g. OWASP
ASVS) and any custom frameworks in the workspace. Use this to discover
framework identifiers before |
| import_compliance_frameworkA | Import a custom compliance framework. Requires PRO tier. Use this when your customer's program (regulatory, contractual, or internal) is not covered by Mipiti's 11 built-in frameworks. After import, the framework is selectable on threat models exactly like a built-in. Schema (top-level fields):
- Example minimal body:: Example with per-level legend + per-requirement parameters:: |
| select_compliance_frameworksA | Select (activate) compliance frameworks on a threat model. Requires PRO tier. Mutating. Activating a framework automatically kicks off auto-remediation in the background: it auto-maps existing controls to requirements, excludes non-applicable requirements by taxonomy, and suggests/applies new entities for the remaining gaps. The response includes auto_remediate_jobs, which run and complete on their own; re-trigger later with auto_remediate if the model changes. Discover framework IDs with list_compliance_frameworks (or add a custom one via import_compliance_framework); view the resulting gap analysis with get_compliance_report. For the system-level equivalent, use select_system_compliance_frameworks. |
| get_compliance_reportA | Get the compliance gap-analysis report for a framework on a threat model. Read-only; no side effects. Evaluates every framework requirement against the model's mapped controls and classifies each as covered, partial, uncovered, unmapped, or excluded. With no filters it returns a summary; pass status and/or offset/limit to page through per-requirement detail. The framework must first be activated on the model via select_compliance_frameworks. |
| map_control_to_requirementA | Manually map one security control to one compliance-framework requirement. Mutating: records a control-to-requirement mapping, which re-derives that requirement's coverage in the compliance report. Use for a single, deliberate mapping you are asserting by hand. To let the LLM propose mappings across many requirements at once, use auto_map_controls; to close gaps end-to-end (map + exclude + fill), use auto_remediate. |
| auto_map_controlsA | LLM-map a model's existing controls to a framework's requirements. Requires PRO tier. Mutating: writes control-to-requirement mappings. Runs as a background job (typically 20-45s); this tool waits for completion and returns the result. Sits between the manual map_control_to_requirement (one mapping at a time) and the full auto_remediate loop (which also excludes non-applicable requirements and proposes new entities for remaining gaps). auto_map_controls only creates mappings from controls that already exist — it never adds or excludes entities. |
| auto_remediateA | Automatically close compliance gaps for a framework. Requires PRO tier. Three-phase loop: (1) auto-map existing controls to unmapped requirements, (2) exclude requirements for non-applicable taxonomy primitives, (3) suggest and apply new assets/attackers for remaining gaps. Phase (3) routes every proposal whose name matches a soft-deleted
asset/attacker through the same restore-candidate LLM gate
Converges automatically: stops when fully covered or when no further progress can be made. This runs automatically when a framework is selected, but can be re-triggered manually if the model changes. |
| list_workspacesA | List the workspaces the current user belongs to. Read-only; no side effects. Returns each workspace's id and name. Models, controls, and compliance are all scoped to a workspace, so use this to discover the workspace context you're operating in. Takes no arguments beyond the version guard. |
| update_organizationA | Set per-organization level grades for IEC 62443-4-1 and NIST CSF. Admin-only: the backend requires the caller to be an admin in the organization (or a superadmin). Non-admins will get a 403; do not invoke this tool unless you've verified admin role for the target org.
Because |
| list_systemsA | List all saved systems in the current workspace. Read-only; no side effects. A system is a named grouping of threat models
for portfolio-level risk and compliance reporting. Use this to discover
system ids (e.g. before |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mipiti/mipiti-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server