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
4. company-links-tool
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"}
]
}
5. visitor-links-tool
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 visitorsobject.name- Name of the company or visitorobject.domain- Domain (for companies)object.email- Email (for visitors)
Occurrence Fields
occurredAt- When the signal occurredcount- Number of times signal occurredfirstOccurrence- First time this signal occurred for this objectlastOccurrence- Most recent occurrence
Context Fields
url- URL where signal occurredpageTitle- Title of the pagereferrer- Referrer URLsessionId- Session identifier
Metadata Fields
metadata- Additional signal-specific metadatasource- 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"}}
5. Generate Appropriate Links
- For companies: Use
company-links-toolwithobjectIdas UUID - For visitors: Use
visitor-links-toolwithobjectIdas 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