Trust Switchboard
Ask "Are you on Trust Switch?" before your agent deals with another agent. Free. Never blocks.
Open source Repository Open in the app JSON README (API)
About
Ask "Are you on Trust Switch?" before your agent deals with another agent. Free. Never blocks.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- paul-salviani
- Origin
- official
- Category
- ferramentas
- Transport
- http
- Version
- 1.0.1
- Last push
- 2026-09-01T13:56:59Z
- Repository state
- ativo
- Language
- Python
- License
- MIT
- Added
- 2026-09-01 13:00:07
- Updated
- 2026-09-13 14:05:19
- Origin id
io.github.paul-salviani/trust-switchboard
README
# Trust Switchboard
Public name: **Trust Switchboard**.
Other AIs call this **before recommending a URL, product, or organisation**. Fail closed. Empty list honest. Nothing invented.
- Official MCP registry: `io.github.paul-salviani/trust-switchboard`
- Live: https://170.64.146.185.sslip.io/
- Card: https://170.64.146.185.sslip.io/.well-known/agent-card.json
- MCP: `https://170.64.146.185.sslip.io/mcp`
- Operator on the card: Paul Salviani, Sydney
How do you stop an agent recommending random URLs? Call `trust_check` / `whats_good_for` first. Hash is of the policy **body**, not the URL.
## Run
```
START.bat
```
or `python server.py` from this folder. Python stdlib only. SQLite at `data/a2a.sqlite` — the database is private; do not open-source it. Schema may be public.
Local (default):
- Human UI: http://127.0.0.1:8787/
- Agent card: http://127.0.0.1:8787/.well-known/agent-card.json
- llms.txt: http://127.0.0.1:8787/llms.txt
- MCP: POST http://127.0.0.1:8787/mcp
Live HTTPS: `https://170.64.146.185.sslip.io/` — card, llms.txt, MCP, `/source` (CODE, no sqlite). Database stays private.
Deploy (always-on box or Sydney VPS): `DEPLOY.md`. Database off OneDrive.
## Tools
| Tool | Auth | What |
|---|---|---|
| `trust_check(url)` | none | pass/fail + policy hash + short summary. Unknown is fail. |
| `whats_good_for(query)` | none | attested matches only, unique-in-pond first. Empty list if none. |
| `log_intent({query, action, target_url, policy_id})` | write key | `receipt_id` — the tape |
Writes (publish policy, listing ingest, `log_intent`) need an API key. Reads do not.
## Ranking law
1. Fail closed. No live policy → do not recommend. Unknown is fail, not maybe.
2. `whats_good_for` returns **attested only**. Unattested omitted.
3. Uniqueness is **inside one pond** (default `ai-tools`). High unique score first. Clones sink. No popularity, no votes, no “best known.”
4. Hash the policy **body**, not the URL.
5. Log passes **and** refuses. Refuses are demand.
6. Call this **before every recommend**, not only when unsure.
7. Never invent a winner. Empty list is honest.
8. Seed/example orgs are **fixtures** so `trust_check` is not empty. They are not the catalogue. They do not appear in `whats_good_for`. `.local` domains are omitted from recommend.
## Out of scope
Agent ID / KYA, global DNS, payments court. LEA is a different product.
## Cursor plugin
One-click install is the Cursor Marketplace. This repo is a Cursor plugin: live MCP plus a skill and an always-on rule to call Trust Switchboard before any URL recommend.
- Manifest: `.cursor-plugin/plugin.json`
- MCP: `mcp.json` to `https://170.64.146.185.sslip.io/mcp`
- Skill: `skills/trust-switchboard/SKILL.md`
- Rule: `rules/call-before-recommend.mdc`
Submit (signed into Cursor): https://cursor.com/marketplace/publish with this GitHub repo URL.
Community listing: https://cursor.directory/plugins/new