Agentic Ads
Agentic Ads
Google AdSense для AI-агентов. Добавьте 3 строки кода в ваш MCP-сервер. Зарабатывайте 70% с каждого клика по рекламе.
Живое демо · Быстрый старт · MCP-инструменты · Собственный хостинг
Быстрый старт
Шаг 1 — Зарегистрируйтесь и получите API-ключ (30 секунд):
Посетите веб-форму: https://agentic-ads-production.up.railway.app/dev/register
Или используйте API напрямую:
curl -X POST https://agentic-ads-production.up.railway.app/api/register \
-H "Content-Type: application/json" \
-d '{"name": "My MCP Bot", "email": "me@example.com", "project_description": "A coding assistant that recommends dev tools"}'
# Returns: { "api_key": "aa_dev_...", "mcp_url": "https://agentic-ads-production.up.railway.app/mcp" }Шаг 2 — Добавьте в конфигурацию вашего MCP-клиента:
{
"mcpServers": {
"agentic-ads": {
"url": "https://agentic-ads-production.up.railway.app/mcp",
"transport": "http"
}
}
}Шаг 3 — Вызовите search_ads в вашем агенте и зарабатывайте на каждом клике:
// In your agent logic — when context is relevant
const ads = await mcp.callTool({
name: 'search_ads',
arguments: { query: 'best running shoes for marathon', max_results: 1 }
});
// Report events to get paid
await mcp.callTool({
name: 'report_event',
arguments: { ad_id: ads[0].ad_id, event_type: 'impression' }
});
// User clicks → report 'click' → you earn $0.35 on a $0.50 CPC adВот и всё. Вы начали монетизировать.
Related MCP server: AdKit MCP Server
Зачем это нужно
Вы создали отличный MCP-сервер. Пользователи его обожают. Но вы не зарабатываете денег.
agentic-ads — это недостающий слой монетизации для экосистемы MCP. Это как Google AdSense, но для AI-агентов вместо веб-сайтов.
Проблема
Существует более 16 000 MCP-серверов. Почти ни один не монетизируется.
Разработчики тратят недели на создание полезных инструментов, зарабатывая $0.
Пользователи просят агентов порекомендовать товары → агенты скрапят веб → бренды не могут до них добраться.
Решение
Контекстная реклама, уважающая конфиденциальность, предоставляемая через MCP-инструменты. Разработчики получают 70% доли дохода (лучший показатель в отрасли). Рекламодатели достигают пользователей AI-агентов. Все в выигрыше.
Калькулятор дохода
Пример: Ваш MCP-сервер получает 10 000 запросов/месяц, где уместна реклама.
Сценарий | Показов/мес | CTR | Кликов/мес | CPC | Ваш доход |
Консервативный | 10 000 | 2% | 200 | $0.50 | $70/мес |
Реалистичный | 10 000 | 5% | 500 | $0.50 | $175/мес |
Высокий | 10 000 | 8% | 800 | $0.75 | $420/мес |
При 100 000 запросов/месяц с CTR 5%: $1 750/месяц пассивного дохода.
Это $21 000/год за добавление 3 строк кода в ваш MCP-сервер.
Подробное руководство по интеграции
Для разработчиков MCP (Зарабатывайте деньги)
Подключите живой сервер и начинайте вызывать инструменты — без процесса утверждения, без минимальных сумм.
// 1. When user asks about products/services
const ads = await mcp.callTool({
name: 'search_ads',
arguments: {
query: 'best running shoes for marathon',
max_results: 2
}
});
// 2. Show relevant ad in your response (if it adds value)
// 3. Report impression
await mcp.callTool({
name: 'report_event',
arguments: { ad_id: 'ad_xyz', event_type: 'impression' }
});
// 4. If user clicks → report 'click' event
// You earn $0.35 on a $0.50 CPC click (70% revenue share)Для рекламодателей (Достигайте пользователей AI)
# Create campaign + ad via MCP tools
mcp.callTool({
name: 'create_campaign',
arguments: {
name: 'Q1 Running Shoes',
total_budget: 500,
pricing_model: 'cpc',
bid_amount: 0.50
}
});
mcp.callTool({
name: 'create_ad',
arguments: {
campaign_id: 1,
creative_text: 'Ultraboost 24 — 30% off! Free shipping.',
link_url: 'https://adidas.com/ultraboost',
keywords: ['running shoes', 'sneakers', 'marathon'],
category: 'footwear'
}
});
# Monitor analytics
mcp.callTool({ name: 'get_campaign_analytics', arguments: { campaign_id: 1 } });Как это работает
┌─────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Advertiser │────────────────────│ Agentic Ads MCP │────────────────────│ Your MCP │
│ (Brand/API) │ create_campaign │ Server │ search_ads │ Server │
│ │ create_ad │ │ report_event │ │
│ │ get_analytics │ - Matching │ get_guidelines │ Shows ads │
└─────────────┘ │ - Billing │ │ to users │
│ - Auth & Rate │ └──────────────┘
│ - Analytics │
└──────────────────┘Пример потока:
Пользователь спрашивает вашего агента: "лучшие кроссовки для марафона"
Ваш агент вызывает
search_ads→ получает релевантные объявления, ранжированные по ставке × релевантностиАгент естественно показывает рекламу: "Ultraboost 24 — $126 (скидка 30%) на Adidas.com (Реклама)"
Пользователь кликает → вы сообщаете о событии
click→ вы зарабатываете $0.35 (70% от $0.50 CPC)
Конфиденциальность: Никакого отслеживания пользователей, профилирования или куки. Только контекстное сопоставление ключевых слов.
Почему разработчики MCP это любят
1. Лучшая в отрасли доля дохода
70% вам, 30% платформе. Сравните:
Платформа | Доля разработчика |
agentic-ads | 70% |
Google AdSense | 68% |
Amazon Associates | 1-10% |
Партнерские сети | 5-30% |
2. Никаких сложностей с настройкой
Никаких контрактов, минимальных сумм или задержек с утверждением
Регистрация за секунды через
POST /api/register→ получите ваш API-ключДобавьте 1 MCP-сервер в вашу конфигурацию → начните зарабатывать через 5 минут
3. С уважением к конфиденциальности
Никакого отслеживания или профилирования пользователей
Никаких куки, никакой цифровой идентификации браузера
Только контекстное сопоставление ключевых слов (как ранний Google AdWords)
Конфиденциальность ваших пользователей остается нетронутой
4. Вы контролируете, какая реклама показывается
Агент решает, какую рекламу (если вообще) показывать
Полный контекст пользователя остается локальным (никогда не отправляется на рекламный сервер)
Порог релевантности в ваших руках
Пользователи могут отказаться ("без рекламы, пожалуйста")
5. Прозрачная аналитика
Отслеживание дохода в реальном времени
Видите точно, сколько вы заработали, когда и почему
Никаких алгоритмов "черного ящика" или скрытых комиссий
MCP-инструменты (всего 8)
Для разработчиков (Сторона потребителя) — 3 инструмента
Инструмент | Аутентификация | Описание |
| Публичный | Поиск рекламы по запросу/ключевым словам/категории/гео. Возвращает ранжированные результаты с оценками релевантности. |
| Ключ разработчика | Сообщение о событиях показов/кликов/конверсий. Запускает расчет дохода. |
| Публичный | Получение рекомендаций по форматированию для естественного показа рекламы пользователям. |
Для рекламодателей (Сторона издателя) — 5 инструментов
Инструмент | Аутентификация | Описание |
| Ключ рекламодателя | Создание кампании с бюджетом, целью, моделью ценообразования (CPC/CPM/CPA). |
| Ключ рекламодателя | Создание объявления с креативным текстом, ключевыми словами, таргетингом, ссылкой. |
| Ключ рекламодателя | Получение метрик эффективности (показы, клики, конверсии, расходы, ROI). |
| Ключ рекламодателя | Обновление кампании (пауза/возобновление, корректировка бюджета, изменение таргетинга). |
| Ключ рекламодателя | Список всех кампаний со сводной статистикой, опциональный фильтр по статусу. |
Модели ценообразования
Выберите, как вы хотите платить (рекламодатели) или зарабатывать (разработчики):
Модель | Рекламодатель платит | Разработчик зарабатывает (70%) | Когда списывается |
CPC (Клик) | $0.50 за клик | $0.35 | Пользователь кликает по ссылке объявления |
CPM (Показ) | $5.00 за 1000 показов | $3.50 | Реклама показана пользователю |
CPA (Конверсия) | $10.00 за конверсию | $7.00 | Пользователь совершает действие (покупка, регистрация и т.д.) |
Контроль бюджета: Установите общий бюджет + дневные лимиты. Автоматическая пауза при исчерпании бюджета.
Получение вашего API-ключа
Для вызова report_event или инструментов рекламодателя вам нужен API-ключ.
Вариант A — Веб-форма (самый простой):
Посетите https://agentic-ads-production.up.railway.app/dev/register и заполните свои данные. Ваш API-ключ отобразится немедленно.
Вариант B — API:
curl -X POST https://agentic-ads-production.up.railway.app/api/register \
-H "Content-Type: application/json" \
-d '{"name": "My MCP Bot", "email": "me@example.com", "project_description": "A coding assistant"}'Ответ:
{
"developer_id": "...",
"api_key": "aa_dev_...",
"mcp_url": "https://agentic-ads-production.up.railway.app/mcp"
}Поле | Обязательно | Описание |
| Да | Название вашего проекта или бота |
| Да | Контактный email |
| Нет | Краткое описание вашего MCP-сервера (макс. 500 символов) |
Используйте api_key в заголовке Authorization: Authorization: Bearer aa_dev_...
Развернуто на Railway с постоянным хранилищем: Живой сервер на
agentic-ads-production.up.railway.appработает на Railway с постоянным томом — данные сохраняются между развертываниями и перезапусками. Для самостоятельного хостинга используйтеDATABASE_PATH=/data/ads.db, указывая на смонтированный том.
Установка
Вариант 1: Подключение к живому серверу (Самый простой)
Добавьте в конфигурацию вашего MCP-клиента (Claude Desktop, Cursor, Windsurf и т.д.):
{
"mcpServers": {
"agentic-ads": {
"url": "https://agentic-ads-production.up.railway.app/mcp",
"transport": "http"
}
}
}Проверка работоспособности: https://agentic-ads-production.up.railway.app/health
Вариант 2: Локальный stdio (Разработка)
npm install -g agentic-ads
# Add to MCP config
{
"mcpServers": {
"agentic-ads": {
"command": "npx",
"args": ["agentic-ads", "--stdio"]
}
}
}Вариант 3: Собственный хостинг (Продакшн)
git clone https://github.com/nicofains1/agentic-ads.git
cd agentic-ads
npm install && npm run build
# Start HTTP server
PORT=19877 npm run start:http
# Or stdio
npm run start:stdioФлаги:
node dist/server.js --http --port 19877 --db ./ads.dbФлаг | По умолчанию | Описание |
| — | Запуск HTTP-сервера (по умолчанию stdio) |
|
| HTTP-порт |
|
| Путь к базе данных SQLite |
| — | Предварительная аутентификация сессий stdio |
Переменные окружения:
PORT=19877 # HTTP server port (alternative to --port)
DATABASE_PATH=/data/ads.db # SQLite database path (default: agentic-ads.db)
AGENTIC_ADS_API_KEY=aa_dev_... # Developer API key for stdio modeПостоянство БД: Установите DATABASE_PATH в путь на постоянном томе. При первом запуске с пустой БД демо-кампании автоматически заполняются. См. DEPLOY.md для полного руководства по развертыванию (Railway рекомендуется для бесплатного постоянного хранилища).
Примеры интеграции
Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"agentic-ads": {
"command": "npx",
"args": ["agentic-ads", "--stdio"]
}
}
}Cursor / Windsurf
{
"mcpServers": {
"agentic-ads": {
"url": "https://agentic-ads-production.up.railway.app/mcp",
"transport": "http"
}
}
}Пользовательский TypeScript-агент
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const transport = new StdioClientTransport({
command: 'npx',
args: ['agentic-ads', '--stdio']
});
const client = new Client({ name: 'my-agent', version: '1.0.0' });
await client.connect(transport);
// Search for ads
const result = await client.callTool({
name: 'search_ads',
arguments: {
query: 'best laptops for coding',
keywords: ['laptop', 'programming'],
category: 'electronics',
max_results: 3
}
});
console.log(result.content[0].text);
// Returns: { "ads": [ { "ad_id": "...", "creative_text": "...", "relevance_score": 0.87 } ] }Управление сессиями Streamable HTTP
При вызове живого сервера через HTTP вы должны управлять MCP-сессиями вручную. Вот полный пример с использованием raw fetch:
const BASE = "https://agentic-ads-production.up.railway.app";
const API_KEY = "aa_dev_..."; // from /api/register
const headers = {
"Content-Type": "application/json",
"Accept": "application/json, text/event-stream",
"Authorization": `Bearer ${API_KEY}`,
};
// 1. Initialize — get a session ID
const initRes = await fetch(`${BASE}/mcp`, {
method: "POST",
headers,
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "initialize",
params: {
protocolVersion: "2024-11-05",
capabilities: {},
clientInfo: { name: "my-agent", version: "1.0.0" },
},
}),
});
const sessionId = initRes.headers.get("mcp-session-id");
// 2. Send initialized notification (required by MCP spec)
await fetch(`${BASE}/mcp`, {
method: "POST",
headers: { ...headers, "mcp-session-id": sessionId },
body: JSON.stringify({
jsonrpc: "2.0", method: "notifications/initialized", params: {},
}),
});
// 3. Call tools — pass session ID on every request
const res = await fetch(`${BASE}/mcp`, {
method: "POST",
headers: { ...headers, "mcp-session-id": sessionId },
body: JSON.stringify({
jsonrpc: "2.0", id: 2, method: "tools/call",
params: { name: "search_ads", arguments: { query: "running shoes", max_results: 2 } },
}),
});
// 4. Parse response (SSE format: "event: message\ndata: {...}")
const text = await res.text();
const dataLine = text.split("\n").find((l) => l.startsWith("data:"));
const result = JSON.parse(dataLine.slice(5));
console.log(result.result.content[0].text);Ключевые моменты:
Заголовок
mcp-session-idвозвращается приinitializeи должен отправляться во всех последующих запросахАутентификация (
Authorization: Bearer ...) устанавливается для каждой сессии — все вызовы инструментов в этой сессии наследуют еёСервер использует формат SSE (Server-Sent Events) — парсите строку
data:из ответаСм.
examples/demo-mcp-serverдля полного рабочего примера
Архитектура
┌─────────────────────────────────────────────────────────────┐
│ MCP Server (Node.js 22 + TypeScript) │
│ ┌───────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Tool Registry │ │ Auth & Rate │ │ Matching Engine │ │
│ │ (8 tools) │ │ Limiting │ │ (relevance² │ │
│ │ │ │ (SHA-256) │ │ × bid × quality)│ │
│ └───────────────┘ └──────────────┘ └─────────────────┘ │
│ ┌───────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ SQLite (WAL) │ │ Revenue │ │ Analytics │ │
│ │ - Campaigns │ │ Split Engine │ │ (real-time) │ │
│ │ - Ads │ │ (70/30) │ │ │ │
│ │ - Events │ │ │ │ │ │
│ └───────────────┘ └──────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │
│ │
Streamable HTTP (remote) stdio (local)Ключевые особенности:
Конфиденциальность: Никакого отслеживания пользователей, только контекстное сопоставление
Релевантность:
score = relevance² × bidFactor × quality_score(релевантность доминирует)Атомарность: Вставка события + обновление статистики + разделение дохода в одной транзакции SQLite
Ограничение скорости: Скользящее окно для каждого ключа (60-120 запросов/мин в зависимости от инструмента)
Аутентификация: API-ключи, хэшированные SHA-256, контроль доступа на основе ролей
Тестирование: 270 тестов в 13 файлах, все проходят
Демо: Полный поток
# Clone repo
git clone https://github.com/nicofains1/agentic-ads.git
cd agentic-ads
# Install + build
npm install && npm run build
# Seed a local DB with demo data (generates real API keys)
tsx scripts/seed.ts --db test.db
# Note: seed.ts prints the generated dev/adv keys — use them below
# Run smoke test with real keys from seed output
tsx scripts/smoke-test.ts --db test.db --dev-key aa_dev_... --adv-key aa_adv_...Вывод:
✅ Created advertiser: Adidas
✅ Created campaign: Q1 Running Shoes ($500 budget, CPC $0.50)
✅ Created ad: "Ultraboost 24 — 30% off!"
✅ Created developer: TestBot
✅ Searched ads for "running shoes" → 1 result (relevance 0.95)
✅ Reported impression → $0.00 charged (CPC model)
✅ Reported click → $0.50 charged, developer earned $0.35
✅ Analytics: 1 impression, 1 click, $0.50 spent, $0.35 developer revenueКак разработчики получают оплату
Когда ваш MCP-сервер сообщает о событии клика по CPC-объявлению, 70% ставки переходит к вам — отслеживается атомарно в нашей базе данных. Как только ваш баланс достигает $10, отправьте email на payouts@agentic-ads.com с вашим developer_id и предпочтительным способом оплаты (PayPal или USDC на Polygon). Мы проверяем ваш баланс и отправляем платеж в течение 5 рабочих дней. Автоматические выплаты через Stripe запланированы на будущее, когда сеть масштабируется.
Часто задаваемые вопросы
Для разработчиков
В: Как мне получить API-ключ? О: Зарегистрируйтесь через REST-эндпоинт:
curl -X POST https://agentic-ads-production.up.railway.app/api/register \
-H "Content-Type: application/json" \
-d '{"name": "Your Name", "email": "you@example.com"}'
# Returns: { "developer_id": "...", "api_key": "aa_dev_...", "mcp_url": "..." }Используйте полученный api_key как Authorization: Bearer aa_dev_... в ваших MCP-запросах.
В: ОБЯЗАН ли я показывать рекламу? О: Нет. Вы контролируете, какую рекламу показывать. Показывайте рекламу, только если она действительно добавляет ценность для пользователя. Автономия агента — это особенность.
В: Что, если мои пользователи ненавидят рекламу?
О: Следуйте рекомендациям из get_ad_guidelines: максимум 1-2 объявления на ответ, всегда указывайте "спонсировано", уважайте отказ ("без рекламы, пожалуйста").
В: Готово ли это к продакшну? О: Да. 270 проходящих тестов, работает на https://agentic-ads-production.up.railway.app, лицензия MIT.
В: Какие MCP-клиенты поддерживаются? О: Любой MCP-клиент, поддерживающий stdio или Streamable HTTP. Протестировано с Claude Desktop, Cursor, Windsurf, пользовательскими агентами.
Для рекламодателей
В: Как мне создавать объявления?
О: Используйте MCP-инструменты create_campaign и create_ad с API-ключом рекламодателя. См. smoke-test.ts для примеров.
В: Как защищен мой бюджет? О: Отслеживание бюджета атомарно (транзакция SQLite). Когда бюджет исчерпан → кампания автоматически ставится на паузу. Никакого перерасхода.
В: Могу ли я отслеживать конверсии?
О: Да, используйте модель ценообразования CPA + report_event с event_type: 'conversion'. Добавьте UTM-метки в URL вашей ссылки для атрибуции.
В: Какие существуют опции таргетинга? О: MVP включает ключевые слова (точное + частичное совпадение), категории, гео (на уровне страны) и язык. Семантическое сопоставление появится в Фазе 2.
Общие вопросы
В: Отслеживаете ли вы пользователей? О: Нет. Мы получаем только анонимизированные запросы ключевых слов от агентов. Никаких ID пользователей, cookies или профилирования. Конфиденциальность превыше всего.
В: Как вы предотвращаете мошенничество? О: MVP использует аутентификацию по API-ключам + ограничение скорости + доверительную отчетность. Фаза 2 добавляет эвристики обнаружения аномалий (см. issue #47).
В: Это открытый исходный код? О: Да, лицензия MIT. Форкните, разместите у себя, внесите вклад.
Дорожная карта
MVP — 8 MCP-инструментов, сопоставление ключевых слов, биллинг, аутентификация, 270 тестов
Развернуто — Доступно по адресу https://agentic-ads-production.up.railway.app
Размещение в маркетплейсах — Подача в Anthropic Registry, Smithery, Glama, PulseMCP (1-я неделя)
REST API для панели управления — Веб-интерфейс для рекламодателей/разработчиков (#40)
Обнаружение мошенничества — Эвристики аномалий (#47)
Семантическое сопоставление — Релевантность на основе эмбеддингов (Фаза 2)
A/B-тестирование — Варианты креативов (#41)
Выплаты через Stripe — Автоматические платежи разработчикам (Фаза 3)
Вклад
Мы следуем рабочему процессу GitHub Issues:
Проверьте, существует ли issue для вашей идеи
Если нет:
gh issue create --title "Ваша идея"Получите одобрение перед началом работы
Ветка:
feature/#N-описаниеКоммит:
feat(#N): описаниеPR в
main
Подробные рекомендации см. в CLAUDE.md.
Документация
CLAUDE.md — Рекомендации по разработке
bulloak.md — Поведенческая спецификация (источник истины для тестов)
docs/PRD.md — Полный документ с требованиями к продукту
scripts/smoke-test.ts — Эталонная реализация
Поддержка
GitHub Issues: https://github.com/nicofains1/agentic-ads/issues
Обсуждения: (скоро)
Discord: (скоро — присоединяйтесь к сообществу MCP Developers)
Лицензия
MIT — подробности см. в LICENSE.
Почему это важно
ИИ-агенты «съедают» веб. Пользователи спрашивают агентов вместо поиска в Google. Агенты отвечают вместо веб-сайтов.
Старый интернет: Пользователи просматривают сайты → видят рекламу → рекламодатели достигают пользователей.
Новый интернет: Пользователи спрашивают агентов → агенты парсят сайты → рекламодатели не могут достичь пользователей.
agentic-ads исправляет это. Это рекламный слой для экономики агентов.
И вы — разработчик MCP — получаете 70% дохода за то, что являетесь посредником.
Возможность: 16 000+ MCP-серверов, почти ни один не монетизируется. Вы можете быть первым.
Создано с помощью Model Context Protocol (MCP) — открытого стандарта для подключения ИИ-агентов к инструментам.
Живое демо: https://agentic-ads-production.up.railway.app
Начните: Добавьте MCP-сервер в свою конфигурацию, заработайте свой первый доллар на этой неделе.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for AI agents to manage ad campaigns across Google, Meta, LinkedIn, Microsoft, Reddit, TikTok, and more216916MIT
- FlicenseAqualityDmaintenanceA lightweight semantic ad-matching engine for LLMs that serves relevant advertisements via MCP, allowing agents to request ads using natural-language context.146
- AlicenseAqualityBmaintenanceAn MCP server that provides real-time web search to AI agents via a pay-per-search USDC microtransaction system.5592MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that gives Claude Desktop direct access to your Google AdSense account. Ask plain English questions about your revenue — no dashboard required.1015MIT
Related MCP Connectors
Monetize any MCP server: x402 paywall, pay-per-call billing in USDC on Base, agent marketplace.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nicofains1/agentic-ads'
If you have feedback or need assistance with the MCP directory API, please join our Discord server