A remote Model Context Protocol server that lets any MCP-capable agent browse, read, and search the OWASP GenAI Security Project's curated corpus over HTTP — no local checkout required.
Five read-only tools, all backed by the same corpus/MANIFEST.yaml the skill itself reads — fetched live from GitHub at request time, so the two are never out of sync.
list_resourcesCatalog entries filtered by status, initiative, or format.
list_initiativesCategory overview with current/total resource counts — a good starting point before drilling in.
get_resourceOne resource's full metadata, file list, and a raw_url per file — or a source_url for entries with no vendored copy.
get_fileRead a specific text file's content directly (.md/.yaml/.yml/.json/.txt).
search_corpusFull-text search across markdown/json content, extracted PDF text, and every resource's title/notes.
Built to need nothing beyond GitHub (for the corpus) and Cloudflare's free tier (to serve it) — no database, no queue, no server to patch.
| Piece | How |
|---|---|
| Hosting | Cloudflare Workers, plain free tier — no Durable Objects, KV, or D1 |
| Protocol | MCP over Streamable HTTP, stateless (no session tracking, no Durable Object required) |
| Corpus data | Nothing vendored here — every call reads GenAI-Security-Advisor's corpus/MANIFEST.yaml and files live from GitHub, edge-cached 5 minutes |
| PDF search | Text extracted offline in the source repo (corpus/_extracted/, via a scheduled GitHub Action) — Workers' free-tier 10ms CPU budget can't parse a 100-page PDF live unreviewed |
| Auth | None — the corpus is already public. CORS is open for any client. |
Full design rationale, including why GitHub Pages/Codespaces were ruled out for the serving layer, is in the repo README.
Point any Streamable-HTTP-capable MCP client at the endpoint below. No installation, no API key.
claude mcp add --transport http genai-security-advisor \ https://genai-security-advisor-mcp.genai-security-advisor-mcp.workers.dev/mcp
Streamable HTTP, JSON-RPC 2.0, stateless — one POST per call:
curl -X POST https://genai-security-advisor-mcp.genai-security-advisor-mcp.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Public, read-only, and deliberately narrow in what it will fetch.
No tool can write to GitHub or anywhere else. The server holds no write credentials at all.
The corpus is already public CC BY-SA 4.0 / OWASP-published content — nothing here is a secret worth gating.
get_file validates every path against both a syntactic allowlist and the source repo's actual file tree before fetching.
An optional read-only GitHub token (to raise rate limits) is set via wrangler secret put, never in the repo.
Same split as the skill — check corpus/MANIFEST.yaml for the license of any specific document before redistributing it.
Covers this server's own code and documentation (this page included).
Covers the corpus content this server reads and returns — third-party OWASP GenAI Security Project research, not covered by this repo's Apache-2.0 grant.
license field via list_resources / get_resourcecorpus/_extracted/README.md in the source repo.