{% extends "base.html" %} {% block title %}q-ai — Launcher{% endblock %} {# ---- Reusable macro for target name field with collision check ---- #} {% macro target_name_field(wf_id, placeholder="my-mcp-server") %}
{% endmacro %} {# ---- Reusable macro for transport + command/url fields ---- #} {% macro transport_fields(wf_id) %}
{% endmacro %} {# ---- Reusable macro for CLI preview block ---- #} {% macro cli_preview(wf_id) %}
Equivalent CLI
implicit defaults omitted
{% endmacro %} {# ---- Workflow color config — unified violet for all rows ---- #} {% set wf_color_default = {'color': '#a78bfa', 'border': 'rgba(139,92,246,0.35)', 'bg': 'rgba(139,92,246,0.06)'} %} {% block content %}
{# ---- Accordion Panel ---- #}
{# Build a unified list: hero first, then the rest #} {% set all_workflows = [] %} {% if hero_workflow %} {% set _ = all_workflows.append(hero_workflow) %} {% endif %} {% for wf in workflows %} {% set _ = all_workflows.append(wf) %} {% endfor %} {% for wf in all_workflows %} {% set colors = wf_color_default %} {# Connector between rows #} {% if not loop.first %}
{% endif %}
{# ---- Row header ---- #}
{{ wf.name }}
{% if wf.implemented %} {% endif %}
{% for mod in wf.modules %} {{ mod }} {% endfor %}
{# ---- Row body (expanded content) ---- #} {% if wf.implemented %}

{{ wf.description }}

{% for mod in wf.modules %} {{ mod }} {% endfor %}
{# ---- Provider warning ---- #} {% if wf.requires_provider and providers|length == 0 %}

This workflow requires an LLM provider.

Configure one now
{% elif not wf.requires_provider or providers|length > 0 %} {# ---- Inline launch form ---- #}
{% if wf.id == 'assess' %} {# ---- ASSESS FORM ---- #} {{ target_name_field(wf.id, "my-mcp-server") }} {{ transport_fields(wf.id) }} {% set selector_id = "assess" %} {% include "partials/model_selector.html" %}
{# ---- Inject: Technique Checkboxes ---- #}
Inject Techniques
{% for tech in injection_techniques %} {% endfor %}
{# ---- Inject: Advanced Payload Library ---- #}
Advanced: Payload Library
{# ---- Audit: Category Checkboxes ---- #}
Audit Categories
Select All Clear All
{% for cat in scanner_categories %} {% endfor %}
{% elif wf.id == 'test_docs' %} {# ---- TEST DOCS FORM ---- #} {{ target_name_field(wf.id, "doc-pipeline") }}
{% if not rxp_available %}
RXP pre-validation requires additional dependencies.
pip install "q-uestionable-ai[rxp]"
{% endif %}
{% elif wf.id == 'test_assistant' %} {# ---- TEST ASSISTANT FORM ---- #} {{ target_name_field(wf.id, "coding-assistant") }}
{% elif wf.id == 'trace_path' %} {# ---- TRACE PATH FORM ---- #} {{ target_name_field(wf.id, "target-server") }}
{{ transport_fields(wf.id) }} {% set selector_id = "trace_path" %} {% include "partials/model_selector.html" %} {% elif wf.id == 'blast_radius' %} {# ---- BLAST RADIUS FORM ---- #}
{% endif %} {% if wf.id == 'assess' %} {# ---- Enumerate First ---- #}
{% endif %} {{ cli_preview(wf.id) }}
{% endif %}
{% endif %}
{% endfor %} {# ---- Quick Action accordion rows ---- #}
Quick Audit Run
audit

Scan an MCP server for vulnerabilities without proxy or injection modules.

audit
{{ target_name_field('qa_scan', "my-mcp-server") }} {{ transport_fields('qa_scan') }} {# ---- Audit: Category Checkboxes ---- #}
Categories
Select All Clear All
{% for cat in scanner_categories %} {% endfor %}
{{ cli_preview('qa_scan') }}
Quick Proxy Run
proxy

Intercept MCP traffic without audit scanning or injection modules.

proxy
{{ target_name_field('qa_intercept', "my-mcp-server") }} {{ transport_fields('qa_intercept') }} {{ cli_preview('qa_intercept') }}
Quick Inject Run
inject

Run tool-poisoning injection against an MCP server without audit or proxy.

inject
{% if providers|length == 0 %}

Campaigns require an LLM provider.

Configure one now
{% else %}
{{ target_name_field('qa_campaign', "my-mcp-server") }} {{ transport_fields('qa_campaign') }} {% set selector_id = "campaign" %} {% include "partials/model_selector.html" %}
{# ---- Inject: Technique Checkboxes ---- #}
Techniques
{% for tech in injection_techniques %} {% endfor %}
{{ cli_preview('qa_campaign') }}
{% endif %}
Enumerate Server
audit

Connect and list server capabilities (tools, resources, prompts) without scanning.

audit
{{ transport_fields('qa_enumerate') }} {{ cli_preview('qa_enumerate') }}
{% endblock %}