Skip to main content
Glama
OSINT MCP Server

OSINT MCP Server

by osintukraine

OSINT MCP Server

npm version License: MIT

MCP (Model Context Protocol) server for the OSINT Intelligence Platform, enabling Claude and other AI assistants to interact with your Telegram intelligence archive.

Features

This MCP server provides 65 tools organized into 14 categories for comprehensive OSINT analysis:

Message Tools (5 tools)

Tool

Description

search_messages

Full-text search with 15+ filters (topic, importance, language, views, etc.)

get_message

Get detailed message with media, AI tags, entities, locations

get_message_album

Get grouped media album for lightbox display

get_message_network

Entity relationship graph (Flowsint-compatible)

get_message_timeline

Temporal context - before/after, semantic, event-based

Semantic Search Tools (4 tools)

Tool

Description

semantic_search

AI-powered 384-dim vector search - find by meaning

find_similar_messages

Find content similar to a specific message

get_tags

Get popular AI-generated tags (keywords, topics, emotions)

search_by_tags

Search messages by tags with AND/OR logic

Unified Search (1 tool)

Tool

Description

unified_search

Search across ALL sources: messages, events, RSS, entities

Channel Tools (4 tools)

Tool

Description

list_channels

List monitored Telegram channels with filters

get_channel

Channel details, affiliation, metadata

get_channel_stats

Message counts, spam rate, topic distribution

get_channel_network

Semantic relationship graph with topic clusters

Social Graph Tools (7 tools)

Tool

Description

get_message_social_graph

Complete social context: forwards, replies, comments, reactions

get_channel_influence

Channel-to-channel forward relationships

get_influence_network

Platform-wide influence network

get_engagement_timeline

Virality tracking over time

get_message_comments

Discussion thread from linked chat

get_top_forwarded

Viral content leaderboard

get_top_influencers

Top influencer profiles

Entity Tools (4 tools)

Tool

Description

search_entities

Search people, orgs, equipment (curated + OpenSanctions)

get_entity

Entity profile with aliases, metadata, linked counts

get_entity_relationships

Wikidata SPARQL relationships (employers, positions)

get_entity_mentions

Messages mentioning a specific entity

Event Tools (5 tools)

Tool

Description

list_events

Detected event clusters by tier (rumor→confirmed→verified)

get_event_stats

Event statistics by tier and type

get_event

Event details with channels, messages, RSS sources

get_event_timeline

Chronological timeline combining Telegram + RSS

get_events_for_message

Events linked to a specific message

Analytics Tools (7 tools)

Tool

Description

get_timeline_stats

Message volume over time (hour/day/week/month)

get_topic_distribution

Distribution across 13 topics

get_language_distribution

Language breakdown (uk, ru, en, etc.)

get_channel_analytics

Per-channel performance metrics

get_activity_heatmap

Daily activity for calendar visualization

get_entity_analytics

Most mentioned entities over time

get_media_analytics

Media archival stats with deduplication metrics

Map/Geo Tools (6 tools)

Tool

Description

get_map_messages

GeoJSON messages with server-side clustering

get_map_clusters

Event clusters by geographic location

get_map_events

Confirmed events for map display

get_map_heatmap

Density aggregation for heatmap

suggest_locations

Autocomplete from 30,000+ UA/RU locations

reverse_geocode

Find nearest location to coordinates

Stream Tools (1 tool)

Tool

Description

get_unified_stream

Combined Telegram + RSS intelligence feed

Validation Tools (2 tools)

Tool

Description

validate_message

Cross-reference Telegram with RSS (confirms/contradicts)

get_message_correlations

Find correlated RSS articles

Media Tools (1 tool)

Tool

Description

get_media_gallery

Browse archived media by channel, type, date

Admin Stats Tools (15 tools)

Tool

Description

get_platform_dashboard

Platform overview: messages, channels, entities, storage

get_platform_stats_overview

Comprehensive stats with service health

get_data_quality_stats

Enrichment coverage (translation, embeddings, geo)

get_processing_stats

Hourly processing metrics and latency

get_storage_stats

Storage breakdown by table and media type

get_worker_stats

Redis queue health and pending messages

get_enrichment_tasks

Status of 13 enrichment tasks

get_cache_stats

Redis cache hit rates and memory usage

get_audit_stats

LLM decision audit and verification rates

get_spam_stats

Spam classification metrics

get_channels_admin_stats

Channel inventory by affiliation/folder/rule

get_entities_admin_stats

Entity catalog stats and top mentioned

get_rss_feeds_stats

RSS feed health and article counts

get_llm_prompts_stats

LLM prompt performance metrics

get_viral_posts

Tracked viral posts for comment fetching

System Health Tools (9 tools)

Tool

Description

get_system_health

Basic API health check

get_hardware_config

Hardware tier detection (laptop/server/GPU)

get_system_status

Detailed system status

get_metrics_overview

Platform KPIs

get_metrics_llm

Ollama/LLM performance

get_metrics_pipeline

Real-time pipeline status

get_metrics_services

Per-service health

list_llm_models

Available LLM models (6 runtime-switchable)

get_llm_model_health

LLM availability check

Related MCP server: OSINT Tools MCP Server

Installation

npm install -g @osintukraine/mcp-server

From source

git clone https://github.com/osintukraine/osint-mcp-server.git
cd osint-mcp-server
npm install
npm run build

Configuration

Environment Variables

Variable

Description

Default

OSINT_API_URL

OSINT Platform API base URL

http://localhost:8000

JWT Authentication

OSINT_JWT_TOKEN

JWT token for authentication

(none)

API Key Authentication

OSINT_API_KEY

API key for authentication

(none)

Ory Kratos Authentication

OSINT_ORY_USER_ID

Ory Kratos user UUID

(none)

OSINT_ORY_USER_EMAIL

User email (optional)

(none)

OSINT_ORY_USER_ROLE

User role: authenticated, admin

authenticated

Authentication Priority

The MCP server uses the first available authentication method:

  1. JWT Token - OSINT_JWT_TOKEN - Standalone JWT authentication

  2. API Key - OSINT_API_KEY - Programmatic API access

  3. Ory Kratos - OSINT_ORY_USER_ID - Ory identity headers

Claude Code Configuration

Add a .mcp.json file to your project root:

Using npm package:

{
  "mcpServers": {
    "osint": {
      "command": "npx",
      "args": ["@osintukraine/mcp-server"],
      "env": {
        "OSINT_API_URL": "http://localhost:8000"
      }
    }
  }
}

Using local installation:

{
  "mcpServers": {
    "osint": {
      "command": "node",
      "args": ["/path/to/osint-mcp-server/dist/index.js"],
      "env": {
        "OSINT_API_URL": "http://localhost:8000"
      }
    }
  }
}

With API Key authentication:

{
  "mcpServers": {
    "osint": {
      "command": "npx",
      "args": ["@osintukraine/mcp-server"],
      "env": {
        "OSINT_API_URL": "https://api.osint.example.com",
        "OSINT_API_KEY": "your-api-key-here"
      }
    }
  }
}

With Ory Kratos authentication:

{
  "mcpServers": {
    "osint": {
      "command": "npx",
      "args": ["@osintukraine/mcp-server"],
      "env": {
        "OSINT_API_URL": "https://api.osint.example.com",
        "OSINT_ORY_USER_ID": "your-kratos-user-uuid",
        "OSINT_ORY_USER_EMAIL": "your-email@example.com",
        "OSINT_ORY_USER_ROLE": "admin"
      }
    }
  }
}

Usage Examples

Once configured, Claude can use these tools naturally:

Message Search & Analysis

"Search for high-importance messages about Bakhmut from the last 7 days"

"Find messages similar to message #12345 and show their social graph"

"Get the entity network for message #67890"

Entity Investigation

"Search for Putin in OpenSanctions and show relationships"

"Find all messages mentioning the Wagner Group"

Event Analysis

"List confirmed events from the last 24 hours"

"Show the timeline for event #123 with both Telegram and RSS sources"

"Validate message #456 against news sources"

Social Graph & Influence

"Who are the top influencers in the last week?"

"Show the influence network between channels"

"Get the engagement timeline for this viral message"

Platform Monitoring

"What's the current platform health?"

"Show data quality stats - translation and embedding coverage"

"Check the worker queue status"

Geographic Analysis

"Get geolocated messages in the Kharkiv region"

"Show the event heatmap for the last 48 hours"

Development

# Watch mode (auto-rebuild on changes)
npm run dev

# Type checking
npm run typecheck

# Test with MCP Inspector
npm run inspector

Architecture

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  Claude Code    │────▶│  MCP Server      │────▶│  OSINT API      │
│  (AI Assistant) │     │  (65 tools)      │     │  (FastAPI)      │
└─────────────────┘     └──────────────────┘     └─────────────────┘
         │                       │                        │
         │  stdio transport      │  HTTP/JSON             │
         │                       │                        │
    ┌────┴────┐            ┌─────┴─────┐           ┌──────┴──────┐
    │ Request │            │ API Client│           │ PostgreSQL  │
    │ Handler │            │ (fetch)   │           │ + pgvector  │
    └─────────┘            └───────────┘           └─────────────┘

License

MIT - see LICENSE

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Submit a pull request

Available Tools

71 tools
find_similar_messagesC

Find messages similar to a given message using AI embeddings. Useful for tracking narratives.

Inputs: message_id (required), limit, similarity_threshold.

get_activity_heatmapB

Get daily message activity for calendar heatmap visualization.

Inputs: days.

get_audit_statsA

Get LLM decision audit statistics: total decisions, verification rates, performance metrics.

Inputs: no named parameters.

get_cache_statsA

Get Redis cache statistics: memory usage, hit rates, connections.

Inputs: no named parameters.

get_channelB

Get detailed channel information including metadata, affiliation, and timestamps.

Inputs: channel_id (required).

get_channel_analyticsC

Get per-channel performance metrics with daily breakdowns.

Inputs: days, limit.

get_channel_influenceB

Get channel-to-channel forward relationships with coordination detection.

Inputs: channel_id (required).

get_channel_networkB

Build content network graph for a channel - semantic relationships, topic clusters, hub nodes.

Inputs: channel_id (required), time_window, max_messages, include_clusters, +1 more.

get_channels_admin_statsB

Get channel inventory stats: total, active, verified, by affiliation/folder/rule/source.

Inputs: no named parameters.

get_channel_statsB

Get channel statistics: message counts, spam rate, importance distribution, topic breakdown.

Inputs: channel_id (required).

get_data_quality_statsB

Get data quality metrics: translation coverage, embedding coverage, classification rate, media archive rate, geolocation coverage.

Inputs: no named parameters.

get_engagement_timelineB

Get engagement metrics over time for a message (views, forwards, reactions with deltas).

Inputs: message_id (required).

get_enrichment_tasksA

Get enrichment task status (translation, entity_matching, embedding, event_detection, ai_tagging, etc.).

Inputs: no named parameters.

get_entities_admin_statsB

Get entity catalog stats: total, with embeddings/coordinates, by type/source, top mentioned.

Inputs: no named parameters.

get_entityA

Get entity profile with metadata, aliases, and linked content counts.

Inputs: source (required), entity_id (required), include_linked.

get_entity_analyticsC

Get entity mention analytics - most mentioned entities over time.

Inputs: days, limit.

get_entity_mentionsB

Get messages that mention a specific entity.

Inputs: source (required), entity_id (required), limit.

get_entity_relationshipsB

Get entity relationships from Wikidata SPARQL - corporate connections, political positions, associates.

Inputs: source (required), entity_id (required), refresh.

get_eventC

Get event details with contributing channels, messages, and RSS sources.

Inputs: event_id (required), message_limit, include_sources, include_messages.

get_events_for_messageB

Get events linked to a specific message.

Inputs: message_id (required).

get_event_statsC

Get event statistics - counts by tier, type, and status.

Inputs: no named parameters.

get_event_timelineB

Get chronological timeline combining RSS articles and Telegram messages for an event.

Inputs: event_id (required).

get_hardware_configA

Get hardware auto-detection: CPU cores, RAM, GPU, tier (laptop/server/gpu variants), LLM model config.

Inputs: no named parameters.

get_influence_networkB

Get platform-wide influence network - channels that forward to each other.

Inputs: days, limit, min_forwards.

get_language_distributionC

Get language distribution of messages.

Inputs: days.

get_llm_model_healthB

Check health of LLM models (Ollama availability).

Inputs: no named parameters.

get_llm_prompts_statsA

Get LLM prompt statistics: total, active, usage count, avg latency, errors, by task.

Inputs: no named parameters.

get_map_clustersC

Get event clusters with geographic locations by verification tier.

Inputs: days, bounds, tier_status.

get_map_eventsB

Get confirmed events only for map display.

Inputs: bounds.

get_map_heatmapC

Get density aggregation for heatmap visualization.

Inputs: zoom, bounds, grid_size.

get_map_messagesA

Get geolocated messages as GeoJSON. Supports server-side clustering and bounding box filtering.

Inputs: days, zoom, bounds, cluster, +2 more.

get_media_analyticsB

Get media archival statistics with deduplication metrics.

Inputs: no named parameters.

get_messageA

Get detailed message by ID with full enrichment: content, media, AI tags, entities, locations, social graph data.

Inputs: message_id (required).

get_message_albumA

Get media album for a message (grouped photos/videos for lightbox display).

Inputs: message_id (required).

get_message_commentsC

Get comment thread from linked discussion group.

Inputs: message_id (required), limit, offset.

get_message_correlationsB

Get RSS articles correlated with a message - grouped by same_event, related, alternative_viewpoints.

Inputs: message_id (required).

get_message_networkB

Get entity relationship graph for a message - locations, persons, organizations, military units, AI tags. Flowsint-compatible visualization.

Inputs: message_id (required), max_similar, include_similar, similarity_threshold.

get_message_social_graphA

Get complete social context: author, forwards, replies, comments, reactions, engagement metrics, virality.

Inputs: message_id (required), max_depth, max_comments, include_replies, +1 more.

get_message_timelineB

Get temporal context for a message - messages before/after, semantically similar, or from same event cluster.

Inputs: message_id (required), use_events, after_count, before_count, +2 more.

get_metrics_llmB

Get LLM/Ollama performance metrics.

Inputs: no named parameters.

get_metrics_overviewC

Get platform KPIs overview.

Inputs: no named parameters.

get_metrics_pipelineB

Get real-time pipeline status metrics.

Inputs: no named parameters.

get_metrics_servicesC

Get per-service health metrics.

Inputs: no named parameters.

get_platform_dashboardB

Get platform overview: message counts, channels, entities, storage, spam rate, LLM metrics.

Inputs: no named parameters.

get_platform_stats_overviewB

Get comprehensive platform stats: pipeline health, LLM performance, totals, service health. Cached 30s.

Inputs: no named parameters.

get_processing_statsC

Get hourly processing metrics: total messages, spam count, classified, average latency.

Inputs: hours.

get_rss_feeds_statsA

Get RSS feed stats: total, active, failing, by category/trust level, article counts.

Inputs: no named parameters.

get_spam_statsA

Get spam statistics: total, pending review, false positives, true positives, 24h rate, by type.

Inputs: no named parameters.

get_storage_statsA

Get storage breakdown by database tables and media types.

Inputs: no named parameters.

get_system_healthB

Basic API health check.

Inputs: no named parameters.

get_system_statusB

Get detailed system status including all service health.

Inputs: no named parameters.

get_tagsB

Get popular AI-generated tags ranked by frequency. Tags include keywords, topics, entities, emotions, urgency.

Inputs: limit, tag_type.

get_timeline_statsC

Get message volume over time. Supports hour/day/week/month/year granularity.

Inputs: days, topic, channel_id, granularity, +1 more.

get_top_forwardedC

Get viral content leaderboard - most forwarded messages.

Inputs: days, limit.

get_topic_distributionC

Get distribution of messages across topics.

Inputs: days, limit.

get_top_influencersC

Get top influencer profiles with interaction metrics.

Inputs: days, limit.

get_unified_streamA

Get unified intelligence feed combining Telegram messages and RSS articles.

Inputs: hours, limit, sources, categories, +1 more.

get_viral_postsB

Get list of viral posts being tracked for enhanced comment fetching.

Inputs: no named parameters.

get_worker_statsA

Get Redis queue status: queue length, consumers, pending messages, worker health.

Inputs: no named parameters.

list_channelsB

List monitored Telegram channels. Filter by rule (archive_all, selective_archive), folder, verified status.

Inputs: rule, limit, folder, active_only, +1 more.

list_eventsB

List detected events (message clusters). Filter by tier: rumor, unconfirmed, confirmed, verified.

Inputs: tab, page, search, page_size, +3 more.

list_llm_modelsA

List configured LLM models (6 runtime-switchable models).

Inputs: no named parameters.

reverse_geocodeB

Find nearest location to coordinates.

Inputs: lat (required), lng (required).

search_by_tagsB

Search messages by AI tags with AND/OR logic.

Inputs: tags (required), limit, match_all.

search_entitiesA

Search entities (people, orgs, equipment, military units). Sources: curated (1,425+) and OpenSanctions (10,000+).

Inputs: query (required), limit, source, entity_type.

search_messagesA

Search Telegram messages with full-text search and 15+ filters. Supports filtering by channel, date, importance (high/medium/low), topic, media type, language, minimum views/forwards, and channel folder.

Inputs: days, page, query, topic, +11 more.

suggest_locationsB

Location name autocomplete from 30,000+ UA/RU locations in GeoNames gazetteer.

Inputs: query (required), limit.

validate_messageA

Cross-reference a Telegram message with RSS news articles. Returns validation status: confirms, contradicts, context, alternative.

Inputs: message_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 71 tools

    Disambiguation2/5

    Many tools have heavily overlapping purposes, especially the large cluster of stats/dashboard tools (get_platform_dashboard, get_platform_stats_overview, get_metrics_overview, get_system_status, get_system_health, get_metrics_services, get_processing_stats, get_worker_stats, etc.). While some search tools are well-differentiated, an agent would frequently struggle to choose the correct endpoint.

    Naming Consistency4/5

    The overwhelming majority follow a clean get_/list_/search_ convention, making the set largely predictable. Minor deviations like unified_search, find_similar_messages, suggest_locations, and reverse_geocode break the pattern slightly but do not create serious confusion.

    Tool Count1/5

    With 71 tools, this server is far beyond the recommended range and feels like an entire platform API exposed as MCP tools. Even accounting for a broad OSINT domain, the sheer number of narrowly-scoped stats and analytics endpoints creates a bloated, hard-to-navigate surface.

    Completeness4/5

    For a read-only OSINT/analytics platform, the surface is quite comprehensive: message retrieval, semantic search, entity search, event timelines, channel analytics, map data, and platform health are all covered. Minor gaps exist around data export, mutating operations, or direct access to some raw sources, but agents can likely accomplish the intended research workflows.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for communication service connectors that currently provides multi-account Telegram integration with granular tool access and security controls. It allows AI models to manage messages, chats, and media across various accounts through a flexible, extensible routing architecture.
      1
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      A comprehensive MCP server that exposes multiple OSINT tools to AI assistants like Claude, enabling sophisticated reconnaissance and information gathering tasks using industry-standard OSINT tools.
      249
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that exposes 108+ omega-cli OSINT tools for reconnaissance, web analysis, threat intelligence, and reporting, enabling AI assistants to perform comprehensive open-source intelligence tasks.
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Unified dark web and threat intelligence MCP server providing 66 tools across 16 data sources, including breach databases, ransomware tracking, Tor .onion access, blockchain intel, and malware analysis for AI agents.
      66
      419 npm
      3
      MIT