Skip to main content

Intent Signal Server

Overview

The Intent Signal Server specializes in analyzing intent signal occurrence data. It helps you track and understand behavioral signals that indicate buying intent from both companies and individual visitors.

Server Details

  • Server Name: intent-signal-server
  • Version: 0.0.1
  • Endpoint: /mcp/intent-signal
  • Authentication: Organization-level required

Purpose

Query and analyze intent signal occurrences to identify accounts and visitors showing strong buying signals, track signal trends, and understand which behaviors indicate purchase readiness.

Available Tools

1. intent-signals-occurence-schema-tool

Purpose: Get field mappings for the IntentSignalsOccurence index

When to use: Before constructing queries to understand available fields

Returns: Elasticsearch mapping with field names, types, and descriptions

2. intent-signals-occurence-compute-tool

Purpose: Execute Elasticsearch queries against intent signal occurrences

Input: Elasticsearch query JSON Returns: Query results with matching signal occurrences and aggregations

3. alert-filters-tool

Purpose: Retrieve alert filter configurations for intent signals

Purpose: Generate clickable links to company profiles

Usage: Extract objectId (UUID) and object.name from results where objectType is "company"

Input:

{
"companies": [
{"uuid": "company-uuid-123", "label": "Acme Corp"},
{"uuid": "company-uuid-456", "label": "TechCo Inc"}
]
}

Purpose: Generate clickable links to visitor profiles

Usage: Extract objectId (visitor ID) from results where objectType is "visitor"

Input:

{
"visitors": [
{"id": "visitor-123", "label": "John Doe"},
{"id": "visitor-456", "label": "Jane Smith"}
]
}

6. chart-format-tool

Purpose: Generate Chart.js configurations for visualizing signal data

Key Fields

Signal Fields

  • signalType - Type of intent signal (e.g., "pricing_page_view", "demo_request", "competitor_research")
  • signalCategory - Category of signal (e.g., "high_intent", "research", "comparison")
  • signalScore - Score/weight of the signal (0-100)
  • signalName - Human-readable signal name

Object Fields

  • objectType - Type of object (company or visitor)
  • objectId - UUID for companies, ID for visitors
  • object.name - Name of the company or visitor
  • object.domain - Domain (for companies)
  • object.email - Email (for visitors)

Occurrence Fields

  • occurredAt - When the signal occurred
  • count - Number of times signal occurred
  • firstOccurrence - First time this signal occurred for this object
  • lastOccurrence - Most recent occurrence

Context Fields

  • url - URL where signal occurred
  • pageTitle - Title of the page
  • referrer - Referrer URL
  • sessionId - Session identifier

Metadata Fields

  • metadata - Additional signal-specific metadata
  • source - Source of the signal (website, form, etc.)

Common Use Cases

1. Recent High-Intent Signals

{
"query": {
"bool": {
"filter": [
{"range": {"signalScore": {"gte": 70}}},
{"range": {"occurredAt": {"gte": "now-7d/d"}}}
]
}
},
"_source": ["signalType", "signalName", "objectType", "objectId", "object.name", "signalScore", "occurredAt"],
"sort": [{"occurredAt": "desc"}],
"size": 100
}

2. Signals by Type

{
"query": {
"range": {"occurredAt": {"gte": "now-30d/d"}}
},
"size": 0,
"aggs": {
"by_signal_type": {
"terms": {"field": "signalType.keyword", "size": 20},
"aggs": {
"occurrence_count": {
"sum": {"field": "count"}
},
"unique_objects": {
"cardinality": {"field": "objectId.keyword"}
},
"avg_score": {
"avg": {"field": "signalScore"}
}
}
}
}
}

3. Companies with Multiple High-Intent Signals

{
"query": {
"bool": {
"filter": [
{"term": {"objectType.keyword": "company"}},
{"range": {"signalScore": {"gte": 70}}},
{"range": {"occurredAt": {"gte": "now-14d/d"}}}
]
}
},
"size": 0,
"aggs": {
"by_company": {
"terms": {"field": "objectId.keyword", "size": 100},
"aggs": {
"signal_count": {
"value_count": {"field": "signalType.keyword"}
},
"unique_signals": {
"cardinality": {"field": "signalType.keyword"}
},
"avg_score": {
"avg": {"field": "signalScore"}
},
"company_name": {
"top_hits": {
"_source": ["object.name", "object.domain"],
"size": 1
}
}
}
}
}
}

4. Pricing Page Views

{
"query": {
"bool": {
"filter": [
{"wildcard": {"url": "*pricing*"}},
{"range": {"occurredAt": {"gte": "now-30d/d"}}}
]
}
},
"_source": ["objectType", "objectId", "object.name", "url", "occurredAt", "count"],
"sort": [{"count": "desc"}],
"size": 100
}

5. Signal Trend Over Time

{
"query": {
"range": {"occurredAt": {"gte": "now-90d/d"}}
},
"size": 0,
"aggs": {
"signals_by_day": {
"date_histogram": {
"field": "occurredAt",
"calendar_interval": "day"
},
"aggs": {
"total_signals": {
"sum": {"field": "count"}
},
"unique_objects": {
"cardinality": {"field": "objectId.keyword"}
},
"by_type": {
"terms": {"field": "signalType.keyword", "size": 10}
}
}
}
}
}

6. Visitor Intent Signals

{
"query": {
"bool": {
"filter": [
{"term": {"objectType.keyword": "visitor"}},
{"range": {"signalScore": {"gte": 60}}},
{"range": {"occurredAt": {"gte": "now-14d/d"}}}
]
}
},
"_source": ["objectId", "object.name", "object.email", "signalType", "signalName", "signalScore", "occurredAt"],
"sort": [{"signalScore": "desc"}],
"size": 50
}

7. Specific Signal Type Analysis

{
"query": {
"bool": {
"filter": [
{"term": {"signalType.keyword": "demo_request"}},
{"range": {"occurredAt": {"gte": "now-30d/d"}}}
]
}
},
"size": 0,
"aggs": {
"by_object_type": {
"terms": {"field": "objectType.keyword"},
"aggs": {
"count": {
"sum": {"field": "count"}
},
"unique_objects": {
"cardinality": {"field": "objectId.keyword"}
}
}
}
}
}

8. Repeat Signal Occurrences

{
"query": {
"bool": {
"filter": [
{"range": {"count": {"gte": 3}}},
{"range": {"occurredAt": {"gte": "now-30d/d"}}}
]
}
},
"_source": ["objectType", "objectId", "object.name", "signalType", "count", "firstOccurrence", "lastOccurrence"],
"sort": [{"count": "desc"}],
"size": 100
}

9. Signals by Category

{
"query": {
"range": {"occurredAt": {"gte": "now-30d/d"}}
},
"size": 0,
"aggs": {
"by_category": {
"terms": {"field": "signalCategory.keyword", "size": 15},
"aggs": {
"total_occurrences": {
"sum": {"field": "count"}
},
"avg_score": {
"avg": {"field": "signalScore"}
},
"top_signals": {
"terms": {"field": "signalType.keyword", "size": 5}
}
}
}
}
}

10. Companies vs Visitors Signal Comparison

{
"query": {
"range": {"occurredAt": {"gte": "now-30d/d"}}
},
"size": 0,
"aggs": {
"by_object_type": {
"terms": {"field": "objectType.keyword"},
"aggs": {
"total_signals": {
"sum": {"field": "count"}
},
"unique_objects": {
"cardinality": {"field": "objectId.keyword"}
},
"avg_score": {
"avg": {"field": "signalScore"}
},
"high_intent_count": {
"filter": {"range": {"signalScore": {"gte": 70}}}
}
}
}
}
}

Best Practices

1. Always Check Schema First

Call intent-signals-occurence-schema-tool before querying to ensure correct field names.

2. Filter by Date Range

Always include date filters for performance and relevance:

{"range": {"occurredAt": {"gte": "now-30d/d"}}}

3. Use Signal Score for Prioritization

Focus on high-score signals for the most valuable insights:

{"range": {"signalScore": {"gte": 70}}}

4. Separate Companies from Visitors

Filter by objectType when you need specific object types:

{"term": {"objectType.keyword": "company"}}
  • For companies: Use company-links-tool with objectId as UUID
  • For visitors: Use visitor-links-tool with objectId as visitor ID

6. Aggregate for Insights

Use aggregations to identify patterns and trends rather than retrieving all documents.

7. Track Repeat Signals

High count values indicate persistent interest:

{"range": {"count": {"gte": 3}}}

Query Patterns

Multiple Filters Combined

{
"query": {
"bool": {
"filter": [
{"term": {"objectType.keyword": "company"}},
{"range": {"signalScore": {"gte": 70}}},
{"terms": {"signalCategory.keyword": ["high_intent", "comparison"]}},
{"range": {"occurredAt": {"gte": "now-14d/d"}}}
]
}
}
}

Text Search on URLs

{
"query": {
"bool": {
"should": [
{"wildcard": {"url": "*pricing*"}},
{"wildcard": {"url": "*demo*"}},
{"wildcard": {"url": "*contact*"}}
],
"minimum_should_match": 1
}
}
}

Sorting by Multiple Fields

{
"sort": [
{"signalScore": "desc"},
{"count": "desc"},
{"occurredAt": "desc"}
]
}

Workflow Example

Goal: Find companies with multiple high-intent signals in the last 14 days

Step 1: Check schema

Call: intent-signals-occurence-schema-tool

Step 2: Query signals

{
"query": {
"bool": {
"filter": [
{"term": {"objectType.keyword": "company"}},
{"range": {"signalScore": {"gte": 70}}},
{"range": {"occurredAt": {"gte": "now-14d/d"}}}
]
}
},
"size": 0,
"aggs": {
"by_company": {
"terms": {"field": "objectId.keyword", "size": 50, "order": {"signal_count": "desc"}},
"aggs": {
"signal_count": {"value_count": {"field": "signalType.keyword"}},
"unique_signals": {"cardinality": {"field": "signalType.keyword"}},
"avg_score": {"avg": {"field": "signalScore"}},
"company_info": {
"top_hits": {
"_source": ["object.name", "object.domain"],
"size": 1
}
},
"signal_types": {
"terms": {"field": "signalType.keyword", "size": 10}
}
}
}
}
}

Step 3: Generate company links

{
"companies": [
{"uuid": "company-uuid-1", "label": "Company Name 1"},
{"uuid": "company-uuid-2", "label": "Company Name 2"}
]
}

Step 4: Present results

  • Show company names as clickable links
  • Highlight number of signals and types
  • Show average signal score
  • Provide recommendations for engagement