Ecosystem
MCP server
Give Claude, Cursor, VS Code and other agents the whole web through the Model Context Protocol, hosted or over stdio.
Vermin ships a Model Context Protocol server, so agents can scrape, crawl, map, search, extract and sniff out brands by themselves. They use your credits and get the same results as the API. There are two ways to run it, and both expose the same tools:
| Where | Auth | |
|---|---|---|
| Hosted (recommended) | https://mcp.vermin.dev/mcp (Streamable HTTP) | Sign in with OAuth, or send an API key as a bearer token |
| Legacy SSE | https://mcp.vermin.dev/sse | Same, for older clients that only speak HTTP+SSE |
| Local | npx -y vermin-mcp (stdio) | VERMIN_API_KEY environment variable |
Hosted#
Add https://mcp.vermin.dev/mcp as a remote server. There's nothing to install and nothing to keep updated.
Sign in with OAuth#
Clients that support MCP OAuth (Claude, Claude Code, Cursor, VS Code and others) open a browser the first time they connect:
- Vermin's MCP server asks you to confirm the client connecting to it.
- You sign in to Vermin, pick an organization and click Approve. Only owners and admins can approve, because this creates an API key.
- Vermin creates a key named
MCP: <client name>in that organization and hands it straight to the MCP server. The key never passes through your browser or the client. - The client gets an access token (valid 1 hour, refreshed automatically for up to 90 days).
To disconnect a client, revoke its MCP: … key on the API keys page. Its next refresh fails and it has to sign in again. The key is billed and rate-limited like any other key in the org and counts toward the org's 50 active keys.
Or use an API key#
To skip the browser, send a key as a header: Authorization: Bearer vmn_live_…. This is handy for CI, headless agents or clients without OAuth support. Create a key just for the agent so you can revoke it on its own.
Local (stdio)#
Want to run it yourself? The same server runs over stdio:
VERMIN_API_KEY=vmn_live_… npx -y vermin-mcp| Variable / flag | Default | |
|---|---|---|
VERMIN_API_KEY / --api-key | none | Required. |
VERMIN_API_URL / --api-url | https://api.vermin.dev | Point at another API, e.g. a local worker on http://localhost:8787. |
Logs go to stderr, because stdout is the MCP channel.
Client setup#
Replace vmn_live_… with your key. The hosted examples below use OAuth unless they show a header.
Claude Code#
claude mcp add --transport http vermin https://mcp.vermin.dev/mcpClaude Desktop#
For hosted, go to Settings → Connectors → Add custom connector, enter https://mcp.vermin.dev/mcp and sign in when prompted. To run it locally, edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"vermin": {
"command": "npx",
"args": ["-y", "vermin-mcp"],
"env": { "VERMIN_API_KEY": "vmn_live_…" }
}
}
}Cursor#
Edit ~/.cursor/mcp.json, or .cursor/mcp.json in a project:
{
"mcpServers": {
"vermin": { "url": "https://mcp.vermin.dev/mcp" }
}
}VS Code (GitHub Copilot agent mode)#
Edit .vscode/mcp.json. The local version asks for the key once and stores it securely:
{
"servers": {
"vermin": { "type": "http", "url": "https://mcp.vermin.dev/mcp" }
}
}Windsurf#
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"vermin": { "serverUrl": "https://mcp.vermin.dev/mcp" }
}
}OpenAI Codex CLI#
Edit ~/.codex/config.toml, or run codex mcp add vermin --env VERMIN_API_KEY=vmn_live_… -- npx -y vermin-mcp:
[mcp_servers.vermin]
command = "npx"
args = ["-y", "vermin-mcp"]
env = { VERMIN_API_KEY = "vmn_live_…" }GitHub Copilot CLI#
Run /mcp add inside copilot, or edit ~/.copilot/mcp-config.json:
{
"mcpServers": {
"vermin": {
"type": "http",
"url": "https://mcp.vermin.dev/mcp",
"headers": { "Authorization": "Bearer vmn_live_…" },
"tools": ["*"]
}
}
}Anything else#
Any client that supports remote MCP servers can use https://mcp.vermin.dev/mcp. Clients that only know the 2024-11-05 HTTP+SSE transport can use https://mcp.vermin.dev/sse. Clients limited to stdio can run npx -y vermin-mcp.
Tools#
| Tool | Does | Costs |
|---|---|---|
vermin_scrape | One URL to markdown (or html, links, screenshot, brand). Escalates to a headless browser when needed. Long pages are paged with startIndex/maxChars. | Same as Scrape |
vermin_map | Every URL on a site (sitemaps + links), with an optional search filter. Paged with offset. | Same as Map |
vermin_crawl | Starts a crawl and returns its ID | Same as Crawl |
vermin_crawl_status | Progress and pages of a crawl, paged with cursor | Free |
vermin_search | Web search, optionally scraping each result | Same as Search |
vermin_extract | Structured JSON from pages, by prompt and/or JSON schema | Same as Extract |
vermin_brand | Logo, icon, colours (with contrast), fonts and socials for a domain | Same as Brand |
Tool arguments mirror the API, so everything else in these docs applies. Every result ends with the credits it used and its request ID. Failed calls are free, and they come back as tool errors telling the model what to do next: top up, wait N seconds, drop the premium tier, and so on.