Connect Lookup to your AI assistant
MCP is the standard way to plug Lookup into an AI assistant like Claude or ChatGPT. Once it's connected, you can just ask the assistant to check an IP, domain, URL, hash, or CVE — it runs the same lookups and scoring you get in the web app and hands back the verdict with its evidence, so you never have to leave your chat.
You'll need a Pro or Max plan to connect (Free stays in the web app), and your usual daily limits still apply. There are two ways to connect:
- Sign in (no token) — in Claude Desktop or claude.ai, add the address below as a connector, then sign in and approve. No token to copy or paste. This is the easiest path for Claude.
- Token — create a token in your account and paste it into the assistant. Use this for Claude Code, ChatGPT, and other MCP tools.
Address (the “server URL”): https://intellescope.io/api/lookup/mcp
Get your token
Your token is what tells Lookup the requests are really coming from you. Create one before you set up any assistant, and keep it private — anyone with it can use your account. You can revoke it anytime to cut off access.
- Create a Lookup account or sign in.
- Verify your email or phone if you're asked to.
- Make sure you're on the Pro or Max plan (Free can't create tokens).
- Open Account → Connections → API & MCP and create a token. It starts with
pk_live_— copy it now, as you won't be able to see it again.
Have that token handy for the setup steps below. (Connecting a whole security team's tooling? That uses API v1 instead.)
Set it up
Connecting Lookup only takes two things: the address below and your token. Grab your pk_live_… token from Account → Connections → API & MCP before you start, then follow the steps for whichever assistant you use.
The address to connect to
This is the “server URL” the steps below ask for. It's the same for everyone on the hosted product — just copy it as-is:
https://intellescope.io/api/lookup/mcpSelf-hosted or white-label deployments use their own domain in place of https://intellescope.io.
Connect to Claude Desktop or claude.ai — sign in, no token
This is the simplest way to connect Claude: you paste the address, then sign in to Lookup and approve — there's no token to create or copy.
- In Claude Desktop open Settings → Connectors; in claude.ai open Settings → Connectors in your browser. Choose Add custom connector.
- Name it
Intellescopeand paste the address as the server URL:https://intellescope.io/api/lookup/mcp. - A browser window opens on Intellescope. Sign in with your Pro or Max account and click Approve to let Claude run lookups as you.
- You're connected — the Lookup tools appear in Claude. Ask it to check an indicator, e.g. “use Intellescope to triage 203.0.113.45.”
The connection runs as your account and counts against your plan's daily limits, just like the web app. You can review or revoke connected assistants anytime under Account → Connections → API & MCP.
Connect to Claude Code
Add Lookup with a single command in your terminal. Paste your token where it says pk_live_YOUR_TOKEN:
claude mcp add --transport http intellescope-lookup \
https://intellescope.io/api/lookup/mcp \
--header "Authorization: Bearer pk_live_YOUR_TOKEN"
# confirm it registered and the tools are live
claude mcp listThen, inside a Claude Code session, ask it to look up an indicator — e.g. “use intellescope-lookup to triage 203.0.113.45.” Claude calls the tools directly and shows the ranked verdict with its evidence.
Connect to Claude Desktop with a token (alternative)
Prefer a token over signing in — or automating the config? In Claude Desktop, open Settings → Developer → Edit Config and paste the block below into the file that opens (claude_desktop_config.json). Add your token where it says pk_live_YOUR_TOKEN, save, and restart Claude Desktop:
{
"mcpServers": {
"intellescope-lookup": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://intellescope.io/api/lookup/mcp",
"--header", "Authorization: Bearer pk_live_YOUR_TOKEN"
]
}
}
}After the restart, the Lookup tools show up in the tools menu (the slider icon). This step needs Node.js installed on your computer.
Connect to ChatGPT
ChatGPT connects to Lookup through a custom connector (available on ChatGPT Pro, Business, and Enterprise plans). Add it once and it's ready to use:
- In ChatGPT, open Settings → Connectors → Create (enable connectors in Settings → Connectors → Advanced first if you don't see it).
- Name it
Intellescope Lookupand, when it asks for the server URL, paste the address:https://intellescope.io/api/lookup/mcp. - When it asks how to sign in, pick the API key / token option and paste your
pk_live_…token, then create the connector. - Enable the connector in a chat (via the plus / tools menu) and ask ChatGPT to look up an indicator — it calls the Lookup tools directly.
The Lookup token still enforces your Pro / Max plan limits regardless of which assistant calls it.
Any other AI assistant
Using a different assistant that supports MCP? It only needs the same two things — the address and your token. Here they are in the format most tools expect:
URL: https://intellescope.io/api/lookup/mcp
Header: Authorization: Bearer pk_live_YOUR_TOKEN
Example mcpServers entry (JSON):
{
"mcpServers": {
"intellescope-lookup": {
"url": "https://intellescope.io/api/lookup/mcp",
"headers": {
"Authorization": "Bearer pk_live_YOUR_TOKEN"
}
}
}
}curl -sS -X POST "https://intellescope.io/api/lookup/mcp" \
-H "Authorization: Bearer pk_live_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "example", "version": "1.0.0" }
}
}'Tools
- TOOL
parse_indicatorsDefang and extract IOCs from pasted alert/ticket text (hxxp, [.], etc.). Does not bill usage. Feed values into bulk_lookup_indicators.
inputSchema{ "type": "object", "properties": { "text": { "type": "string", "description": "Raw paste from an alert, email, or ticket" }, "limit": { "type": "number", "description": "Max indicators to return (default 50, hard cap 50)" } }, "required": [ "text" ] } - TOOL
lookup_indicatorResearch one IP, domain, URL, or hash with vendor enrichment and a transparent score. Counts against Lookup daily usage.
inputSchema{ "type": "object", "properties": { "value": { "type": "string", "description": "Indicator value to research (defanged forms accepted)" }, "type": { "type": "string", "enum": [ "ip", "domain", "url", "hash_sha256", "hash_md5" ], "description": "Optional type override when auto-detect is ambiguous" }, "refresh": { "type": "boolean", "description": "Re-query vendors for an existing session (uses manual refresh quota)" } }, "required": [ "value" ] } - TOOL
bulk_lookup_indicatorsTriage many IOCs from an alert in one call — enrich, score, and return ranked verdicts (highest score first). Accepts a values array or free-text paste. Counts one lookup per new unique indicator (max 50).
inputSchema{ "type": "object", "properties": { "values": { "type": "array", "items": { "type": "string" }, "description": "Indicator values (already parsed). Prefer this after parse_indicators." }, "text": { "type": "string", "description": "Optional alert paste — defanged and extracted when values is omitted" }, "exportFormat": { "type": "string", "enum": [ "markdown", "csv", "stix" ], "description": "Optional: also return a ready-to-paste markdown, CSV, or STIX 2.1 body for tickets/SIEM" } } } - TOOL
get_lookup_sessionFetch a prior Lookup session by id, including score and claims.
inputSchema{ "type": "object", "properties": { "sessionId": { "type": "string", "description": "Lookup session id" } }, "required": [ "sessionId" ] } - TOOL
list_lookup_historyList recent Lookup sessions for the authenticated account. Optionally filter by a substring of the indicator value (matches the history sidebar's search). Does not bill usage.
inputSchema{ "type": "object", "properties": { "query": { "type": "string", "description": "Optional case-insensitive substring — returns only sessions whose indicator value contains it (e.g. \"45.148\")." }, "limit": { "type": "number", "description": "Optional max rows to return (default 50, hard cap 50)" } } } - TOOL
get_lookup_reportGenerate a structured Lookup report for a session. Counts against the report quota.
inputSchema{ "type": "object", "properties": { "sessionId": { "type": "string" }, "tlp": { "type": "string", "enum": [ "TLP:CLEAR", "TLP:GREEN", "TLP:AMBER", "TLP:AMBER+STRICT", "TLP:RED" ], "description": "Optional TLP marking for the report" } }, "required": [ "sessionId" ] } - TOOL
export_lookupCopy-as export for one session — markdown, CSV, or STIX 2.1 for tickets and SIEMs. Does not bill usage.
inputSchema{ "type": "object", "properties": { "sessionId": { "type": "string", "description": "Lookup session id" }, "format": { "type": "string", "enum": [ "markdown", "csv", "stix" ], "description": "Export format (default markdown)" } }, "required": [ "sessionId" ] } - TOOL
export_bulk_lookupCopy-as export for a prior bulk triage — pass sessionIds from bulk_lookup_indicators. Formats: markdown, CSV, or STIX 2.1 bundle. Does not bill usage.
inputSchema{ "type": "object", "properties": { "sessionIds": { "type": "array", "items": { "type": "string" }, "description": "Session ids from a bulk triage (order preserved in export)" }, "format": { "type": "string", "enum": [ "markdown", "csv", "stix" ], "description": "Export format (default markdown)" } }, "required": [ "sessionIds" ] } - TOOL
suggest_indicatorsTypeahead suggestions from personal history and enrichment cache. Does not bill usage.
inputSchema{ "type": "object", "properties": { "prefix": { "type": "string", "description": "Partial indicator value" } }, "required": [ "prefix" ] }
Mock calls
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "bulk_lookup_indicators",
"arguments": {
"text": "Alert IOCs: hxxp://evil[.]example/path 185.220.101.1 deadbeef…",
"exportFormat": "markdown"
}
}
}{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "lookup_indicator",
"arguments": { "value": "203.0.113.45" }
}
}{
"content": [
{
"type": "text",
"text": "{\n \"sessionId\": \"ls_abc123\",\n \"type\": \"ip\",\n \"value\": \"203.0.113.45\",\n \"activityClass\": \"c2\",\n \"mitreTechniqueIds\": [\n \"T1071\"\n ],\n \"score\": {\n \"score\": 720,\n \"uncertaintyLow\": 610,\n \"uncertaintyHigh\": 810,\n \"completeness\": 0.72,\n \"confidence\": 0.81,\n \"severity\": \"elevated\"\n },\n \"glanceWhy\": {\n \"line\": \"High: VirusTotal 42/91 and OTX 3 pulses · Cobalt Strike lifted it; AbuseIPDB 0% held it down.\",\n \"bucketLabel\": \"High\",\n \"lifted\": [\n {\n \"sourceName\": \"VirusTotal\",\n \"phrase\": \"VirusTotal 42/91\",\n \"contribution\": 28\n },\n {\n \"sourceName\": \"AlienVault OTX\",\n \"phrase\": \"AlienVault OTX 3 pulses · Cobalt Strike\",\n \"contribution\": 12\n }\n ],\n \"heldBack\": {\n \"sourceName\": \"AbuseIPDB\",\n \"phrase\": \"AbuseIPDB 0%\",\n \"contribution\": -8\n }\n },\n \"modelVersion\": \"v0.3.1\",\n \"scoringParamsPinned\": true,\n \"sources\": [\n {\n \"kind\": \"virustotal\",\n \"displayName\": \"VirusTotal\",\n \"vendor\": \"VirusTotal\",\n \"status\": \"success\",\n \"claimCount\": 3,\n \"message\": null\n }\n ],\n \"claims\": [\n {\n \"claimType\": \"reputation_assertion\",\n \"claimSummary\": \"Malicious reputation from vendor feed\",\n \"signal\": \"supporting\",\n \"sourceConfidence\": 0.82\n }\n ],\n \"claimsTruncated\": false\n}"
}
]
}Plans & limits
Remote MCP is a Pro / Max capability. On those plans, daily quotas still apply — the same meters you see under Account → Plan & usage. Exceeding a limit returns an error from the tool; upgrading your plan raises the same ceilings for both the web app and MCP.
lookup_indicatorbills lookup usage (or manual refresh whenrefreshis true).get_lookup_reportbills the report quota.suggest_indicatorsand reading history do not bill usage.- Answers lead with the sources and scores behind a verdict. Any written summary is just a convenience on top of that evidence — the evidence is the source of truth.