MCP server
LookValid is a Model Context Protocol server, so an AI assistant can run lookups directly. Every product is a tool, billed at the same credit prices as the REST API, from the same balance. The free tools also work without a key (see below); everything else needs a key.
Connection details
| Setting | Value |
|---|---|
| URL | https:/ |
| Transport | Streamable HTTP, stateless (one JSON-RPC message per request) |
| Authentication | Your API key as Authorization: Bearer <key>, or OAuth (see Sign in with OAuth). Not needed for the free tools. |
Get a key by emailing hello@lookvalid.com. The reply carries your key and the server address, which the URLs and snippets on this page show as YOUR_API_HOST. Keep the key in an environment variable named LOOKVALID_API_KEY. Most snippets below read it from that variable. The Claude Desktop snippet and add-mcp write the key into the client's config file, so keep that file private.
Sign in with OAuth
Clients that open your browser to sign you in do not need a key at all. LookValid follows the MCP authorization specification: OAuth 2.1 authorization code flow with PKCE (S256 only), dynamic client registration and refresh tokens.
Connect to this address instead of the one above:
| Setting | Value |
|---|---|
| OAuth URL | https:/ |
It is the same server, with the same tools and prices, but it asks for a sign-in: a request with no credentials is answered with HTTP 401 and a WWW-Authenticate header that points the client at /. The plain address above keeps serving the free tools to a caller with no credentials, so it never starts a sign-in on its own.
In Claude Code, add the server without a header, then run / and choose LookValid to sign in:
claude mcp add --transport http lookvalid https://YOUR_API_HOST/v1/mcp/oauth
Cursor, VS Code and other clients that support OAuth need only the URL in their server entry, with no headers. The client registers itself, opens https://lookvalid.com/oauth/authorize in your browser, and you sign in with your LookValid account.
What you approve:
- Run lookups lets the app run lookups as your account. Credits are spent the same way as with a key: only when a lookup finds something, and nothing for an invalid, refused or failed one.
- Read your balance and keys lets it call
get_account, which lists key ids and prefixes, never the keys.
You can untick a permission before you allow. An app without lookup sees only get_account.
How it behaves:
- An access token lasts 1 hour. The client refreshes it with a refresh token that rotates on every use. If a refresh token is ever used twice, LookValid treats it as stolen and ends the connection.
- A token opens the MCP server only. It does not work on the REST API; use an API key there.
- Disconnect any app under Connected apps in the dashboard. Its access stops on the next request.
- Redirect addresses must be
https, orhttpon127.0.0.1,[::1]orlocalhost. A client that returns to a custom scheme such asmyapp:/is refused at registration; use an API key with it./
Endpoints, for a client you are writing: https:/, https:/, POST https:/, POST https:/ and POST https:/. Scopes are lookup and account:read.
Claude
Claude Code:
claude mcp add --transport http lookvalid https://YOUR_API_HOST/v1/mcp --header "Authorization: Bearer $LOOKVALID_API_KEY"
Claude Desktop connects to remote servers with header authentication through the mcp-remote bridge. Add this to claude_desktop_config.json and put your key in env:
{
"mcpServers": {
"lookvalid": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://YOUR_API_HOST/v1/mcp", "--header", "Authorization:${LOOKVALID_AUTH}"],
"env": { "LOOKVALID_AUTH": "Bearer lv_live_..." }
}
}
}
Cursor
Add the server to .cursor/ in your project, or to ~/ for every project. Cursor expands ${env:NAME} from your environment:
{
"mcpServers": {
"lookvalid": {
"url": "https://YOUR_API_HOST/v1/mcp",
"headers": {
"Authorization": "Bearer ${env:LOOKVALID_API_KEY}"
}
}
}
}
VS Code
Add the server to .vscode/ in your workspace. VS Code asks for the key once, the first time the server starts, and keeps it out of the file:
{
"inputs": [
{
"type": "promptString",
"id": "lookvalid-api-key",
"description": "LookValid API key",
"password": true
}
],
"servers": {
"lookvalid": {
"type": "http",
"url": "https://YOUR_API_HOST/v1/mcp",
"headers": {
"Authorization": "Bearer ${input:lookvalid-api-key}"
}
}
}
}
Codex
Add the server to ~/. Codex reads the bearer token from the environment variable you name:
[mcp_servers.lookvalid]
url = "https://YOUR_API_HOST/v1/mcp"
bearer_token_env_var = "LOOKVALID_API_KEY"
The same entry from the command line:
codex mcp add lookvalid --url https://YOUR_API_HOST/v1/mcp --bearer-token-env-var LOOKVALID_API_KEY
Any client with one command
The add-mcp package writes the server into the config of the coding agents it finds on your machine, including Claude Code, Cursor, VS Code and Codex:
npx -y add-mcp https://YOUR_API_HOST/v1/mcp --name lookvalid --header "Authorization: Bearer $LOOKVALID_API_KEY"
Your shell expands $LOOKVALID_API_KEY before add-mcp runs, so the key itself is written into each config file it touches. Use the snippets above when you want the key to stay in an environment variable.
Client configuration formats change between releases. If a snippet does not load, check your client's MCP documentation for the current field names. The URL and the bearer header are the only things LookValid needs.
Tools
| Tool | Product | Cost | API key |
|---|---|---|---|
phone | Phone Numbering-Plan Validation | 1 credit per valid number | Not needed (free tool) |
country_code | Country Calling Codes | 1 credit per lookup (an unknown code, country or name is free) | Not needed (free tool) |
email_domain_check | Email Domain Check | 1 credit per address checked | Not needed (free tool) |
ip | IP Intelligence | 1 credit per lookup | Not needed (free tool) |
phone_spam | Phone Spam Check | 1 credit per number with complaints on record | Not needed (free tool) |
link_safety | Link Safety Check | 1 credit per URL checked (a check that cannot run is free) | Not needed (free tool) |
carrier_lookup | Carrier Lookup (original carrier) | 1 credit per lookup (numbers outside the covered numbering plan areas are free) | Not needed (free tool) |
vin_decoder | VIN Decoder | 1 credit per VIN that decodes (a VIN with no data is free) | Not needed (free tool) |
link_in_bio_lookup | Link-in-Bio Lookup | 3 credits per resolved page (dead or empty pages are free) | Not needed (free tool) |
domain_authority | Domain Authority | 10 credits per domain found in the rank data (an unranked domain is free) | Not needed (free tool) |
domain_age | Domain Age | 2 credits per registered domain (unregistered domains are free) | Not needed (free tool) |
website_scraper | Website Scraper | 10 credits per successful scrape (errors, empty and blocked pages are free) | Required |
website_contacts_scraper | Website Contacts Scraper | 10 credits per domain with contacts found | Not needed (free tool) |
site_files | Site Files Checker | 2 credits per site checked (a site that cannot be reached is free) | Not needed (free tool) |
get_account | Account balance and keys | Free | Required |
Tool names are the product id with hyphens turned into underscores. Each tool takes the same input as its REST endpoint and returns the same envelope (found, data, sources, credits_charged, cache_hit).
Free tools without a key
Connect to the same URL with no Authorization header and the server offers only the free tools: phone, country_code, email_domain_check, ip, phone_spam, link_safety, carrier_lookup, vin_decoder, link_in_bio_lookup, domain_authority, domain_age, website_contacts_scraper, site_files. They run the same lookups as the free tools and the free HTTP endpoint (POST https:/), need no account, and are never billed or cached against a balance.
- Limits. By default 25 lookups per day and 5 per 60 seconds from one address. MCP and the free HTTP endpoint share that one allowance, so using both does not give you more. Listing the tools costs nothing. When a limit is reached the tool call returns a
rate_limitederror with the number of seconds to wait. website_contacts_scrapercrawls at most 3 pages without a key.- Everything else needs a key. Calling any other tool, or
get_account, without a key returns anunauthorizedtool error that names the free tools. Nothing runs and nothing is charged. A key that is wrong gets HTTP 401; it is never quietly downgraded to the free tools. - When to add a key. The free tools suit trying a lookup. For more volume, the other products, your balance and your own limits, create a key and send it as a bearer token.
Billing and errors
Tool calls with a key bill and cache exactly like the REST routes: success billing where the product uses it, free repeats for 7 days, and no charge on errors. A failed tool call returns the standard error envelope with isError set.
Try it from the command line
List the free tools, no key needed:
curl -X POST https://YOUR_API_HOST/v1/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
List every tool with your key:
curl -X POST https://YOUR_API_HOST/v1/mcp \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'