Claude MCP Workbench
Allows auditing public GitHub repositories by resolving URLs, shallow-cloning, scanning manifests, CI workflows, secrets, and test layouts, then generating tree views, briefs, and PDF reports.
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., "@Claude MCP Workbenchaudit https://github.com/octocat/Hello-World"
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.
Claude MCP Workbench
Public GitHub repo audit, over MCP.
Live demo: https://mcp.fotios.org
A live MCP host with a small web UI. v1 audits public GitHub repositories only. Caps instead of accounts. Not a startup product page — a tool.
What it is
A FastAPI host (one Uvicorn worker) plus a Vite/React UI.
One skill pack,
repo-audit: classify a URL → start a Task → shallow-clone → scan without executing → publish MCP resources.Streamable HTTP at
/mcp(protocol 2026-07-28). Tasks are SEP-2663-shaped.Public UI: one task chip (GitHub repo), three owner example tiles, URL field, live SSE progress, filtered findings, tree, brief, Open PDF / Download PDF, markdown report.
SQLite WAL. Cache by
owner/repo@sha(6 h). Settings page for Anthropic key/model/effort.
Related MCP server: Orcorus Repository Scanner
What it is not
Not a SaaS, account system, or marketplace.
Not a vulnerability scanner or CVE database — it does not invent secrets or CVEs.
Not a general git host: no GitLab, gist, issues, PRs, blobs, or SSH.
Not an executor: cloned code is never run, installed, or tested.
Not MCP Apps: there is no iframe. The tree is a host widget + UI resource (
ui://audit-tree/{run}).
Architecture
Browser / MCP client
│
├─ REST + SSE /api/runs… ─┐
├─ UI / , /settings │ FastAPI host (1 worker)
└─ Streamable /mcp ─┘
│
┌───────────┼───────────┐
▼ ▼ ▼
Task worker SQLite WAL Anthropic
(clone+scan) + artifacts (optional brief)
│
▼
shallow clone → manifests | ci | secrets | tests
│
▼
audit:// tree:// findings:// ui://audit-tree/{run}Stages (SSE, progress ≤ ~500 ms cadence):
queued → resolving → cloning → walking → [input_required] → scanning:manifests|ci|secrets|tests → writing → briefing
If the tree exceeds ELICIT_FILE_THRESHOLD (default 1500 files), the Task moves to input_required (top-level-only | full-tree, wait ELICIT_WAIT_SECONDS=300).
Features
Area | What you get |
Audit stages | Live progress chip bar + SSE on |
Scans | Manifests, |
Findings | UI summary with filtered secret hits (noisy/vendor paths stripped on read) |
Tree / brief | JSON tree (paths jail-relative) + Claude brief when configured, else deterministic |
| |
Settings |
|
MCP | Tools, resources, |
Caps | Per-IP concurrent + daily run/LLM limits; no user accounts |
Quick start
Linux
cd Claude-MCP-Workbench # or your clone path
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
cd web && npm ci && npm run build && cd ..
cp .env.example .env # edit as needed
uvicorn src.host.main:app --host 127.0.0.1 --port 8000Open http://127.0.0.1:8000. Dev UI with proxy: cd web && npm run dev (Vite proxies /api, /healthz, /mcp).
Helpers: scripts/build.sh (install + web build); scripts/smoke_test.sh (classify without network; SMOKE_NETWORK=1 hits GitHub).
Windows
cd Claude-MCP-Workbench
python -m venv .venv
.venv\Scripts\pip install -e .
cd web && npm ci && npm run buildCopy .env.example → .env, then:
uvicorn src.host.main:app --host 127.0.0.1 --port 8000Or npm run dev in web/ (Vite proxy).
Requires Python 3.11+, Node/npm, and git on PATH.
MCP honesty (tools / resources / prompts / tasks)
Implemented
Kind | Surface |
Tools |
|
Resources |
|
Prompt |
|
Transport | Streamable HTTP at |
Tasks |
|
Official mcp SDK is preferred for tools / resources / prompts when importable; otherwise a fallback Streamable HTTP router is used. Tasks live beside the SDK because SEP-2663 coverage is incomplete.
Deferred / not in v1
skills/list— skills are published as resources + therepo-auditprompt (skill://index.json)MCP Apps / iframe UI
OAuth, authenticated GitHub, private repos
Completions, resource subscriptions, sampling
Multi-skill routing beyond
github_repo → repo-audit
Try /mcp from the command line
/mcp is Streamable HTTP JSON-RPC, not a webpage. A browser GET usually only shows keep-alive ping events. Use POST with Content-Type: application/json.
Base URL in the examples: https://mcp.fotios.org/mcp (local: http://127.0.0.1:8000/mcp).
1) initialize
Handshake: negotiate protocol version and learn server capabilities.
Returns: result.protocolVersion, serverInfo, capabilities (tools/resources/prompts + Tasks extension), and short instructions.
Linux / macOS (curl):
curl -sS https://mcp.fotios.org/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-07-28","capabilities":{},"clientInfo":{"name":"curl-demo","version":"1"}}}'Windows PowerShell (Invoke-RestMethod):
Invoke-RestMethod https://mcp.fotios.org/mcp -Method Post -ContentType 'application/json' -Body '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-07-28","capabilities":{},"clientInfo":{"name":"curl-demo","version":"1"}}}' | ConvertTo-Json -Depth 202) tools/list
List every MCP tool this host exposes.
Returns: result.tools[] with name, description, and inputSchema for each tool (classify, resolve, scanners, start_repo_audit, …).
Linux / macOS:
curl -sS https://mcp.fotios.org/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'Windows PowerShell:
Invoke-RestMethod https://mcp.fotios.org/mcp -Method Post -ContentType 'application/json' -Body '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | ConvertTo-Json -Depth 203) tools/call → classify_url
Ask whether a URL is an accepted public GitHub repo (and which skill it maps to).
Returns: classification payload (accepted, kind, skill, reason, and when accepted owner / repo / normalized URLs). Rejects gist/issues/blob/GitLab/SSH with a precise reason.
Linux / macOS:
curl -sS https://mcp.fotios.org/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"classify_url","arguments":{"url":"https://github.com/fotiosb/MacPresenterView"}}}'Windows PowerShell:
Invoke-RestMethod https://mcp.fotios.org/mcp -Method Post -ContentType 'application/json' -Body '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"classify_url","arguments":{"url":"https://github.com/fotiosb/MacPresenterView"}}}' | ConvertTo-Json -Depth 204) tools/call → start_repo_audit
Start a long-running repo-audit Task (shallow clone + scans + brief). Subject to the same IP caps as the web UI.
Returns: a Task / run handle (id fields depend on the fallback shape — typically a task/run id you can poll). Does not wait for the full audit inline.
Linux / macOS:
curl -sS https://mcp.fotios.org/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"start_repo_audit","arguments":{"url":"https://github.com/fotiosb/MacPresenterView"}}}'Windows PowerShell:
Invoke-RestMethod https://mcp.fotios.org/mcp -Method Post -ContentType 'application/json' -Body '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"start_repo_audit","arguments":{"url":"https://github.com/fotiosb/MacPresenterView"}}}' | ConvertTo-Json -Depth 205) tasks/get
Poll Task status until completed / failed / cancelled (or input_required).
Returns: task state (working, input_required, completed, …), progress/stage fields when available, and result refs when done. Replace PASTE_TASK_OR_RUN_ID_HERE with the id from step 4.
Linux / macOS:
curl -sS https://mcp.fotios.org/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":5,"method":"tasks/get","params":{"taskId":"PASTE_TASK_OR_RUN_ID_HERE"}}'Windows PowerShell:
Invoke-RestMethod https://mcp.fotios.org/mcp -Method Post -ContentType 'application/json' -Body '{"jsonrpc":"2.0","id":5,"method":"tasks/get","params":{"taskId":"PASTE_TASK_OR_RUN_ID_HERE"}}' | ConvertTo-Json -Depth 20Note: On Windows, Prefer Invoke-RestMethod (or curl.exe --data-binary @file.json). Inline curl.exe -d "..." is easy for PowerShell to mangle, which surfaces as MCP -32700 Parse error.
Safety model
GIT_TERMINAL_PROMPT=0,GIT_LFS_SKIP_SMUDGE=1, no--recurse-submodulesShallow clone (
--depth 1) only underCLONE_DIR; delete alwaysPath jail; skip binaries; 256 KB read cap; secret redaction
Public findings filter strips noisy/vendor secret hits on API read
Never execute, install, or test cloned code
Client IP from
X-Real-IPonly whenTRUSTED_PROXY=1
Caps (no auth)
Cap | Default |
Clone size |
|
Files |
|
Wall clock | 60 s (90 s for the large example tile) |
Concurrent / IP | 1 (warm exempt) |
Runs / IP / day |
|
LLM calls / IP / day |
|
URL length | 512 |
File read | 256 KB |
Elicit threshold |
|
Cache TTL | 6 hours ( |
Artifact TTL | 24 hours |
Cached example runs do not consume the daily run cap. Claude is skipped on a cache hit.
Deploy
Production (fotios): DEPLOY-mcp.fotios.org.md — nginx VPS,
mcp.fotios.org, SSH/SFTP, certbot.Generic Ubuntu: DEPLOY.md — service user
mcpwork, env/etc/mcp-workbench.env, systemd + nginx samples undersystemd/andnginx/.
Apt note: do not install distro npm alongside NodeSource nodejs (NodeSource already ships npm). On Python 3.14 hosts, install matching python3.14-venv as well as python3-venv.
Owner example tiles
Shipped under web/public/examples/ (local SVGs — no hotlinks). Author: fotiosb.
Multi-Agent Behavioral Video Analysis — RTSP anomaly, YOLO + Gemini + Claude, FastAPI / React (small).
Residential Proxy Aggregator — Windows edge nodes → SOCKS5 pool (~27 MB binaries; cache warm).
MacPresenterView — Slides → NDI notes, Node + Chrome extension (small).
WARM_EXAMPLES=1 warms #1 and #3 first, then #2.
How to add a skill
Create
src/skills/<name>/SKILL.md.Teach
src/skills/router.pya newkind→ skill id.Add tools / resources / a prompt in
src/mcp_server/.If the skill is long-running, enqueue through
src/tasks/worker.pyso it shares Task states, SSE, and cleanup.
v1 only routes github_repo → repo-audit. Everything else is unsupported with a one-line reason.
HTTP API (host)
Method | Path | Notes |
GET |
| Does not block on warm |
GET |
| URL → kind / skill |
GET |
| Three owner tiles |
POST |
|
|
GET |
| Status, findings, tree, brief |
GET |
| SSE progress |
POST |
| Elicitation choice |
GET |
| Markdown |
GET |
| PDF (Open / Download) |
GET |
| Diagram metadata + tools + recent events |
GET/POST/PUT |
| Password-gated Anthropic settings |
— |
| Settings UI |
— |
| Streamable HTTP MCP |
Project layout
.
├── LICENSE
├── README.md
├── ANALYSIS.md
├── DEPLOY.md
├── DEPLOY-mcp.fotios.org.md
├── .env.example
├── package.json # workspace root → web/
├── pyproject.toml # mcp-workbench (Python)
├── nginx/ # sample site configs
├── systemd/ # service + GC timer
├── scripts/
│ ├── build.sh
│ ├── smoke_test.sh
│ └── cap_accounting_probe.py
├── src/
│ ├── host/ # FastAPI app, config, examples, settings
│ ├── mcp_server/ # SDK mount + Streamable HTTP fallback
│ ├── skills/ # router + repo_audit/SKILL.md
│ ├── tasks/ # audit worker
│ ├── audit/ # clone, scans, report, PDF, brief
│ └── store/ # SQLite
└── web/
├── public/examples/ # tile SVGs
└── src/ # React UI (Workbench + Settings)Runtime data (DATA_DIR, clones, artifacts, cache) stays local and is gitignored.
License
MIT © Fotios Basagiannis. The three example repositories remain under their own licenses.
Author
Fotios Basagiannis — fotiosb · live host mcp.fotios.org
This server cannot be deployed
Maintenance
Related MCP Connectors
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Scan any public GitHub MCP-server repo for security issues. 37 MCP-specific L1 rules, 8 languages.
Audit and repair any public GitHub repo. Free survey; paid source, unified diffs and a pull request.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAnalyze GitHub repositories into structured JSON with tech stack detection, dependency analysis, health signals, and security checks. No AI, fully deterministic. Available as CLI and MCP server.9MIT
- FlicenseNot gradedqualityDmaintenanceScans GitHub repositories for security vulnerabilities by cloning, performing static analysis, secret detection, build verification, and AI-powered OWASP-aligned code review, producing a scored SECURITY.md report.-
- FlicenseAqualityAmaintenanceClones and inspects public GitHub repositories to extract evidence like manifests, dependencies, and version hints, and can run allow-listed repos in isolated Docker containers for reproducible verification.4-

repo-doctorofficial
AlicenseNot gradedqualityCmaintenanceMCP server that produces scored, evidence-cited audits of public GitHub repos via tools for fetching metadata, reading files, scanning git history, and checking hygiene.MIT