MCP Insights Proxy

MCP Insights Proxy

Context-efficient MCP server that executes OpenSearch DSL queries and returns synthesized output instead of raw JSON, reducing token usage by up to 90%.

Category
Visit Server

README

MCP Insights Proxy v2

Context-efficient MCP server that executes OpenSearch queries and returns synthesized output instead of raw JSON.

Philosophy

Full query flexibility, synthesized output only.

You retain 100% of OpenSearch DSL capabilities. The proxy only transforms the output.

┌──────────────────────────────────────────────────────────────────────────┐
│  BEFORE (direct OpenSearch MCP)                                          │
│  Query → OpenSearch → 500+ lines raw JSON → Context window 💥            │
├──────────────────────────────────────────────────────────────────────────┤
│  AFTER (this proxy)                                                      │
│  Query → Proxy → OpenSearch → Proxy formats → 20-50 lines → Context ✅   │
└──────────────────────────────────────────────────────────────────────────┘

Key Difference from v1

v1 (Limited) v2 (Full Flexibility)
5-6 predefined tools 1 main tool accepting ANY DSL
Hardcoded query patterns You build the query
Limited aggregations ALL aggregations supported
No nested/has_parent Full query DSL support

Quick Start

1. Install

cd mcp-insights-proxy
npm install
npm run build

2. Configure MCP Client

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "insights-proxy": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-insights-proxy/dist/index.js"],
      "env": {
        "OPENSEARCH_URL": "https://your-cluster:9200",
        "OPENSEARCH_INDEX": "channel_posts",
        "OPENSEARCH_USER": "username",
        "OPENSEARCH_PASS": "password"
      }
    }
  }
}

3. Restart Claude

Tools

opensearch_query (Main Tool)

Execute any OpenSearch DSL query. Full flexibility.

Parameters:

Parameter Type Description
query object Required. Full OpenSearch DSL query object
index string Index name (default: channel_posts)
output_format enum auto, table, list, summary, compact_json
max_display number Max hits to show (default: 20, max: 50)

Example - Complex aggregation with nested sub-aggs:

{
  "query": {
    "size": 0,
    "query": {
      "bool": {
        "must": [
          {"term": {"join_field": "post"}},
          {"term": {"channel.type": "ig"}}
        ],
        "filter": [
          {"range": {"published_at": {"gte": "now-30d"}}}
        ]
      }
    },
    "aggs": {
      "by_hashtag": {
        "terms": {"field": "hashtags", "size": 10},
        "aggs": {
          "avg_engagement": {"avg": {"field": "engagement"}},
          "top_creators": {"terms": {"field": "channel.name", "size": 3}}
        }
      }
    }
  }
}

Example - has_parent query:

{
  "query": {
    "query": {
      "bool": {
        "must": [
          {"term": {"join_field": "post"}},
          {
            "has_parent": {
              "parent_type": "channel",
              "query": {
                "bool": {
                  "must": [
                    {"term": {"channel.geo.country.code": "IT"}},
                    {"range": {"channel.followers": {"gte": 100000}}}
                  ]
                }
              }
            }
          }
        ]
      }
    },
    "sort": [{"engagement": "desc"}],
    "size": 10,
    "_source": ["channel.name", "engagement", "published_at"]
  }
}

opensearch_count

Quick count without full query overhead.

{
  "query": {
    "bool": {
      "must": [
        {"term": {"join_field": "post"}},
        {"term": {"hashtags": "skincare"}}
      ]
    }
  }
}

opensearch_mapping

Get field list for an index.

Output Formats

auto (default)

Automatically detects:

  • Aggregation-only → summary format
  • Few hits (≤5) → list format
  • Many hits → table format

table

| # | name | type | engagement | likes | published_at |
|---|------|------|------------|-------|--------------|
| 1 | creator1 | IG | 156K | 142K | 2025-01-15 |
| 2 | creator2 | TT | 98K | 89K | 2025-01-18 |

list

**1.** @creator1 (IG) • eng: 156K • likes: 142K • views: 2.3M • 2025-01-15
**2.** @creator2 (TT) • eng: 98K • likes: 89K • views: 1.8M • 2025-01-18

summary

Just counts and aggregation results, no individual hits.

compact_json

Minimal JSON with only _source (no _id, _score, _index metadata).

Aggregation Output Examples

Terms aggregation

**by_platform:**
  • ig: 45.2K
  • tt: 32.1K
  • yt: 12.8K

Stats aggregation

**engagement_stats:** count=89.1K avg=2.3K min=0 max=1.2M sum=205M

Nested sub-aggregations

**by_hashtag:**
  • **skincare** (12.4K)
    **avg_engagement:** 3.2K
    **top_creators:**
      • creator1: 342
      • creator2: 287
  • **beauty** (8.7K)
    **avg_engagement:** 2.8K
    ...

Context Savings

Query Type Raw JSON Proxy Output Savings
Top 10 posts ~3000 tokens ~300 tokens 90%
Aggregation (5 buckets) ~1500 tokens ~150 tokens 90%
Complex nested agg ~5000 tokens ~400 tokens 92%

Environment Variables

Variable Required Default Description
OPENSEARCH_URL Yes http://localhost:9200 Cluster URL
OPENSEARCH_INDEX No channel_posts Default index
OPENSEARCH_USER No - Basic auth username
OPENSEARCH_PASS No - Basic auth password

Development

npm run dev    # Development with auto-reload
npm run build  # Build for production
npm start      # Run production build

Architecture

┌─────────────┐     ┌────────────────────────────────────────────┐     ┌────────────┐
│             │     │           MCP Insights Proxy               │     │            │
│   Claude    │────▶│  1. Receive DSL query (any complexity)     │────▶│ OpenSearch │
│   (builds   │     │  2. Execute against cluster                │     │            │
│    full     │◀────│  3. Parse response                         │◀────│            │
│    DSL)     │     │  4. Format: table/list/summary             │     │            │
│             │     │  5. Return compact markdown                │     │            │
└─────────────┘     └────────────────────────────────────────────┘     └────────────┘
        │                           │
        │                    Returns:
        │                    "*45.2K hits • took 23ms*
        │                     
        │                     ## Aggregations
        │                     **by_platform:**
        │                       • ig: 45.2K
        │                       • tt: 32.1K
        │                     
        │                     ## Results
        │                     | # | name | engagement |..."
        │
        └─── ~300 tokens instead of ~3000

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured