MCP Resources

Complete reference for MCP data resources and endpoints

Complete reference for all resources available through the Appizer MCP server.

Overview

The Appizer MCP server provides both Resources (read-only data access via URI patterns) and Tools (interactive operations with parameters). This document covers the Resource endpoints, while the Tools documentation covers the interactive operations.

Resource Types

MCP provides access to the following resource types:

  • Apps - Application configurations, metadata, and statistics
  • Events - User activity and behavior data with filtering
  • Users - User profiles, properties, and event history
  • Audiences - User segments and cohort information
  • Analytics - Pre-calculated metrics and insights
  • Versions - App version history and release information
  • Campaigns - Push notification campaigns and delivery data

Apps

List All Apps

GET /mcp/resources

Returns all apps accessible to your organization.

Response:

{
  "resources": {
    "apps": [
      {
        "id": "app_123",
        "name": "Mobile App",
        "description": "iOS and Android app",
        "type": "app",
        "uri": "/mcp/resources/apps/app_123"
      }
    ]
  }
}

Get App Details

GET /mcp/resources/apps/:appId

Returns detailed information about a specific app.

Response:

{
  "id": "app_123",
  "name": "Mobile App",
  "description": "iOS and Android app",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-07-01T14:22:10Z",
  "stats": {
    "users": 15420,
    "events": 982345,
    "last_activity": "2025-07-19T21:15:33Z"
  },
  "top_events": [
    {
      "name": "app_open",
      "count": 45678
    },
    {
      "name": "purchase",
      "count": 2341
    }
  ]
}

Events

Query Events

GET /mcp/events

Query events with filters.

Parameters:

ParameterTypeDescription
app_idstringFilter by app ID
event_namestringFilter by event name
user_idstringFilter by user ID
start_datestringStart date (ISO 8601)
end_datestringEnd date (ISO 8601)
limitintegerMax results (default: 100, max: 1000)
offsetintegerPagination offset (default: 0)

Response:

{
  "events": [
    {
      "id": "evt_789",
      "app_id": "app_123",
      "user_id": "user_456",
      "event_name": "purchase",
      "properties": {
        "amount": 49.99,
        "item": "Premium Plan"
      },
      "created_at": "2025-07-19T20:15:33Z"
    }
  ],
  "pagination": {
    "total": 982345,
    "limit": 100,
    "offset": 0,
    "has_more": true
  }
}

Example: Get Recent Purchases

const response = await fetch(
  'https://api.appizer.com/mcp/events?app_id=app_123&event_name=purchase&limit=10',
  {
    headers: {
      'X-MCP-API-Key': process.env.APPIZER_MCP_API_KEY
    }
  }
);

const data = await response.json();
console.log(data.events);

Users

Get User Data

GET /mcp/users/:userId

Returns detailed user information.

Response:

{
  "id": "user_456",
  "external_id": "user_123",
  "email": "user@example.com",
  "phone": "+1234567890",
  "properties": {
    "name": "John Doe",
    "plan": "premium",
    "signup_date": "2023-06-15"
  },
  "created_at": "2023-06-15T10:30:00Z",
  "last_active": "2025-07-19T20:15:33Z",
  "event_count": 1234,
  "origin": {
    "channel": "ios-app",
    "campaign": "spring-launch"
  }
}

Example: Get User Event History

import requests

user_id = 'user_456'

# Get user details
user_response = requests.get(
    f'https://api.appizer.com/mcp/users/{user_id}',
    headers={'X-MCP-API-Key': os.getenv('APPIZER_MCP_API_KEY')}
)

# Get user's recent events
events_response = requests.get(
    'https://api.appizer.com/mcp/events',
    headers={'X-MCP-API-Key': os.getenv('APPIZER_MCP_API_KEY')},
    params={'user_id': user_id, 'limit': 50}
)

user_data = user_response.json()
user_events = events_response.json()['events']

print(f"User: {user_data['properties']['name']}")
print(f"Recent events: {len(user_events)}")

Audiences

List Audiences

GET /mcp/resources/audiences

Returns all audiences for an app.

Parameters:

ParameterTypeDescription
app_idstringFilter by app ID

Response:

{
  "audiences": [
    {
      "id": "aud_456",
      "name": "Active Users",
      "description": "Users active in the last 30 days",
      "type": "audience",
      "app_id": "app_123",
      "user_count": 5420,
      "uri": "/mcp/resources/audiences/aud_456"
    }
  ]
}

Get Audience Details

GET /mcp/resources/audiences/:audienceId

Returns detailed audience information including user list.

Response:

{
  "id": "aud_456",
  "name": "Active Users",
  "description": "Users active in the last 30 days",
  "app_id": "app_123",
  "user_count": 5420,
  "criteria": "Users with last_active within 30 days",
  "created_at": "2025-01-10T09:15:00Z",
  "updated_at": "2025-07-19T20:00:00Z",
  "users": [
    {
      "user_id": "user_456",
      "email": "user@example.com",
      "last_active": "2025-07-19T20:15:33Z"
    }
  ]
}

Versions

List App Versions

GET /mcp/resources/apps/:appId/versions

Returns version release history for an app.

Response:

{
  "app_id": "app_123",
  "app_name": "Mobile App",
  "current_version": "2.1.0",
  "versions": [
    {
      "id": "ver_789",
      "version": "2.1.0",
      "release_notes": "New onboarding flow",
      "released_at": "2026-01-15T10:00:00Z",
      "created_by": "user@example.com"
    },
    {
      "id": "ver_456",
      "version": "2.0.0",
      "release_notes": "Major redesign",
      "released_at": "2025-12-01T09:00:00Z",
      "created_by": "user@example.com"
    }
  ],
  "total": 2
}

Get App Versions Tool

The get_app_versions MCP tool allows AI assistants to fetch version history with optional date filtering.

Parameters:

ParameterTypeDescription
app_idstringApp ID (required)
start_datestringFilter versions released after this date (ISO 8601, optional)
end_datestringFilter versions released before this date (ISO 8601, optional)

Example Use Case:

# AI assistant analyzing version impact
import requests

# Get versions for an app
versions_response = requests.get(
    'https://api.appizer.com/mcp/resources/apps/app_123/versions',
    headers={'X-MCP-API-Key': os.getenv('APPIZER_MCP_API_KEY')}
)

versions = versions_response.json()['versions']

# Find version 2.0 release date
v2_release = next(v for v in versions if v['version'] == '2.0.0')
release_date = v2_release['released_at']

# Query events before and after release
before_events = requests.get(
    'https://api.appizer.com/mcp/events',
    headers={'X-MCP-API-Key': os.getenv('APPIZER_MCP_API_KEY')},
    params={
        'app_id': 'app_123',
        'end_date': release_date,
        'limit': 1000
    }
)

after_events = requests.get(
    'https://api.appizer.com/mcp/events',
    headers={'X-MCP-API-Key': os.getenv('APPIZER_MCP_API_KEY')},
    params={
        'app_id': 'app_123',
        'start_date': release_date,
        'limit': 1000
    }
)

# Compare metrics
print(f"Events before v2.0: {len(before_events.json()['events'])}")
print(f"Events after v2.0: {len(after_events.json()['events'])}")

AI Prompt Example:

"Compare user engagement metrics before and after we released version 2.0"

The AI assistant will:

  1. Use get_app_versions to find the v2.0 release date
  2. Query events before and after that date
  3. Calculate and compare engagement metrics
  4. Provide insights on the version's impact

Campaigns

List Push Campaigns

GET /mcp/resources/campaigns

Returns all push notification campaigns for an app.

Parameters:

ParameterTypeDescription
app_idstringFilter by app ID
statusstringFilter by status (scheduled, live, paused, sent)
limitintegerMax results (default: 50)

Response:

{
  "app_id": "app_123",
  "campaigns": [
    {
      "id": "camp_789",
      "name": "Welcome Series",
      "title": "Welcome to our app!",
      "status": "live",
      "schedule_type": "trigger",
      "trigger_event": "user_signup",
      "audience_id": "aud_456",
      "created_at": "2025-07-15T10:00:00Z",
      "stats": {
        "sent": 2451,
        "delivered": 2310,
        "clicked": 189,
        "converted": 23
      }
    }
  ],
  "total": 1
}

Get Campaign Details

GET /mcp/resources/campaigns/:campaignId

Returns detailed campaign information including delivery analytics.

Response:

{
  "id": "camp_789",
  "name": "Welcome Series",
  "title": "Welcome to our app!",
  "message": "Thanks for joining! Here's how to get started...",
  "status": "live",
  "schedule_type": "trigger",
  "trigger_event": "user_signup",
  "audience_id": "aud_456",
  "audience_name": "New Users",
  "created_at": "2025-07-15T10:00:00Z",
  "updated_at": "2025-07-19T15:30:00Z",
  "stats": {
    "sent": 2451,
    "delivered": 2310,
    "clicked": 189,
    "converted": 23,
    "delivery_rate": 94.3,
    "click_rate": 8.2,
    "conversion_rate": 1.0
  },
  "performance": {
    "avg_delivery_time": "2.3s",
    "peak_delivery_hour": "14:00",
    "best_performing_segment": "ios-users"
  }
}

Analytics

Get Engagement Metrics

GET /mcp/analytics/engagement

Returns comprehensive engagement metrics for an app.

Parameters:

ParameterTypeDescription
app_idstringApp ID (required)
start_datestringStart date (ISO 8601)
end_datestringEnd date (ISO 8601)
segmentstringUser segment filter (optional)

Response:

{
  "app_id": "app_123",
  "period": {
    "start_date": "2025-07-01",
    "end_date": "2025-07-19"
  },
  "metrics": {
    "dau": 1250,
    "wau": 5420,
    "mau": 15420,
    "stickiness": {
      "daily_to_weekly": 23.1,
      "weekly_to_monthly": 28.4,
      "daily_to_monthly": 8.1
    },
    "retention": {
      "day_1": 85.2,
      "day_7": 62.1,
      "day_30": 41.3
    }
  },
  "segments": [
    {
      "name": "ios-users",
      "dau": 890,
      "retention_day_7": 65.4
    },
    {
      "name": "android-users", 
      "dau": 360,
      "retention_day_7": 56.2
    }
  ]
}

Get Event Analytics

GET /mcp/analytics/events/:eventName

Returns detailed analytics for a specific event.

Parameters:

ParameterTypeDescription
app_idstringApp ID (required)
start_datestringStart date (ISO 8601)
end_datestringEnd date (ISO 8601)
group_bystringTime grouping (hour, day, week, month)

Response:

{
  "event_name": "purchase_completed",
  "app_id": "app_123",
  "period": {
    "start_date": "2025-07-01",
    "end_date": "2025-07-19"
  },
  "total_events": 1247,
  "unique_users": 892,
  "trends": [
    {
      "date": "2025-07-01",
      "count": 45,
      "unique_users": 38
    },
    {
      "date": "2025-07-02", 
      "count": 52,
      "unique_users": 41
    }
  ],
  "properties": {
    "amount": {
      "avg": 24.99,
      "median": 19.99,
      "p95": 49.99
    },
    "currency": {
      "USD": 89.2,
      "EUR": 7.8,
      "GBP": 3.0
    }
  },
  "peak_times": {
    "hour_of_day": "14:00",
    "day_of_week": "Tuesday",
    "timezone": "UTC"
  }
}

Get Funnel Analytics

GET /mcp/analytics/funnels

Returns conversion funnel analysis.

Parameters:

ParameterTypeDescription
app_idstringApp ID (required)
eventsarrayArray of event names in sequence
start_datestringStart date (ISO 8601)
end_datestringEnd date (ISO 8601)
time_windowstringMax time between steps (default: "7 days")

Response:

{
  "app_id": "app_123",
  "funnel": {
    "events": ["app_opened", "view_product", "add_to_cart", "purchase_completed"],
    "time_window": "7 days"
  },
  "steps": [
    {
      "event": "app_opened",
      "users": 10000,
      "conversion_rate": 100.0
    },
    {
      "event": "view_product", 
      "users": 4500,
      "conversion_rate": 45.0,
      "dropoff_rate": 55.0
    },
    {
      "event": "add_to_cart",
      "users": 1800,
      "conversion_rate": 18.0,
      "dropoff_rate": 60.0
    },
    {
      "event": "purchase_completed",
      "users": 720,
      "conversion_rate": 7.2,
      "dropoff_rate": 60.0
    }
  ],
  "overall_conversion": 7.2,
  "analysis": {
    "biggest_dropoff": "view_product → add_to_cart",
    "dropoff_percentage": 60.0,
    "recommendation": "Optimize product page layout and add clear CTAs"
  }
}

Pagination

All list endpoints support pagination:

async function getAllEvents(appId) {
  let allEvents = [];
  let offset = 0;
  const limit = 1000;
  let hasMore = true;

  while (hasMore) {
    const response = await fetch(
      `https://api.appizer.com/mcp/events?app_id=${appId}&limit=${limit}&offset=${offset}`,
      {
        headers: {
          'X-MCP-API-Key': process.env.APPIZER_MCP_API_KEY
        }
      }
    );

    const data = await response.json();
    allEvents = allEvents.concat(data.events);
    
    hasMore = data.pagination.has_more;
    offset += limit;
  }

  return allEvents;
}

Error Responses

Status CodeDescription
400Bad Request - Invalid parameters
401Unauthorized - Invalid or missing MCP API key
403Forbidden - Insufficient permissions
404Not Found - Resource not found
429Too Many Requests - Rate limit exceeded
500Internal Server Error

Best Practices

  • Use pagination for large datasets
  • Cache frequently accessed resources
  • Filter events by date range to reduce response size
  • Monitor API usage to stay within rate limits
  • Handle errors gracefully with retry logic
  • Use specific queries instead of fetching all data

Next Steps