Note: The MCP integration is in early development. The tools are already fully functional and can be tried out in test environments with supported AI agents (Claude Desktop, Cursor, VS Code Copilot, AnythingLLM).
What is MCP?
The Model Context Protocol (MCP) is an open standard that enables AI systems to communicate with external tools. mjEdit implements a complete MCP server with two transport options:
- STDIO – Direct process communication (Claude Desktop, Cursor, VS Code Copilot)
- SSE – HTTP Server-Sent Events on localhost (AnythingLLM Docker, own integrations)
154 MCP tools – what does this mean in practice?
Instead of just talking to an editor, an AI can work with mjEdit: create files, convert content, generate OSCAL documents, passively discover network assets, scan for CVE vulnerabilities, control entire compliance dashboards. The following examples show how this feels in everyday life.
“Create a catalog that complies with Grundschutz++”
You dictate to the AI:
“Create an empty OSCAL catalog with the title ‘BSI IT-Grundschutz++ Internal Basis 2026’, version
1.0.0, languagede. Create the three practice groupsORP(organization and personnel),CON(concept and procedures) andOPS(operation), take them from the master catalogkataloge/grundschutzpp-master.jsonthe controlsORP.4.A1,ORP.4.A8,CON.3.A1andOPS.1.1.5.A1including statements, and save the whole thing askataloge/internal-baseline-2026.json."
A tool chain runs in the background that you would otherwise have to click together by hand:
oscal_create_catalog→ empty catalog with metadata (title, version,last-modified,oscal-version: 1.2.2)oscal_add_group(3×) → GroupsORP/CON/OPSwith BSI-compliant titlesoscal_query_get_control(4×) → Read controls from the master catalogoscal_add_control(4×) → Mount controls in the correct groupvalidate_oscal_document→ Schema validation against OSCAL v1.2.2file_save_as→ Save under the desired path
Seconds later, the catalog is visible in the tree view, opened in the catalog tab and schema-validated. You only see the finished result - but every tool is clearly logged in the tool log.
“Update all metadata of our 12 SSPs to version 2.1”
A task that requires at least half an hour of error-prone clicking manually. With MCP, one sentence is enough:
“Open all SSP files in the
030-SSP/directory, setversionto2.1andlast-modifiedto today in the metadata.”
In the background: file_list with glob pattern, each SSP oscal_update_metadata, then file_save. The GUI updates automatically.
“Where does our SSP say anything about backup?”
Instead of scrolling through 4,000 lines of JSON:
“Search the current SSP for all mentions of ‘backup’ and ‘data backup’ and show me the associated control IDs.”
oscal_search with Regex delivers the hits with context in a fraction of a second, oscal_get_control adds the complete control text for each hit. The AI summarizes: “Backup is mentioned in AC-2, CP-9 and SI-12 — would you like to open any of them in Notepad?”
“Build me a test report as qFORM”
You describe what you need — the AI builds the form:
“Create a qFORM audit report with the fields auditor, date, system name, a dropdown ‘Status’ (Open / In Progress / Completed) and a checklist with 10 entries."
qform_create creates the structure, qform_add_field sets each field with correct widget type, qform_render immediately shows the form in the form tab. You can then embed an automatic maturity level calculation using qform_create_qc_script.
“Generate the complete document chain for our new server”
The classic — and the prime example of execute_steps:
“Create a profile for the server
web-prod-04from the BSI catalog, an SSP with our standard components, then assessment plan, assessment results and POA&M. Save everything under040-Server/web-prod-04/.”
The AI bundles up to 20 tool calls into a single request: dir_create, oscal_generate_profile_from_catalog, oscal_generate_ssp_from_profile, oscal_generate_ap_from_ssp, oscal_generate_ar_from_ap, oscal_generate_poam_from_ssp, followed by validate_oscal_document for each file. One statement — five validated, linked OSCAL documents.
“Validate what we have right now — and fix if possible”
Before an audit date or a commit:
“Validate all OSCAL files in the current project directory against the official schema and check all UUID references.”
file_listcollects all candidates,validate_oscal_documentandvalidate_oscal_referencesrun over each file. The AI reports: “11 out of 12 files are valid. Inssp-db.jsonacomponent-uuidpoints to nothing - should I correct the reference to the most obvious component?”
“Get our report ready for export”
A typical reporting workflow without changing tools:
“Generate a table of contents for the current Markdown report, add a footer with the date and version number, and export the result as a PDF to
berichte/.”
markdown_get_toc, markdown_replace_section, markdown_export_to_pdf — and the finished PDF appears in the file tree.
“Discover all devices on the network and fill the SSP inventory automatically”
Before an SSP can be populated with inventory, the asset inventory must be known. This normally costs hours: starting network tools, noting down IPs and MACs, typing JSON entries. With one sentence:
“Read the ARP cache of my machine, map all discovered devices to OSCAL inventory items and insert them directly into
030-SSP/ssp-main.json. Resolve hostnames via reverse DNS.”
The tool network_discover_passive queries the operating system’s ARP/ND cache passively – no active scans, no packets sent, no administrator rights required:
network_discover_passive→ reads OS ARP cache → returns IP, MAC, hostname per device- Each host is mapped as an OSCAL
inventory-itemwith UUID,ip-addressprop andmac-addressprop oscal_ssp_upsert_inventory_item(n×) → items are inserted into the SSP (duplicates automatically skipped)file_save→ SSP saved, GUI updates
Result: The SSP inventory immediately contains all currently reachable devices as schema-valid OSCAL v1.2.2 objects. What used to take half a day now takes seconds.
“Scan our components for CVEs and immediately generate a POA&M”
Checking your own systems against known vulnerabilities before every audit date and documenting the findings in OSCAL was previously a multi-hour process: querying NVD manually, formulating CPE strings, creating POA&M entries. With MCP, one sentence is enough:
“Scan all components in
030-SSP/ssp-main.jsonfor known CVEs (severity at least ‘high’), write the findings as POA&M items to050-POAM/poam-main.jsonand add a remediation remark to each affected inventory entry.”
Workflow of the oscal_cve_scan tool:
- Read all
system-componentsandinventory-itemsfrom the SSP - For each component, extract the CPE string from the OSCAL properties and compare against the NVD CVE database
- Filter findings by CVSS severity (
severity_min: "high") oscal_poam_upsert_item(n×) → for each finding a POA&M item with risk, description and CVE ID- Optional:
annotate_ssp: true→ CVE props and remediationremarksdirectly in SSP components - Optional:
ap_path→ verification tasks for remediation measures appended to the Assessment Plan
Result: A complete, OSCAL v1.2.2-compliant POA&M with CVE-linked risks – directly from your SSP inventory, in minutes instead of hours. An NVD API key (environment variable NVD_API_KEY) significantly speeds up the scan for large inventories.
“Show me the compliance status of all projects – and export a report”
Instead of manually opening every OSCAL file to check status:
“Scan all OSCAL documents in
~/my-project/for compliance status and export the report as Markdown toreports/compliance-2026-06.md.”
oscal_compliance_scan→ Recursive scan of the project path – automatically detects all OSCAL document types (catalog, profile, SSP, AP, AR, POA&M)oscal_compliance_get_state→ Full scan state: document count, type distribution, validation status, implementation coverageoscal_compliance_set_filter→ Optional filtering by type or full text (e.g. only show SSPs)oscal_compliance_export_markdown→ Markdown report with tables, progress bars and open items
The AI can comment on the report directly: “Of 47 controls, 38 are marked as ‘implemented’ — the 9 open ones are in categories SC and SI. Shall I list the details in the POA&M?”
“Set precise OSCAL values – without rebuilding the whole document”
When only a single implementation status needs updating or a new observation needs adding, the AI doesn’t need to replace the entire document. The 27 OSCAL Node CRUD tools enable surgical changes:
“Set the implementation status of control
AC-2toimplementedinssp-main.jsonand add a new observation toar-main.json: methodEXAMINE, titleAC-2 Review, statussatisfied.”
mjEdit translates this into two targeted operations:
oscal_ssp_upsert_implemented_requirement→ Updates only theimplemented-requirementobject forAC-2; all other controls remain untouchedoscal_ar_upsert_observation→ Appends the new observation to theobservationsarray – with UUID,collectedtimestamp and schema-compliantrelevant-evidenceanchor
Further typical single operations:
| Task | Tool |
|---|---|
| Create new inventory item | oscal_ssp_upsert_inventory_item |
Set system status to operational |
oscal_ssp_set_system_status |
| Set security impact level | oscal_ssp_set_security_impact_level |
| Create / update POA&M item | oscal_poam_upsert_item |
| Add AP task | oscal_ap_upsert_task |
| Create risk in AR | oscal_ar_upsert_risk |
| Read any element by JSON path | oscal_get_node |
| Set any element by JSON path | oscal_set_node |
“Fill the SSP from our ISMS knowledge base (RAG with AnythingLLM)”
This is where the full potential of MCP + RAG comes into play: Your ISMS corpus is embedded in AnythingLLM - BSI IT-Grundschutz compendium, own security guidelines, operating manuals, previous risk analyses, network documentation, audit reports from previous years. mjEdit is connected as an MCP server. You say once:
“Fill the empty SSP
ssp-web-prod-04.jsonfor our new Linux web server from the profileprofile-grundschutzpp-web.json. Research the implementation descriptions per control from our ISMS knowledge base - specifically from the documents ‘Operating Manual Web Server v3.2’, ‘Hardening Guideline Linux 2025’ and ‘Patch Management Guideline’. Support eachdescriptionwith a source and folder all responsible persons from the ‘Roles and Responsibilities Catalog’ to theresponsible-rolesof theimplemented-requiremententries."
What happens in two worlds at the same time?
In AnythingLLM (RAG layer):
- Per control from the resolved profile (e.g.
ORP.4.A1,OPS.1.1.5.A1,SYS.1.3.A14), the AI performs a semantic vector search over the ISMS knowledge base. - The most relevant passages are returned with source (document name, page/section).
- The AI summarizes the relevant implementation statements for each control into an OSCAL-compatible sentence - no hallucinating because the context comes exclusively from your real ISMS documents.
In mjEdit (MCP layer):
oscal_query_get_control(n×) fetches the target request from the profile for each control.oscal_add_controlcreates oneimplemented-requirementnode per control.editor_stream_appendwithupdate_gui=truewrites the description returned from the RAG live into thedescriptionfield - you see the text appear sentence by sentence in the editor.oscal_add_propertysupplements the source information asprop(name="evidence-source",value="Betriebshandbuch Webserver v3.2 §4.2") - comprehensible for every auditor.oscal_update_implementation_statussets the status (implemented,partial,planned) based on the RAG findings.oscal_add_role+ Role assignment fillsresponsible-rolesfrom the role catalog.gui_show_tabandgui_show_progresskeep you updated on progress.validate_oscal_documentcompletes the run with a schema check.
Why this is so valuable
- No gut feeling, no hallucinations: Every statement in the SSP can be traced back to a specific location in a document you have via
evidence-sourceproperties - audit-proof. - Data sovereignty: AnythingLLM runs on-premise, mjEdit runs locally, the MCP transport is STDIO or local SSE. No compliance content leaves your home.
- Reusable: For the next web server
web-prod-05, call the same prompt - the AI uses the same knowledge base and delivers another consistent SSP in minutes. - Manually that would be days: Open Pro Control ISMS documents, find suitable positions, formulate them, enter the source, assign the person responsible, type into the JSON - the AI does exactly that, in parallel, in minutes.
In short: AnythingLLM provides the knowledge, mjEdit provides the tools - MCP is the bridge that brings the two together into an auditable OSCAL document.
Editor operations — as if the AI were a colleague at the keyboard
Undo, redo, search & replace, copy & paste — the AI can do exactly what you would do, only faster and reproducibly. Handy if you ask the AI: “Undo the last replace - that replaced too much.”
How these 154 tools group together
To make it clear what’s under the hood: The tools are organized into 19 categories — from file and JSON operations to validation and all OSCAL lifecycle phases (creation, query, editing, control management, generation, Pydantic model API, Node CRUD) to network discovery, CVE scanning, compliance dashboard, qFORM forms, Markdown and editor control, template management and GUI control. The AI chooses the right tools itself — you describe what should happen.
22 MCP resources
AI agents can directly query contextual information, such as:
mjedit://schema/oscal/catalog– OSCAL Catalog Schema v1.2.2mjedit://schema/oscal/ssp– OSCAL SSP Schema v1.2.2mjedit://oscal/controls– Controls of the current documentmjedit://snippets/oscal– OSCAL snippets
15 MCP prompts for guided workflows
| Prompt | Description |
|---|---|
oscal_create_catalog_prompt |
Catalog creation with assistance |
oscal_create_ssp_prompt |
SSP creation with system definition |
oscal_validate_prompt |
Interactive OSCAL validation |
oscal_compliance_check_prompt |
Compliance check against framework |
oscal_profile_tailoring_prompt |
Guided profile tailoring from catalog |
oscal_edit_controls_prompt |
Interactive control editing (list/edit/add) |
oscal_batch_edit_prompt |
Batch editing of multiple controls at once |
oscal_migration_prompt |
Migration between OSCAL versions (e.g. to 1.2.2) |
oscal_network_discovery_prompt |
Network discovery for SSP inventory |
oscal_batch_server_chain_prompt |
Batch document chains for multiple servers |
qform_design_prompt |
Form design using AI |
qform_qc_script_prompt |
QC script creation for form validation |
json_transform_prompt |
JSON transformation (e.g. JSON→CSV, JSON→YAML) |
markdown_document_prompt |
Markdown document creation |
security_audit_prompt |
Security analysis and audit preparation |
AnythingLLM – AI agent with RAG knowledge base
While Claude Desktop, Cursor and VS Code Copilot offer powerful MCP integration as cloud-based AI agents, AnythingLLM takes on a special role: As a self-hosted open source platform, AnythingLLM combines the capabilities of an AI assistant with a Retrieval-Augmented Generation (RAG) knowledge base - completely under your control.
What you can embed as a knowledge base
- BSI IT-Grundschutz Compendium (PDF, 800+ pages)
- NIST SP 800-53 Controls Catalog
- Existing ISMS guidelines and procedural instructions
- Audit reports from previous years
- OSCAL documents (JSON) from mjEdit
- Technical documentation of your IT infrastructure
MCP integration with AnythingLLM
{
"mcpServers": {
"mjEdit": {
"url": "http://localhost:8765/sse",
"transport": "sse"
}
}
}
Comparison: AnythingLLM vs. Cloud AI Agents
| criterion | Cloud Agents | AnythingLLM (Self-Hosted) |
|---|---|---|
| Data Sovereignty | Data leaves the house | Fully local / on-premise |
| RAG knowledge base | Limited Context Window | Unlimited (Vector Database) |
| My Documents | Upload per conversation | Persistently embedded |
| MCP Transport | STDIO | SSE (HTTP) |
| Costs | API fees per token | Unique (hardware) + optional API |
| Offline capability | No | Yes (with Ollama / LM Studio) |
| Multi-User | Single user | Team workspaces with rights |
Use case: 8 web servers in one call
“Create a complete OSCAL document chain for my 8 web servers based on the BSI-IT-Grundschutz catalog.”
The AI calls oscal_generate_batch_tailored_chain, the MCP server creates a subdirectory for each server and generates the complete chain Profile → Component Definition → SSP → AP → AR → POA&M. The inventory data (hostname, FQDN, IPv4/IPv6, MAC) is passed as inventory_items per target; everything is validated against OSCAL v1.2.2.
Result: 48 validated OSCAL documents in one call.