Sovereignty Scan
EU AI Act sovereignty scanning. Provider residency, registration status, audit trail support.
Open source Repository Open in the app JSON README (API)
About
EU AI Act sovereignty scanning. Provider residency, registration status, audit trail support.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- kajaril
- Origin
- official
- Category
- ferramentas
- Transport
- http
- Version
- 0.1.2
- Stars
- 1
- Open pull requests
- 5
- Last push
- 2026-08-04T11:45:43Z
- Repository state
- ativo
- Language
- TypeScript
- License
- MIT
- Added
- 2026-08-29 04:00:18
- Updated
- 2026-08-29 04:00:18
- Origin id
io.github.kajaril/sovereignty-scan-mcp
README
# @kajaril/sovereignty-scan-mcp
MCP server for EU AI Act vendor sovereignty scanning. MIT-licensed free tier.
[](https://www.npmjs.com/package/@kajaril/sovereignty-scan-mcp)
[](https://www.npmjs.com/package/@kajaril/sovereignty-scan-mcp)
[](LICENSE)
[](https://glama.ai/mcp/servers/kajaril/sovereignty-scan-mcp)
Know where your stack processes data before the enforcer does. Covers **55 providers across 12 categories**.
## Install
**1. Get a free API key**
```sh
curl -s -X POST https://sovereignty-scan.kajaril.com/register \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}' | jq .api_key
```
Save the returned key — it cannot be recovered.
**2. Add to `claude_desktop_config.json`**
```json
{
"mcpServers": {
"sovereignty-scan": {
"type": "http",
"url": "https://sovereignty-scan.kajaril.com/mcp",
"headers": {
"Authorization": "Bearer ks_free_YOUR_KEY"
}
}
}
}
```
Restart Claude Desktop.
**Client compatibility**
| Client | Status |
|--------|--------|
| Claude Desktop | ✓ Supported |
| Cursor / Windsurf | ✓ Supported (HTTP MCP) |
| claude.ai web | ✗ Not supported (no HTTP MCP) |
## Quick test
Verify the endpoint is live:
```sh
curl -s https://sovereignty-scan.kajaril.com/health | jq .
```
Call a tool with your key:
```sh
curl -s -X POST https://sovereignty-scan.kajaril.com/mcp \
-H "Authorization: Bearer ks_free_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"scan_provider","arguments":{"name":"cloudflare"}}}' \
| jq .
```
## Tools
**`scan_provider`** — Full jurisdictional profile for a single vendor: headquarters country, data residency regions, EU residency option, US CLOUD Act exposure, GDPR DPA availability, and legal framework.
- `name` — string, case-insensitive
Example response:
```json
{
"name": "Cloudflare",
"hq_country": "US",
"data_residency_regions": ["US", "EU", "APAC"],
"eu_residency_option": true,
"us_cloud_act_subject": true,
"gdpr_dpa_available": true,
"legal_framework": "GDPR+SCC"
}
```
**`scan_stack`** — Aggregate jurisdictional summary for a list of vendors: CLOUD Act exposure count, EU residency coverage, missing DPAs. Maximum 50 providers per call.
- `providers` — string[], max 50
**`list_providers`** — List all tracked providers. Optional category filter.
- `category?` — AI · Hosting · Database · Auth · Analytics · Observability · CI/CD · Communications · Payments · Search · Sandbox · Cache
**`get_us_cloud_act_providers`** — All providers subject to US CLOUD Act compelled disclosure (18 U.S.C. § 2713). No parameters.
**`suggest_eu_alternatives`** — EU/EEA/UK/CH-based alternatives in the same category as a given provider. Deterministic ordering: EU/EEA first, then UK/CH. Capped at 10.
- `provider_name` — string, case-insensitive
## Pricing
| | Free | Paid |
|---|---|---|
| Price | — | €39–149 / mo |
| License | MIT | Subscription |
| Status | Live | Coming soon |
| Output | Jurisdiction, residency, legal framework, CLOUD Act | + Proprietary risk score + Remediation guidance |
| Auth | API key (free registration) | API key |
| Rate limit | 100 req / day / IP | Extended |
Paid tier notifications: [studio@kajaril.com](mailto:studio@kajaril.com)
## Self-hosting
Requires a Cloudflare account (Workers + D1 + KV).
**1. Clone and install**
```sh
git clone https://github.com/mightbesaad/sovereignty-scan-mcp
cd sovereignty-scan-mcp
npm install
```
**2. Create infrastructure**
```sh
npx wrangler d1 create sovereignty-db-free
npx wrangler kv namespace create CACHE_KV
npx wrangler kv namespace create KEYS_KV
npx wrangler rate-limit:namespace create RATE_LIMITER
npx wrangler rate-limit:namespace create BURST_LIMITER
```
Copy the IDs printed by each command into `wrangler.jsonc` under `d1_databases`, `kv_namespaces`, and `unsafe.bindings`.
**3. Apply schema and seed data**
```sh
npx wrangler d1 execute sovereignty-db-free --remote --file=migrations/0001_providers.sql
node --input-type=module -e "
import { generateSeedSQL } from './src/seed.js';
process.stdout.write(generateSeedSQL());
" | npx wrangler d1 execute sovereignty-db-free --remote --command=-
```
**4. Deploy**
```sh
npx wrangler deploy
```
The custom domain (`sovereignty-scan.kajaril.com`) in the default config is owned by kajaril — remove or replace the `routes` entry with your own domain or use the default `*.workers.dev` URL.
## Health
```
GET https://sovereignty-scan.kajaril.com/health
```
Returns a structured payload (HTTP 200):
```json
{
"status": "ok",
"provider_count": 55,
"anthropic_path_count": 3,
"last_kv_refresh": "2026-05-11T00:00:00.000Z",
"cache_age_seconds": 86400,
"schema_version": "0001"
}
```
`status` is `"ok"` when D1 is reachable, `"degraded"` otherwise. `cache_age_seconds` is `null` if the KV cache has never been warmed.
## License
MIT — see [LICENSE](./LICENSE).