The problem
Every time your application calls Claude or GPT-4o, your users' sensitive data travels to an external server. Names, emails, phone numbers, NHS numbers, financial data. Most developers have no visibility into what is actually leaving their system.
What I built
Jnvoy is a drop-in proxy. Change one URL in your code and every LLM call is automatically protected.
Before Jnvoy:
Your app sends raw user data directly to Claude or GPT-4o.
After Jnvoy:
Every request is scanned locally, PII is replaced with reversible tokens, the clean request goes to the LLM, and original values are restored in the response.
What it does
- Microsoft Presidio PII detection with 20+ entity types
- UK-specific recognisers: NHS numbers, NI numbers, UK postcodes, sort codes
- Prompt injection detection: blocks jailbreaks, instruction overrides, system prompt extraction
- MCP security: detects tool poisoning and secret leakage in tool responses
- PostgreSQL audit logs for FCA and GDPR compliance
- One click FCA and EU AI Act compliance report PDF
- Semantic caching saves 20 to 40 percent of LLM costs
- Multi-tenant API keys with complete data isolation
- Slack connector protecting AI bot messages
- Docker stack in one command
- 164 automated tests passing
One URL change
# Before
import anthropic
client = anthropic.Anthropic(api_key="sk-ant-...")
response = client.messages.create(model="claude-haiku-4-5", messages=[{"role": "user", "content": user_message}])
# After
import httpx
response = httpx.post("https://jnvoy.onrender.com/v1/proxy", json={"model": "claude-haiku-4-5", "provider": "anthropic", "messages": [{"role": "user", "content": user_message}]})
Try it
curl "https://jnvoy.onrender.com/v1/scan?text=My NI number is AB123456C and email is john@example.com"
Live: https://jnvoy.com
GitHub: https://github.com/Jeevan2191999/jnvoy
Happy to answer questions about the architecture.
Top comments (0)