Skip to main content
Glama
abrahamhl
by abrahamhl

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

sanctions_screen

Screen a name against EU sanctions lists

{ name: string, birth_year?: number }

{ matches: Array<{listed_name, score, reasons[]}>, total_screened: number }

cve_brief

Get prioritized vulnerability brief

{ watchlist?: string[], max_items?: number, lang?: 'en'|'nl'|'es' }

{ priorities: {act_now: [], this_week: [], watch: []}, generated_at: string }

evidence_verify

Verify evidence chain integrity

{ case_id: string, evidence_dir: string }

{ verified: boolean, chain_length: number, broken_links: string[] }

chronolocate_sun

Calculate sun position for verification

{ lat: number, lon: number, time: string }

{ azimuth: number, elevation: number, shadow_bearing: number, shadow_ratio: number }

ioc_search

Search indicators of compromise

{ query: string, type?: 'ip'|'domain'|'hash'|'url' }

{ results: Array<{value, type, source, first_seen, tags[]}> }

Installation & Usage

  1. Build the server:

    pnpm install
    pnpm build
  2. Add 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 tools
chronolocate_sunC

Calculate sun position for verification

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
timeYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
langNo
max_itemsNo
watchlistNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYes
evidence_dirYes

TDQS

C2.1/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

sanctions_screenC

Screen a name against EU sanctions list

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
birth_yearNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 5 tool updatesv1.0.0
    • First observedchronolocate_sun
    • First observedcve_brief
    • First observedevidence_verify
    • First observedioc_search
    • First observedsanctions_screen

TDQS

C2.7/5.0

Scored across 5 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides 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.
    37
    174 npm
    55
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables users to execute OSINT tasks from 88 catalogued repositories through safe command surfaces, supporting authorized research and threat intelligence workflows.
    1
    MIT