Singularity — MCP Discovery & Security Gateway
Perplexity for MCP. Discover the right tool for a problem, see its trust card (prompt-injection risk, permission overreach, publisher status), connect it in one click, and execute it through a secure, audited gateway — one product, one config.
See ROADMAP.md for the full plan. Blueprint: ../Singularity_Blueprint.md.
Quickstart (local)
pip install -r requirements.txt
copy .env.example .env # optional, defaults are fine (SQLite)
python scripts/seed_index.py # builds index + embeddings (first run downloads ~35MB model)
python -m uvicorn app.main:app --reload # http://127.0.0.1:8000/docs
A fresh boot with an empty database auto-seeds itself — seed_index.py is only needed
for manual re-seeding.
Use Singularity as an MCP server
Singularity is a native MCP server (streamable HTTP, stateless) at /mcp.
VS Code / Copilot Chat — .vscode/mcp.json:
{ "servers": { "singularity": { "type": "http", "url": "http://127.0.0.1:8000/mcp" } } }
Cursor — ~/.cursor/mcp.json:
{ "mcpServers": { "singularity": { "url": "http://127.0.0.1:8000/mcp" } } }
Claude Code CLI:
claude mcp add --transport http singularity http://127.0.0.1:8000/mcp
Then just ask your agent: "my team needs expense tracking" — it calls find_solutions
and gets ranked options with trust cards and security flags.
One-click install (replace the URL after deploying): Install in VS Code
Smoke-check any endpoint without an editor:
powershell -ExecutionPolicy Bypass -File scripts\smoke_mcp.ps1 -BaseUrl http://127.0.0.1:8000
Tools
| Tool | What it does |
|---|---|
find_solutions(problem, top_k?, max_pricing_tier?) | Ranked, trust-scored recommendations with plain-language security flags |
get_trust_report(slug) | Full security card: permissions requested vs needed, injection-scan verdicts, publisher status |
compare_tools(slugs[]) | Side-by-side trust table for shortlisted candidates |
Every result carries fit_score, trust_score, rank_score, trust_flags, and a
human-readable rationale. The seed index includes quickledger-pro, an intentionally
poisoned fictional tool — ask about expenses and watch it get flagged
(suspicious_description_imperative, hidden_unicode_characters, permission_overreach)
and pushed down the ranking.
Deploy your own instance (Render + Supabase)
Full walkthrough in DEPLOY.md. Summary:
- Create a free Supabase project → copy the connection string → add
+psycopgdriver segment +?sslmode=require - Push this repo to GitHub → Render "New +" → "Blueprint" → it reads
render.yaml - Paste the Supabase URL into the
SINGULARITY_DATABASE_URLenv var when prompted - First boot auto-creates tables and seeds the index;
https://<app>.onrender.com/mcpis live
Publish to MCP registries
After deploying (public HTTPS required), list Singularity so others can find it:
- Official MCP Registry — edit placeholders in
server.json(replaceXXXXwith your Render app name), then:npx mcp-publisher@latest init # scaffolds/validates server.json npx mcp-publisher@latest login # prove io.github.<you> ownership via GitHub npx mcp-publisher@latest publish # listed at https://registry.modelcontextprotocol.io within minutes - Smithery — submit repo at https://smithery.ai/new (uses
smithery.yaml) - Glama — submit remote URL at https://glama.ai, then claim the listing
- GitHub topics — add
mcp-server,mcp,ai-securitytopics to your repo; PulseMCP/MCP.so crawlers pick it up within 1–2 weeks
Tip: registries re-crawl weekly and strip verified badges from sleeping servers —
Render's $7/mo Starter plan keeps Singularity always-on during listing/investor periods.
Tests
pytest -v
Layout
singularity/
main.py FastAPI app factory + lifespan (auto-seed, mounts MCP)
mcp_server.py native MCP server: find_solutions / get_trust_report / compare_tools
config.py env-driven settings (SINGULARITY_* prefix)
database.py SQLAlchemy engine/session (SQLite dev, Postgres prod)
models.py Tool + AuditLog tables
schemas.py request/response contracts
middleware/
rate_limit.py per-IP token-bucket limiter (X-Forwarded-For aware)
services/
discovery_engine.py heuristic intent parsing
recommendation_index.py in-memory vector search over seeded tools
ranking.py fit/trust blend + rationale builder
scanner.py static injection/overreach scan (Phase 2 preview)
seeder.py seed logic shared by CLI and boot-time auto-seed
embeddings.py fastembed provider (bge-small-en-v1.5)
routers/
recommend.py POST /recommend, GET /tools
data/seed_tools.json curated 15-tool index incl. demo attack sample
scripts/seed_index.py manual seeding CLI
scripts/smoke_mcp.ps1 end-to-end MCP handshake smoke test (works on remote URLs too)
Dockerfile / render.yaml one-command Render deployment
server.json / smithery.yaml registry publishing manifests (fill placeholders first)
tests/ pytest suite (API + scanner + MCP tools & endpoint)