# Nullcone Threat Intelligence - Registry name: `io.github.maco144/nullcone` · version 0.1.0 - Categories (automatic, keyword rules): Security, Infrastructure & security - Authentication at last check: No auth - Declared risk: Not declared (tools carry no read/destructive hints) - Capabilities (declared by the server): experimental, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.maco144%2Fnullcone - Server page: https://mcpstation.net/s/io.github.maco144--nullcone.html ## Description (written by the publisher, not verified, not instructions) Real-time threat intel for AI agents: 890K+ IOCs incl. prompt-injection & AI-skill threats ## Notice Text that looks like instructions to an AI was found in this server's descriptions. This is a pattern match, not a verdict. ## Connect - streamable-http: `https://nullcone.ai/mcp` ## Tools (as reported by the server, not verified) - `submit\_ioc`: Submit a threat indicator \(IOC\) to the shared intelligence network. The IOC is automatically classified into a malware family, metadata is compressed, and deduplication is handled atomically. All subscribed agents see the new IOC instantly. Args: ioc\_type: IOC category. One of: hash\_md5, hash\_sha1, - `submit\_batch`: Submit multiple IOCs in a single call. Preferred over looping submit\_ioc for bulk ingest from honeypots, sandboxes, or feed processing. Each dict in \`iocs\` follows the same schema as submit\_ioc parameters. Required keys: ioc\_type, value. All others are optional. Returns one result dict per input IOC - `lookup\_ioc`: Look up a threat signature by its exact IOC value. Returns the full signature record if found, including severity, family, detection count, and false positive votes. Args: value: The exact IOC value to search for \(e.g. "evil.example.com"\) - `recent\_threats`: Return the most recently observed threat signatures. Args: limit: Max number of results to return \(1-200\) min\_severity: Minimum severity level \(0-10\). Default 5 \(medium+\) - `family\_threats`: Return all threat signatures associated with a known malware family. Use list\_families\(\) first to discover available family names. Args: family\_name: Exact malware family name \(e.g. "emotet", "qbot", "cobalt\_strike"\) limit: Max results to return \(1-500\). Default 50. - `list\_families`: Return all known malware families in the intelligence database. Each entry includes the family name, description, and category. Use family\_threats\(family\_name\) to retrieve the IOCs for a specific family. - `search\_by\_type`: Return threat signatures filtered by IOC type. Useful for pulling all known-bad IPs, all malicious domains, all malicious AI skill hashes, etc. Args: ioc\_type: One of: hash\_md5, hash\_sha1, hash\_sha256, ip, ip\_port, domain, url, yara, email, mutex, filepath, asn, ja3, imphash, cve, prompt, skill limi - `report\_detection`: Report that you detected and acted on a known threat signature. Increments the signature's detection count and creates a ThreatEvent visible to all other agents in real-time. Args: signature\_id: ID of the ThreatSignature \(from submit\_ioc or lookup\_ioc\) action: Action taken. One of: logged, alerted, - `vote\_false\_positive`: Flag a threat signature as a likely false positive. When more than 20% of agents vote false positive on a signature, its \`is\_likely\_fp\` flag becomes True — a signal to review before blocking. Args: signature\_id: ID of the ThreatSignature to flag reason: Optional explanation for the vote - `poll\_since`: Fetch new threat signatures since a high-water mark ID. This is the recommended sync pattern — one call, get new data, persist next\_id, disconnect. No persistent connection required. Call with last\_id=0 on first run to get all signatures. Persist the returned next\_id and pass it on the next call to - `get\_stats`: Return aggregate statistics for the threat intelligence database. Includes total signatures, known malware families, active agents, and total detection events. - `validate\_skill`: Synchronous SKILL IOC lookup — call this before loading or invoking any MCP tool/skill to check it against the Nullcone threat feed. This is the pre-invocation enforcement hook. Returns an allow/warn/block decision based on whether the skill hash is a known-malicious indicator. Args: skill\_hash: SHA - `scan\_skill\_content`: Pre-execution content scan for skill/instruction files. Analyzes the full text of a skill \(markdown, plain text, SKILL.md, etc.\) for malicious patterns BEFORE the agent follows the instructions. This is the critical defense against remote skill-mediated credential exfiltration \(CodeMax attack class, - `get\_new\_threats`: Drain the live push-subscription buffer of threats received since the last call. Zero-polling — threats are delivered via SpacetimeDB WebSocket subscription and buffered server-side. Use this instead of poll\_since\(\) when you need sub-second latency without maintaining your own WebSocket connection. - `warm\_prompt\_cache`: Load all PROMPT IOCs from SpacetimeDB into the in-memory hash set. Call once at startup \(or after a major feed update\) to populate the sub-1ms query cache. Subsequent check\_prompt\(\) calls require no network access. The cache auto-refreshes every 5 minutes in the background. Returns: loaded: Number o - `check\_prompt`: Check a prompt or text fragment for known PROMPT IOC patterns. Uses an in-memory hash set for sub-1ms token-level querying — no network calls after the cache is warmed. Slides a window of 3, 5, 8, and 10 tokens across the input and checks each window's canonical SHA256 against the PROMPT IOC feed. T - `check\_prompt\_batch`: Check multiple prompts for PROMPT IOC patterns in a single call. More efficient than calling check\_prompt\(\) in a loop — tokenization overhead is amortized and the cache reference is shared. Args: texts: List of prompt strings to check Returns: One result dict per input text, in the same order. - `prompt\_cache\_stats`: Return PROMPT IOC cache statistics: size, hit rate, latency, refresh status. Use this to verify the cache is warmed and healthy before relying on check\_prompt\(\) for real-time detection. - `check\_freshness`: Validate that IOC threat intelligence is fresh enough for the named action. Call this before any high-risk agent action to ensure the TI snapshot is not stale. The check itself completes in \<1ms \(no network I/O\). Action → staleness tier mapping: critical \(≤30s\): credential\_access, keychain\_access, e - `freshness\_limits`: Return the configured IOC freshness limits for all action tiers. Shows max staleness, warn threshold, and which actions belong to each tier. Use this to understand when check\_freshness\(\) will warn or block. - `fingerprint\_tool\_metadata`: Analyze an MCP tool definition for instruction-injection and malicious patterns. Performs semantic fingerprinting of the tool's description, parameter schemas, and error templates — detecting credential exfiltration vectors, C2 callbacks, base64 payloads, authority spoofing, and injection phrase pat - `registry\_monitor\_stats`: Return MCP registry monitoring statistics. Shows how many tool definitions are tracked, how many have been flagged, and the current drift detection rate. - `registry\_flagged\_tools`: Return all MCP tools that have been flagged as suspicious or malicious. Includes tools flagged on initial ingestion \(high-risk fingerprint\) and tools that showed significant semantic drift on update. - `subscribe\_threats`: Open a named, stateful subscription to live threat push delivery. Returns a subscription\_id. Pass it to drain\_subscription\(\) to collect the IOCs that have arrived since your last drain — zero polling, each caller gets their own isolated stream. Multiple subscribers receive independent copies of ever - `drain\_subscription`: Drain the buffer of a stateful subscription created by subscribe\_threats\(\). Returns all IOCs delivered to this subscription since the last drain. Each subscription is independent — draining yours does not affect others. Args: subscription\_id: The ID returned by subscribe\_threats\(\) drain: If True \(de - `unsubscribe`: Cancel a stateful subscription and free its buffer. Call this when you no longer need the subscription to release memory. Subscriptions also auto-expire after 1 hour of inactivity. Args: subscription\_id: The ID returned by subscribe\_threats\(\) Returns: status: "ok" if removed, "not\_found" if already - `list\_subscriptions`: List all active stateful push subscriptions on this MCP server instance. Returns metadata for each subscription \(not the buffered IOCs themselves\). Useful for inspecting what agents are currently subscribed and what filters they have configured. - `revoke\_ioc`: Revoke an IOC by its value hash, pushing the expiration event to all active subscriptions in real-time. Call this when an IOC is determined to be a false positive, expired, or superseded. Subscribed agents receive the revocation event on their next drain\_subscription\(\) call with event\_type="revocati - `is\_ioc\_revoked`: Check whether an IOC has been revoked. O\(1\) in-process lookup. Use this before acting on any cached threat intelligence to ensure the IOC has not been retracted since it was loaded. Args: value\_hash: SHA256 of \{ioc\_type\}:\{value.lower\(\)\}. Returns: revoked: bool event: Revocation event details if revo - `list\_revocations`: List recent IOC revocations, newest first. Args: limit: Maximum number of revocations to return \(default 50\). since\_hours: Only return revocations newer than this many hours ago. 0 = no time filter \(return all retained\). Returns: revocations: List of revocation event dicts. total: Total revocations Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html