{"id":"4455449e-39ef-44eb-a1ca-d28fc768f6ac","slug":"corroborate-me","kind":"mcp","name":"corroborate-me","summary":"","owner":"CNR-Consulting","repoUrl":"https://github.com/CNR-Consulting/corroborate-me","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-09-15T14:03:49.000Z","addedAt":"2026-10-13T22:03:21.269Z","logoUrl":"https://avatars.githubusercontent.com/u/326638803?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"remote","local":false,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T12:02:47.889Z","sample":false,"url":"https://conduits.dev/tools/corroborate-me","language":"TypeScript","transports":["http"],"install":{"remoteUrl":"https://corroborateme.com/mcp"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# CorroborateMe\r\n\r\n**Prove end users to agents and apps.**\r\n\r\n[![Remote MCP](https://img.shields.io/badge/MCP-remote-555?style=flat-square)](https://corroborateme.com/mcp)\r\n[![Transport](https://img.shields.io/badge/transport-streamable--http-0ea5e9?style=flat-square)](https://modelcontextprotocol.io)\r\n[![Auth](https://img.shields.io/badge/auth-Bearer%20aa__%20or%20OAuth-111?style=flat-square)](https://corroborateme.com)\r\n[![License: MIT](https://img.shields.io/badge/license-MIT-green?style=flat-square)](./LICENSE)\r\n[![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/cnr-consulting/corroborate-me)\r\n\r\nCorroborateMe gives agents and apps company API keys and human login-links with multi-channel notify so they can prove who the end user is - plus OIDC client registration, integration secrets, and budget-aware billing. REST is first-class; MCP is optional.\r\n\r\n**Live endpoint:** [`https://corroborateme.com/mcp`](https://corroborateme.com/mcp)\r\n\r\n> This repository is the **public catalog and schema stub** for directory crawlers. It is not the hosted server. Point MCP clients at the live URL above with a CorroborateMe API key (`aa_...`) **or** use MCP OAuth (PRM at [/.well-known/oauth-protected-resource](https://corroborateme.com/.well-known/oauth-protected-resource)). Running the TypeScript in this repo does not authenticate users or store secrets.\r\n\r\n**Agent guide:** see [AGENTS.md](./AGENTS.md) for discovery URLs, auth, and MCP connect snippets.\r\n\r\n## Get an API key\r\n\r\n### Zero-human (agents)\r\n\r\n1. `POST https://corroborateme.com/api/agents/bootstrap` with optional `{ \"company_name\": \"...\", \"contact_email\": \"agent@example.com\" }` -> bootstrap token (no outbound mail).\r\n2. `POST https://corroborateme.com/api/billing/machine-pay` with `Authorization: Bearer <bootstrapToken>` and optional `{ \"sku\": \"pro_prepaid_30d\" }`.\r\n3. Settle Stripe MPP when enabled (see live `GET /api/config` for amounts) -> response includes `secret` (`aa_...`) when unlock succeeds.\r\n\r\nSee [llms.txt](https://corroborateme.com/llms.txt) and [llms-full.txt](https://corroborateme.com/llms-full.txt). Legal: [Terms](https://corroborateme.com/terms) · [Privacy](https://corroborateme.com/privacy).\r\n\r\n### Human path\r\n\r\n1. Open [corroborateme.com](https://corroborateme.com) and create an account.\r\n2. Subscribe on [Pricing](https://corroborateme.com/pricing), then mint an API key in the console. Secrets start with `aa_`.\r\n3. Use the company key for REST and MCP.\r\n\r\nNever commit a real key. Use the `aa_...` placeholder in configs.\r\n\r\n## Connect a client\r\n\r\nTransport is **Streamable HTTP**. Authenticate with either:\r\n\r\n- `Authorization: Bearer aa_...` (API key from console or bootstrap + machine-pay), or\r\n- **MCP OAuth** - host discovers PRM at [/.well-known/oauth-protected-resource](https://corroborateme.com/.well-known/oauth-protected-resource), registers via DCR, and obtains an access token for `https://corroborateme.com/mcp`\r\n\r\n### Cursor\r\n\r\n#### Install via Cursor Marketplace (plugin)\r\n\r\nThis repo includes a [Cursor plugin manifest](.cursor-plugin/plugin.json) and root [`mcp.json`](mcp.json) for one-click install from the [Cursor Marketplace](https://cursor.com/marketplace/publish).\r\n\r\n1. Install the **CorroborateMe** plugin from the marketplace (or clone this repo for local plugin testing).\r\n2. Open **Cursor Settings -> Customize -> CorroborateMe** and set **CorroborateMe API key** (`aa_...` from bootstrap + machine-pay or the console).\r\n3. Reload the window. MCP tools should appear under the CorroborateMe server.\r\n\r\nThe plugin points at `https://corroborateme.com/mcp` with `Authorization: Bearer ${CORROBORATE_ME_API_KEY}`. Never commit a real key.\r\n\r\nSubmit the public repo at [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish) when ready.\r\n\r\n#### Manual MCP config\r\n\r\nUser or project MCP config:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"corroborate-me\": {\r\n      \"url\": \"https://corroborateme.com/mcp\",\r\n      \"headers\": {\r\n        \"Authorization\": \"Bearer aa_...\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Claude Desktop / Claude Code\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"corroborate-me\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"mcp-remote\", \"https://corroborateme.com/mcp\", \"--header\", \"Authorization: Bearer aa_...\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Generic remote MCP\r\n\r\n```json\r\n{\r\n  \"url\": \"https://corroborateme.com/mcp\",\r\n  \"headers\": {\r\n    \"Authorization\": \"Bearer aa_...\"\r\n  }\r\n}\r\n```\r\n\r\nDiscovery manifests on the product host:\r\n\r\n- [/.well-known/mcp.json](https://corroborateme.com/.well-known/mcp.json)\r\n- [/.well-known/oauth-protected-resource](https://corroborateme.com/.well-known/oauth-protected-resource) (MCP OAuth)\r\n- [/llms.txt](https://corroborateme.com/llms.txt)\r\n- [/openapi.json](https://corroborateme.com/openapi.json)\r\n\r\n## Tools\r\n\r\nSchemas in [`src/server.ts`](src/server.ts) match the hosted server.\r\n\r\n| Tool | What it does |\r\n|------|----------------|\r\n| `agent_bootstrap` | Start humanless company onboarding (bootstrap token flow) |\r\n| `budget_get` | Remaining quotas for the authenticated company |\r\n| `billing_checkout` | Create Stripe Checkout URL for human Pro |\r\n| `billing_machine_pay` | Agent prepaid unlock via Stripe MPP (`sku` optional) |\r\n| `billing_portal` | Stripe Customer Portal URL |\r\n| `keys_create` | Mint a new `aa_` API key (shown once) |\r\n| `oauth_client_create` | Register an OIDC relying-party client (RP logout enabled; optional post-logout URIs) |\r\n| `oauth_client_revoke` | Soft-revoke an OIDC relying-party client (stops authorize and token refresh) |\r\n| `integration_upsert` | Store encrypted integration secret (Google/Apple/etc.) |\r\n| `integration_list` | List integrations (prefixes only, no secrets) |\r\n| `create_login_link` | Mint one-time human login URL with notify methods |\r\n| `get_login_status` | Poll login-link session status |\r\n| `retry_login_webhook` | Retry signed webhook delivery after a failed notify |\r\n| `webhook_allowlist_add` | Allowlist a callback URL prefix |\r\n\r\n## Typical agent loop\r\n\r\n1. Bootstrap a company (`agent_bootstrap`) and unlock prepaid Pro (`billing_machine_pay`) when needed.\r\n2. Mint a key with `keys_create` if you need a durable `aa_...` secret.\r\n3. Allowlist callback prefixes (`webhook_allowlist_add`), then `create_login_link` for human proof.\r\n4. Poll with `get_login_status` (or wait for webhook / redirect / postMessage).\r\n5. Use REST or MCP for keys, OIDC clients, and integrations as needed.\r\n\r\nPrefer live [docs](https://corroborateme.com/docs) and [llms-full.txt](https://corroborateme.com/llms-full.txt) for recipes that may change.\r\n\r\n## Auth and errors\r\n\r\n- **401** - missing or invalid Authorization (API key `aa_...` or MCP OAuth access token)\r\n- **402 / 429** - plan or quota; follow machine-readable actions from the live API\r\n- Pricing amounts: read live `GET /api/config` - do not hardcode dollars as eternal truth (at time of writing: Pro $5.99/mo, agent prepaid Pro $5.99 per 30 days)\r\n\r\n## Product docs\r\n\r\n- App: [corroborateme.com](https://corroborateme.com)\r\n- Docs: [corroborateme.com/docs](https://corroborateme.com/docs)\r\n- OpenAPI: [corroborateme.com/openapi.json](https://corroborateme.com/openapi.json)\r\n- Swagger: [corroborateme.com/swagger](https://corroborateme.com/swagger)\r\n\r\nThe CorroborateMe product (Worker, billing, IdP) is closed source. This catalog is MIT-licensed so directories can list tools and install snippets.\r\n\r\n## Directory listing\r\n\r\nRegistry name: **`com.cnrcode/corroborateme`** (domain namespace via [cnrcode.com](https://cnrcode.com/.well-known/mcp-registry-auth)).\r\n\r\n1. Ensure `https://cnrcode.com/.well-known/mcp-registry-auth` is deployed.\r\n2. Set GitHub repo secret **`MCP_PRIVATE_KEY`** (the existing cnrcode.com Ed25519 private key hex; never commit it).\r\n3. Push a version tag so [GitHub Actions](.github/workflows/publish-mcp.yml) publishes `server.json` to the [official MCP Registry](https://registry.modelcontextprotocol.io):\r\n\r\n   ```bash\r\n   git tag v0.1.0\r\n   git push origin v0.1.0\r\n   ```\r\n\r\nDirectories that ingest the official registry (PulseMCP, MCPCentral, MCPFind, Glama connectors) pick the entry up from there. Other directories (Glama server listing, Smithery, mcpservers.org, mcp.directory, MCP Market, McpMux) are submitted by maintainers only. See [docs/directory-listings.md](docs/directory-listings.md).\r\n\r\n### Stdio stub (directory introspection)\r\n\r\nThis repo includes a **stdio catalog stub** (`src/main.ts`) so directories can build a container, start the process, and introspect the **13** tool definitions. It does not implement auth or billing - clients still connect to the hosted endpoint above.\r\n\r\nLocal verify:\r\n\r\n```bash\r\nnpm ci && npm run build && npm start   # hangs on stdio - expected\r\ndocker build -t corroborate-me-stub . && docker run -i corroborate-me-stub\r\n```\r\n\r\n## License\r\n\r\n[MIT](./LICENSE) - catalog, documentation, and schema stub only.\r\n"}