MCP OSINT Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP OSINT ServerCan you screen John Doe against EU sanctions?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP OSINT Server
This is a Model Context Protocol (MCP) server that exposes powerful Open Source Intelligence (OSINT) tools to AI agents.
Why MCP?
The Model Context Protocol (MCP) allows AI agents like Claude and Gemini to access external tools in a standardized way. By exposing OSINT tools via MCP, AI agents can perform automated threat intelligence, vulnerability analysis, and digital forensics directly from their chat interfaces.
Related MCP server: mrholmes
Tools Exposed
Tool | Description | Input | Output |
| Screen a name against EU sanctions lists |
|
|
| Get prioritized vulnerability brief |
|
|
| Verify evidence chain integrity |
|
|
| Calculate sun position for verification |
|
|
| Search indicators of compromise |
|
|
Installation & Usage
Build the server:
pnpm install pnpm buildAdd to your AI Agent's configuration (e.g.
claude_desktop_config.json):{ "mcpServers": { "osint": { "command": "node", "args": ["/path/to/mcp-osint-server/dist/index.js"] } } }
Architecture
flowchart TD
Agent[AI Agent\nClaude/Gemini] <-->|MCP Protocol| Server[MCP OSINT Server\nNode.js]
Server --> |Spawn Subprocess| Sub1[sanctions.py]
Server --> |Spawn Subprocess| Sub2[cve.py]
Server --> |Spawn Subprocess| Sub3[evidence.py]
Server --> |Spawn Subprocess| Sub4[chronolocate.py]
Server --> |Spawn Subprocess| Sub5[ioc.py]Scope & Limitations
These tools are thin wrappers around underlying Python tools. The Python tools must be installed and accessible in the environment.
The server currently executes Python scripts as subprocesses without maintaining a long-lived Python environment.
Available Tools
5 toolschronolocate_sunC
Calculate sun position for verification
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| time | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and supplies almost nothing. It does not disclose the expected time format/timezone, precision or algorithm basis, or what the returned position consists of (azimuth/elevation/sunrise/sunset). As a pure computation this is low-risk, but essentially nothing beyond the name is communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short phrase with no waste, but it is terse to the point of under-specification rather than genuinely concise. There is no front-loaded statement of what the caller gets back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should at minimum describe the computed result and the expected time convention. For a three-parameter calculation tool with no other documentation, the definition leaves the most important call-time details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three required parameters. 'lat' and 'lon' are self-explanatory by convention, but 'time' is ambiguous (ISO 8601? UTC vs local? unix epoch?) and the description adds no clarification. With zero coverage the description was required to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Calculate') and resource ('sun position'), which is enough for an agent to know this computes solar geometry rather than anything else. The trailing 'for verification' adds a fuzzy intent rather than scope. Siblings are in unrelated domains (sanctions, CVE, IoC), so no sibling differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'For verification' hints at a use case but never says when to call this versus alternatives or what is being verified (timestamps? geolocation claims? evidence consistency?). No prerequisites, no exclusions, no workflow context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cve_briefC
Get prioritized vulnerability brief
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| max_items | No | ||
| watchlist | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and supplies almost nothing: 'Get' implies read-only, but there is no mention of rate limits, auth requirements, what 'prioritized' ordering means, or whether the watchlist parameter alters the result set. For a tool with zero annotation coverage this leaves the agent guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded phrase with zero filler; nothing is redundant or buried. It is efficient, though efficiency here comes at the cost of the missing detail scored in the other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Three parameters, no annotations, and no output schema, yet the description is eight words long. It omits what the brief contains, how items are prioritized, and how watchlist and max_items shape the response — an agent cannot call this confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description must compensate and it does not mention lang, max_items, or watchlist at all. 'lang' and 'max_items' are self-describing from their names, but the semantics of 'watchlist' (CVE IDs? products?) and the enum's effect are entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb ('Get') and a resource ('vulnerability brief') with a modifying adjective ('prioritized'), so it is not a pure tautology. However, 'brief' is undefined — an agent cannot tell what the payload contains or what 'prioritized' is relative to. Siblings (sanctions_screen, ioc_search) are unrelated domains, so no differentiation is needed there, but the purpose remains vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance at all on when to call this versus the sibling tools or versus any other retrieval path. There is no context, prerequisite, or exclusion stated. The only inference available is that a 'brief' is a summary-shaped read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evidence_verifyC
Verify evidence chain integrity
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | ||
| evidence_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses nothing about side effects, permissions, read-only vs. mutating nature, or what integrity checking returns. It is a bare phrase that gives an agent no behavioral confidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded but radically under-sized for a tool with two required inputs and no supporting metadata. It is terse to the point of under-specification, not efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, output schema, and parameter descriptions, the description should explain behavior and parameter meaning but does neither. It is not complete enough for an agent to call the tool with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for two required parameters, and the description does not mention case_id or evidence_dir at all. An agent receives no format, source, or semantic guidance for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Verify') and resource ('evidence chain integrity'), and is distinguishable from the unrelated siblings. However, it does not clarify what the evidence chain is or what the verification entails, leaving the purpose somewhat opaque.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. An agent must infer usage entirely from the tool name and required parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ioc_searchC
Search indicators of compromise
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about whether this is a read-only lookup, what data source is queried, or any rate limits. Only the word 'Search' weakly implies a non-mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is appropriately sized and front-loaded, but its brevity reflects under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and two undocumented parameters, the definition leaves key operational details (source, result shape, input format) unstated. It is too thin for a tool with an enum parameter and zero schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters. The description adds no meaning to 'query' (e.g., indicator format, defanging rules) or to the 'type' enum (ip/domain/hash/url), leaving the agent to guess acceptable input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: searching indicators of compromise. An agent understands the function, though the one-line phrasing gives no scope detail (e.g., which IOC corpus or source) to sharpen it further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as sanctions_screen or evidence_verify, and no prerequisites stated. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sanctions_screenC
Screen a name against EU sanctions list
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| birth_year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and target, omitting whether the operation is read-only, how matches are handled, what data source or freshness applies, and what the response contains. This is a significant gap for a screening tool where match logic and result interpretation matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately telegraphic but arguably too terse for the amount of missing information, though conciseness itself is well-executed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% schema description coverage for two parameters, the description is incomplete. It does not explain the optional birth_year parameter, return format, or behavioral expectations, leaving the agent without enough context to invoke the tool correctly in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with two parameters (name required, birth_year optional). The description only implies the 'name' parameter through the phrase 'Screen a name' and says nothing about birth_year or how it affects matching. The schema provides no descriptions either, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Screen'), resource ('a name'), and target ('EU sanctions list'). The sibling tools (cve_brief, evidence_verify, chronolocate_sun, ioc_search) are unrelated, so no sibling differentiation is needed. An agent can immediately tell what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. The description implies a straightforward screening use case but never states when to include the optional birth_year or how to interpret results. It provides no when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
chronolocate_sun - First observed
cve_brief - First observed
evidence_verify - First observed
ioc_search - First observed
sanctions_screen
TDQS
Scored across 5 tools
Each tool targets a distinct OSINT capability (sanctions screening, vulnerability brief, evidence verification, sun position, IOC search), with minimal overlap. The only potential confusion is between evidence_verify and chronolocate_sun (both verification-related), but they operate at different levels of abstraction.
All names use snake_case, but the word order varies: sanctions_screen (noun+verb), cve_brief (noun+noun), evidence_verify (noun+verb), chronolocate_sun (verb+noun), ioc_search (noun+verb). There is no consistent verb_noun pattern, making it mixed but still readable.
Five tools is within the ideal 3–15 range. Each addresses a distinct need without redundancy, making the set well-scoped for a focused OSINT toolkit.
For an OSINT server, the surface lacks many standard capabilities such as DNS/WHOIS lookups, domain/IP enrichment, social media search, and reverse image search. While it covers sanctions, CVE, IOC, and verification, these gaps will likely cause agent failures on common OSINT tasks.
Maintenance
Related MCP Connectors
Verified, sourced, real-time intelligence layer for AI agents.
KYC, KYB, AML, wallet screening, transaction monitoring, and fraud workflows for AI agents.
Agent-native security, trust, reliability, data and procurement tools for AI workflows.
Public data intelligence for AI agents — CVE, compliance, patents, contracts, domains.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides AI agents with 37 OSINT tools and 12 data sources to perform unified reconnaissance, domain analysis, and attack surface mapping. It enables agents to query, correlate, and reason across platforms like Shodan, VirusTotal, and Censys in parallel.37174 npm55MIT
- AlicenseAqualityBmaintenanceEnables users to execute OSINT tasks from 88 catalogued repositories through safe command surfaces, supporting authorized research and threat intelligence workflows.1MIT
- AlicenseAqualityAmaintenanceEnables AI-driven open-source intelligence investigations by exposing 30 tools for scanning emails, usernames, domains, IPs, and more, with real subprocess execution.318MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to perform anti-bot web scraping, dynamic SPA rendering, YouTube transcript extraction, and deep OSINT/GEOINT intelligence gathering through 23 integrated tools.-