loading…
Search for a command to run...
loading…
A production-grade MCP server offering modules for GitHub issue/PR triage, live website auditing, and automated release note generation. It provides robust secu
A production-grade MCP server offering modules for GitHub issue/PR triage, live website auditing, and automated release note generation. It provides robust security features like write-operation confirmation gates, rate limiting, and dual-read storage backends.
Single self-hosted MCP connector that ships three production modules:
AuditLens (auditlens.*): GitHub PR/run evidence triage and issue drafting.SiteLint (sitelint.*): live URL audit and report generation.Release Butler (releasebutler.*): release asset checksums and release-note workflows.It exposes one MCP endpoint at POST /mcp and includes a lightweight dashboard at GET /ui.
auditlens, sitelint, releasebutler, core).releasebutler.generate_notes extensions:from_tagto_tagfallback_windowreleasebutler.create_release local file asset upload (assets[]) with per-file outcome metadata:uploaded_assets[]failed_assets[]local backends3 backend with dual-read behavior (new writes to S3, legacy local refs still readable)LOG_FORMAT=json|plain)OTEL_ENABLED=true)/metrics endpoint (PROMETHEUS_ENABLED=true)apps/mcp_server - FastAPI MCP server and dashboard endpointspackages/omniaudit - domain modules, runtime, security, storageservices/worker - Celery worker and async SiteLint tasktests - unit + integration testsinfra - Dockerfilesflowchart LR
ChatGPT -->|MCP JSON-RPC| API["FastAPI /mcp"]
API --> Runtime["MCP Runtime"]
Runtime --> AuditLens["AuditLens"]
Runtime --> SiteLint["SiteLint"]
Runtime --> ReleaseButler["Release Butler"]
Runtime --> Policy["Policy + Risk Gate + Rate Limits"]
Runtime --> Receipts["Receipts + Audit Logs"]
Runtime --> ObjectStore["ObjectStore (Local or S3 Dual-Read)"]
Runtime --> Jobs["JobStore"]
Worker["Celery Worker"] --> SiteLint
SiteLint --> Reports["Reports + Evidence"]
ReleaseButler --> GitHub["GitHub API"]
AuditLens --> GitHub
API --> Metrics["/metrics"]
| Capability | Status | Notes |
|---|---|---|
| MCP tool registry and dispatch | Ready | Backward-compatible tool names and required args maintained |
| Object storage backends | Ready | local and s3 with dual-read fallback |
| Release asset uploads | Ready | Local file path assets supported |
| Live smoke automation | Ready | scripts/smoke_hardening_pass2.sh |
| SiteLint wave 1 optional args | Ready | crawl_budget, entry_paths, auth_profile_id, baseline_scan_id |
| AuditLens wave 1 optional args | Ready | parser_profile, dedupe_strategy, issue drafting extensions |
| Release Butler wave 1 optional args | Ready | group_by, include_pr_links, draft, prerelease, dry_run |
| Governance baseline | Ready | CI workflows, templates, CODEOWNERS, policy docs |
uv venv .venv
uv pip install --python .venv/bin/python -e '.[test]'
cp .env.example .env
./scripts/bootstrap.sh
PYTHONPATH=packages:apps:services .venv/bin/uvicorn mcp_server.main:app --host 0.0.0.0 --port 8080
Optional SiteLint browser stack:
./scripts/install_sitelint_toolchain.sh
curl -s http://localhost:8080/healthz
cp .env.example .env
./scripts/bootstrap.sh
docker compose up --build
API endpoint: http://localhost:8080/mcp
Metrics endpoint: http://localhost:8080/metrics
In ChatGPT Developer Mode connector modal:
OmniAudit MCPhttps://<your-host>/mcpNone if MCP_AUTH_MODE=noneMCP_AUTH_MODE=api_keyDefault mode is local:
OBJECT_STORE_BACKEND=local
S3/MinIO mode with dual-read, S3-write:
OBJECT_STORE_BACKEND=s3
OBJECT_STORE_BUCKET=omniaudit
OBJECT_STORE_PREFIX=omniaudit
S3_ENDPOINT_URL=http://minio:9000
S3_FORCE_PATH_STYLE=true
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
Behavior in s3 mode:
s3://<bucket>/<prefix>/<sha256>...result_ref valuesList tools:
curl -s http://localhost:8080/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0",
"id":1,
"method":"tools/list",
"params":{}
}'
Start site scan:
curl -s http://localhost:8080/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/call",
"params":{
"name":"sitelint.start_scan",
"arguments":{
"url":"https://example.com",
"profile":"standard",
"viewport_set":"desktop_mobile"
}
}
}'
Write operation risk gate flow (auditlens.create_issue):
confirmation_token and read structuredContent.confirmation_token.receipt_id.Generate tag-to-tag notes:
curl -s http://localhost:8080/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0",
"id":3,
"method":"tools/call",
"params":{
"name":"releasebutler.generate_notes",
"arguments":{
"repo":"Prekzursil/AdrianaArt",
"from_tag":"v1.0.0",
"to_tag":"v2.0.0",
"fallback_window":25
}
}
}'
Create release with local assets (confirmation flow):
releasebutler.create_release without confirmation_token.confirmation_token and local file paths in assets[].uploaded_assets and failed_assets in structuredContent.Run production-style dual-read/S3-write smoke checks locally:
./scripts/smoke_hardening_pass2.sh
Outputs:
artifacts/smoke/<timestamp>/summary.jsonartifacts/smoke/<timestamp>/responses/*.jsonKey assertions:
s3://...Structured logging:
LOG_FORMAT=json
Optional OTLP tracing:
OTEL_ENABLED=true
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318/v1/traces
Prometheus metrics:
PROMETHEUS_ENABLED=true
Exposed series include:
omniaudit_tool_calls_total{tool,status}omniaudit_tool_latency_seconds{tool}omniaudit_write_gate_denied_total{tool}omniaudit_rate_limit_denied_total{bucket}TMPDIR=/tmp TEMP=/tmp TMP=/tmp .venv/bin/pytest -q -s
sitelint.start_scan runs inline by default for deterministic single-user behavior.SITELINT_ASYNC_MODE=true and run worker service to process scan jobs via Celery..env.S3_FORCE_PATH_STYLE=true for compatibility.docs/ROADMAP.md and docs/CHANGELOG_POLICY.md.See docs/ARCHITECTURE.md and docs/OPERATIONS.md for details.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"omniaudit-mcp": {
"command": "npx",
"args": []
}
}
}