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 question about an existing threat model. Uses AI to answer questions about the model's assets, attackers, control objectives, assumptions, or security posture. |
| list_threat_modelsB | List all saved threat models. Returns a summary of each model including ID, title, creation date, and version number. Use the model ID with other tools. |
| 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_foundationB | Mark a model as a shared foundation that advertises providable controls. A foundation is a shared service (auth, logging, a shared datastore) whose
controls other models can delegate to. Each entry in |
| list_reliance | List a model's cross-model dependency edges (as consumer and as provider). Returns |
| create_reliance | 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_relianceC | Delete a cross-model reliance edge. |
| 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_tags | List the workspace's tags (the Affiliation primitive). A tag is an overlapping, semantics-free grouping of models — for audit
scopes, ad-hoc selections, or portfolios. Unlike a system, a model may carry
many tags, and a tag never affects posture or credit. Returns |
| create_tag | 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_tag | Delete a tag (the grouping only; member models are not affected). |
| add_model_to_tag | 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_tagsB | List every tag a model belongs to (overlapping membership). |
| get_tag_risk_viewA | Aggregate per-CO risk rows across a tag's member models. The tag-based aggregate posture view. Each row is delegation-aware
( |
| select_tag_compliance_frameworksA | Select compliance frameworks for a tag (scope-level). Records the frameworks against the tag and propagates them to each member model — the tag becomes a compliance scope (e.g. an audit boundary) spanning several models, the same capability a system has. |
| get_tag_compliance_reportA | Cross-model compliance coverage report scoped to a tag's members. Aggregates requirement coverage across every model the tag contains, the same as a system-level compliance report but over a freely-composed set. |
| export_tag_reportA | Export the signed auditor report for a tag (HTML). 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 |
| delete_threat_modelA | Delete a threat model and all associated data. This cannot be undone. |
| 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_model | Export a threat model as CSV, PDF, or HTML. The backend export endpoint runs as an async job (the synchronous
render path was retired because cross-model assurance compute could
pin the worker for minutes on large models). This tool kicks off the
job, polls for completion via |
| export_threat_model_archive | Export the self-contained JSON audit archive for a threat model. The archive carries every version, controls, assertions (with CI Tier 1/Tier 2 verdicts and attested flags), findings, risk acceptances, assumption overrides, attestations, and instance sufficiency signatures. Independently verifiable — CI OIDC JWTs verify against the issuer's public JWKS, workspace signatures against the workspace's published key, and sufficiency signatures against the origin instance's key (via the target's trusted_signers table). The backend renders the archive as an async job (the same
cross-model assurance compute that motivated PDF/HTML to migrate
away from synchronous rendering). This tool kicks off the job,
polls for completion via |
| import_threat_model_archive | Import a JSON audit archive (from A fresh model_id is assigned every time, so the same envelope can be
imported any number of times without collisions. Title collisions in
the target workspace auto-suffix |
| get_controls | Get implementation controls for a threat model. Returns controls that should be implemented to satisfy control objectives. If controls haven't been generated yet, auto-generates them. By default excludes ORPHANED controls — controls whose every mapped
CO is tombstoned (its asset/attacker pair was removed in a later
version). Pass include_orphaned=True to see them. Each returned
control carries a boolean |
| get_control_generation_status | Poll the async control-generation status for a threat model. When Return shape:
|
| regenerate_controlsA | Regenerate controls from control objectives. Controls whose descriptions survive regeneration unchanged preserve their implementation status, evidence, notes, assertions, Jira mappings, and compliance mappings. Controls with changed or removed descriptions are soft-deleted (queryable via include_deleted=True). When co_ids is specified, only the controls for those COs are regenerated — other controls are preserved as-is. |
| update_control_statusB | Update the implementation status of a security control. Requires at least one assertion before marking as implemented. Check the control's assertion_count from get_controls before calling. |
| 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. |
| 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. Cheapest call in the composition surface (~1-2KB). Use this first to learn whether composition is enabled, 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 |
| 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_objectives | 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_coverage | Effective coverage rollup with credited inheritance. 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 Return shape:: When composition is disabled on the backend, Omitting |
| get_reach_verdicts | 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_paths | 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_candidates | 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_match | 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_candidate | 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_candidate | 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_rejections | List persisted reconciliation rejections for a model. Returns the operator's "these are NOT duplicates" decisions on this
model in When |
| 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 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_composition | Preview the inverse plan (or divergence refusal) for a prior
Read-only counterpart to |
| undo_lift_composition_event | 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_composition | Preview the inverse plan (or divergence refusal) for a prior
Counterpart to |
| undo_split_composition_event | Apply the inverse of a previous Mirror of |
| get_control_objective | Get a single control objective with its composer verdict. 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. Tombstoned COs ( |
| set_co_cal | 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_asset | Get a single asset. Soft-deleted assets carry |
| get_attacker | Get a single attacker. Soft-deleted attackers carry |
| get_component | Get a single component. Speculative components ( |
| get_trust_boundary | Get a single trust boundary, including its |
| get_assumption | Get a single assumption with its override applied. Mirrors |
| get_control | 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_groups | 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_groups | Declaratively set the mitigation group structure for a CO. Replaces all mitigation group assignments for this CO. AI-gated: the platform evaluates whether the new structure satisfies the CO. Mitigation groups define alternative paths to satisfy a CO:
|
| add_evidence | Attach auxiliary metadata to a control (docs, links, artifacts). Evidence is contextual metadata — it does NOT count toward implementation status. Only assertions prove controls. |
| remove_evidence | Remove an evidence item from a control by index. |
| import_controls | 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_control | Soft-delete a security control with justification. Blocks with HTTP 409 if this is the only control covering any control objective. Add a replacement control or refine the threat model first. |
| check_control_gaps | Check for missing controls. Analyzes existing controls against control objectives and suggests COs with insufficient coverage. |
| get_control_objectives | Get control objective matrix for a threat model. Returns COs with references to which controls cover each one. By default returns compact summary (total count only). Pass offset/limit to retrieve specific COs. |
| assess_model | Run assurance assessment on a threat model. Evaluates each control objective based on control implementation status. Returns summary (mitigated/at_risk/unassessed) and progressive metrics (defined/implemented/verified). No LLM calls — deterministic. Use summary_only=True to get just the counts without per-CO assessments. |
| get_review_queue | 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_asset | 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_asset | 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_asset | 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_asset | Un-soft-delete an asset. Revives its tombstoned COs with their original IDs, un-orphaning any linked controls. |
| add_attacker | 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_attacker | 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. Creates a new version. Same lifecycle as remove_asset: ID preserved, linked COs
tombstoned, orphaned controls derived at read time. Use
|
| restore_attacker | Un-soft-delete an attacker. Revives tombstoned COs; un-orphans any linked controls. |
| reevaluate_threat_model_factors | 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. |
| recompute_verdicts | 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. |
| get_recompute_quote | 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_entities | 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_frameworks | List available compliance frameworks. Returns built-in frameworks (e.g., OWASP ASVS) and custom frameworks. |
| import_compliance_framework | 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_frameworks | Select compliance frameworks for a threat model. Requires PRO tier. Selecting a framework automatically triggers auto-remediation in the background: auto-maps existing controls, excludes non-applicable requirements by taxonomy, and suggests/applies new entities for remaining gaps. The response includes auto_remediate_jobs — these run in the background and complete automatically. |
| get_compliance_report | Get compliance gap analysis report. Evaluates each framework requirement against mapped controls. By default returns summary; pass status/offset/limit for details. |
| map_control_to_requirementC | Map a security control to a compliance framework requirement. |
| auto_map_controls | Use LLM to map controls to framework requirements. Takes 20-45 seconds. Requires PRO tier. |
| auto_remediate | 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_workspaces | List workspaces the current user belongs to. |
| update_organization | 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_systems | List all saved systems in current workspace. |
| get_systemB | Get a system container by ID with member model summaries. |
| create_system | Create a new system container. |
| add_model_to_system | Add a threat model to a system container. |
| add_component | Add a component to a threat model. Components bridge security architecture to code organization. They
map trust boundaries to repos so controls can be scoped to the
codebase that implements them. They also drive the deterministic
reachability composer's asset-boundary derivation: an asset's
trust-boundary footprint is the union of its components'
A component with empty |
| edit_component | Edit a component's properties. Per-component level grades are orthogonal axes — set whichever
apply to the program the component is in scope for. Leave a field
unset ( |
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
- 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