@konsulto/mcp
OfficialThis MCP server lets an MCP-capable client act as a Konsulto user to read, write, and evidence cybersecurity audit work, gated by tenant feature flag, role permission, and MCP token.
Orient and manage session: check identity/permissions, list audits, pin an active audit, and get audit context/summary.
Read audit content: search templates and findings, read full findings as markdown, and read individual finding sections.
Write findings: compose new findings from structured fields/templates, update scalar fields, bulk-change status with dry-run, and append/replace section markdown.
Manage evidence: upload files/inline/base64 content, then graft evidence into finding sections with captions.
Manage scope and assets: list scope, list/create assets, and match-or-create an asset linked to a finding.
Support local setup and safety: token login/store, folder pinning via
.konsulto.yml,doctorchecks, profiles, and token revocation/security guidance.
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., "@@konsulto/mcp list my audits"
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.
@konsulto/mcp
MCP server that lets Claude Code (and any other MCP-capable client) drive the Konsulto cybersecurity audit platform from the CLI:
Read — list audits you're on, search findings/templates, read a finding (including body rendered as markdown so the LLM can reason about prose), read a single section.
Write — compose findings from structured fields (backend builds the Tiptap body), update scalars, append/replace section prose using markdown, bulk-change status with dry-run preview.
Evidence — upload files/inline content/base64, graft evidence into a finding's body at the right section.
Scope & assets — list scope, list/create assets, match-or-create an asset and link it to a finding.
Acts as the user, with their role permissions, gated by a per-user MCP token. Three runtime gates: tenant feature flag enabled, role has mcp:use, token not revoked/expired.
Quick start
1. Mint an MCP token in the Konsulto web app
Sign in → Profile → MCP Tokens → New MCP token. Copy the kon_mcp_… value once — it isn't shown again. (Tenant admin must have enabled MCP integration first under Account → API Access.)
2. Save the token locally
One command, same on macOS, Linux, and Windows:
npx -y @konsulto/mcp@latest login kon_mcp_REPLACE_WITH_YOUR_TOKENThis writes ~/.konsulto/credentials (directory 0700, file 0600). Add
--endpoint https://your-tenant.api.konsulto.io if you're on a dedicated stack,
and --force to overwrite an existing file.
Or use the KONSULTO_TOKEN env var if you'd rather not write a file.
3. Tell Claude Code about the server
Add to ~/.claude/mcp.json:
{
"mcpServers": {
"konsulto": {
"command": "npx",
"args": ["-y", "@konsulto/mcp@latest"]
}
}
}Verify the wiring:
npx @konsulto/mcp doctorYou should see all green checks.
Related MCP server: claude-sessions-mcp
Folder pinning (optional, recommended)
Run npx @konsulto/mcp init inside an engagement folder to pin it to one audit:
~/audits/acme-q2-pentest/
├── .konsulto.yml ← pins this folder to one audit
├── recon/
└── notes.mdWhen Claude Code launches in that folder (or any subfolder), the MCP auto-pins the audit. No more thinking about audit IDs.
The file is sharable with your team — it contains an audit ID and optional endpoint, no secrets.
Workflow patterns
Pattern | When to use |
Folder-pinned | Repeat work on the same engagement. Run |
| One workspace, switching audits mentally. Tell Claude "switch to ". |
Explicit per-call | Juggling several audits in one session. Pass |
Tools
Every tool is prefixed konsulto_* so it doesn't collide with other MCPs (Burp, nmap, prowler, etc.) you might have configured.
Identity & context
Tool | What it does |
| Identity, permissions, active audit. Call first in a session. |
| List audits you're a member of. |
| Pin one audit for the rest of the session (fuzzy match by name). |
| One-shot orientation — name, status, scope/asset counts, severity rollup, team. |
| Live finding counts for an audit: total, by severity, by status, recent 7d/30d, last-finding timestamp. |
Templates
Tool | What it does |
| Find finding templates by query/severity. Slim shape — id, title, severity, summary, slot names, taxonomy. No body. |
Findings — read
Tool | What it does |
| Search within an audit (defaults to active). |
| Read a finding including its body rendered as markdown so the LLM can reason about prose. |
| Read just one section of a finding's body as markdown. Cheaper than |
Findings — write
Tool | What it does |
| Return the section structure + markdown authoring rules (and an optional template starter) for composing a finding in this audit. Call before |
| Create a finding with a fully-formatted body. Author each section as markdown in |
| Change scalar fields (title, severity, status, taxonomy, assets). |
| Mass status change. Supports |
| Add markdown prose to a section. Section names accept aliases (recommendations, mitigation, fix, summary, etc.) — they normalize to canonical keys server-side. |
| Replace a section's prose. Old content saved on the audit trail. |
Evidence
Tool | What it does |
| Upload a file path / inline content / base64 — or grab locally with |
| Graft an evidenceId into an existing finding's body ( |
Screenshots pasted into the chat never reach an MCP server — clients send attachment bytes to the model's vision input only. Use
source: "clipboard"(the image is usually still on the clipboard),source: "latest-screenshot", or drag the image file into the chat so its path can be passed asfilePath.
Scope & assets
Tool | What it does |
| Scope elements for an audit — what's authorized to test. |
| Assets in the audit (or tenant-wide). |
| Create a host / URL / IAM-role / etc. when a scan reveals one not yet tracked. |
| Match-or-create an asset by name and attach it to a finding. |
Helper CLI
The same npx @konsulto/mcp command runs as the stdio MCP server when
called with no arguments (what Claude Code does), and as an interactive
helper when called with a subcommand:
npx @konsulto/mcp login <token>— save your token to~/.konsulto/credentials(--endpoint <url>,--force)npx @konsulto/mcp init— write.konsulto.ymlfor the current foldernpx @konsulto/mcp whoami— verify token, show identity + permissionsnpx @konsulto/mcp doctor— sanity-check credentials, token, reachability, and configuration
Troubleshooting
Run npx @konsulto/mcp doctor first — it prints a one-line fix for the first failure. For the rest:
Symptom | Fix |
| Set |
Token rejected as the wrong type | You used a non-MCP token. Mint one under Profile → MCP Tokens. |
Authentication errors on every call | Token revoked or expired — mint a fresh one. |
Permission errors after working previously | Your role or tenant settings changed. Ask an admin. |
Loose-permissions warning at startup |
|
Security
Treat tokens like passwords. They carry your role's permissions to anyone who holds them. Don't share or commit them.
Revoke if leaked. Web app → Profile → MCP Tokens. Revocations take effect on the next request.
Watch your inbox. Konsulto emails you on suspicious token activity — investigate and revoke if you didn't trigger it.
Verify the package. Published with npm provenance —
npm view @konsulto/mcpshows the signature.
Multi-engagement on one machine
Set KONSULTO_PROFILE=acme to read ~/.konsulto/credentials.acme instead of the default. Useful when you're contracting on a customer's Konsulto tenant from the same laptop you use for your firm's tenant.
License
MIT — see LICENSE.
Available Tools
19 toolskonsulto_add_evidence_to_findingA
Graft an already-uploaded attachment into an existing finding's body at the named section. The "auto" section walks poc → description → impact → remediation → end-of-doc. Use this when adding evidence after the finding was created (e.g. screenshots taken later, additional reproduction logs).
Inputs: findingId (required), evidenceId (required), caption, section.
konsulto_append_to_sectionA
Append markdown prose to a named section of a finding. Use this to add a paragraph or two without touching the rest of the finding. Content is markdown — paragraphs, lists, code blocks, links. The backend converts it to the finding's rich-text format.
Inputs: findingId (required), section (required), content (required).
konsulto_attach_evidenceA
Upload a file (or inline content) as an attachment in the active audit. Returns an evidenceId. Pass the evidenceId to konsulto_add_evidence_to_finding or include it in konsulto_compose_finding's evidence array to graft it into a finding's body. This tool only uploads — it does NOT link to a finding by itself. Exactly one of filePath/content/contentBase64 must be set.
Inputs: audit, filePath, content, contentBase64, +2 more.
konsulto_bulk_update_statusA
Change the status of many findings at once. Use for "client confirmed the fix on all of these" or "all stale findings should be closed". Set dryRun: true first to preview affected findings before committing.
Inputs: findingIds (required), status (required), dryRun.
konsulto_compose_findingA
Create a brand-new finding from structured fields + optional template + optional evidence. The backend builds the Tiptap body from a layout — NEVER pass Tiptap JSON as a field. Use plain prose for summary/impact/remediation, an array of plain strings for stepsToReproduce. Evidence is grafted into the body at the requested section ("auto" walks poc → description → impact → remediation → end).
Inputs: fields (required), audit, templateId, severity, +2 more.
konsulto_create_assetA
Create a new asset in the active audit. Use when a scan or evidence reveals a host/URL/IP that isn't yet tracked. After creating, use konsulto_link_asset to attach it to a finding.
Inputs: name (required), type (required), audit, identifiers, +2 more.
konsulto_get_audit_contextA
One-shot orientation tool — returns the active audit's name, status, dates, scope element count, asset count, finding severity rollup, and team. Call this at session start (after whoami) to ground yourself before doing work in the audit. Defaults to the active audit; pass audit to override.
Inputs: audit.
konsulto_get_findingA
Read a single finding by ID, including its body rendered as markdown so the LLM can reason about the prose. Use when the user asks to review, explain, or summarize a specific finding. The body markdown is alongside the structured fields (severity, status, taxonomy, etc.).
Inputs: findingId (required).
konsulto_link_assetA
Attach an asset to a finding. Tries to match an existing asset by name (case-insensitive substring); creates one if none matches. Then patches the finding's assets[] to include the reference. Use this when the user says "this finding affects acme.com:443" — the tool figures out whether to reuse an existing asset or make a new one.
Inputs: findingId (required), assetHint (required), assetType.
konsulto_list_assetsA
List assets in the audit (or tenant-wide if no audit filter). Returns name, type, identifiers (hostname/ip/url/cidr) so you can match evidence to the right asset. Use konsulto_link_asset to attach an asset to a finding.
Inputs: audit, q, limit.
konsulto_list_my_auditsA
List audits this user is a team member of. Use to find the audit ID you want to work in. Filter by status (active/draft/completed/archived).
Inputs: status, limit.
konsulto_list_scopeA
List the scope elements for an audit — what's authorized to be tested. Use to confirm targets are in-scope before recording findings against them. Defaults to the active audit.
Inputs: audit.
konsulto_read_sectionA
Read just one section of a finding's body as markdown. Use for "explain the POC", "summarize the impact", "show me the remediation". Cheaper context-wise than konsulto_get_finding when the user only cares about one section. Section name accepts aliases (recommendations, mitigation, summary, etc.) — they map to canonical names server-side.
Inputs: findingId (required), section (required).
konsulto_replace_sectionA
Replace the entire prose under a named section. The previous content is preserved on the audit trail (recoverable). Prefer konsulto_append_to_section unless the user explicitly wants to rewrite the section. Content is markdown.
Inputs: findingId (required), section (required), content (required).
konsulto_search_findingsA
Search findings within an audit. Defaults to the active audit when set. Returns titles, severities, statuses, and IDs — the body field is not included. Use to check for duplicates before creating a new finding and to find a specific finding to update or attach evidence to.
Inputs: audit, q, severity, status, +1 more.
konsulto_search_templatesA
Search the finding-template catalog. Returns a slim shape (id, title, severity, summary, slot names, taxonomy) — NOT the full template body. Use this to pick a template before calling konsulto_compose_finding. When multiple candidates match, prefer the one whose summary best fits the evidence in hand.
Inputs: q, severity, limit.
konsulto_set_active_auditA
Pin one audit as the session's active audit. Subsequent tools that take an optional audit argument will default to this one. Accepts an audit ID OR a substring of the audit name (fuzzy match — exact match wins, then unique substring). Folder-level pinning via .konsulto.yml is the recommended persistent alternative.
Inputs: audit (required).
konsulto_update_findingA
Update scalar fields on an existing finding. Use this for changing title, severity, status, taxonomy, or assets — NOT for editing the prose body (use konsulto_append_to_section / konsulto_replace_section for that). NOT for evidence (use konsulto_add_evidence_to_finding).
Inputs: findingId (required), patch (required).
konsulto_whoamiA
Show who the MCP is acting as, their permissions, the active audit, and how authentication is configured. Call this first in any session to orient yourself before performing actions. Returns user identity, tenant, role permissions, MCP token expiry, and active audit pin.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Every tool has a clearly distinct purpose. Overlaps like append_to_section and replace_section are differentiated by operation type, and search vs get findings serve different needs. No ambiguity.
All tools follow a consistent 'konsulto_verb_noun' pattern. Verbs are action-specific (add, append, attach, compose, create, etc.) and nouns target distinct entities, making names predictable and easy to navigate.
19 tools cover the core workflows of a security audit MCP server—finding management, evidence, assets, templates, and audit context. The count is well-scoped, each tool earning its place without bloat.
The tool surface is comprehensive for the stated purpose, covering creating, reading, updating, and searching findings, evidence lifecycle, asset management, and audit orientation. The only notable gap is the absence of deletion operations (findings, assets, etc.), which may be intentional but slightly reduces completeness.
Maintenance
Related MCP Connectors
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseBqualityFmaintenanceAn MCP server for the OnSecurity API that allows Claude to query Rounds, Findings, Prerequisites, Blocks and Notifications.5MIT
- AlicenseBqualityDmaintenanceMCP server for managing Claude Code conversation sessions1237 npmMIT
- AlicenseAqualityBmaintenanceLocal MCP server that wraps the headless Claude Code CLI as MCP tools, providing stateless access to Claude's coding capabilities through prompt-based interactions. It enables users to execute Claude Code commands with various prompt formats and structured outputs directly from MCP clients.3MIT
- AlicenseAqualityDmaintenanceMCP server orchestrating local CLI agents (Claude Code, OpenAI Codex, Google Gemini) for cross-validation, second opinions, and persona-driven prompting.18MIT