Outlit MCP Server
Query customer intelligence data through 6 MCP tools covering customer and user profiles, revenue metrics, activity timelines, and raw SQL analytics access.
Quick Start
| What you need | Tool |
|---|
| Browse/filter customers | |
| Browse/filter users | |
| Single customer deep dive | |
| Customer activity history | |
| Custom analytics / aggregations | (SQL) |
| Discover tables & columns | |
Before writing SQL: Always call
first to discover available tables and columns.
Common Patterns
Find at-risk customers:
json
{
"tool": "outlit_list_customers",
"billingStatus": "PAYING",
"noActivityInLast": "30d",
"orderBy": "mrr_cents",
"orderDirection": "desc"
}
Revenue breakdown (SQL):
json
{
"tool": "outlit_query",
"sql": "SELECT billing_status, count(*) as customers, sum(mrr_cents)/100 as mrr_dollars FROM customer_dimensions GROUP BY 1 ORDER BY 3 DESC"
}
MCP Setup
Get an API Key
Go to
Settings > MCP Integration in the Outlit dashboard (
app.outlit.ai).
Auto-Detection Setup
Detect the current environment and run the appropriate setup command:
-
Check for Claude Code — If running inside Claude Code (check if
CLI is available), run:
bash
claude mcp add outlit https://mcp.outlit.ai/mcp -- --header "Authorization: Bearer API_KEY"
-
Check for Cursor — If
exists in the project or home directory, add to that file:
json
{
"mcpServers": {
"outlit": {
"url": "https://mcp.outlit.ai/mcp",
"headers": { "Authorization": "Bearer API_KEY" }
}
}
}
-
Check for Claude Desktop — If
claude_desktop_config.json
exists at
~/Library/Application Support/Claude/
(macOS) or
(Windows), add to that file:
json
{
"mcpServers": {
"outlit": {
"url": "https://mcp.outlit.ai/mcp",
"headers": { "Authorization": "Bearer API_KEY" }
}
}
}
Ask the user for their API key if not provided. Replace
with the actual key.
Verify Connection
Call
to confirm the connection is working.
Tool Reference
outlit_list_customers
Filter and paginate customers.
| Key Params | Values |
|---|
| NONE, TRIALING, PAYING, CHURNED |
| / | 7d, 14d, 30d, 90d (mutually exclusive) |
| / | cents (10000 = $100) |
| name or domain |
| last_activity_at, first_seen_at, name, mrr_cents |
| 1-1000 (default: 20) |
| pagination token |
outlit_list_users
Filter and paginate users.
| Key Params | Values |
|---|
| DISCOVERED, SIGNED_UP, ACTIVATED, ENGAGED, INACTIVE |
| filter by customer |
| / | Nd, Nh, or Nm (e.g., 7d, 24h) — mutually exclusive |
| email or name |
| last_activity_at, first_seen_at, email |
| 1-1000 (default: 20) |
| pagination token |
outlit_get_customer
Single customer deep dive. Accepts customer ID, domain, or name.
| Key Params | Values |
|---|
| customer ID, domain, or name (required) |
| , , , |
| 7d, 14d, 30d, 90d (default: 30d) |
Only request the
sections you need — omitting unused ones is faster.
outlit_get_timeline
Activity timeline for a customer.
| Key Params | Values |
|---|
| customer ID or domain (required) |
| SDK, EMAIL, SLACK, CALL, CRM, BILLING, SUPPORT, INTERNAL |
| filter by specific event types |
| 7d, 14d, 30d, 90d, all (default: 30d) |
| / | ISO 8601 (mutually exclusive with timeframe) |
| 1-1000 (default: 50) |
| pagination token |
outlit_query
Raw SQL against ClickHouse analytics tables. SELECT only. See SQL Reference for ClickHouse syntax and security model.
| Key Params | Values |
|---|
| SQL SELECT query (required) |
| 1-10000 (default: 1000) |
Available tables:
,
,
,
.
outlit_schema
Discover tables and columns. Call with no params for all tables, or
for a specific table. Always call this before writing SQL.
Data Model
Billing status: NONE → TRIALING → PAYING → CHURNED
Journey stages: DISCOVERED → SIGNED_UP → ACTIVATED → ENGAGED → INACTIVE
Data formats:
- Monetary values in cents (divide by 100 for dollars)
- Timestamps in ISO 8601
- IDs with string prefixes (, , )
Pagination: All list endpoints use cursor-based pagination. Check
before requesting more pages. Pass
as
for the next page.
Best Practices
- Call before writing SQL — discover columns, don't guess
- Use customer tools for single lookups — don't use SQL for individual customer queries
- Filter at the source — use tool params and WHERE clauses, not post-fetch filtering
- Only request needed includes — omit unused options for faster responses
- Always add time filters to event SQL —
WHERE occurred_at >= now() - INTERVAL N DAY
- Convert cents to dollars — divide monetary values by 100 for display
- Use LIMIT in SQL — cap result sets to avoid large data transfers
Known Limitations
- SQL is read-only — no INSERT, UPDATE, DELETE
- Organization isolation — cannot query other organizations' data
- Timeline requires a customer — cannot query timeline across all customers
- MRR filtering is post-fetch — may be slower on large datasets in list_customers
- Event queries need time filters — queries without date ranges scan all data
- ClickHouse syntax — uses different functions than MySQL/PostgreSQL (see SQL Reference)
Tool Gotchas
| Tool | Gotcha |
|---|
| and are mutually exclusive |
| checks name and domain only |
| depends on timeframe — extend it if empty |
| and / are mutually exclusive |
| Use ClickHouse date syntax: , not |
| column is JSON — use JSONExtractString(properties, 'key')
|
References
| Reference | When to Read |
|---|
| SQL Reference | ClickHouse syntax, security model, query patterns |
| Workflows | Multi-step analysis: churn risk, revenue dashboards, account health |