OSINT MCP 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., "@OSINT MCP Server search for messages about Russian tank movements in Kharkiv"
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.
OSINT MCP Server
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 |
| Full-text search with 15+ filters (topic, importance, language, views, etc.) |
| Get detailed message with media, AI tags, entities, locations |
| Get grouped media album for lightbox display |
| Entity relationship graph (Flowsint-compatible) |
| Temporal context - before/after, semantic, event-based |
Semantic Search Tools (4 tools)
Tool | Description |
| AI-powered 384-dim vector search - find by meaning |
| Find content similar to a specific message |
| Get popular AI-generated tags (keywords, topics, emotions) |
| Search messages by tags with AND/OR logic |
Unified Search (1 tool)
Tool | Description |
| Search across ALL sources: messages, events, RSS, entities |
Channel Tools (4 tools)
Tool | Description |
| List monitored Telegram channels with filters |
| Channel details, affiliation, metadata |
| Message counts, spam rate, topic distribution |
| Semantic relationship graph with topic clusters |
Social Graph Tools (7 tools)
Tool | Description |
| Complete social context: forwards, replies, comments, reactions |
| Channel-to-channel forward relationships |
| Platform-wide influence network |
| Virality tracking over time |
| Discussion thread from linked chat |
| Viral content leaderboard |
| Top influencer profiles |
Entity Tools (4 tools)
Tool | Description |
| Search people, orgs, equipment (curated + OpenSanctions) |
| Entity profile with aliases, metadata, linked counts |
| Wikidata SPARQL relationships (employers, positions) |
| Messages mentioning a specific entity |
Event Tools (5 tools)
Tool | Description |
| Detected event clusters by tier (rumor→confirmed→verified) |
| Event statistics by tier and type |
| Event details with channels, messages, RSS sources |
| Chronological timeline combining Telegram + RSS |
| Events linked to a specific message |
Analytics Tools (7 tools)
Tool | Description |
| Message volume over time (hour/day/week/month) |
| Distribution across 13 topics |
| Language breakdown (uk, ru, en, etc.) |
| Per-channel performance metrics |
| Daily activity for calendar visualization |
| Most mentioned entities over time |
| Media archival stats with deduplication metrics |
Map/Geo Tools (6 tools)
Tool | Description |
| GeoJSON messages with server-side clustering |
| Event clusters by geographic location |
| Confirmed events for map display |
| Density aggregation for heatmap |
| Autocomplete from 30,000+ UA/RU locations |
| Find nearest location to coordinates |
Stream Tools (1 tool)
Tool | Description |
| Combined Telegram + RSS intelligence feed |
Validation Tools (2 tools)
Tool | Description |
| Cross-reference Telegram with RSS (confirms/contradicts) |
| Find correlated RSS articles |
Media Tools (1 tool)
Tool | Description |
| Browse archived media by channel, type, date |
Admin Stats Tools (15 tools)
Tool | Description |
| Platform overview: messages, channels, entities, storage |
| Comprehensive stats with service health |
| Enrichment coverage (translation, embeddings, geo) |
| Hourly processing metrics and latency |
| Storage breakdown by table and media type |
| Redis queue health and pending messages |
| Status of 13 enrichment tasks |
| Redis cache hit rates and memory usage |
| LLM decision audit and verification rates |
| Spam classification metrics |
| Channel inventory by affiliation/folder/rule |
| Entity catalog stats and top mentioned |
| RSS feed health and article counts |
| LLM prompt performance metrics |
| Tracked viral posts for comment fetching |
System Health Tools (9 tools)
Tool | Description |
| Basic API health check |
| Hardware tier detection (laptop/server/GPU) |
| Detailed system status |
| Platform KPIs |
| Ollama/LLM performance |
| Real-time pipeline status |
| Per-service health |
| Available LLM models (6 runtime-switchable) |
| LLM availability check |
Related MCP server: OSINT Tools MCP Server
Installation
From npm (recommended)
npm install -g @osintukraine/mcp-serverFrom source
git clone https://github.com/osintukraine/osint-mcp-server.git
cd osint-mcp-server
npm install
npm run buildConfiguration
Environment Variables
Variable | Description | Default |
| OSINT Platform API base URL |
|
JWT Authentication | ||
| JWT token for authentication | (none) |
API Key Authentication | ||
| API key for authentication | (none) |
Ory Kratos Authentication | ||
| Ory Kratos user UUID | (none) |
| User email (optional) | (none) |
| User role: authenticated, admin |
|
Authentication Priority
The MCP server uses the first available authentication method:
JWT Token -
OSINT_JWT_TOKEN- Standalone JWT authenticationAPI Key -
OSINT_API_KEY- Programmatic API accessOry 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 inspectorArchitecture
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 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
Fork the repository
Create a feature branch
Make your changes
Submit a pull request
Related Projects
OSINT Intelligence Platform - Main platform
Model Context Protocol - MCP specification
MCP SDK - Official MCP SDK
Available Tools
71 toolsfind_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_media_galleryC
Browse media gallery with filters by channel, type, date, and importance.
Inputs: limit, offset, date_to, date_from, +2 more.
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.
semantic_searchC
AI-powered semantic search using 384-dim vector embeddings. Find messages by meaning, not just keywords.
Inputs: query (required), days, limit, channel_id, +2 more.
suggest_locationsB
Location name autocomplete from 30,000+ UA/RU locations in GeoNames gazetteer.
Inputs: query (required), limit.
unified_searchB
Search across ALL data sources: Telegram messages, events, RSS articles, and entities. Supports text and semantic modes.
Inputs: query (required), lat, lng, days, +5 more.
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
Scored across 71 tools
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.
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.
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.
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
Hosted Telegram MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn 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-
- AlicenseNot gradedqualityDmaintenanceA 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.249MIT
- AlicenseNot gradedqualityDmaintenanceMCP 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
- AlicenseBqualityDmaintenanceUnified 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.66419 npm3MIT